目标检测:Yolov3网络详解

现在来仔细理解下Yolov3这个网络细节。
目标检测的经典网络有Yolo和SSD,还有今天要记录的Yolov3。
Yolo:将一张图划分为众多个小格子,每个小格子检测到一种物体,并预测两个bounding box,问题是当小格子内的物体众多时,Yolo很可能会漏检。
SSD:不太适合检测小物体,VGG19限制了输出大小为38X38。
Yolov3:当下采样越大,resolution越小,感受野越大,越不容易检测到小物体。Yolov3可以检测到三个尺度(小,中,大)的物体。

下面来看Yolov3。

框架

目标检测:Yolov3网络详解_第1张图片

目标检测:Yolov3网络详解_第2张图片

目标检测:Yolov3网络详解_第3张图片

Yolov3的backbone是darknet-53(53个卷积层),其中N为下采样次数。

DarkNet_53= Conv3x3 + Sum_(下采样 Conv3x3_步长为2 + N x DarkNetBlock)   
DarkNetBlock(含2层卷积)= Conv1x1 + Conv3x3 + Residual

所以我们可以发现DarkNet-53共有1 + (1 + 1 x 2 ) + (1 + 2 x2) + (1 + 8 x 2) + (1 + 8 x 2) + (1 + 4 x 2) +全连接= 53个卷积层。

Yolov3采用了类似SSD网络的mul-scales策略,使用3个scale在这里插入代码片(13x13,26x26,52x52)的feature map进行预测。

有别于Yolov2,这里作者将每个grid cell预测的边框数从Yolov2的5个减为Yolov3的3个。最终输出的tensor维度为N × N × [3 ∗ (4 + 1 + 80)]。其中N为feature map的长宽,3表示3个预测的边框,4表示边框的tx,ty,tw,th,1表示预测的边框的置信度,80表示分类的类别数。

和Yolov2一样,anchor的大小作者还是使用kmeans聚类得出。在coco数据集上的9个anchor大小分别为:(10× 13); (16× 30); (33× 23); (30× 61); (62× 45); (59×119); (116 × 90); (156 × 198); (373 × 326)

其中在Yolov3中,最终有3个分支输出做预测,输出的特征图大小分别为13x13,26x26,52x52,每个特征图使用3个anchor:

13x13的特征图使用 (116 × 90); (156 × 198); (373 × 326) 这3个anchor
26x26的特征图使用(30× 61); (62× 45); (59×119) 这3个anchor
52x52的特征图使用(10× 13); (16× 30); (33× 23) 这3个anchor

在Yolov3里面,前向传播过程中,张量的尺寸变换是通过改变卷积核的步长来实现的,比如stride=(2, 2),这就等于将图像边长缩小了一半(即面积缩小到原来的1/4)。在Yolov2中,要经历5次缩小,会将特征图缩小到原输入尺寸的1/32。若输入为416x416,则输出为13x13(416/32=13)
Yolov3也和Yolov2一样,backbone都会将输出特征图缩小到输入的1/32。所以,通常都要求输入图片是32的倍数。

类别预测方面主要是将原来的单标签分类改进为多标签分类
因此网络结构上就将原来用于单标签多分类的softmax层换成用于多标签多分类的逻辑回归层。首先说明一下为什么要做这样的修改,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中有woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要同时有woman和person两个类,这就是多标签分类,需要用逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输入约束在0到1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类。

bounding box的坐标预测方式还是延续了YOLO v2的做法
简单讲就是下面这个公式,tx、ty、tw、th就是模型的预测输出。cx和cy表示grid cell的坐标,比如某层的feature map大小是13x13,那么grid cell就有13x13个,第0行第1列的grid cell的坐标cx就是0,cy就是1。pw和ph表示预测前bounding box的size。bx、by。bw和bh就是预测得到的bounding box的中心的坐标和size。坐标的损失采用的是平方误差损失。
目标检测:Yolov3网络详解_第4张图片
Loss Function
在目标检测任务里,有几个关键信息是需要确定的:(x,y),(w,h),class,confidence 。根据关键信息的特点可以分为上述四类,损失函数应该由各自特点确定。最后加到一起就可以组成最终的loss function了,也就是一个loss function搞定端到端的训练。
目标检测:Yolov3网络详解_第5张图片

你可能感兴趣的:(目标检测:Yolov3网络详解)