【caffe-Windows】caffe在Windows下训练深度学习网络并测试(以mnist为例)

上篇博文:http://blog.csdn.net/gyh_420/article/details/78225923
之前已经讲了怎么在windows下面无GPU来安装caffe,现在我们来看看我们安装的caffe是否可以使用。
D:\Caffe\caffe-master\examples\mnist 找到mnist路径,这个是我的电脑的上的路径,你的路径按你自己的电脑来找到。
这里写图片描述
如图划线的三个部分将是我们所需要的最重要的3个文件,其中train.bat你现在肯定是没有的,是我自己新建的。
前两个文件,一个是训练参数的设置文件,一个是网络模型参数的设置文件,采用的是LENET-5的模型,如果想自己实现自己定义的网络层,还要很长的路要走。接下来讲一讲怎么开始我们的训练。
第一步: 官网下载mnist数据 http://yann.lecun.com/exdb/mnist/,共4个文件,解压放到caffe-master\mnist\mnist_data下 (新建一个mnist_data文件夹),如果你不想麻烦的转换数据格式,我上传了转换好的格式,收了点积分(总要为懒惰付出点代价嘛)转换好的lmdb数据
如图:
这里写图片描述
然后新建一个txt文件,后缀改成bat(脚本命令行)内容如下,切记代码中的路径直接只用空格隔开,不要有回车符,否则会报错,你也可以在这里写成绝对路径,解释下这里的..\表示的是返回当前txt所在目录的上一层。这里还要注意convert_mnist_data.exe的路径,我在上篇博客中对caffe源码的编译时Debug和Release都进行了的,所以这里选了Release,如果你没有进行Release编译,而是Debug,请改成Debug路径

..\..\..\Build\x64\Release\convert_mnist_data.exe  train-images.idx3-ubyte train-labels.idx1-ubyte ..\..\..\examples\mnist\mnist_train_lmdb  
echo.  
..\..\..\Build\x64\Release\convert_mnist_data.exe  t10k-images.idx3-ubyte  t10k-labels.idx1-ubyte ..\..\..\examples\mnist\mnist_test_lmdb 

pause  

然后点击刚刚的bat运行后得到,这两个文件夹,里面就是我们要的lmdb格式的数据,如果你要想转换成LEVELDB格式的话,只需要在.bat文件中把 mnist_train_lmdb改成mnist_train_leveldb ,有两个地方要改
这里写图片描述

然后我们要改刚刚所说的两个重要的文件了
重要提示:
路径中的斜杠是反斜杠“/”,不要写成“\”,可能会报错

首先 lenet_train_test.prototxt改的有如图所示,我建议大家写绝对路径,这里就改成刚刚生产的lmdb格式的文件,注意TEST要对应TEST文件,TRAIN要对应TRAIN文件
这里写图片描述
如果你使用的是leveldb格式的文件,那么这个地方的backend也要改成LEVELDB ,注意有两处
这里写图片描述

然后我们要改lenet_solver.prototxt文件
这里写图片描述
3个地方需要注意,一个是网络模型的路径,就是我们刚刚修改的那个文件的路径,第二个是训练好的模型的存放路径,注意新建一个lenet的文件夹,不然可能报错,当然你也可以存在其他的你想放的地方。最后就是是否是用GPU的问题了,我没有使用GPU,所以改成CPU

最后一步就是写train.bat文件了,和之前一样,新建一个txt,改后缀,然后调用caffe.exe以及上面这个训练的配置文件,于是开始了漫长的训练,我用CPU跑了大概20分钟-30分钟的样子。

D:/Caffe/caffe-master/Build/x64/Debug/caffe.exe train --solver=D:/Caffe/caffe-master/examples/mnist/lenet_solver.prototxt
Pause

PS: 总结两个遇到问题:

  1. 转换数据时候要确定转换的是 LMDB还是LEVELDB,这个是在一开始转换的时候设置的,一旦设置,在后面的train_test.prototxt文件中一定要对应的改过来,切记,切记。

2.Debug 和 Release ,这个是在VS2013中选择的,具体有什么区别我不太清楚(百度了,说对使用问题不大),但是我们在调用例如 convert_mnist_data.exe 、compute_image_mean.exe等这些 应用程序时,要选择路径,一定要看清楚你生成的是在Debug文件夹(caffe-master\Build\x64\Debug)里还是在Release(caffe-master\Build\x64\Release)里,如果你生成的是在Debug里,而调用的时候是用路径:. Build\x64\Release 的话,就会出现如下错误:
这里写图片描述
当然,可以在VS2013中分别 选择 Debug和Release 进行生成,这样就不用担心第二个问题啦。

上面这些有一部分参考了http://www.cnblogs.com/TensorSense/p/6260293.html,不过我讲的更仔细和完整,按照我说的方法应该是没有任何问题的。


训练好模型之和,就要开始我们的测试了。
这里写图片描述
上面的4个文件就是我们训练好的,5000后缀的那个文件是训练过程中迭代了5000次时临时保存的模型,暂时不管他,我们要用的是lenet_iter_10000.caffemodel

接下来我们要生成之前没有生成的均值文件,mean.binaryproto
新建一个creatmeanfile.bat

D:/Caffe/caffe-master/Build/x64/Release/compute_image_mean D:/Caffe/caffe-master/examples/mnist/mnist_train_lmdb D:/Caffe/caffe-master/examples/mnist/lenet/mean.binaryproto
pause

然后运行即可

然后新建一个synset_words.txt的文件,既是标签文件

0  
1  
2  
3  
4  
5  
6  
7  
8  
9 

然后写一个调用caffe.exe的脚本 命名为class.bat,和之前一样,注意路径之间不要有回车
lenet.prototxt文件是网路模型的描述文件,这个是别人设计好的网络,在caffe里面自带的。

D:/Caffe/caffe-master/Build/x64/Release/classification.exe D:/Caffe/caffe-master/examples/mnist/lenet.prototxt D:/Caffe/caffe-master/examples/mnist/lenet/lenet_iter_10000.caffemodel D:/Caffe/caffe-master/examples/mnist/lenet/mean.binaryproto D:/Caffe/caffe-master/examples/mnist/lenet/synset_words.txt D:/Caffe/caffe-master/examples/mnist/lenet/3.bmp  
pause  

然后用画图的软件生成手写的3.jpg的图像,改成28*28的大小,然后再OPENCV里面反转一下灰度(因为我们训练集市黑背景,白笔记,而画图中的是白背景,黑笔迹),保存为3.bmp,放在模型的目录下。
这里写图片描述

PS:如果你配置半天还是没有成功,我这里放出所有的配置好的脚本和训练好的模型
训练好的模型以及脚本http://download.csdn.net/download/gyh_420/10024034

这里放出转换的OPENCV代码

#include <opencv2\opencv.hpp>
#include <iostream>  

using namespace std;
using namespace cv;

int main(int argc, char * argv[])
{
    Mat image;      //定义一个图像对象  
    image = imread("D:/quater/rgb_to_graybmp/3.jpg");   //读取图像  

    if (!image.data)        //判断图像载入是否成功  
    {
        cout << "Fail to load image!!" << endl;
        system("pause");
        return 0;
    }
    resize(image, image, Size(28, 28), CV_INTER_LANCZOS4);
    Mat gray;

    namedWindow("原图", WINDOW_AUTOSIZE);
    imshow("原图", image);

    cvtColor(image, gray, CV_BGRA2GRAY);

    //图像反转  
    for (int i = 0; i < gray.rows; i++)
    {
        for (int j = 0; j < gray.cols; j++)
        {
            gray.at<uchar>(i, j) = 255 - gray.at<uchar>(i, j);   // 每一个像素反转  
        }
    }

    namedWindow("gray", WINDOW_AUTOSIZE);
    imshow("gray", gray);    //在窗口my中显示gray图像  

    imwrite("3.bmp", gray);   //  将gray图像保存为bmp  


    cout << "Size of image is: " << gray.size().height << ", " //获得图像的高,宽等尺寸  
        << gray.size().width << endl;

    waitKey(0);
    image.release();
    gray.release();
    return 0;
}

运行class.bat

得到结果
这里写图片描述

这里写图片描述

结果非常不错,下一篇会讲一讲怎么在VS自己的项目中调用模型而不是使用命令行脚本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值