1、caffe环境:
没有手动本机安装caffe,使用的docker,可在https://hub.docker.com/ 里面下载到符合自己环境的docker。
进入环境命令:sudo docker run --runtime=nviida -v /绝对路径/:/Downloads ba2 /bin/bash
2、网络:
github上找所需的网络,早期使用caffe框架时,各种模型资源很丰富,后来就主要开源相关配置文件和基础模型了。找到基础模型和与之对应的deploy.prototxt文件。
deploy.prototxt 修改全连接层的output_num后,可用于Python脚本测试模型的准确率,经典的caffe测试脚本网上有,如https://blog.csdn.net/u013841196/article/details/72799680。
在deploy.prototxt的基础上添加data层(训练和验证)、loss层和准确率计算层(替换掉prob层)可得到trainval.prototxt。
另有,solver.prototxt文件用于调用trainval.prototxt和caffemodel,设置训练参数。
net: "ResNet-50-trainval.prototxt" #每次测试跑多少次迭代,照片数量/test的batch_size test_iter: 20 #每多少次迭代进行一次测试 test_interval: 100 test_initialization: false #初始的学习率 base_lr: 0.001 #学习率的下降策略 lr_policy: "step" gamma: 0.1 stepsize: 5000 #每迭代多少次打印一次loss信息 display: 100 #最多迭代多少次 max_iter: 15000 #梯度下降策略,90%依赖这次,10%依赖上次 momentum: 0.9 #正则项的比重 weight_decay: 0.0001 #迭代多少次生成一次中间的caffemodel snapshot: 5000 #caffemodel的前缀 snapshot_prefix: "models/resnet_50.caffemodel" solver_mode: GPU
3、训练
训练命令
#!/usr/bin/env sh TOOLS=/opt/caffe/build/tools GLOG_logtostderr=0 GLOG_log_dir=./ft_log/ $TOOLS/caffe train --solver=solver.prototxt --weights=/Downloads/ResNet/ResNet-50/snapshot/resnet_50_iter_100000.caffemodel -gpu 0 #加入 -gpu 选项
如果训练的损失不下降,可以将学习率按5倍、10倍的减小,同时这里的lr_policy是step,可以设置stepsize微调,返回的学习率为base_lr*gamma^(iter/stepsize)。
如果验证集在模型训练时与单侧的时候准确度相差较大,可以考虑从:1、训练时验证集没有完全被验证;2、自测的时候预处理不合理,如均值文件、归一化方式等。
测试命令
/opt/caffe/build/tools/caffe test -model trainval.prototxt -weights ./models/resnet_50_iter_10000.caffemodel -gpu 0 -iterations 20