|
|
|
@ -29,6 +29,7 @@ namespace dnn |
|
|
|
|
class BatchNormLayerImpl CV_FINAL : public BatchNormLayer |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
Mat origin_weights, origin_bias; |
|
|
|
|
Mat weights_, bias_; |
|
|
|
|
UMat umat_weight, umat_bias; |
|
|
|
|
mutable int dims; |
|
|
|
@ -82,11 +83,11 @@ public: |
|
|
|
|
const float* weightsData = hasWeights ? blobs[weightsBlobIndex].ptr<float>() : 0; |
|
|
|
|
const float* biasData = hasBias ? blobs[biasBlobIndex].ptr<float>() : 0; |
|
|
|
|
|
|
|
|
|
weights_.create(1, (int)n, CV_32F); |
|
|
|
|
bias_.create(1, (int)n, CV_32F); |
|
|
|
|
origin_weights.create(1, (int)n, CV_32F); |
|
|
|
|
origin_bias.create(1, (int)n, CV_32F); |
|
|
|
|
|
|
|
|
|
float* dstWeightsData = weights_.ptr<float>(); |
|
|
|
|
float* dstBiasData = bias_.ptr<float>(); |
|
|
|
|
float* dstWeightsData = origin_weights.ptr<float>(); |
|
|
|
|
float* dstBiasData = origin_bias.ptr<float>(); |
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < n; ++i) |
|
|
|
|
{ |
|
|
|
@ -94,15 +95,12 @@ public: |
|
|
|
|
dstWeightsData[i] = w; |
|
|
|
|
dstBiasData[i] = (hasBias ? biasData[i] : 0.0f) - w * meanData[i] * varMeanScale; |
|
|
|
|
} |
|
|
|
|
// We will use blobs to store origin weights and bias to restore them in case of reinitialization.
|
|
|
|
|
weights_.copyTo(blobs[0].reshape(1, 1)); |
|
|
|
|
bias_.copyTo(blobs[1].reshape(1, 1)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
virtual void finalize(InputArrayOfArrays, OutputArrayOfArrays) CV_OVERRIDE |
|
|
|
|
{ |
|
|
|
|
blobs[0].reshape(1, 1).copyTo(weights_); |
|
|
|
|
blobs[1].reshape(1, 1).copyTo(bias_); |
|
|
|
|
origin_weights.reshape(1, 1).copyTo(weights_); |
|
|
|
|
origin_bias.reshape(1, 1).copyTo(bias_); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void getScaleShift(Mat& scale, Mat& shift) const CV_OVERRIDE |
|
|
|
|