您的位置:首页 > Web前端

caffe深度学习【九】目标检测 yolo v1的caffe实现 基于VOC2007数据集

2018-08-08 20:23 941 查看

        YOLO v1算法原文的作者是在darknet框架下实现的, 原文作者的实现    ,这里主要讲的是caffe版本的YOLO实现,主要采用yeahkun写的:点击打开链接  其实只是步骤相对来说有点繁琐,但是要跑通并不困难:

大致步骤包括:

1、编译caffe-yolo 

2、下载VOC2007数据集

3、生成list文件

4、生成LMDB文件

5、训练

6、测试

 

 

下面是每一步的具体操作:

1、编译caffe-yolo

先从github上把 caffe-yolo 的代码下下来,链接在这里    

重新编译caffe,有同学会觉得,自己明明已经配好了caffe,为什么meic每次跑其他网络或算法时都要重新编译呢?

原因:这些新网络或算法的作者自己新定义了一些内容,比如新的layer,所以需要重新将这些源文件编译一下,否则就不能使用这个新的算法。

下载下来的文件名叫 caffe-yolo-master

首先把 caffe-yolo-master 目录下的 Makefile.config.example 复制一份并改名为 Makefile.config

(这一步跟之前配置普通版本的caffe是一模一样的,相信配过caffe的都很熟悉)

在命令行输入:

[code]cd caffe-yolo-master
cp Makefile.config.example Makefile.config

 

然后修改 Makefile.config 文件,把里面的这两行:

[code]INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

替换成下面这两行:

[code]INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/

 

然后在终端输入:

[code]make clean
make all
make pycaffe

3步分开输入,不要同时输入,就会完成caffe的编译,如果有错误,可以参考我之前的博客进行解决,关于caffe编译出现的各种坑。

 

 

2、下载VOC2007数据集

当前是在caffe-yolo-master 目录下,先cd进入到/data/yolo目录下:

[code]cd ./data/yolo

然后从github上下载VOC2007的数据集:

终端输入:

[code]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
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

 

 

下载好的数据集如下:

 

 

3、生成list文件

在 /data/yolo 目录下有一个 get_list.py 的文件,通过它可以生成包含所有图片的标签的list

本案例只用到VOC2007,所以对 get_list.py 的  for name in ["VOC2007", "VOC2012"]:

删除   "VOC2012"

只留下  "VOC2007"

如下图:

原来:

变成:

 

 

然后到代码的最后面,因此这里不需要生成2012的test的list,所以如图所示,把这一段都注释掉:

 

保存退出

执行:

[code]python get_list.py

就会在/data/yolo/目录下生成两个list:

trainval.txt是训练和验证集

test_2007是测试集

 

 

4、生成LMDB文件

同样是在 /data/yolo 目录下有一个 convert.sh 的文件,通过它可以生成包含数据的lmdb文件格式。

这里有很多路径需要修改

没修改之前的文件如下:

 

ROOT_DIR改成你的VOC图片的根目录,比如我的图片路径是 /home/lincanran/caffe-yolo-master/data/yolo,那么这个地方就是:

[code]ROOT_DIR=/home/lincanran/caffe-yolo-master/data/yolo/

LMDB_DIR生成的lmdb想要存放的地方lmdb这个文件夹需要我们提前先创建好,不然运行会报错。

下面分2步进行:

(1)生成训练验证集的lmdb

生成训练验证集时,就不用改

直接运行:(要在/data/yolo 目录下)

[code]sh convert.sh

会生成:

(2)生成测试集的lmdb

将原来的训练验证集部分注释掉,取消注释下面测试集的部分

也就是原来的:

[code]# 2007 + 2012 trainval
LIST_FILE=$CAFFE_ROOT/data/yolo/trainval.txt
LMDB_DIR=./lmdb/trainval_lmdb
SHUFFLE=true

# 2007 test
# LIST_FILE=$CAFFE_ROOT/data/yolo/test_2007.txt
# LMDB_DIR=./lmdb/test2007_lmdb
# SHUFFLE=false

现在改成:

[code]# 2007 + 2012 trainval
#LIST_FILE=$CAFFE_ROOT/data/yolo/trainval.txt
#LMDB_DIR=./lmdb/trainval_lmdb
#SHUFFLE=true

# 2007 test
LIST_FILE=$CAFFE_ROOT/data/yolo/test_2007.txt
LMDB_DIR=./lmdb/test2007_lmdb
SHUFFLE=false

改完之后,同样直接运行:

[code]sh convert.sh

会生成:

 

 

 

5、训练

首先我们用别人预训练好的GoogLeNet模型,从链接:点击打开链接  处下载,点击readme.md里面的那个caffemodel_url的链接进行下载,名字是bvlc_googlenet.caffemodel

 

caffe-yolo 的prototxt文件都放在了/examples/yolo目录下

先进入到该目录:

[code]cd home/yourpath/caffe-yolo-master/examples/yolo

 

主要是要修改下面3个文件:

修改其中的solver的路径、网络结构的路径,lmdb数据存放的路径等等

 

(1)gnet_train.prototxt

这里路径改成刚刚第4步生成的2个lmdb的路径

batch_size根据你自己的实际情况去修改

 

(2)gnet_solver.prototxt

这里基本不用怎么修改

max_iter是要迭代的最大次数

snapshot_prefix是训练好的caffemodel保存的地址,你需要先创建好文件夹

solver_mode是指定GPU或者CPU训练

 

(3)train.sh

1是填写你的solver.prototxt文件,即上面(2)gnet_solver.prototxt

2是初始化参数权重,因为我们用预训练好的模型,所以这里填 ./bvlc_googlenet.caffemodel

3是已经编译好的caffe-yolo-master目录下的caffe可执行文件的地址(注意:不要用你自己之前安装的caffe,要用刚刚第一步编译好的caffe-yolo版本)

4是指定训练使用的GPU,这里我用了2,3两块

保存退出

 

全部修改完成后,

在终端运行:

[code]sh train.sh

训练开始,如下图所示:

 

6、测试

测试和平时的caffe差不多,直接sh test.sh就行,但需要先修改好 test.shgnet_test.prototxt 这两个文件里的路径。

(1)gnet_test.prototxt

这里路径改成刚刚第4步生成的测试集的lmdb的路径

batch_size根据需要去修改

(2)test.sh

PROTO是上面的(1)gnet_test.prototxt

MODEL是第5步训练得到的caffemodel模型(注意,这里是用VOC训练集训练得到的caffemodel,不要用下载的bvlc_googlenet.caffemodel,下载的这个只是预训练用的而已)

ITER是测试迭代的次数,和(1)gnet_test.prototxt中的batch_size相乘,就是总测试集图片的数量

GPU_ID是指定测试时所用的GPU

 

下面记得要换成 test_detection,而不是训练时候的train了

其他都差不多

 

全部修改完成后,

在终端运行:

[code]sh test.sh

测试开始!!

整个基于VOC2007数据集的yolo v1的caffe实现就基本完成了! 

 

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: