所谓图像检测(目标检测 whatever)就是在一幅图像中,找到我们所希望检测到的东西(可能是多目标),并把它圈出来。
1.1 R-CNN
这个问题的思路有很多,先说最直接的一种:取到图像中所有的框,不同大小,不同位置(遍历),对每一个框进行识别,(对应一种目标)选择若干个极大值点(当然也要大于阈值)对应的框作为这种目标的大小和位置。
当然,一幅图像大大小小的框加起来过于多,靠暴力试错是没有前途的。所以要先得到一些可能是目标的候选区域,方法有比如Selective Search和Edge Boxes什么的,这里暂时不仔细总结。
然后我们就可以把得到的这些候选框框修正一下大小,直接加到设计好的神经网络架构中进行学习了。
不过这个也有一个问题,就是框和框之间会有很多重叠,对应的卷积计算我们就要重复做很多次,大大拖慢了我们的学习效率。那怎么办呢?为了解决这个问题,SPP-Net的概念就被使用了。
1.2 SPP-Net/Fast R-CNN
SPP-Net(空间金字塔池化)本来不是用在这里的,不过在这里使用的spp-net有一个很重要的核心思想,就是输入的时候我们输入整个图像,在最后得到整张图像的feature map。然后我们找到候选框框之后,可以直接在feature map上找到对应的patch,然后我们再用这个方法来把得到的patch中的数据池化成我们需要的统一大小再输出。我们可以很简单的猜测到,这个spp-net(我们成之为ROI pooling)直接放在最后一个卷积层和全连接层之间。(这就是Fast R-CNN)
1.3 RPN/Faster R-CNN
不过显然,找候选框也需要大量的计算,约几秒钟吧,完全没办法实现实时分类的要求。为了解决这个问题,RBG与何恺明设计了新的方法提取候选框框,这种方法就是RPN网络。
这种方法就是让候选框也通过CNN来得到,我们可以看到,候选框的选择也是需要把图像作为输入的。那干脆把图像输入到一个cnn网络中,只是输出的时候分别对两个全连接层(打比方,用卷积层也ok)分别输入,分别得到输出不就ok了吗!(Faster R-CNN)
候选区域生成网络(Region Proposal Network, RPN)工作方式如下:
先通过对输入图像的数层卷积得到一个特征图像,然后在特征图像上生成候选区域。它使用一个n*n(n=3)的滑动窗口,将局部的特征图像转换成一个低维特征, 预测k个的区域(cls层,2k个输出)是否为候选区域和对应的k个边