一、编译caffe-ssd
关于如何编译caffe-ssd,可以参考我的上一篇文章《MobileNetv2-SSDlite训练自己的数据集(一)——配置安装caffe-ssd》
二、下载MobileNetv2-SSDlite代码
你可以在github上下载chuanqi305的MobileNetv2-SSDlite代码
git clone https://github.com/chuanqi305/MobileNetv2-SSDLite.git
三、将你的数据集转换为VOC数据集格式
MSSD代码提供了使用VOC数据集训练的方法。如果你要使用自己的数据集训练MSSD,那么你需要先把数据集转换为VOC数据集格式
由于这一部分是由我的队友负责,在这里我就不详细说明了
需要特别注意的是,xml文件中bndbox参数必须为整数。否则,虽然制作lmdb时不会报错,但是训练时会发现loss一直是0,无法训练
四、制作lmdb
caffe-ssd提供了通过VOC数据集制作lmdb的方法
首先,移动到对应目录
cd ~/caffe/data/VOC0712
修改labelmap_voc.prototxt
这个文件由若干个一下模块构成
item {
name: "none_of_the_above"
label: 0
display_name: "background"
}
保持第0项背景类不变,把下面的模块依次改为你的数据集中需要检测的类别,并删除多余的项
如果你的数据集要检测10类物体,那么你的labelmap_voc.prototxt中需要有11个item模块,包括一个背景类和十个物体类,label从0到10
修改creat_list.sh和creat_data.sh
将里面的root_dir改为你的VOC数据集位置,并确保你的数据集已经被重命名为VOC2007
例如,我的数据集地址为/home/bmelab/data/VOCdevkit/VOC2007
那么我的root_dir就是$HOME/data/VOCdevkit/
如果没有VOC2012目录,运行creat_list.sh时会提示
cp: 无法获取'/home/bmelab/data/VOCdevkit//VOC2012/ImageSets/Main/trainval.txt' 的文件状态(stat): 没有那个文件或目录
sed: 无法读取 /home/bmelab/caffe/data/VOC0712/trainval_img.txt: 没有那个文件或目录
sed: 无法读取 /home/bmelab/caffe/data/VOC0712/trainval_img.txt: 没有那个文件或目录
cp: 无法获取'/home/bmelab/data/VOCdevkit//VOC2012/ImageSets/Main/trainval.txt' 的文件状态(stat): 没有那个文件或目录
sed: 无法读取 /home/bmelab/caffe/data/VOC0712/trainval_label.txt: 没有那个文件或目录
sed: 无法读取 /home/bmelab/caffe/data/VOC0712/trainval_label.txt: 没有那个文件或目录
paste: /home/bmelab/caffe/data/VOC0712/trainval_img.txt: 没有那个文件或目录
不过并不影响后面的操作,可以忽略
运行creat_list.sh和creat_data.sh
现在你的V