From ac262f5b5de34986d59f7ab2e8b1dfded18d485a Mon Sep 17 00:00:00 2001 From: Dmitry Kurtaev Date: Tue, 29 Jan 2019 14:29:47 +0300 Subject: [PATCH] Clone convolution layer weights only for fusion --- modules/dnn/src/layers/convolution_layer.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/dnn/src/layers/convolution_layer.cpp b/modules/dnn/src/layers/convolution_layer.cpp index 46eb6f7a54..d83f761925 100644 --- a/modules/dnn/src/layers/convolution_layer.cpp +++ b/modules/dnn/src/layers/convolution_layer.cpp @@ -278,7 +278,7 @@ public: const int outCn = blobs[0].size[0]; // prepare weightsMat where each row is aligned and has enough zero padding on the right to // use vectorized (i.e. with intrinsics) loops without tail processing - Mat wm = blobs[0].reshape(1, outCn).clone(); + Mat wm = blobs[0].reshape(1, outCn); if( wm.step1() % VEC_ALIGN != 0 ) { int newcols = (int)alignSize(wm.step1(), VEC_ALIGN); @@ -371,6 +371,10 @@ public: if (!w.empty()) { + // Keep origin weights unchanged. + if (weightsMat.data == blobs[0].data) + weightsMat = weightsMat.clone(); + Mat originWeights = blobs[0].reshape(1, outCn); for (int i = 0; i < outCn; ++i) {