@@ -558,6 +558,29 @@ namespace cv {
558
558
fused_layer_names.push_back (last_layer);
559
559
}
560
560
561
+ void setSAM (int from)
562
+ {
563
+ cv::dnn::LayerParams eltwise_param;
564
+ eltwise_param.name = " SAM-name" ;
565
+ eltwise_param.type = " Eltwise" ;
566
+
567
+ eltwise_param.set <std::string>(" operation" , " prod" );
568
+ eltwise_param.set <std::string>(" output_channels_mode" , " same" );
569
+
570
+ darknet::LayerParameter lp;
571
+ std::string layer_name = cv::format (" sam_%d" , layer_id);
572
+ lp.layer_name = layer_name;
573
+ lp.layer_type = eltwise_param.type ;
574
+ lp.layerParams = eltwise_param;
575
+ lp.bottom_indexes .push_back (last_layer);
576
+ lp.bottom_indexes .push_back (fused_layer_names.at (from));
577
+ last_layer = layer_name;
578
+ net->layers .push_back (lp);
579
+
580
+ layer_id++;
581
+ fused_layer_names.push_back (last_layer);
582
+ }
583
+
561
584
void setUpsample (int scaleFactor)
562
585
{
563
586
cv::dnn::LayerParams param;
@@ -837,6 +860,14 @@ namespace cv {
837
860
from = from < 0 ? from + layers_counter : from;
838
861
setParams.setScaleChannels (from);
839
862
}
863
+ else if (layer_type == " sam" )
864
+ {
865
+ std::string bottom_layer = getParam<std::string>(layer_params, " from" , " " );
866
+ CV_Assert (!bottom_layer.empty ());
867
+ int from = std::atoi (bottom_layer.c_str ());
868
+ from = from < 0 ? from + layers_counter : from;
869
+ setParams.setSAM (from);
870
+ }
840
871
else if (layer_type == " upsample" )
841
872
{
842
873
int scaleFactor = getParam<int >(layer_params, " stride" , 1 );
0 commit comments