这一节,我们写一写faster-RCNN.
在上一节中,我们看到,fast-rcnn还是需要有个region proposal的生成过程,这个很不OK。尤其是对处女座来说,很不友好。那么faster-rcnn就是为了解决这个问题而存在的。既然CNN那么牛,既然可以用大把的参数来解决问题,为什么还要做乱七八糟的额外处理呢。归根结底还是对神经网络的不了解。不多说,上内容。
第一部分 faster-rcnn原理
先上图,就用原文中的图吧。
相比于fast-rcnn, faster-rcnn最大的特点是去掉了额外的候选区域的生成算法。从输入到输出全部集成到神经网络中,这个就是传说中的RPN。哎呀,看着都舒服,强迫症治愈。
现在我画一张自己的理解图。
第二部分 faster-rcnn关键步骤说明
在第一部分的图2中,我们已经介绍了整个的faster-rcnn.现在对图中几个关键的地方做说明。
(1)为什么是n*5?n是总的ground truth box, 5表示box的位置、尺寸和类别组成的向量的个数。(x,y,w,h,cls)
(2)为什么是38*57*512?表示经过CNN网络之后单幅图像生成的特征图。
(3)为什么是19494*4?在生成anchor box的时候,对38*57图中的每个像素点,均生成9个anchor box,这9个anchor box的构成如下图所示。4表示anchor box的坐标和尺度构成的向量,(x,y,w,h)
(4)2000/300*5是指在train阶段,经过极大值抑制后(去除2000个boxes中那些重合度较高的box),会保留大概2000个boxes,而在测试的时候,大概有300个boxes.每个box包含位置、尺寸和类别信息。
(5)256*5?第四步的boxes经过sample,得到大概256个.(只取一部分。)
(6)256*7*7*512?7*7*512是指经过一系列的变换后,将每个候选区的特征图转为7*7*512大小,而总共有256个box用于预测。
(7)256C,256*4C?256C表示所属的类别,而256*4C表示每个类别的bounding box。
(8)38*57*(9*2),(9*4)?表示经过RPN网络之后,(9*20)表示前景还是背景,(9*4)表示box的坐标和尺寸。再迭代的时候,背景是不参与迭代的,因为没有目标存在。
在图2中还有一个大大的红色的框框,这个框框表示在实际使用的时候的流程。
我想,图2可以很明白的看出faster-rcnn是怎么工作的。只需要结合具体的代码,再理解一下就行。
下一节我们写一写SSD
本文已同步至公众号,方便交流。欢迎订阅。