yolo-v1:




目标检测算法近20年来发展路线图 目标检测算法有哪些_目标检测算法近20年来发展路线图


YOLO 就是使用回归这种做法的典型算法。

首先将图片 Resize 到固定尺寸,然后通过一套卷积神经网络,最后接上 FC 直接输出结果,这就他们整个网络的基本结构。

更具体地做法,是将输入图片划分成一个 SxS 的网格,每个网格负责检测网格里面的物体是啥,并输出 Bbox Info 和 置信度。这里的置信度指的是 该网格内含有什么物体 和 预测这个物体的准确度。

更具体的是如下定义:


目标检测算法近20年来发展路线图 目标检测算法有哪些_目标检测算法近20年来发展路线图_02


我们可以从这个定义得知,当框中没有物体的时候,整个置信度都会变为 0 。

这个想法其实就是一个简单的分而治之想法,将图片卷积后提取的特征图分为 SxS 块,然后利用优秀的分类模型对每一块进行分类,将每个网格处理完使用 NMS (非极大值抑制)的算法去除重叠的框,最后得到我们的结果。

SSD:

YOLO 这样做的确非常快,但是问题就在于这个框有点大,就会变得粗糙——小物体就容易从这个大网中漏出去,因此对小物体的检测效果不好。

所以 SSD 就在 YOLO 的主意上添加了 Faster R-CNN 的 Anchor 概念,并融合不同卷积层的特征做出预测。


目标检测算法近20年来发展路线图 目标检测算法有哪些_目标检测算法近20年来发展路线图_03


我们从上图就可以很明显的看出这是 YOLO 分治网络Faster R-CNN Anchor 的融合,这就大大提高了对小物体的检测。这里作者做实验也提到和 Faster R-CNN 一样的结果,这个 Anchor的数量和形状会对性能造成较大的影响。

除此之外,由于这个 Anchor 是规整形状的,但是有些物体的摆放位置是千奇百怪的,所以没有 数据增强 前的效果比增强后的效果差 7 个百分点。直观点理解,做轻微地角度扭曲让 Anchor背后的神经元“看到”更多的信息。


目标检测算法近20年来发展路线图 目标检测算法有哪些_卷积_04


还有一个重大的进步是结合了不同尺寸大小 Feature Maps 所提取的特征,然后进行预测。这是 FPN 网络提出前的第一次做 Feature Pyramid 的尝试,这个特征图金字塔结合了不同层的信息,从而结合了不同 尺寸大小 的特征信息。

这个尝试就大大地提高了识别的精度,且高分辨率(尺寸大)的 Feature Map 中含有更多小物体的信息,也是因为这个原因 SSD 能够较好的识别小物体。

除此之外,和 YOLO 最大的区别是,SSD 没有接 FC 减少了大量的参数量、提高了速度。

DSSD:

DSSD检测算法的网络结构如下图所示,DSSD也是使用不同阶段不同分辨率的feature maps进行预测,在不考虑Backbone网络结构差别的情况下,可以发现DSSD相比于SSD多了一系列的后续上采样操作,SSD是使用下采样过程中的feature maps进行预测,而DSSD是使用上采样过程中的feature maps进行预测。显而易见的是,SSD用于检测的feature maps位于网络的较低层,表征能力较弱,而DSSD用于检测的feature maps位于网络的较高层,表征能力较强,同时DSSD在反卷积的过程中通过Skip-Connection引入了较低层的feature maps,实现了一定程度的特征融合。所以DSSD的效果要优于SSD检测算法。


目标检测算法近20年来发展路线图 目标检测算法有哪些_数据_05


FSSD:

FSSD检测算法的网络结构如下图所示,同样,FSSD也是使用不同阶段不同分辨率的feature maps进行预测,相比于SSD,FSSD多了一个特征融合处理,将网络较低层的特征引入到网络的较高层,在检测的时候能够同时考虑不同尺度的信息,使得检测更加准确。


目标检测算法近20年来发展路线图 目标检测算法有哪些_数据_06


YOLO9000:

到了 SSD ,回归方法的目标检测应该一统天下了,但是 YOLO 的作者不服气,升级做了一个 YOLO9000 ——号称可以同时识别 9000 类物体的实时监测算法。

讲道理,YOLO9000 更像是 SSD 加了一些 Trick ,而并没有什么本质上的进步:

  • Batch Normalization
  • High resolution classifier 448*448 pretrain
  • Convolution with anchor boxes
  • Dimension clusters
  • Multi-Scale Training every 10 batch {320,…..608}
  • Direct location prediction
  • Fine-Grained Features

加了 BN 层,扩大输入维度,使用了 Anchor,训练的时候数据增强…

所以强是强,但没啥新意,SSD 和 YOLO9000 可以归为一类。

yolo-v3:

yolo-v3主要的改进有:调整了网络结构;利用多尺度特征进行对象检测;对象分类用Logistic取代了softmax。


目标检测算法近20年来发展路线图 目标检测算法有哪些_目标检测算法近20年来发展路线图_07


Yolo_v3使用了darknet-53的前面的52层(没有全连接层),yolo_v3这个网络是一个全卷积网络,大量使用残差的跳层连接,并且为了降低池化带来的梯度负面效果,作者直接摒弃了POOLing,用conv的stride来实现降采样。在这个网络结构中,使用的是步长为2的卷积来进行降采样。

为了加强算法对小目标检测的精确度,YOLO v3中采用类似FPN的upsample和融合做法(最后融合了3个scale,其他两个scale的大小分别是26×26和52×52),在多个scale的feature map上做检测。

作者在3条预测支路采用的也是全卷积的结构,其中最后一个卷积层的卷积核个数是255,是针对COCO数据集的80类:3*(80+4+1)=255,3表示一个grid cell包含3个bounding box,4表示框的4个坐标信息,1表示objectness score。

先验眶在特征图尺寸上的分配:


目标检测算法近20年来发展路线图 目标检测算法有哪些_目标检测_08


//填坑中。。。

参考文献:

SIGAI:目标检测最新进展总结与展望

小绿叶:一文看懂YOLO v3

Dave:基于深度学习的「目标检测」算法综述