@@ -641,6 +641,17 @@ void ONNXImporter::populateNet(Net dstNet)
641
641
{
642
642
layerParams.type = " Scale" ;
643
643
layerParams.set (" bias_term" , true );
644
+ int axis = 1 ;
645
+ for (int i = 0 ; i < graph_proto.initializer_size (); i++)
646
+ {
647
+ opencv_onnx::TensorProto tensor_proto = graph_proto.initializer (i);
648
+ if (tensor_proto.name () == node_proto.input (const_blob_id))
649
+ {
650
+ axis = inpShape.size () - tensor_proto.dims_size ();
651
+ break ;
652
+ }
653
+ }
654
+ layerParams.set (" axis" , axis);
644
655
blob = blob.reshape (1 , 1 );
645
656
layerParams.blobs .push_back ((isSub ? -1 : 1 ) * blob);
646
657
}
@@ -911,13 +922,20 @@ void ONNXImporter::populateNet(Net dstNet)
911
922
CV_Assert (node_proto.input_size () == 2 );
912
923
layerParams.type = " InnerProduct" ;
913
924
layerParams.set (" bias_term" , false );
925
+ CV_Assert (constBlobs.find (node_proto.input (0 )) == constBlobs.end ());
926
+ int firstInpDims = outShapes[node_proto.input (0 )].size ();
927
+ int secondInpDims;
914
928
915
929
if (constBlobs.find (node_proto.input (1 )) != constBlobs.end ())
916
930
{
917
931
Mat blob = getBlob (node_proto, constBlobs, 1 );
932
+ secondInpDims = blob.dims ;
918
933
layerParams.blobs .push_back (blob.t ());
919
934
layerParams.set (" num_output" , layerParams.blobs [0 ].size [0 ]);
935
+ } else {
936
+ secondInpDims = outShapes[node_proto.input (1 )].size ();
920
937
}
938
+ layerParams.set (" axis" , firstInpDims - secondInpDims + 1 );
921
939
}
922
940
else if (layer_type == " Mul" || layer_type == " Div" )
923
941
{
0 commit comments