PriorBox layer with explicit normalized sizes

pull/10676/head
Dmitry Kurtaev 7 years ago
parent b97b650ab3
commit 9e9926a2f0
  1. 10
      modules/dnn/src/layers/prior_box_layer.cpp
  2. 26
      modules/dnn/src/tensorflow/tf_importer.cpp

@ -416,6 +416,11 @@ public:
{ {
_boxWidth = _widths[0] * _scales[0]; _boxWidth = _widths[0] * _scales[0];
_boxHeight = _heights[0] * _scales[0]; _boxHeight = _heights[0] * _scales[0];
if (_bboxesNormalized)
{
_boxWidth *= _imageWidth;
_boxHeight *= _imageHeight;
}
} }
else else
_boxWidth = _boxHeight = _minSize * _scales[0]; _boxWidth = _boxHeight = _minSize * _scales[0];
@ -463,6 +468,11 @@ public:
{ {
_boxWidth = _widths[i] * _scales[i]; _boxWidth = _widths[i] * _scales[i];
_boxHeight = _heights[i] * _scales[i]; _boxHeight = _heights[i] * _scales[i];
if (_bboxesNormalized)
{
_boxWidth *= _imageWidth;
_boxHeight *= _imageHeight;
}
for (int j = 0; j < _offsetsX.size(); ++j) for (int j = 0; j < _offsetsX.size(); ++j)
{ {
float center_x = (w + _offsetsX[j]) * stepX; float center_x = (w + _offsetsX[j]) * stepX;

@ -1411,23 +1411,17 @@ void TFImporter::populateNet(Net dstNet)
layerParams.set("clip", getLayerAttr(layer, "clip").b()); layerParams.set("clip", getLayerAttr(layer, "clip").b());
if (hasLayerAttr(layer, "offset")) if (hasLayerAttr(layer, "offset"))
layerParams.set("offset", getLayerAttr(layer, "offset").f()); layerParams.set("offset", getLayerAttr(layer, "offset").f());
if (hasLayerAttr(layer, "variance"))
{ const std::string paramNames[] = {"variance", "aspect_ratio", "scales",
Mat variance = getTensorContent(getLayerAttr(layer, "variance").tensor()); "width", "height"};
layerParams.set("variance", for (int i = 0; i < 5; ++i)
DictValue::arrayReal<float*>((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*>((float*)aspectRatios.data, aspectRatios.total()));
}
if (hasLayerAttr(layer, "scales"))
{ {
Mat scales = getTensorContent(getLayerAttr(layer, "scales").tensor()); if (hasLayerAttr(layer, paramNames[i]))
layerParams.set("scales", {
DictValue::arrayReal<float*>((float*)scales.data, scales.total())); Mat values = getTensorContent(getLayerAttr(layer, paramNames[i]).tensor());
layerParams.set(paramNames[i],
DictValue::arrayReal<float*>((float*)values.data, values.total()));
}
} }
int id = dstNet.addLayer(name, "PriorBox", layerParams); int id = dstNet.addLayer(name, "PriorBox", layerParams);
layer_id[name] = id; layer_id[name] = id;

Loading…
Cancel
Save