Backport fix for autodetection of input shapes
authorDmitry Kurtaev <dmitry.kurtaev+github@gmail.com>
Thu, 5 Dec 2019 16:25:51 +0000 (19:25 +0300)
committerDmitry Kurtaev <dmitry.kurtaev+github@gmail.com>
Thu, 5 Dec 2019 16:25:51 +0000 (19:25 +0300)
modules/dnn/src/dnn.cpp

index 83b6b9f..cd51282 100644 (file)
@@ -2772,17 +2772,25 @@ struct Net::Impl
     {
         std::vector<LayerPin>& inputLayerIds = layers[id].inputBlobsId;
 
-        if (inOutShapes[0].in[0].empty() && !layers[0].outputBlobs.empty())
+        if (id == 0 && inOutShapes[id].in[0].empty())
         {
-            ShapesVec shapes;
-            for (int i = 0; i < layers[0].outputBlobs.size(); i++)
+            if (!layers[0].outputBlobs.empty())
             {
-                Mat& inp = layers[0].outputBlobs[i];
-                CV_Assert(inp.total());
-                shapes.push_back(shape(inp));
+                ShapesVec shapes;
+                for (int i = 0; i < layers[0].outputBlobs.size(); i++)
+                {
+                    Mat& inp = layers[0].outputBlobs[i];
+                    CV_Assert(inp.total());
+                    shapes.push_back(shape(inp));
+                }
+                inOutShapes[0].in = shapes;
             }
-            inOutShapes[0].in = shapes;
-         }
+            else
+            {
+                inOutShapes[0].out.clear();
+                return;
+            }
+        }
 
         if (inOutShapes[id].in.empty())
         {