private static int DetectShuffleNetV2(NcnnDotNet.OpenCV.Mat bgr, List <float> clsScores) { using (var shuffleNetV2 = new Net()) { if (Ncnn.IsSupportVulkan) { shuffleNetV2.Opt.UseVulkanCompute = true; } // https://github.com/miaow1988/ShuffleNet_V2_pytorch_caffe // models can be downloaded from https://github.com/miaow1988/ShuffleNet_V2_pytorch_caffe/releases shuffleNetV2.LoadParam("shufflenet_v2_x0.5.param"); shuffleNetV2.LoadModel("shufflenet_v2_x0.5.bin"); using var @in = Mat.FromPixelsResize(bgr.Data, PixelType.Bgr, bgr.Cols, bgr.Rows, 224, 224); var normVals = new[] { 1 / 255.0f, 1 / 255.0f, 1 / 255.0f }; @in.SubstractMeanNormalize(null, normVals); using var ex = shuffleNetV2.CreateExtractor(); ex.Input("data", @in); using var @out = new Mat(); ex.Extract("fc", @out); // manually call softmax on the fc output // convert result into probability // skip if your model already has softmax operation { using var softmax = Ncnn.CreateLayer("Softmax"); using var pd = new ParamDict(); softmax.LoadParam(pd); softmax.ForwardInplace(@out, shuffleNetV2.Opt); } using var @out2 = @out.Reshape(@out.W * @out.H * @out.C); clsScores.Capacity = @out2.W; for (var j = 0; j < @out2.W; j++) { clsScores.Add(@out2[j]); } } return(0); }