MobileNet-SSD训练

在caffe-ssd环境搭建好的情况下

1.下载MobileNet-SSD
cd /home/**/caffe/examples/
git clone https://github.com/chuanqi305/MobileNet-SSD

2.准备数据集,我直接下载的VOC数据集,也可以仿制VOC,使用自己的数据集
a.直接用VOC数据集
cd /home/
mkdir data
cd data

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
解压后可以看到一个VOCdevkit的文件夹
cd /home/**/caffe
执行:
./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh

再进入到home下的data文件夹
cd VOCdevkit
cd VOC0712
可以看到一个lmdb文件夹
cd lmdb
可以看到两个文件夹,分别是VOC0712_test_lmdb  VOC0712_trainval_lmdb  
将这两个文件夹直接拷贝到 MobileNet-SSD目录下
并将名称改为trainval_lmdb 和 test_lmdb
#######
制作labelmap.prototxt
制作格式仿造caffe/data/VOC0712中的labelmap_voc.prototxt 即可

疑问:调用labelmap的文件
######
在MobileNet-SSD的根目录下执行
./gen_model.sh num(num 为要训练的类别数)  
然后可以生成一个example文件夹,里面有我们需要的训练文件和测试文件:MobileNetSSD_train.prototxt、MobileNetSSD_test.prototxt和MobileNetSSD_deploy.prototxt。
对上面三个文件进行修改:
MobileNetSSD_train.prototxt、MobileNetSSD_test.prototxt中,将data_param里的source字段改成实际的lmdb路径,比如我就直接放在MobileNet-SSD的根目录下所有不需要做什么改动,batch_size可以改变一下,以防训练时内存不够,可以改为8或4,视电脑的实际配置情况
检查所有prototxt文件里的num_classes是否为正确的分类数

接下来就是模型训练了
在MobileNet-SSD根目录下运行 ./train.sh
train.sh里的内容解析:(根据自己的路径实际情况做微调)
第2行是train.prototxt的路径,第7行是snapshot保存中间模型的路径,第8行是slover文件的路径,第9行是预训练权重,第10行是用到的gpu编号,这些都可以按需修改。笔者将最后一行的gpu从0修改为0,1,可利用双GPU训练

solver_train.prototxt文件内容:
rain_net:"example/MobileNetSSD_train.prototxt" #训练用的网络文件

test_net:"example/MobileNetSSD_test.prototxt" #测试用的网络文件

test_iter: 673  #测试时的迭代次数

test_interval: 1000  #每训练1000次迭代一次

base_lr: 0.0005  #基准学习率

display: 5 #每5次迭代屏幕显示一次信息

max_iter: 20000  #最大迭代次数

lr_policy: "multistep"  #学习率调整策略

gamma: 0.5

weight_decay: 0.00005  #权重衰减

snapshot: 1000  #每1000次迭代抓取一次快照

snapshot_prefix:"snapshot_power/mobilenet"  #快照保存的前缀

solver_mode: GPU  #这里一定要GPU

debug_info: false

snapshot_after_train: true

test_initialization: false  #不做测试初始化

average_loss: 10  #每10次迭代平均下loss

stepvalue: 10000

stepvalue: 20000

iter_size: 1

type: "RMSProp"  #一种优化方法,挖坑,以后填

eval_type: "detection"  #这里一定要写检测,默认为classification

ap_version: "11point"  #计算AP的方法


训练结束后:
训练的模型还需要做一些生成才能得到
在MobileNet-SSD根目录下执行./test.sh  可以看到detection_eval值和loss值  (不成功,还需要做些修改)
图片测试:
修改 merge_bn.py
示例:
caffe_root = '/home/yfs/wss/caffe/'
train_proto = caffe_root+'examples/MobileNet-SSD/example/MobileNetSSD_train.prototxt' 
train_model =caffe_root+ 'examples/MobileNet-SSD/snapshot/mobilenet_iter_120000.caffemodel'  #should be your snapshot caffemodel

deploy_proto =caffe_root+ 'examples/MobileNet-SSD/example/MobileNetSSD_deploy.prototxt'
save_model = caffe_root+'examples/MobileNet-SSD/snapshot/MobileNetSSD_deploy_20180713_iter120000.caffemodel'

以上就是我的路径,要修改的主要也就是路径和调用名称
修改demo.py
示例:
caffe_root = '/home/yfs/wss/caffe/examples/MobileNet-SSD/'
net_file= '/home/yfs/wss/caffe/examples/MobileNet-SSD/example/MobileNetSSD_deploy.prototxt' 
caffe_model=caffe_root+'snapshot/MobileNetSSD_deploy_20180713_iter120000.caffemodel'
执行python demo.py  可以正常对images里的图片进行分类和检测
要对视频和摄像头操作则还是要修改demo.py
 

你可能感兴趣的:(MobileNet-SSD训练)