TF-Faster-RCNN训练篇(基础版)结合自己训练的修改过程而撰写

这里,我就主要记录一下自己在跑tensorflow框架下的faster-rcnn。

首先,就是硬件要求,这里只能做到使用一块GPU。

具体环境要求:

        1.Ubuntu  16.04系统、CUDA 8.0和cudnn(可以支持NVIDIA的GPU运算,当然有很多人在说这个环境,可以再参考其他相关文章)

        2.python版本opencv和gpu版本的tensorflow,自己的python版本是2.7的, 所以自己就找了2.7版本的opencv和tensorflow(必须是gpu版,因为我们要使用gpu)。

一、数据集准备

我们在做目标识别时,大家都知道要有训练集、验证集以及测试集,当然数据集格式也有很多种,我们这里使用的是pascal_voc数据格式。如下图是voc2007数据集文件夹格式


JPEGImages--------用来保存你的数据图片,当然,对于faster-rcnn来讲,所有的图片必须是jpg/jpeg格式,其他格式的话要转换一下。另外,一定要对图片进行编号,一般按照voc数据集格式,采用六位数字编码,如000001.jpg、000002.jpg等。
Annotations----------这里是存放你对所有数据图片做的标注,每张照片的标注信息必须是xml格式。
lmageSets-----------该文件下有一个main文件,main文件下有四个txt文件,分别是train.txt、test.txt、trainval.txt、val.txt,里面都是存放的图片号码,当然,我们现在只关注训练,所以要将所有用做训练的图片号码放入train.txt中,一行一个编号。

这里需要说明一下,如果想训练一个比较好的模型,数据集的量一定要大,自己之前使用了一个1000多张的训练数据集,经过自己验证,无法训练出来一个好的分类器模型。当然,大家想自己制作数据集,并且做标注,这也是一个十分大的工程,具体如何做标注,大家可以参考其他博客。
当然,大家只需要修改voc2007数据集中的这三个文件即可,这样就可以避免一些更繁琐的步骤。

二、程序和环境编译

我的建议是大家在运行前,先理解faster-rcnn结构,然后去看它的python版本和matlab版本代码,最后在下载Faster-RCNN-TF的程序,这样会让我们在修改的时候节省很多时间,同时,也让自己的思路清晰。对于faster-rcnn-tf的程序,最主要的文件夹如下图:


data-----------------这里是用来存放你的数据图片的

experiments------这个文件夹决定了你要采用什么样的方式去训练你的数据,大家都知道,faster-rcnn提供了两种训练方式:

                               1.交替训练(alt_opt)

                               2.近似联合训练(end-to-end)

                               这里我们就使用的是第二种,因为它速度更快,同时也能保证准确率,但是两者修改代码是不一样的。

lib--------------------存放python的接口文件,如需要数据读入等。

tools-----------------存放的是训练、测试等python文件,这里是我们的重点。

output是用来存放自己训练好的模型的,所以在未训练前,里面是空的。我建议大家要仔细阅读README.md文件,可以很好的帮助我们运行程序。

我们现在已经有程序代码了,然后我们现在先建立Cython环境

进入终端,我们找到Faster-rcnn-TF的文件夹


点击回车,如果大家之前的软件环境都有的话,这一步会完成编译。

之后,我们需要下载一个已经训练好的模型,用来测试它的demo.py(也就是例程),这里直接用它README.md中给的网站下载就可以了,然后把模型放在tools/model(新建model文件夹)文件夹中就可以,方便我们调用。另外,这个程序是基于voc2007数据集训练的,所以它训练的是21类,测试例程的模型也是区分21类物体的。


这里,对于model模型存放的位置,大家根据自己修改,另外,对于tensorflow版本的模型来讲,它由三个文件(后缀名为data-00000-of-00001、index、meta)组成,所以大家只需要写到ckpt即可。这里我使用的是自己训练好的一个模型,所以大家凑合看即可。如果demo.py运行顺利,我们就可以训练自己的数据模型了。


三、训练

1.替换数据。大家应该提前下好voc数据集,并保存在data/VOCdevkit2007下,那么替换数据就是将自己训练集的Annotations、lmageSets和JPEGlmages文件和原文件替换即可。大家替换数据后,一定要将data/cache中的pkl文件删除,不然不会获得修改后的数据。

2.修改代码
      我们采用的是VGG16的网络以及近似联合训练,所以修改也依据此。
(1)lib/datatsets/pascal_voc.py
2 . lib/datasets/imdb.py  (第22行0改为5)
3. lib/networks/VGGnet_train.py  (第7行)

同理,VGGnet_test.py修改同上()

4. 为了大家测试demo.py的方便,所以大家也把tools/demo.py中的类别改成自己的类别

(5)修改迭代次数等参数

这里大家根据自己的计算,选择合适的迭代次数以及学习率等, 个人认为,初试学习率0.001,如果不收敛再减小一个量级,另外,70000次在gpu(看自己的gpu性能,我的是1080)上跑,也只是需要半天多的时间,所以还是可以接受的迭代次数,至于选择多少迭代次数合适,可以根据不同次数训练好的模型,测试验证。

首先在experiments/scripts/faster_rcnn_end2end.sh文件中修改迭代次数:
在ITERS中修改成自己想要的参数
然后,我们进入lib/fast_rcnn/config.py,对config.py进行修改:

其中,第一项,就是学习率,STEPSIZE就是你对训练步长的修改,这里一定要小于等于前面训练文件的ITERS参数。其他大家可以选择保持一致,对于动量和伽马参数不用修改,当然,对于训练每隔多少次显示,大家根据自己情况修改,这里是10次一显示。
除此,我们可以修改batch的大小,
第一个参数是每次输入faster-rcnn网络中图片数量,第二个参数就是训练batch的大小。

还有关于模型保存问题:

这里,第一个参数是训练时,每迭代多少次保存一次模型;第二个参数是保存时模型的名字。
另外,大家要在训练的时候,可以将rpn检测目标设置为True,这个根据自己情况了

大家需要注意一点,就是修改py文件前,大家把它对应的pyc文件删掉,修改后再重新编译一下。上面的步骤都需要重新编译一下。

(6)接下来就可以输入训练命令了
进入你的Faster-rcnn文件夹,然后直接输入
     ./experiments/scripts/faster_rcnn_end2end.sh gpu 0  VGG16  pascal_voc
这里的%DEVICE 是你使用cpu还是gpu,当然,我是使用的gpu。%DEVICE_ID是你输入gpu的编号。
另外,可能会遇到文件夹权限低的问题,这里我有个提升文件夹权限的操作。
进入root权限,然后输入提升文件夹权限的命令

这样的话,你就可以使用训练命令了,当然,大家如果想了解这个指令的解释,可以直接去百度查。
大家需要注意一点,就是修改py文件前,大家把它对应的pyc文件删掉,修改后再重新编译一下。上面的步骤都需要重新编译一下。
  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值