前提是已配置运行好SSD,未配置请参考博客:https://blog.youkuaiyun.com/ly_twt/article/details/105787871
一、demo测试
1、
cd /xxx/SSD/caffe/examples
git clone https://github.com/chuanqi305/MobileNet-SSD.git
2、修改demo.py,如下:
(注:MobileNetSSD_deploy.prototxt和MobileNetSSD_deploy.caffemodel需要下载,可联系我)
3、运行demo.py
python2 ./demo.py
运行后会出现检测结果图。
如果能够顺利运行demo,则继续进行下一步训练。
二、训练(以pascal voc数据集为例)
(在配置运行SSD时已经准备好数据,请参考:https://blog.youkuaiyun.com/ly_twt/article/details/105787871)
注:/data/VOC0712/labelmap_voc.prototxt中的类别信息根据自己的类别进行修改。
1、cd到/examples/MobileNet-SSD下执行
./gen_model.sh NUM
# NUM = 类别数+1
运行后,在/examples/MobileNet-SSD中会生成一个example文件夹,里面有MobileNetSSD_train.prototxt、MobileNetSSD_test.prototxt和MobileNetSSD_deploy.prototxt三个文件。
2、修改prototxt文件
①在MobileNetSSD_train.prototxt、MobileNetSSD_test.prototxt中,将data_param层里的source值改写成项目实际lmdb的绝对路径。
②在MobileNetSSD_train.prototxt、MobileNetSSD_test.prototxt中,将data_param层里label_map_file的值改成labelmap的绝对路径。
③检查prototxt文件中的num_classes是否为你的类别数目+1。
3、开始训练
cd到/examples/MobileNet-SSD下执行
./train.sh
******可以修改solver_train.prototxt中的一些参数,比如迭代次数等。
三、测试
①(数据集中的测试集测试)
cd到/examples/MobileNet-SSD下执行
./test.sh
②(数据集之外的图片测试)
在训练结束后,在snapshot文件夹中会保存训练的模型。
修改/examples/MobileNet-SSD/merge_bn.py
(1)
修改merge_bn.py:
caffe_root修改成你自己的路径:
以下为生成的.caffemodel和.prototxt文件的名字,可以自行修改:
(2)
cd到/examples/MobileNet-SSD下执行以生成
python2 ./merge_bn.py --weights ./snapshot/xxxx.caffemodel --model ./example/MobileNetSSD_deploy.prototxt
# 其中,--weights是你选择的训练好的模型
(merge_bn.py 合并bn层脚本,用于生成最终的caffemodel(因为mobilenet有两个层最后需要合并才能得到deploy.caffemodel))
运行结束后,在MobileNet-SSD中会生成no_bn.caffemodel和no_bn.prototxt两个文件。
(3)在images文件夹中放入需要检测的图片。
(4)修改demo.py文件中的net_file和caffe_model分别为no_bn.caffemodel和no_bn.prototxt。
运行demo.py获得检测结果。