diff --git a/modules/dnn/src/layers/prior_box_layer.cpp b/modules/dnn/src/layers/prior_box_layer.cpp index 53ce454396..872a934660 100644 --- a/modules/dnn/src/layers/prior_box_layer.cpp +++ b/modules/dnn/src/layers/prior_box_layer.cpp @@ -416,6 +416,11 @@ public: { _boxWidth = _widths[0] * _scales[0]; _boxHeight = _heights[0] * _scales[0]; + if (_bboxesNormalized) + { + _boxWidth *= _imageWidth; + _boxHeight *= _imageHeight; + } } else _boxWidth = _boxHeight = _minSize * _scales[0]; @@ -463,6 +468,11 @@ public: { _boxWidth = _widths[i] * _scales[i]; _boxHeight = _heights[i] * _scales[i]; + if (_bboxesNormalized) + { + _boxWidth *= _imageWidth; + _boxHeight *= _imageHeight; + } for (int j = 0; j < _offsetsX.size(); ++j) { float center_x = (w + _offsetsX[j]) * stepX; diff --git a/modules/dnn/src/tensorflow/tf_importer.cpp b/modules/dnn/src/tensorflow/tf_importer.cpp index 9a29f0a373..7e03b590b2 100644 --- a/modules/dnn/src/tensorflow/tf_importer.cpp +++ b/modules/dnn/src/tensorflow/tf_importer.cpp @@ -1411,23 +1411,17 @@ void TFImporter::populateNet(Net dstNet) layerParams.set("clip", getLayerAttr(layer, "clip").b()); if (hasLayerAttr(layer, "offset")) layerParams.set("offset", getLayerAttr(layer, "offset").f()); - if (hasLayerAttr(layer, "variance")) - { - Mat variance = getTensorContent(getLayerAttr(layer, "variance").tensor()); - layerParams.set("variance", - DictValue::arrayReal((float*)variance.data, variance.total())); - } - if (hasLayerAttr(layer, "aspect_ratio")) - { - Mat aspectRatios = getTensorContent(getLayerAttr(layer, "aspect_ratio").tensor()); - layerParams.set("aspect_ratio", - DictValue::arrayReal((float*)aspectRatios.data, aspectRatios.total())); - } - if (hasLayerAttr(layer, "scales")) + + const std::string paramNames[] = {"variance", "aspect_ratio", "scales", + "width", "height"}; + for (int i = 0; i < 5; ++i) { - Mat scales = getTensorContent(getLayerAttr(layer, "scales").tensor()); - layerParams.set("scales", - DictValue::arrayReal((float*)scales.data, scales.total())); + if (hasLayerAttr(layer, paramNames[i])) + { + Mat values = getTensorContent(getLayerAttr(layer, paramNames[i]).tensor()); + layerParams.set(paramNames[i], + DictValue::arrayReal((float*)values.data, values.total())); + } } int id = dstNet.addLayer(name, "PriorBox", layerParams); layer_id[name] = id;