深度学习目标检测——faster R-CNN 原理理解(自己绘制流程图帮助理解)

版权声明:原创博客未经允许请勿转载! https://blog.csdn.net/holmes_MX/article/details/83378770

0. 写作目的

好记性不如烂笔头。

1. 框架的理解

faster R-CNN = RPN + fast R-CNN

1.1 RPN的理解

网络的组成: (这里只是给出一个网络的整体流程,可能与faster R-CNN论文的参数不同)

注意: 上图可能与论文中的图不同,论文中的图是这样的。论文也给出了解释,理解上——对于每一个sliding window 通过3 * 3的卷积输出512(VGG16)或者256(ZF-Net)的特征,然后将这个特征分别映射到分类(2 * k,k为anchor数目)和坐标(4 * k)。不过由于是共用参数,所以可以写成上面的图中的形式。

特征提取:   VGG16 或者 ResNet101进行特征的提取。以VGG16为例,只采用了4个max pooling层,即下采样16倍,得到第五次max pooling 之前的feature map(512个channel)。

降维: 添加一个3 * 3 的conv层降低feature map的维度, 对于ZF-Net降维256channel,对于VGG16变成512channel(这里有些不解,在VGG16论文中,VGG16本来最后一层就是512channel,可能作者进行实验时将最后一层的维度设为了1024)。

分类和框: 使用1 * 1的卷积得到最后的结果。 faster R-CNN 中给出了9个anchor(3个尺度,3个长宽比),对于分类使用one-hot进行编码,共2类(目标类和背景类),对于框,4个坐标,因此最后一层的输出channel为: (2 + 4)* 9 = 54。

loss: 对于分类的loss,采用的是二进制交叉熵,回归的loss是smooth L1 loss。然后将两个loss相加。

train: IOU > 0.7时,为正样本,IOU < 0.3为负样本。batch size为256, 尽量保持正负样本均衡。

          测试时,采用NMS去除, 然后保留前2000个proposal。

1.2 ROI pooling 的理解

图像说明[2].

对于每一个得到的proposal (在feature map(VGG16的输出feature map) ),即在38 * 56 * 512的feature map上,首先依据RPN预测的proposal大小在原图上的大小,然后进行量化,以上图为例,将665 / 32 = 20.78(此处进行的是5层pooling 层的网络,与上文4层不同,这里只是给出了一个例子,明白原理即可),然后找到feature map上对应的 proposal 的尺寸,由于后面需要得到7 * 7的尺寸,因此这里需要进行的量化是 20 / 7 = 2.86,即为2 的量化,即ROI pooling的量化,让我们详细看看ROI pooling[3]是如何进行的。上图中直接对proposal的feature map上2 * 2的尺寸上找到最大值,作为ROI pooling后的值。

此处由于ROI pooling可能存在两次量化,导致回归的框不精确,因此在后继的Mask-RCNN中采用ROI-Align来代替它。这里不详细介绍了。

对于每一个通道得到7 * 7的特征,对于512个channel,则得到 7 * 7 * 512个。

(这里看到另一个做法是,将得到的proposal先resize到14 * 14,然后统一采用2 * 2步长为2的max pooling进行操作。这样可以避免出现小于 7 的size存在时,存在的问题)。

1.3 Faster R-CNN的理解

将ROI pooling 得到的feature map进行reshape,然后连接两层4096的全连接层,最后在输出每一类和最终回归的框。

下图中,最终的类别输出和回归输出应该为: N+1 和 4N, 其中N为类别数目[8](论文中给出了具体的输出说明,参考[1]中给出的存在问题)。

训练: IOU > 0.5的是正样本,与RPN不同的是  0.1<IOU < 0.5的是负样本。原因是因为此时是精调。

           正负样本采用1 : 3(一个batch 64中)。

loss: 分类采用的是多目标交叉熵, 位置回归时 smooth l1 loss。

 

 

There may be some mistakes in this blog. So, any suggestions and comments are welcome!

 

[Reference]

[1] understand faster R-CNN bolg: https://towardsdatascience.com/fasterrcnn-explained-part-1-with-code-599c16568cff

[2] ROI pool中图像的来源: https://www.youtube.com/watch?v=XGi-Mz3do2s

[3] ROI pooling 的参考: https://deepsense.ai/region-of-interest-pooling-explained/

[4] faster R-CNN 学习视频:https://ardianumam.wordpress.com/2017/12/16/understanding-faster-r-cnn-for-object-detection/

[5] faster R-CNN 理解:https://towardsdatascience.com/deep-learning-for-object-detection-a-comprehensive-review-73930816d8d9

[6] faster R-CNN 理解:https://medium.com/@smallfishbigsea/faster-r-cnn-explained-864d4fb7e3f8

[7] 比较好的faster R-CNN 理解:https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/

[8] fast R-CNN的 paper:  https://arxiv.org/abs/1504.08083

 

 

猜你喜欢

转载自blog.csdn.net/holmes_MX/article/details/83378770