zoukankan      html  css  js  c++  java
  • 【神经网络与深度学习】在Windows8.1上用VS2013编译Caffe并训练和分类自己的图片

    最近想熟悉一下深度学习,体验了一下Caffe,简单写写训练和分类的过程:


    1.下载Caffe VS2013工程:https://github.com/Microsoft/caffe


    2. 解压并用VS2013打开解决方案caffe-masterwindowsCaffe.sln,默认配置是x64 Debug


    2.  重命名caffe-masterwindowsCommonSettings.props.example为caffe-masterwindowsCommonSettings.props,然后修改如下配置:

    <CpuOnlyBuild>true</CpuOnlyBuild>  -----  是否使用GPU,我的电脑没有GPU,所以为true

    <UseCuDNN>false</UseCuDNN>   -----   是否使用CuDNN库

    <PythonSupport>false</PythonSupport>  ----- 是否支持Python

    <MatlabSupport>false</MatlabSupport>   -----  是否支持Matlab


    4. 编译解决方案

    全编译整个解决方案,刚开始会弹出一个窗口下载第三方库,需要下载一段时间,下载完毕后开始编译。第一次编译或许会出现错误说找不到libcaffe.lib,把工程libcaffe单独编译一下然后再编译整个解决方案即可。


    5.编译通过后,在caffe-masterBuildx64Debug中会出现一堆exe和dll:

    convert_imageset.exe    用来生成训练图片和测试图片的数据库

    compute_image_mean.exe  计算训练图片的均值

    classification.exe   对目标图片分类


    6. 准备训练图片和测试图片,我们这里训练圆形,三角形,六边形和云朵图片,比如:

    caffe-masterdata raincircle中放圆形练图片10张

    caffe-masterdata raincloud中放云朵形状练图片5张

    caffe-masterdata rainhexagon中放六边形练图片5张

    caffe-masterdata rain riangle中放三角形练图片10张

    训练图片共30张


    caffe-masterdata rainval中放测试图片

    这里放两张圆形图片(标准圆形和手绘圆形),两张三角形(标准+手绘),一张标准六边形,一张云朵图片,共6张


    7. 新建文本文件caffe-masterdata rain rain.txt,填写将30张训练图片和类别编号对应关系,内容如下,jpg后面的数字表示图片类别编号,从0开始。

    circle1.jpg 0

    circle2.jpg 0

    circle3.jpg 0

    circle4.jpg 0

    circle5.jpg 0

    circle6.jpg 0

    circle7.jpg 0

    circle8.jpg 0

    circle9.jpg 0

    circle10.jpg 0

    riangle1.jpg 1

    riangle2.jpg 1

    riangle3.jpg 1

    riangle4.jpg 1

    riangle5.jpg 1

    riangle6.jpg 1

    riangle7.jpg 1

    riangle8.jpg 1

    riangle9.jpg 1

    riangle10.jpg 1

    hexagon1.jpg 2

    hexagon2.jpg 2

    hexagon3.jpg 2

    hexagon4.jpg 2

    hexagon5.jpg 2

    clouda.jpg 3

    cloud.jpg 3

    cloudc.jpg 3

    cloudd.jpg 3

    cloude.jpg 3


    注意:这里每行的文件名称会和第9节convert_imageset_train.bat的行“set a=C:xxxcaffe-masterdata rain”指定的路径拼接成一个完整图片文件路径


    8. 新建文本文件caffe-masterdatavalval.txt,填写测试图片和类别编号的对应关系,内容如下,格式与上面train.txt一样:

    1.jpg 0

    a.jpg 0

    2.jpg 1

    .jpg 1

    3.jpg 2

    5.jpg 3


    注意:这里每行的图片文件名称会和第10节convert_imageset_val.bat的行“set a=C:xxxcaffe-masterdataval”指定的路径拼接成一个完整图片文件路径


    9. 在caffe-master根目录下新建并运行批处理文件convert_imageset_train.bat,用于生成训练图片数据库:

    文件内容如下:

    SET GLOG_logtostderr=1

    cd /d C:xxxcaffe-master

    set a=C:xxxcaffe-masterdata rain

    set b=C:xxxcaffe-masterdata rain rain.txt

    set c=C:xxxcaffe-masterdata rainlmdb

    Buildx64Debugconvert_imageset.exe -resize_height=200 -resize_width=200 %a% %b% %c% 0

    pause


    注意:运行此批处理文件前要确保文件夹caffe-masterdata rainlmdb不存在,否则会报错。

    批处理运行后生成两个文件:caffe-masterdata rainlmdbdata.mdb和caffe-masterdata rainlmdblock.mdb


    10. 在caffe-master根目录下新建并运行批处理文件convert_imageset_val.bat,用于生成测试图片数据库,文件内容如下:

    SET GLOG_logtostderr=1

    cd /d C:xxxcaffe-master

    set a=C:xxxcaffe-masterdataval

    set b=C: xxxcaffe-masterdatavalval.txt

    set c=C:xxxcaffe-masterdatavallmdb

    Buildx64Debugconvert_imageset.exe -resize_height=200 -resize_width=200 %a% %b% %c% 0

    pause


    注意:运行此批处理文件前要确保文件夹caffe-masterdatavallmdb不存在,否则会报错。

    resize_height和resize_width分别为调整后的输入图片的宽度和高度


    批处理运行后生成两个文件:caffe-masterdatavallmdbdata.mdb和caffe-masterdatavallmdblock.mdb


    11. 生成均值文件,在caffe-master根目录下新建并运行批处理文件compute_image_mean.bat

    SET GLOG_logtostderr=1

    cd /d C:xxxcaffe-master

    set a=C:xxxcaffe-masterdata rainlmdb

    set b=C:xxxcaffe-masterdataimage_mean.binaryproto

    Buildx64Debugcompute_image_mean.exe %a% %b%

    pause

    批处理运行后生成caffe-masterdataimage_mean.binaryproto


    12. 复制文件caffe-mastermodelsvlc_alexnetsolver.prototxt和caffe-mastermodelsvlc_alexnet rain_val.prototxt到caffe-masterdata,并修改如下:

    solver.prototxt:

    net: "C:/xxx/caffe-master/data/train_val.prototxt"

    test_iter: 1

    test_interval: 500

    base_lr: 0.001

    lr_policy: "step"

    gamma: 0.1

    stepsize: 100000

    display: 20

    max_iter: 10000

    momentum: 0.9

    weight_decay: 0.0005

    snapshot: 1000

    snapshot_prefix: "models/bvlc_alexnet/caffe_alexnet_train"

    solver_mode: CPU


    solver.prototxt和train_val.prototxt的详细介绍请参考如下两篇博客:

    http://blog.csdn.net/u012746763/article/details/51549184 

    http://blog.csdn.net/u012746763/article/details/51549267


    13. 在caffe-master根目录下新建并运行批处理文件train.bat开始训练:

    SET GLOG_logtostderr=1

    cd /d C:xxxcaffe-master

    Buildx64Debugcaffe.exe train --solver=C:xxxcaffe-masterdatasolver.prototxt

    pause


    训练结果和快照保存在caffe-mastermodelsvlc_alexnet中。


    14. 由于使用CPU计算,训练速度非常慢,不知道采用GPU能加速多少,减少训练图片数量和图片尺寸(step9和10中的resize_height和resize_width)能加快训练速度和降低内存使用。经过数个小时的等待训练结束,生成最终的训练结果,也可使用训练中间生成的快照来做分类。


    15.  在caffe-master根目录下新建并运行批处理文件classification.bat开始分类。

    SET GLOG_logtostderr=1

    cd /d C:xxxcaffe-master

    set a=C:xxxcaffe-mastermodelsvlc_alexnetdeploy.prototxt

    set b=C:xxxcaffe-mastermodelsvlc_alexnetcaffe_alexnet_train_iter_4000.caffemodel

    set c=C:xxxcaffe-masterdataimage_mean.binaryproto

    set d=C:xxxcaffe-masterlabels.txt

    set e=C:xxxcaffe-masterdatavalf.jpg

    Buildx64Debugclassification.exe %a% %b% %c% %d% %e%

    pause


    参数说明:

    deploy.prototxt:

    修改name为data的layer中的input_param为{ shape: { dim: 10 dim: 3 dim: 200 dim: 200 } }  其中的200分别对应step9和10中的resize_height和resize_width

    在name为fc8的layer中,修改num_output的值为4(训练图片类型的个数)

    caffe_alexnet_train_iter_4000.caffemodel: 训练结果

    image_mean.binaryproto: 均值文件

    labels.txt: 图片类型编号对应的类型名称文件,一行一个名称

    f.jpg: 待分类的图片


    14. 手绘一个云朵形状的图片然后分类,结果:

    0.9997 - "cloud"

    0.0002 - "triangle

    0.0001 - "hexagon"

    0.0000 - "circle"

  • 相关阅读:
    [unity3d程序] 纹理扩散
    深入浅出SharePoint——自定义带ECB列
    深入浅出TFS——工作区Workspace
    深入浅出SharePoint——部署WSP
    深入浅出SharePoint——批处理高效导入数据
    深入浅出SharePoint——Log4net应用
    遍历文件夹及文件
    深入浅出SharePoint——使用CAML定制View
    拷贝文件到另一台电脑
    深入浅出SharePoint——在自定义表单中使用上传附件控件
  • 原文地址:https://www.cnblogs.com/huty/p/8518088.html
Copyright © 2011-2022 走看看