ubuntu下搭建基于caffe框架的SSD检测算法

经过两天的浴血奋战,填补了各种坑啊。。。。。。。。。。。。

通过搭建环境,数据准备,训练过程来详细记录这个填坑的过程,网上的帖子太多,有些“坑”没有躲过掉进去了,自己记录下来和分享给可能用到的同志。

一、环境搭建

       环境ubuntu16.04+cuda9.0+cudnn7.0,安装的项目环境多,用的conda的方式新建自己运行环境,其他相关安装包见下图

主要参考安装博客:https://blog.csdn.net/hhy_csdn/article/details/68936075,(敲黑板)建议安装选用python2.7版本,python3版本在我第一次安装的时候没有选择自己的python版本,多次安装没有成功,有耐心的同学可以研究下why?

       其他安装遇到问题搜一搜都会有很多解决办法,不在这里重复啰嗦。

ubuntu下搭建基于caffe框架的SSD检测算法_第1张图片

二、训练自己的数据,用的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
        注意:直接读入图片的是使用ImageDataLayer ,使用LMDB格式的数据是用DataLayer

 

你可能感兴趣的:(Linux,caffe,计算机视觉)