一、YOLO VS faster R-CNN
- 针对于two-stage目标检测算法普遍存在的运算速度慢的缺点,yolo创造性的提出了one-stage。也就是将物体分类和物体定位在一个步骤中完成。yolo直接在输出层回归bounding box的位置和bounding box所属类别,从而实现one-stage。所以yolo的诞生就是为了解决识别速度的问题。
- faster R-CNN也是一个系列的模型的高级版本,faster R-CNN就是典型的two-stage目标检测算法。先进行bounding box的位置回归,然后输出物体类别。faster R-CNN相对比较慢。
二、YOLOV1网络结构和缺点
-
上面是结构图yolo_v1结构图,通过结构图可以轻易知道前向传播的计算过程,是很便于读者理解的。网络结构借鉴了 GoogLeNet。24个卷积层,2个全链接层。
-
yolov1的输出是一个7x7x30的张量,7x7表示把输入图片划分位7x7的网格,每一个小单元的另一个维度等于30。30=(2*5+20)。代表能预测2个框的5个参数(x,y,w,h,score)和20个种类。
-
如上图,每一个网格只能只能预测两个框,不利于识别密集型目标和小目标。整个图片最多识别7X7X2个box,最多识别49个目标。
-
yolo的做法并不是把每个单独的网格作为输入feed到模型,在inference的过程中,网格只是物体中心点位置的划分之用,并不是对图片进行切片,不会让网格脱离整体的关系。
三、YOLOV2相对于V1的改进
- 网络采用DarkNet-19 主干网络的升级
- Batch Normalization: v1中也大量用了Batch Normalization,同时在定位层后边用了dropout,v2中取消了dropout,在卷积层全部使用Batch Normalization。BN能够给模型收敛带来显著地提升,同时也消除了其他形式正则化的必要。
- 使用anchors:借鉴faster R-CNN和SSD,对于一个中心点,使用多个anchor,得到多个bounding box,每个bounding box包含4个位置坐标参数(x y w h)和21个类别概率信息。而在yoloV1中,每个grid(对应anchor),仅预测一次类别,而且只有两个bounding box来进行坐标预测。v1中直接在卷积层之后使用全连接层预测bbox的坐标。v2借鉴Faster R-CNN的思想预测bbox的偏移.移除了全连接层,并且删掉了一个pooling层使特征的分辨率更大一些。v1中每张图片预测7x7x2=98个box,而v2加上Anchor Boxes能预测13X13X5(5+20)个box
- 去掉全连接层:和SSD一样,模型中只包含卷积和平均池化层(平均池化是为了变为一维向量,做softmax分类)。这样做一方面是由于物体检测中的目标,只是图片中的一个区块,它是局部感受野,没必要做全连接。而是为了输入不同尺寸的图片,如果采用全连接,则只能输入固定大小图片了。
四、YOLOV3的网络结构和相对于V2的改进
- 引入FPN (多尺度预测)
YOLOv3 借鉴了 FPN 的思想,从不同尺度提取特征。相比 YOLOv2,YOLOv3 提取最后 3 层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出 9 种尺度的 anchor box,将 9 种尺度的 anchor box 均匀的分配给 3 种尺度的特征图。 - Darknet-53主干网络的改进
- softmax被替代
在实际应用场合中,一个物体有可能输入多个类别,单纯的单标签分类在实际场景中存在一定的限制。举例来说,一辆车它既可以属于 car(小汽车)类别,也可以属于 vehicle(交通工具),用单标签分类只能得到一个类别。因此在 YOLO v3 在网络结构中把原先的 softmax 层换成了逻辑回归层,从而实现把单标签分类改成多标签分类。用多个 logistic 分类器代替 softmax 并不会降低准确率,可以维持 YOLO 的检测精度不下降。
五、YOLOV4相对V3的改进
-
主干网络改进
CSPDarknet53作为Backbone -
训练方法改进
数据增强把四张图片拼成一张图片,等价于增大了mini-batch。
还有自对抗训练数据增强方法。这是在一张图上,让神经网络反向更新图像,对图像做改变扰动,然后在这个图像上训练。 -
还吸收一些近年来最新深度学习网络的技巧。如CutMix数据增强,Swish、Mish激活函数。
-
CmBN 跨最小批的归一化(Cross mini-batch Normal),在CBN的基础上改进;CmBN吸收了BN和CBN的特点。