Region Proposal Networks(RPN)
上面一条线通过softmax分类anchor获得positive和negative分类,下面一条用于计算对于anchors和bounding box的偏移量,以获得精确的proposal,而最后的proposal层则负责综合postive anchors和对应的的bounding box regression偏移量获得proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Prpposal Layer这里,就完成了相当于目标定位的功能。
不得不提的anchor
anchor的字面意思是锚,就是船停靠在岸上固定船的东西,但是在计算机视觉中,anchor的意思是锚点或锚框。
就如上图所示,anchor点的定义是:特征谱在原图上的对应点,以anchor点为中心的9种不同大小和纵横比的矩形框称为anchor框。说的通俗一点,我们现在的目标变成了,我现在有一张特征谱,我在特征谱上的每一个点周围框了几个框,然后我用后面的一个网络(具体就是softmax)告诉我这个特征谱还原回去的原图是不是我要识别的一个物体分类,具体是哪个框和它比较接近,然后有多少的偏差,这就是anchor技术的比较通俗的解释。
以下是引自一位知乎专栏大佬对anchor的理解,在这里我摘抄到这里当作笔记看。链接在文末已经给出。
运行作者demo里的generate_anchors.可以得到以下输出:
其中每行的4个值(x1,y1,x2,y2)表示矩形左上后右下角点坐标。9个矩形共有3种形状,长宽比为{1:1,1:2,2:1}三种,还有三种尺度{128×128,256×256,512×512},当然这里会有疑问,为什么要这样设置,其实Faster R-CNN作者是这样设置的,但是有关长宽比的问题后面会有详细说明。
这个图是和RPN网络一起看的,在RPN网络最开始经历了分开的两层1×1的卷积之后,就可以看作变成了现在的256d的特征向量,VGGnet会得到512d的特征向量,然后用滑动窗口法,依次遍历这256个特征向量,注意anchor不在conv特征图上,而在原图上,什么意思?就是你现在滑动窗口找的只是原图的原点位置,之后原点位置找到之后,以不同尺度不同长宽比做anchor。然后输入到分类层,分类层输出每一个位置上,9个anchor属于前景和背景的概率。窗口回归层输出每一个位置上,9个anchor对应应该平移缩放的参数。对于每一个位置来说,分类层所256维特征中输出属于前景和背景的概率,窗口回归层从256维特征中输出4个平移缩放的参数。
通俗地解释RPN干了一件什么事儿
RPN实际上就是在原图尺度上,设置了密密麻麻的候选Anchor,然后用CNN网络去判断哪些是有目标的positive anchor,哪些是没目标的negative anchor。然后有目标的anchor到底和真实目标的框的偏差是多少。
也就是说,我选出来anchor了,我会和之前输入的图像的有物体的框进行IOU的计算,通过上述规则的(因为可能存在所有计算都没有IOU>0.7情况,所以要有第一个规则)我们将之定义为正标签,也就是前景(物体)类。**第二个规则,与所有GT包围盒的IOU都小于0.3的anchor我们将之定义为负标签,也就是背景类。**对于既不是正标签也不是负标签的anchor,以及跨越图像边界的anchor我们给予舍弃,因为对训练目标没有任何作用。
上文说了,**RPN网络的输出是每个anchor认为自己是否含有物体的概率,物体中心点与anchor自身的中心点位置的偏移量,以及相对于anchor宽高的比例。**就比如上图来说,红色框的anchor认为自己有99%的概率是一只小猫,并且给出了世界位置相对于该anchor的偏移量,这样我们将输出解码后就得到是实际猫的位置,更进一步如果他能通过NMS筛选,那么我们最后总的网络输出就会用这个anchor加修正后的框作为猫的定位框。如果通不过,就是说,有更好的anchor比它更能展示猫,比如红色的框其实并没有将猫的尾巴全部包含进来,那么它就没用了。
在训练的时候,其实需要的anchor的大小和长宽比与待测物体的尺度需要基本一致。如果按上图这样,假设电线杆的长宽比为10:1,但是如果我们还按{1:1,1:2,2:1}这样设置,那么永远找不到正好的框检测出电线杆。因为没有哪个anchor和电线杆的IOU大于0.5。即使某个物体与所有anchor的IoU都不大于0.5的阈值,也会可怜可怜它,给它强行分配一个IoU最大的anchor,即使IoU只有0.3,但是这样,每个物体只能分配一个,而且宽高偏移量还比较大,导致回归不准。
R-CNN,Fast R-CNN,Faster R-CNN的对比
多任务损失
Faster R-CNN的损失函数
参考博客
Faster R-CNN英文论文翻译笔记
https://blog.csdn.net/a8039974/article/details/82898843?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2
yi
一文读懂Faster R-CNN
https://zhuanlan.zhihu.com/p/31426458
目标检测Anchor是什么,怎么科学设置?
https://www.jianshu.com/p/b1a83aa76e5d
Faster R-CNN文章详细解读
https://blog.csdn.net/liuxiaoheng1992/article/details/81843363?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-9.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-9.nonecase
Faster R-CNN论文笔记——FR
https://blog.csdn.net/qq_17448289/article/details/52871461?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase