【目标检测】—— YOLO V3

时间:2024-04-03 14:17:56

1. YOLO V3算法分析

1.1 网络结构图

【目标检测】—— YOLO V3图最下面的三个蓝色框,代表网络中常用的三个模块
DBL:Yolov3网络结构中的最小组件,其由Conv(卷积)+ BN + Leaky relu组成。
Res unit:残差组件,借鉴ResNet网络中的残差结构,让网络可以构建的更深。
ResN:n代表数字,有res1,res2, … ,res8等等,表示这个res_block里含有多少个Res_unit。由一个CBL和N个残差组件构成,是Yolov3中的大组件。每个Res模块前面的CBL都起到下采样的作用,因此经过5次Res模块后,得到的特征图是608->304->152->76->38->19大小。

张量拼接与张量相加
Contact:张量拼接,会扩充两个张量的维度,例如26×26×256和26×26×512两个张量拼接,结果是26×26×768。
Add:张量相加,张量直接相加,不会扩充维度,例如104×104×128和104×104×128相加,结果还是104×104×128。

Backbone中卷积层的数量:
每个Resn中包含1+2×X个卷积层,因此整个主干网络Backbone中一共包含1+(1+2×1)+(1+2×2)+(1+2×8)+(1+2×8)+(1+2×4)=52,再加上一个FC全连接层,即可以组成一个Darknet53分类网络。不过在目标检测Yolov3中,去掉FC层,不过为了方便称呼,仍然把Yolov3的主干网络叫做Darknet53结构。

1.2 网络主体(backbone)

全卷积网络
在YOLO V2中,要经历Maxpooling层的5次缩小,会将特征图缩小到原输入尺寸的1/251/2^5,即1/32。而整个v3结构里面,是没有池化层和全连接层的。前向传播过程中,张量的尺寸变换是通过改变卷积核的步长来实现的(下采样),比如stride=(2, 2),这就等于将图像边长缩小了一半(即面积缩小到原来的1/4)。若输入为608x608,则输出为19x19(608/32=19)。如下图YOLO V3红框圈出的部分是V3的五次下采样。

输入图像大小为32的倍数
YOLO V3也和V2一样,backbone都会将输出特征图缩小到输入的1/32。所以,通常都要求输入图片是32的倍数
YOLO V2的Darknet-19与YOLO V3的Darknet-53对比如下:
【目标检测】—— YOLO V3【目标检测】—— YOLO V3

1.3 网络输出

【目标检测】—— YOLO V3
多尺度预测
为了加强算法对小目标检测的精确度,YOLO V3输出了3个不同尺度的feature map。这个借鉴了FPN,采用多尺度来对不同size的目标进行检测,越精细的grid cell就可以检测出越精细的物体。

深度255
3个feature map的深度均是255,边长的规律是19:38:76。
对于COCO类别而言,有80个种类,且每个box应该对每个种类都输出一个概率。YOLO V3设定的是每个网格单元预测3个box,所以每个box需要有(x, y, w, h, confidence)五个基本参数,然后还要有80个类别的概率。所以3*(5 + 80) = 255。
【目标检测】—— YOLO V3
contact拼接
YOLO V3采用上采样的方法实现这种多尺度的feature map,在上图中,第一个上采样采用(2,2)的步长,可以使经过Res4后的图像尺寸 x 2从而与Res4前的尺寸一样,来保证concat拼接的张量尺度相同。第二个上采样采用(2,2)的步长,可以使经过Res8后的图像尺寸 x 2从而与Res8前的尺寸一样,来保证concat拼接的张量尺度相同。

Bounding Box
在YOLO V2和YOLO V3中,都对图像中的object采用k-means聚类。 feature map中的每一个网格都会预测3个边界框(bounding box) ,每个bounding box都会预测三个东西:(1)每个框的位置(4个值,中心坐标tx和ty,框的高度bh和宽度bw),(2)一个置信度,(3)N个类别,coco数据集80类,voc20类。

三次检测
网络进行了三次检测,分别是在32倍降采样,16倍降采样,8倍降采样时进行检测。
三次检测,每次对应的感受野不同,32倍降采样的感受野最大,适合检测大的目标,在输入为416×416时,每个cell的三个anchor box为(116 ,90); (156 ,198); (373 ,326)。16倍适合一般大小的物体,anchor box为(30,61); (62,45); (59,119)。8倍的感受野最小,适合检测小目标,因此anchor box为(10,13); (16,30); (33,23)。所以当输入为416×416时,实际总共有(52×52+26×26+13×13)× 3=10647个先验框。

【目标检测】—— YOLO V3感受一下9种先验框的尺寸,下图中蓝色框为聚类得到的先验框。黄色框是ground truth,红框是对象中心点所在的网格。
【目标检测】—— YOLO V3