目标探测:r-cnn, fast-rcnn, faster-rcnn, yolo, mask-rcnn

目标探测:r-cnn, fast-rcnn, faster-rcnn, yolo, mask-rcnn

作者:尼箍纳斯凯奇
链接: https://www.zhihu.com/question/57403701/answer/153447728 
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

第一篇r-cnn是rcnn是ross girshick在UCB Darrell组的时候的工作,这篇论文主要是先selective search去选出若干proposals,然后resize到同一个scale放入alexnet类似的网络抽特征,加k个svm或者softmax得到分类结果。然后测试阶段走个非极大值抑制的算法去得到结果。整个网络是最初始化的rcnn,很多人都觉得思路很简单,不过在那个时候算是最开始利用CNN做detection的一批。

selective search:在目标检测时,为了定位到目标的具体位置,通常会把图像分成许多子块(sub-regions / patches),然后把子块作为输入,送到目标识别的模型中。分子块的最直接方法叫滑动窗口法(sliding window approach)。滑动窗口的方法就是按照子块的大小在整幅图像上穷举所有子图像块。这种方法产生的数据量想想都头大。和滑动窗口法相对的是另外一类基于区域(region proposal)的方法。selective search就是其中之一!参考这篇:https://blog.csdn.net/guoyunfei20/article/details/78723646

非极大值抑制:感觉可以理解为同一个物体可能检测出多个框,故将这些框排序,选出得分最高的框。参考这篇:https://blog.csdn.net/shuzfan/article/details/52711706

第二篇fast-rcnn RBG去了MSR,然后单手撸了一篇改进版fast rcnn。看看paper作者那栏,一个人孤单寂寞的编曲。。。还是基于ss得到的proposals,这篇论文重点在roipool那部分,怎么做呢?参考论文2.1求得sub-windows大小之后,划分为7*7的grid。这样无论你的RoI的scale多大,都可以map到同一个size。这样你可以把之前2000次前向,缩减到只有一次前向就可以得到若干个roi部分的特征,然后跟两个sibling layers,一个做分类,一个回归bb。这样测试阶段比第一篇节省了很多很多时间。

roipool(ROI pooling):一种pooling方式,输入特征图尺寸不固定,输出特征图尺寸固定

第三篇faster-rcnn论文Ross开始和MSRA的学者合作了,shaoqing、kaiming、jian sun等。终于不再孤单的编曲。。。这篇论文基于fast rcnn干了这么一个事情,把selective search那种很傻很笨的办法用RPN的网络取代了。然后这个RPN网络可以直接在一个完整的网络中给ROIpool那块提供proposal的信息。训练过程中,RPN的region proposal的task和object detection的task部分实际上是交替训练的。另外看论文图三那个最重要的图示,他在top的conv feature maps那里接一个3*3的sliding windows。这部分本身receptive fields比较大嘛~然后作者在这里加了9种anchors的变化,对应图一c中的multi scale。这样之后再sibling layers然后做是不是object的score和坐标回归。整个思路就是加了这些。

RPN网络:区域推荐网络。主要解决从一张图片中获取proposal。见这篇https://blog.csdn.net/wfei101/article/details/77150573

第四篇mask-rcnn论文,也就是知乎提问的mask rcnn。此时此刻,RBG去了FAIR,而kaiming又和RBG重逢了,满满的基情就是你在哪,我的paper就跟你一起挂在哪。实际上本篇就在第三篇faster rcnn基础上加了roialign部分【这一部分实际上是对roipool的改进】,以及加了一个segmentation的branch。为什么roipool不好呢?因为在你roi缩到7*7的过程中,如果你roi刚好是8*7的大小,那么你按w/W,h/H取整缩小是不是漏了几个pixel,这几个pixel对应的receptive field确是很大的,带来所谓的misalignment。那么怎么办?好,借鉴STN论文里面的双线性插值,我把8*7的大小扩大到14*14,然后再做聚合,到7*7的大小。这样就充分利用了那个被忽略了的部分。(这部分细节上可能我理解不对,具体要等ross源码公布了再能确定,如有错误,希望指出)。然后看论文图三,就可以分出一个branch给segmentation的部分,这部分deconv做到28*28之后,直接resize到roi的大小,然后参考第三页左下角,用per-pixel sigmoid和binary loss的方式优化。

roialign:roipooling中的最近邻插值改为双线性插值后得到的pooling方式

双线性插值:即对f(x,y)二元函数的x和y两个方向上进行线性插值,是图片放缩中的常用技术,同样的图片放缩技术还有双三次插值等。 

原文地址:https://www.cnblogs.com/zealousness/p/8757652.html