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"

  • 相关阅读:
    Javascript FP-ramdajs
    微信小程序开发
    SPA for HTML5
    One Liners to Impress Your Friends
    Sass (Syntactically Awesome StyleSheets)
    iOS App Icon Template 5.0
    React Native Life Cycle and Communication
    Meteor framework
    RESTful Mongodb
    Server-sent Events
  • 原文地址:https://www.cnblogs.com/huty/p/8518088.html
Copyright © 2011-2022 走看看