参考https://github.com/chuanqi305/MobileNet-SSD
下载源码
下载源码,解压,放在/home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/examples/
下
测试运行
修改/home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/examples/MobileNet-SSD
下的demo.py
的路径如下
运行demo.py
cd /home/jqy/jqy_caffe/caffe-gpu/caffe-ssd # 运行demo.py
运行完成,会显示/home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/examples/MobileNet-SSD/images/
下图片的检测结果。
训练自己的模型
创建lmdb文件
我的lmdb文件还是在/home/jqy/data/VOCdevkit/VOC0712/lmdb
下,创建方法见caffe学习(8):caffe-ssd分支训练测试
训练
切换到/home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/examples/MobileNet-SSD
目录,训练需要用到train.sh
,查看train.sh
如下:
可以看到需要用到solver_train.prototxt
和mobilenet_iter_73000.caffemodel
,前一个是solver文件,后一个是模型文件。
查看solver_train.prototxt
如下:
可以看到需要MobileNetSSD_train.prototxt
和MobileNetSSD_test.prototxt
,这俩文件在/home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/examples/MobileNet-SSD/example
文件夹下。起初是没有的,需要运行gen_model.sh
来生成。
查看gen_model.sh
文件如下:
可知MobileNetSSD_train.prototxt
和MobileNetSSD_test.prototxt
由MobileNetSSD_train_template.prototxt
和MobileNetSSD_test_template.prototxt
生成。查看MobileNetSSD_train_template.prototxt
可知运行gen_model.sh
需要lmdb数据,如下:
由于我原来的lmdb数据放在/home/jqy/data/VOCdevkit/VOC0712/lmdb
下,建立软链接:
cd /home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/examples/MobileNet-SSD
ln -s /home/jqy/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb trainval_lmdb
ln -s /home/jqy/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb test_lmdb
需要labelmap.prototxt文件,该文件指示有哪些类型,如下:
cp /home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/data/VOC0712/labelmap_voc.prototxt /home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/examples/MobileNet-SSD/labelmap.prototxt
运行gen_model.sh
cd /home/jqy/jqy_caffe/caffe-gpu/caffe-ssd/examples/MobileNet-SSD
./gen_model.sh 21 # 运行,需要跟上类数
得到了训练所需的example/
目录下文件
运行train.sh
./train.sh
运行成功,开始训练。
修改源码,自定义训练
修改train.sh
#!/bin/sh
if ! test -f example/MobileNetSSD_train.prototxt ;then
echo "error: example/MobileNetSSD_train.prototxt does not exist."
echo "please use the gen_model.sh to generate your own model."
exit 1
fi
mkdir -p snapshot
../../build/tools/caffe train -solver="solver_train.prototxt" \
--snapshot="snapshot/mobilenet_iter_6000.solverstate" \ # 我昨天跑了6000次,今天在快照的基础上继续跑
-gpu 0,1 # 我有俩GPU,全用上
运行./train.sh