SPPNet and Fast RCNN 粗略理解

2018-09-27  本文已影响0人  AresAnt

SPPNet

简单说一下 SPPNet 的操作,这个是通过你输入的size 来决定你最后pooling 层的 SizeX,SizeY, 以及它的 StrideX, StrideY。相当于是固定了一个你的 output 的通道,然后将你现有的内容压缩到了一个固定的长度之内。

P.S: 这里画图的大部分内容,其实在于训练全连接层。因为SPPNet的反向传播非常的困难(参考:https://www.zhihu.com/question/66283535),所以我们这边看到的SPP Pooling层之前的卷积参数是使用迁移学习所得到的。

Fast RCNN

简单来说,Fast RCNN 是对于原RCNN 及 SPPNet 进行了组合。首先,在上一篇博客RCNN中提及了,在RCNN训练时候,我们往往开销过大,开销过大的原因在于,我们在计算多个 proposal (即生成多个候选框)之后,我们根据候选框对原图进行了裁剪,这个裁剪使得我们将可能存在物体的区域变成了图片,然后放入网络进行训练。
但是这种方式的缺点就在于,我们对于一张图片会重复计算多次它的抽象特征。这就造成了不必要的开销。所以在Fast RCNN中,我们通过先将原始图进行卷积网络抽取特征,之后我们对 feature map 在进行抽取。这里会出现一个问题,我们在根据 proposal 大小位置,抽取相同区域的 feature map 然后在进行全连接层的非线性计算。在这个过程中,我们传入全连接层的 特征向量必须使得维度相同。

ROI Pooling

根据上述的差不多的描述,我们可以得出 ROI Pooling 层究竟做了什么,简单来总结就是两点:
ROI Pooling 其实比 SPPNet Pooling 要简单很多,简单来说就是在最后卷积出来的 feature map 上进行特征区域选择,选择完毕后,然后直接暴力简单分成 HW 块进行 max pooling.

训练方式

假设这是一个 5个分类(其中一类是北京)的图像识别,那么我最后生成的 Label( 即 Y )的长度就是 5 + 4 * 4 = 21 。 前五即分类信息, 就是我们平常使用的 softmax 来做, 后面 16,就是剩下4个类的 左上角以及右下角坐标信息,每个类有4个 [ X左上, Y左上, X右下, Y右下 ], 如果这个候选框没有出现该类别物体,那么就全部标记为 [ 0, 0, 0, 0 ] . 根据这个预测出来的信息,在分开两边对 FC(全连接层)进行反向传播的参数更新。

参考博客及代码:
【1】https://blog.csdn.net/WoPawn/article/details/52463853
【2】https://github.com/Liu-Yicheng/Fast-RCNN
【3】https://blog.csdn.net/xiaqunfeng123/article/details/78716060
【4】https://blog.csdn.net/auto1993/article/details/78514071
【5】https://blog.csdn.net/u011918382/article/details/79455407
【6】https://blog.csdn.net/sunyao_123/article/details/77628365
【7】https://www.jianshu.com/p/fa9a5929d2e7
【8】https://www.zhihu.com/question/66283535
【9】https://blog.csdn.net/AUTO1993/article/details/78514071 【ROI 层 seesion 选取】

上一篇下一篇

猜你喜欢

热点阅读