caffe 训练自己的分类模型

学习caffe的最终目的,是可以利用自己的数据集,训练模型,并解决实际问题。

所以在前面跑通了mnist和cifar-10例程的基础上,尝试训练自己的模型,从头到尾走一遍所有的流程。准备数据、训练并得到模型,利用模型进行分类预测。


一、准备数据

1、在网上找了一些图片,分为五类,编号为0,1,2,3,4,每类训练数据50张,测试数据20张。博主将所有的train图片都放在了train文件夹下,编号为0-49,100-149,200-249,300-349,400-449,把所有的test图片都放在了test文件夹下,编号为0-19,100-119,200-219,300-319,400-419。

2、得到train.txt和test.txt清单文件。网上有很多方法,也可以自己用C++写代码实现。部分清单如下所示:

3、将train.txt和test.txt放在 与 train和test文件夹同一目录下。我的为:caffe-master\examples\myExample。

  1. 0.jpg 0
  2. 1.jpg 0
  3. 2.jpg 0
  4. 3.jpg 0
  5. 4.jpg 0
  6. 5.jpg 0
  7. 6.jpg 0
  8. 7.jpg 0
  9. 8.jpg 0
  10. 9.jpg 0
  11. 10.jpg 0
  12. 11.jpg 0
  13. 12.jpg 0
  14. 13.jpg 0
  15. 14.jpg 0
  16. 15.jpg 0
  17. 16.jpg 0
  18. 17.jpg 0
  19. 18.jpg 0
  20. 19.jpg 0
  21. 100.jpg 1
  22. 101.jpg 1
  23. 102.jpg 1


二、转换为lmdb格式

1、安装git客户端,方便后面运行.sh文件。  安装教程 

2、找到caffe-master\examples\imagenet目录下的create_imagenet.sh文件,并对其进行修改。

  1. #!/usr/bin/env sh
  2. # Create the imagenet lmdb inputs
  3. # N.B. set the path to the imagenet train + val data dirs
  4. set -e
  5. #EXAMPLE=examples/imagenet
  6. DATA=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample
  7. TOOLS=E:/NotFineshed/caffeWin10/caffe-master/Build/x64/Release
  8. TRAIN_DATA_ROOT=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/train/
  9. VAL_DATA_ROOT=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/test/
  10. # Set RESIZE=true to resize the images to 256x256. Leave as false if images have
  11. # already been resized using another tool.
  12. RESIZE=true
  13. if $RESIZE; then
  14. RESIZE_HEIGHT= 256
  15. RESIZE_WIDTH= 256
  16. else
  17. RESIZE_HEIGHT= 0
  18. RESIZE_WIDTH= 0
  19. fi
  20. if [ ! -d "$TRAIN_DATA_ROOT" ]; then
  21. echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
  22. echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \
  23. "where the ImageNet training data is stored."
  24. exit 1
  25. fi
  26. if [ ! -d "$VAL_DATA_ROOT" ]; then
  27. echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
  28. echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \
  29. "where the ImageNet validation data is stored."
  30. exit 1
  31. fi
  32. echo "Creating train lmdb..."
  33. GLOG_logtostderr= 1 $TOOLS/convert_imageset \
  34. --resize_height=$RESIZE_HEIGHT \
  35. --resize_width=$RESIZE_WIDTH \
  36. --backend=lmdb \
  37. --shuffle \
  38. $TRAIN_DATA_ROOT \
  39. $DATA/train.txt \
  40. $EXAMPLE/mydata_train_lmdb
  41. echo "Creating val lmdb..."
  42. GLOG_logtostderr= 1 $TOOLS/convert_imageset \
  43. --resize_height=$RESIZE_HEIGHT \
  44. --resize_width=$RESIZE_WIDTH \
  45. --backend=lmdb \
  46. --shuffle \
  47. $VAL_DATA_ROOT \
  48. $DATA/test.txt \
  49. $EXAMPLE/mydata_test_lmdb
  50. echo "Done."

3、运行完成后,在git的文件位置目录下,得到两个文件夹 madata_train_lmdb 和 mydata_test_lmdb


三、生成图像均值

1、修改make_imagenet_mean.sh文件,如下所示

  1. #!/usr/bin/env sh
  2. # Compute the mean image from the imagenet training lmdb
  3. # N.B. this is available in data/ilsvrc12
  4. #EXAMPLE=examples/imagenet
  5. DATA=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample
  6. TOOLS=E:/NotFineshed/caffeWin10/caffe-master/Build/x64/Release
  7. $TOOLS/compute_image_mean.exe $DATA/mydata_train_lmdb $DATA/mydata_mean.binaryproto --backend=lmdb
  8. echo "Done."
2、运行完成后,在caffe-master\examples\myExample目录下,生成mydata_mean.binaryproto文件。

四、创建模型并编写配置文件

1、模型就用caffe自带的caffenet模型,位置在 caffe-master\models\bvlc_reference_caffenet/文件夹下, 我们需要的三个文件是solver.prototxt 和train_val.prototxt、deploy.prototxt。博主将train_val.prototxt改名为train_test.prototxt。

2、修改其中的solver.prototxt,如下所示

  1. net: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/train_test.prototxt"
  2. test_iter: 5
  3. test_interval: 10
  4. base_lr: 0.001
  5. lr_policy: "step"
  6. gamma: 0.1
  7. stepsize: 100
  8. display: 20
  9. max_iter: 1000
  10. momentum: 0.9
  11. weight_decay: 0.005
  12. solver_mode: GPU
  13. snapshot: 500
  14. snapshot_prefix: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/minemodel"
3、修改train_test.protxt,需要修改两个阶段的data层。

    实际上就是修改两个data layer的mean_file和source这两个地方,其它都没有变化 。

    然后修改全连接层fc8的输出num,即分类数,我的为五类,所以改为5.

  1. name: "CaffeNet"
  2. layer {
  3. name: "data"
  4. type: "Data"
  5. top: "data"
  6. top: "label"
  7. include {
  8. phase: TRAIN
  9. }
  10. transform_param {
  11. mirror: true
  12. crop_size: 227
  13. mean_file: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/mydata_mean.binaryproto"
  14. }
  15. # mean pixel / channel-wise mean instead of mean image
  16. # transform_param {
  17. # crop_size: 227
  18. # mean_value: 104
  19. # mean_value: 117
  20. # mean_value: 123
  21. # mirror: true
  22. # }
  23. data_param {
  24. source: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/mydata_train_lmdb"
  25. batch_size: 25
  26. backend: LMDB
  27. }
  28. }
  29. layer {
  30. name: "data"
  31. type: "Data"
  32. top: "data"
  33. top: "label"
  34. include {
  35. phase: TEST
  36. }
  37. transform_param {
  38. mirror: false
  39. crop_size: 227
  40. mean_file: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/mydata_mean.binaryproto"
  41. }
  42. # mean pixel / channel-wise mean instead of mean image
  43. # transform_param {
  44. # crop_size: 227
  45. # mean_value: 104
  46. # mean_value: 117
  47. # mean_value: 123
  48. # mirror: false
  49. # }
  50. data_param {
  51. source: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/mydata_test_lmdb"
  52. batch_size: 20
  53. backend: LMDB
  54. }
  55. }

4、修改deploy.prototxt文件

 同样的修改num_output为5(5个类别)。


五、开始训练

1、在caffe-master目录下,新建train-my-caffe-model.txt,并输添加以下代码,添加完成后,再将后缀名改为.bat

  1. Build\x64\Release\caffe.exe train --solver=examples/myExample/solver.prototxt
  2. pause

另一种方式:新建一个train-my-caffe-model.sh文件,添加一下代码,用git运行也可以的。

  1. DATA=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample
  2. TOOLS=E:/NotFineshed/caffeWin10/caffe-master/Build/x64/Release
  3. $TOOLS/caffe.exe train --solver=$DATA/solver.prototxt
  4. read -p "press Enter to continue"

2、双击.bat文件,即可开始训练。


六、各种报错及解决办法

1、F0108 11:44:23.991556  8376 db_lmdb.hpp:15] Check failed: mdb_status == 0 (3 vs. 0) 系统找不到指定的路径。

 解决办法: http://blog.csdn.net/u012308979/article/details/72793108

2、F0108 13:05:50.865810  9376 syncedmem.cpp:56] Check failed: error == cudaSuccess (2 vs. 0)  out of memory

解决办法:GPU显存不够,修改batch_size的值,改为25


七、结果

如下图所示。


感觉训练的结果不够满意啊,接下来,需要了解模型网络参数,修改参数以得到更好的训练结果。


八、输入单张图片,进行分类预测

1、新建.sh文件,输入以下代码即可,然后用git运行

  1. #EXAMPLE=examples/imagenet
  2. DATA=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample
  3. TOOLS=E:/NotFineshed/caffeWin10/caffe-master/Build/x64/Release
  4. $TOOLS/classification.exe $DATA/deploy.prototxt $DATA/minemodel_iter_1000.caffemodel $DATA/mydata_mean.binaryproto $DATA/synset_words.txt $DATA/ 1.jpg
  5. read -p "press Enter to continue"

caffe 训练自己的分类模型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值