本文主要是介绍ncnn的substract_mean_normalize函数详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
导读
在使用模型进行预测的时候,我们在做图片预处理的时候通常需要归一化输入图片的均值和方差,而ncnn也提供了substract_mean_normalize函数,来针对输入图片的均值和方差做处理,这篇文章我们就来详细介绍一下这个函数的使用。
函数介绍
函数:substract_mean_normalize(mean_vals, norm_vals)
- mean_vals:减去的均值
- norm_vals:乘以的方差
注意:ncnn中的substract_mean_normalize函数像素范围在[0,255],所以在使用对于不同的框架可能需要进行转换
像素范围在[0,255]之间
transform_param {mean_value: 103.94mean_value: 116.78mean_value: 123.68scale: 0.017
}
ncnn中的代码
const float mean_vals[3] = { 103.94f, 116.78f, 123.68f };
const float norm_vals[3] = { 0.017f, 0.017f, 0.017f };
in.substract_mean_normalize(mean_vals, norm_vals);
mxnet-gluon或pytorch
transforms.ToTensor(),
transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
mxnet框架在处理图片数据的时候,会对其进行归一化,所以像素会在[0,1]之间,转换为ncnn的代码
// R' = (R / 255 - 0.485) / 0.229 = (R - 0.485 * 255) / 0.229 / 255
// G' = (G / 255 - 0.456) / 0.224 = (G - 0.456 * 255) / 0.224 / 255
// B' = (B / 255 - 0.406) / 0.225 = (B - 0.406 * 255) / 0.225 / 255
const float mean_vals[3] = {0.485f*255.f, 0.456f*255.f, 0.406f*255.f};
const float norm_vals[3] = {1/0.229f/255.f, 1/0.224f/255.f, 1/0.225f/255.f};
in.substract_mean_normalize(mean_vals, norm_vals);
参考:FAQ ncnn produce wrong result · Tencent/ncnn Wiki · GitHub
这篇关于ncnn的substract_mean_normalize函数详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!