目标检测算法概述
流行的目标检测算法,从某个角度可以分为两类,即以R-CNN为代表的算法(R-CNN,Fast R-CNN,Faster R-CNN)和Yolo,SSD这类算法。
R-CNN系算法是two-stage的,首先需要一个产生Region Proposal的方法,常见的有:启发式方法(selective search)和CNN网络(RPN),然后对RP进行分类和回归。
Yolo、SSD是one-stage的,它仅仅使用一个网络就可以同时生成所含目标的bbox、位置置信度、所有类别的概率向量
滑动窗口与CNN
采用滑动窗口的目标检测算法思路是:采用不同大小和比例的窗口在整张如片上以一定的步长进行滑动,然后再对每个窗口做图像分类,由此把目标检测问题转化为了分类问题。DPM就是采用这个思路,这个方法有个很大的缺点是由于被检测目标的形状大小位置的变化,我们需要枚举足够多的不同大小比例的窗口,从而产生很多的自区域,在每个自区域做分类的话计算量非常大,这就限制了模型的复杂性不能过高才能保证一定的速度。对此R-CNN的改进策略是采用selective search方法筛选最有可能包含目标的自区域。
用CNN做分类时,用滑动窗口产生自区域是非常耗时的。此时,如果考虑CNN的固有特点——保持图片的空间位置信息不变,我们可以实现更高效的滑动窗口方法。例如,全卷积神经网络,最后的卷积层产生的特征图中每个特征点是和源图中的子区域一一对应的。这样只要根据最后一层来输出与每个特征点相关的检测信息(位置、类别、置信度)就可以实现对源图中对应位置的检测。这个思路被R-CNN算法研究者借鉴,产生了Fast R-CNN算法。
利用CNN的特性虽然可以明显地减少滑动窗口的计算量,但是CNN中超参数确定后,对应得感受域大小,移动的步长也就确定了,这对于目标哦检测来说是远远不够的。Yolo很好地解决了这个问题,它直接将源图分割成互不重合的小方块,通过卷积产生特征图(特征图中每个点对应于源图中的一个小方块),基于这个特征图中的特征点就可以预测那些中心点位于对应小方格内的目标,这就是Yolo算法的朴素设计思想。
细话Yolo
Yolo是一个end-to-end的统一的目标检测解决方案,并且它的训练过程也是end-to-end的