diff --git a/modules/dnn/src/layers/fully_connected_layer.cpp b/modules/dnn/src/layers/fully_connected_layer.cpp index 1c27043f1a..809630188a 100644 --- a/modules/dnn/src/layers/fully_connected_layer.cpp +++ b/modules/dnn/src/layers/fully_connected_layer.cpp @@ -455,13 +455,6 @@ public: ret = false; break; } - - if (!use_half && bias && (outerSize > 1)) - { - UMat biasOnesMat = UMat::ones(outerSize, 1, umat_blobs[0].type()); - UMat& biases = umat_blobs[1]; - cv::gemm(biasOnesMat, biases, 1, dstMat, 1, dstMat, 0); - } } if (ret) return true; diff --git a/modules/dnn/src/ocl4dnn/src/ocl4dnn_inner_product.cpp b/modules/dnn/src/ocl4dnn/src/ocl4dnn_inner_product.cpp index ee7a2c7b01..d45ff8c634 100644 --- a/modules/dnn/src/ocl4dnn/src/ocl4dnn_inner_product.cpp +++ b/modules/dnn/src/ocl4dnn/src/ocl4dnn_inner_product.cpp @@ -97,15 +97,19 @@ bool OCL4DNNInnerProduct::Forward(const UMat& bottom, max_image_size); } - if (use_half_ && bias_term_) - { - UMat biasOneMat = UMat::ones(M_, 1, CV_32F); - UMat newbias, tmpTop; + if (bias_term_) { + if (use_half_) { + UMat biasOneMat = UMat::ones(M_, 1, CV_32F); + UMat newbias, tmpTop; - convertFp16(bias, newbias); - convertFp16(top, tmpTop); - cv::gemm(biasOneMat, newbias, 1, tmpTop, 1, tmpTop, 0); - convertFp16(tmpTop, top); + convertFp16(bias, newbias); + convertFp16(top, tmpTop); + cv::gemm(biasOneMat, newbias, 1, tmpTop, 1, tmpTop, 0); + convertFp16(tmpTop, top); + } else { + UMat biasOnesMat = UMat::ones(M_, 1, CV_32F); + cv::gemm(biasOnesMat, bias, 1, top, 1, top, 0); + } } return ret;