参考网址:https://blog.csdn.net/qq_27825451/article/details/88843333
针对一张图片,需要获得的输出有:
(1) 边界框(bounding boxes)列表,即一幅图像有多少个候选框(region proposal),比如有2000个;
(2) 每个边界框的类别标签,比如候选框里面是猫?狗?等等
(3) 每个边界框和类别标签的概率
网络的大概过程如下
(1) 首先,输入图片经过预训练CNN模型的处理,得到卷积特征图(conv feature map). 即将CNN作为特征提取器,送入下一个部分。
(2) RPN(Region Propose Network)对提取的卷积特征图进行处理,RPN用于寻找可能包含objects的预定义数量的区域(regions,边界框),每张图给出大概2000个候选框,此处是核心
基于深度学习的目标检测中,可能最难的问题就是生成长度不定(variable-length)的边界框列表,在RPN中,通过采用anchors来解决边界框列表长度不定的问题,即,在原始图像中统一放置固定大小的参考边界框,不同于直接检测objects的位置,这里将问题转化为2部分:
对每一个anchor而言,
anchor 是否包含相关的object?
如何调整anchor以更好的拟合相关的object?
(3)当获得了可能的相关objects和其在原始图像中的对应位置之后,问题就比较直接了,采用CNN提取的特征和包含相关objects的边界框,采用ROI pooling处理,并提取相关obgect的特征,得到一个新的向量。
最后,基于R-CNN模块,得到:
对边界框内的内容进行分类,(或丢弃边界框,采用background作为一个label)
调整边界框坐标,以更好的实用object.
区域推荐网络RPN详解
1. 边框的位置到底用什么表示?
目标检测之所以难,是因为每一个物体的区域大小是不一样的,每一个区域框有着不同的大小size(也称之为scale)和不同的长度比(aspect ratios)
假设我们已经知道图片中有两个objects, 首先想到的是,训练一个网络,输出8个值:两队元组(xmin,ymin,xmax,ymax),(xmin,ymin,xmax,ymax)分别定义了每个object的边界框,这种方法存在一些基本问题,例如,
(1) 当图片的尺寸和长宽比不一致时,良好训练模型来预测,会非常复杂;(这里不是很理解)
(2) 无效预测:预测xmin和xmax时,需要保证xmin<xmax
事实上,有一种更加简单的方法来预测objects的边界框,即,学习相对于参考boxes的偏移量。假设参考box的位置由以下确定:(xcenter,ycenter,width, height),则需要预测量为:(xcenter,ycenter,width, height),它们的取值一般都是很小的值。
RPN的核心概念------anchor
有一些参考文献说Anchor 是大小和尺寸固定的候选框,这种说法有一定道理,但不准确。在回答什么是anchor之前,先看一下RPN网络的一个第一步运算,RPN的第一步运算实际上就是一个3*3*256的卷积运算,我们称3*3为一个滑动窗口(sliding window),假设RPN的输入是13*13*256的特征图,然后使用3*3*256的卷积核进行卷积运算,最后依然会得到一个a*a*256的特征图,这里的a与卷积的步长有关。
在原始论文中,作者选定了3种不同scale,3种不同宽高比(aspect ratios)的矩形框作为“基本候选框”,
三种scale/size是{128,256,512}
三种比例{1:1, 1:2, 2:1}
故而一共是3x3=9种,很明显,这9种基本候选框的长宽远远大于特征图的长宽,所以这9个指的应该是原始图像。
Anchor锚点的本质
应该是特征图的某一个像素与对应在原始图像的某一个像素,即它本质上指的是特征图上当前滑窗的中心在原像素空间的映射点称为anchor,即anchor是在原始图像上的。然后以这个锚点为中心,配上规定的9个基本候选框,这就争取了,所以在原始图像上的图像大致如下
这样子的设计可行吗?
仍然以上面的例子进行说明,假定输出特征图为13*13*256,然后在该特征图上进行3*3*256的卷积,默认进行了边界填充,那么每一个特征图上一共有13*13=169个像素点,由于采用了边界填充,所以在进行3*3卷积的时候,每一个像素点都可以做一次3*3卷积核的中心点,那么整个卷积下来相当于是有169个卷积中心,这169个卷积中心在原始图像上会有169个对应的锚点,然后每个锚点会有9个默认大小的基本候选框,这样相当于原始图像中一共有169*9=1521个候选框,这1521个候选框有9种不同的尺度,中心又到处都分布,所以足以覆盖了整个原始图像上所有的区域,甚至还有大量的重复区域。
RPN的输入与输出----
输入:RPN是接在feature map之后的,因此它的输入时feature map;
输出:我希望得到的是候选区域,因此输出是候选区域,这样说没错,但是在网络中其实流动的都是数据啊,这一个框怎么表示呢?当然也是通过数据的形式来表示了,还有一点就是这个框框里面有目标还是没有目标,这也是通过数据来表示的。
补充
关于特征图和原始图像的映射关系,这里有一点需要补充,假定原始的图像长宽分别是