经过两天的浴血奋战,填补了各种坑啊。。。。。。。。。。。。
通过搭建环境,数据准备,训练过程来详细记录这个填坑的过程,网上的帖子太多,有些“坑”没有躲过掉进去了,自己记录下来和分享给可能用到的同志。
一、环境搭建
环境ubuntu16.04+cuda9.0+cudnn7.0,安装的项目环境多,用的conda的方式新建自己运行环境,其他相关安装包见下图
主要参考安装博客:
https://blog.csdn.net/hhy_csdn/article/details/68936075
,
(敲黑板)
建议安装选用python2.7版本,python3版本在我第一次安装的时候没有选择自己的python版本,多次安装没有成功,有耐心的同学可以研究下why?
其他安装遇到问题搜一搜都会有很多解决办法,不在这里重复啰嗦。
二、训练自己的数据,用的yolomark工具标记的转换为VOC2007数据格式
这个过程也是用了不同的办法,有些能生成xml格式数据,但是训练的时候又解析不了,这个可以参看这篇博客:
https://blog.csdn.net/lancevivi/article/details/79928671
,亲自实验了,修改了一点点小地方,成功了哦。
三、训练,测试
前面两个步骤弄完了,这一步就简单的多,只要修改一下caffe/examples/ssd/ssd_pascal.py这个文件,最好cp一份,在新的新的上面随便修改就行。训练,测试都有很多参考文章。
训练过程中遇到的问题:
1、
I0923 16:36:38.477416 31289 blocking_queue.cpp:50]
Data layer prefetch queue empty
解决办法:SSD训练慢的原因是 在生成LMDB文件时没有将图片转化为300*300分辨率大小 所以在训练网络时需要转换图片分辨率 这样就造成了数据输入层预存队列为空 GPU一直在等待数据中 所以造成了训练异常缓慢。(图片resize是在CPU上运行的,CPU数据读入慢于GPU计算,导致GPU处于空闲,使得计算速度下降,迭代时间间隔扩大。)
找到文件 /data/VOC0712/create_data.sh ,将width=0改为width=300,将height=0改为height=300.
cur_dir=$(cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
root_dir=$cur_dir/../..
cd $root_dir
redo=1
data_root_dir=”$HOME/data/VOCdevkit”
dataset_name=”VOC0712″
mapfile=”$root_dir/data/$dataset_name/labelmap_voc.prototxt”
anno_type=”detection”
db=”lmdb”
min_dim=0
max_dim=0
width=300 # 0
height=300 # 0
extra_cmd=”–encode-type=jpg –encoded”
if [ $redo ]
then
extra_cmd=”$extra_cmd –redo”
fi
for subset in test trainval
do
python $root_dir/scripts/create_annoset.py –anno-type=$anno_type –label-map-file=$mapfile –min-dim=$min_dim –max-dim=$max_dim –resize-width=$width –resize-height=$height –check-label $extra_cmd $data_root_dir $root_dir/data/$dataset_name/$subset.txt $data_root_dir/$dataset_name/$db/$dataset_name”_”$subset”_”$db examples/$dataset_name
done
注意:直接读入图片的是使用Image
DataLayer
,使用LMDB格式的数据是用
DataLayer
。