最近在看图像分割方面的东西,发现MaskRCNN里面有好多东西不是很理解,于是就打算简单梳理一下。找了很多博客,还有视频。这里简单记录一下。
RCNN
RCNN的英文是 Region based CNN或者说Region with CNN feature,也就是基于(候选)区域的卷积。RCNN可以说是利用深度学习进行目标检测的里程碑。
- 候选区域的生成:Selective Search,比如对图像简单分割处理后,对某些可能是物体的区域生成一些候选框。
- 对每个候选区利用深度卷积网络提取特征,例如:
- 特征送入每一类SVM分类器,判断类别(这里20是20类)
IOU和NMS
IOU就是:两个框的相交部分面积/相并部分面积。
**NMS简单说:**就是有两个候选框,预测概率得分都很高,但是两个框的iou超过了我设定的阈值,那么我认为这两个框表示的是同一个对象,我们将那个预测得分低的那一个舍去不要。
4. 回归修正bbox这部分,放在下面的Fast RCNN里面介绍吧!
缺点:
- 慢
- 计算开销、存储开销大。
FastRCNN
注意,FastRCNN与RCNN的不同之处:
- RCNN是分别将候选区域的图像块送入特征提取网络,得到特征矩阵。FastRCNN是先用特征提取网络对整张图像提取特征,然后由候选框到特征图上的投影区域获取到相应特征矩阵。
- ROI Pooling
ROI Pooling层的作用:将所有用于训练的候选框对应特征图通过pool全部采样到7×7大小。这样好处是不需要考虑输入图像大小。 - 分类器也直接换成了全连接层
边界框回归
简单理解就是,网络学习的目标是学习参数dxdydwdh。(因为我们知道,神经网络有拟合任意函数的能力,更别说这样简单的函数参数的学习了)。使得预测框进行平移缩放,更加接近ground truth。
FaterRCNN
简单讲就是说将候选框的生成通过一个RPN网络来实现,而不是SS算法。其他的几乎和Fast RCNN一样了。
RPN
RPN网络是从区域中提出Proposal的网络。如上图,其结构:conv feature map就是通过backbone提取特征得到的特征图。因为每个特征图上一点其实是与原图有一个偏移量的,或者说是可以对应原图上一个像素点的。这个是通过步长来计算的。比如特征图中的(3,3)点,如果之前的步长和为2,那么对应原图上就是(6,6),这个公式呢其实是原图大小除特征图大小取整。但是实际上等同于从原图到特征图之间的卷积步长和stride_sum。在原图上,以这个对应的像素点为中心再以设定的比例(不同size,不同宽高比例)生成k个緢框(其实这里就不是网络自动生成的了,是通过调用自己写的一个函数)。这样的话,如果特征图大小为60*54,k为9,那么一个特征图在原图上对应的緢框个数就近20000多个。几乎涵盖了所有目标。对于每个緢框,我们要去得到它的前景 /背景分类概率,对应图中的cls layer输出2 k。以及边框回归的四个参数dxdydwdh,对应图中reg layer 4k,也就是前面FastRCNN中提到的那样。这里从conv feature map 到这两个结果,首先是3x3卷积,然后分别经过了带有1×1卷积的支路(当然,对于分类layer中间还有softmax层或者sigmod层)。这么多框,其实有很多是冗余的,这里再经过一些过滤,如NMS,超过图片边界的舍去等等操作,经过边框回归参数的调整等等。最终得到Proposal结果。接下来就是FastRCNN的操作了!
MaskRCNN
maskrcnn其实就是多了一个mask分割的分支,从候选框对应的特征图上接上FCN分割网络结构。以候选框的分类结果作为目标的实例类别。具体在实例分割经典:Mask-RCNN及pytorch代码这里总结了一下。
总结
RCNN系列非常经典,其思想一下子还不容易消化,得多品味。
对了:以上很多内容都是在B站up主霹雳吧啦Wz学习来的!是对这个系列总结非常棒的!!!