四、YOLO-V1原理与实现(you only look once)

可以看成图像分类与定位的结合,给定一张图片,目标检测系统要能够识别出图片的目标并给出其位置,由于图片中目标数是不定的,且要给出目标的精确位置,目标检测相比分类任务更复杂。目标检测的一个实际应用场景就是无人驾驶。

目标检测算法可以分为两类:

一类是基于region proposal的R-CNN系列算法(R-CNN,Fast R-CNN, Faster R-CNN),它们是two-stage的。要先使用启发式方法(selective search)或者CNN网络(RPN)产生region proposal,然后再在region proposal上做分类与回归。精确度高,速度低。

另一类是YOLO,SSD这类one-stage算法,仅仅使用一个CNN网络直接预测不同目标的类别与位置。精确度低,速度快。

YOLO-V1

滑动窗口与CNN

采用滑动窗口的目标检测算法思路很简单,将检测问题转化为了图像分类问题。原理是采用不同大小和比例(宽高比)的窗口在整张图片上按照一定步长进行华东,然后对这些窗口对应的区域做图像分类,这样就可以实现对整张图片的检测。缺点是不知道要检测的目标大小,所以要设置不同大小和比例的窗口去滑动,还要采取合适的步长,这样会产生很多的子区域,并且都要经过分类器去做预测,这需要很大的计算量,所以你的分类器不能太复杂,因为要保证速度。解决思路之一就是减少要分类的子区域,这就是R-CNN的一个改进策略,其采用了selective search方法来找到最有可能包含目标的子区域(Region Proposal),其实可以看成采用启发式方法过滤掉很多子区域,这会提升效率。

如果用的是CNN分类器,滑动窗口非常耗时,使用全卷积方法,将网络中的卷积层代替全连接层。例如输入16x16图像经过一系列卷积操作得到2x2特征图,这个图上的每个元素与原图是一一对应的,相当于卷积核14x14,步长为2的卷积,产生4个字区域,输出通道数4,可看成4个类别的预测概率值,这样一次CNN计算就可以实现窗口滑动的所有子区域的分类预测,这就是overfeat算法的思路。这是因为卷积操作图片的空间位置信息的不变性,位置对应关系保存好了。这个思路也被R-CNN借鉴,诞生了Fast R-CNN。

尽管上面可以减少滑动窗口的计算量,但只是针对一个固定大小与步长的窗口,远远不够。YOLO算法很好的解决了这个问题,不再是窗口滑动,而是直接将原始图片分割成互补重合的小方块,然后通过卷积最后产生这样大小的特征图,特征图的每个元素也是对应原始图片的小方块,然后利用每个元素来预测那些中心点在该小方格内的目标。

设计理念

猜你喜欢

转载自www.cnblogs.com/pacino12134/p/10351017.html