Faster-RCNN玩了一段时间了,一直想写一篇文章总结一下,但拖延症一直也没有下笔,今天就写了吧,做个总结。
Faster-RCNN是RCNN系列检测方法中最新的方法了(Yolo除外,因为Yolo走的是另一个路子,有机会再说这个),简单来说Faste-RCNN把Fast-RCNN方法用到的proposal方法也弄到了CNN网络里(rbg大神称此网络为RPN网络),省去了额外的诸如selective search之类的proposal方法,后面的分类直接把RPN网络生成的proposal映射回卷基层生成的feature map得到固定纬的特征,进行分类,这就跟之前Fast-RCNN一样了。唯一不同的是,对同一幅图片的多个疑似目标Faster-RCNN只需要进行一次forward,这样就避免了对同一个图片的多个proposal进行多次forward,这样节省的时间就显而易见了,在TitanX上我的实验结果每张图片差不多170ms-200ms, 这个速度还是比Fast-RCNN快了很多。
具体的内容可以参看论文,这里我介绍一下如何用自己的数据训练Faster-RCNN,至于如何安装我就不赘述了,可以参考rgb的github。
1. 准备数据
在rbg的原版Faster-RCNN里,他是用的Pascal voc 2007的数据集,为了使用rbg的代码,我在这里没有改变自己的数据格式,而是把标注数据整理成和Pascal voc一样的数据格式,简单来说就是新建一个文件夹,可以任意命名,我在这里假设$pascal_format
是我新建的自己放pascal voc格式的数据文件夹。
$pascal_format
下应该有一个叫做VOC2007的文件夹,VOC2007下应该有Annotations、ImageSets和JPEGImages三个文件夹,其中:Annotations是标注数据xml文件,JPEGImages是和Annotations中的xml文件一一对应的图片文件,两个文件除了后缀分别是.xml和.jpg,其他部分应该一样,都应该是六位数字,比如:000001.jpg和000001.xml。ImageSets下有一个Main文件夹,文件夹内有一个trainval.txt文件,里面是训练数据设置,格式如下:
000000
000001
000002
000003
000004
000005
000006
……
一般我们手头的数据不是Pascal voc格式的,Pascal voc数据里面的标注数据是如下的xml文件:
<?xml version="1.0"?>
-<annotation>
<folder>VOC2007</folder>
<filename>013120.jpg</filename>
-<source>
<database>ChongQing Database</database>
<annotation>ChongQing</annotation>
<image>flickr</image>
<flickrid>QiangXie</flickrid>
</source>
-<owner>
<flickrid>QiangXie</flickrid>
<name>QiangXie</name>
</owner>
-<size>
<width>1664</width>
<height>1200</height>