Caffe笔记之Windows下调用release下生成的classification.exe对单张图片进行分类错误

来源:互联网 发布:股票自动止损 知乎 编辑:程序博客网 时间:2024/06/05 02:47

本人环境:

1.Caffe工程已经编译好

2.Matlab接口可用


问题概述:

    在用Caffe自带的程序对图片进行分类时,Matlab接口下识别率与训练时test的准确率一致,但使用VS接口,即直接调用工程生成的Classification.exe时出错。对于同一张图片,Matlab和VS的分类结果不一致。

Classification 调用语句如下所示:

F:\caffe-master\Build\x64\Release\classification.exe F:\caffe-master\data\ORL_Alex\deploy.prototxt F:\caffe-master\data\ORL_Alex\ORL_alexnet__iter_20000.caffemodel F:\caffe-master\data\ORL_Alex\ORL_mean.binaryproto F:\caffe-master\data\ORL_Alex\label.txt F:\caffe-master\data\ORL_Alex\28p010.bmp

pause



分析原因:

    在Matlab接口例程中,对于图像的预处理步骤有:1.转换通道  2.减去均值   3.变换大小  4.Crop ,即对其进行位移变换和旋转变换,生成十张图片,输入网络进行前向计算。

    而在VS代码中,可以看到,缺少了 1、4两个步骤。

    减去均值的问题:减均值对网络的影响并不是非常大,将我们自己的均值文件改为caffe自带的均值文件,或是不减去均值文件,而是减去固定值,都没有特别大的影响,除非均值文件通道反了会有一丢丢影响


解决方法:

    我们需要在caffe的vs工程中,找到classification.CPP,对于下面函数进行修改。

void Classifier::Preprocess(const cv::Mat& img,std::vector<cv::Mat>* input_channels)


    具体是,在里面加入如下代码:

  cv::cvtColor(sample_normalized, sample_normalized, cv::COLOR_BGR2RGB);

    至于crop步骤,可以在工程外进行编写。



阅读全文
0 0