magnitude
birdnet_stm32.models.magnitude
¶
MagnitudeScalingLayer: composable magnitude scaling for spectrograms.
Supports two modes: - 'none': Pass-through, the ablation baseline. - 'pwl': Learned piecewise-linear scaling via 1x1 depthwise branches + ReLU + Add.
PCEN and dB were removed. dB's log op produces a dynamic range INT8 cannot hold, which is the failure this frontend exists to avoid, and PCEN was never used by any release. A compressive PWL variant (cpwl) was removed in 1.3: best float, worst INT8.
MagnitudeScalingLayer
¶
Bases: Layer
Channel-wise magnitude scaling as a standalone Keras layer.
Accepts 4-D tensors [B, H, W, C] and applies the selected scaling independently per channel. All sub-layers use 1x1 depthwise convolutions so the layer is NPU-friendly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
method
|
str
|
'none' | 'pwl'. |
'none'
|
channels
|
int
|
Number of input channels (typically mel_bins). |
64
|
is_trainable
|
bool
|
Whether sub-layer weights are trainable. |
False
|
name
|
str
|
Layer name. |
'mag_scale'
|
Source code in birdnet_stm32/models/magnitude.py
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | |
build(input_shape)
¶
Build magnitude scaling sub-layers for the given input shape.
Source code in birdnet_stm32/models/magnitude.py
call(x, training=None)
¶
set_quantization_hook(hook)
¶
compute_output_shape(input_shape)
¶
from_config(config)
classmethod
¶
Build from a serialized config, ignoring retired arguments.
get_config()
¶
Return a serializable configuration dict.
Source code in birdnet_stm32/models/magnitude.py
reject_activation_bounds(bounds)
¶
Accept the empty activation_bounds saved by pre-1.3 checkpoints.
Persistent percentile bounds were removed in 1.3 (they scored below the full range); a model that actually carries them cannot be rebuilt.