当我们用自己的数据进行分类训练时,会先得到训练数据的均值文件。训练得到模型之后,对单张图像进行分类预测时,都要求输入均值文件。但是,我们用opencv调用caffe模型时,却没有找到加载均值文件的方法。opencv官网给出的例子,和网上比较多的opencv调用caffe模型时,都没有讲到如何加载均值文件。
博主捣腾了好久,终于找到一种方法来加载均值文件了,在此做一个分享。
一、修改caffe源码并重新编译classsfication
1、打开Caffe.sln文件,找到classsfication项目中的classsfication.cpp文件。
2、定位到 Classifier::SetMean函数,在函数末尾增加以下几行代码。
std::cout << channel_mean[0] << std::endl;
std::cout << channel_mean[1] << std::endl;
std::cout << channel_mean[2] << std::endl;
3、重新编译
classsfication项目,得到新的classsfication.exe文件。
二、进行单张图像的分类预测
1、具体操作参考上一篇博文
2、运行时,就会把由均值文件得到的cv::Scalar打印出来。这就是我们需要的均值数据。
三、 opencv调用caffe模型进行分类预测
1、具体操作 参考之前的博文
2、这里 Scalar(183.574, 183.574, 183.574),就是步骤二得到的均值数据。
Mat inputBlob = dnn::blobFromImage(img, 1, Size(227, 227), Scalar(183.574, 183.574, 183.574), false);