YOLOv3

目录

1、backbone结构

2、输出

3、分类预测Class Prediction

4、 bbox预测Bounding Box Prediction

5、其他


YOLOv1    https://blog.csdn.net/xue_csdn/article/details/105949984

YOLOv2    https://blog.csdn.net/xue_csdn/article/details/105950349

YOLOv3相对于v1和v2的改进之处

  • backbone变为darknet-53
  • output:多尺度预测
  • softmax变为logistic classifiers
  • k-means 的cluster = 9

1、backbone结构

 YOLOv3的backbone是darknet-53,利用53个卷积层(其实是52个,作者可能是把最后的全连接层也包含进去)

  • darknet-53最大的改进是增加了5个Residual块,即利用了ResNet原理
  • 下采样。在YOLOv2中通过max pooling使输入从416×416缩小32倍到13×13,而在YOLOv3中没有max pooling,利用卷积的stride=2来实现,同样缩小32倍,所以输入需要是32的倍数。
  • 输入是256×256×3
  • 做检测的过程中,将最后的平均池化之后的所有层去掉,又添加了23个卷积层(我通过数cfg文档得来的结果),这23层的用途就是做了多尺度检测(下边会详细介绍)

2、输出

 

(图的来源:https://blog.csdn.net/leviopku/article/details/82660381)

也就是论文中的跨尺度预测Predictions Across Scales。借鉴了特征金字塔网络FPN(feature pyramid networks),用多尺度来对不同size的目标进行检测,越精细的grid cell就可以检测出越精细的物体。y1,y2和y3的深度都是255,边长的规律是13:26:52

YOLOv3 提供了 3 种不同尺寸的边界框(其实就是每个cell对应3种不同大小的bbox来预测),系统用这种思想提取这些尺寸的特征,以形成金字塔形网络(pyramid network)。在基本特征提取器中增加了几个卷积层,并用最后的卷积层预测一个三维张量编码bbox,对象和类别。COCO数据集下,得到的张量为:N*N*[3*(4+1+80)],4个边界框偏移量,1个目标性预测和80个类别预测。

v3用上采样的方法来实现这种多尺度的feature map,可以结合图1和图2右边来看,图1中concat连接的两个张量是具有一样尺度的(两处拼接分别是26x26尺度拼接和52x52尺度拼接,通过(2, 2)上采样来保证concat拼接的张量尺度相同)。作者并没有像SSD那样直接采用backbone中间层的处理结果作为feature map的输出,而是和后面网络层的上采样结果进行一个拼接之后的处理结果作为feature map。

 顺便再加另一位博主的观点:https://blog.csdn.net/litt1e/article/details/88907542      

网络中作者进行了三次检测,分别是在32倍降采样,16倍降采样,8倍降采样时进行检测,这样在多尺度的feature map上检测跟SSD有点像。在网络中使用up-sample(上采样)的原因:网络越深的特征表达效果越好,比如在进行16倍降采样检测,如果直接使用第四次下采样的特征来检测,这样就使用了浅层特征,这样效果一般并不好。如果想使用32倍降采样后的特征,但深层特征的大小太小,因此yolov3使用了步长为2的upsample(上采样),把32倍降采样得到的feature map的大小提升一倍,也就成了16倍降采样后的维度。同理8倍采样也是对16倍降采样的特征进行步长为2的上采样,这样就可以使用深层特征进行detection。

作者通过上采样将深层特征提取,其维度是与将要融合的特征层维度相同的(channel不同)。如下图所示,85层将13×13×256的特征上采样得到26×26×256,再将其与61层的特征拼接起来得到26×26×768。为了得到channel255,还需要进行一系列的3×3,1×1卷积操作,这样既可以提高非线性程度增加泛化性能提高网络精度,又能减少参数提高实时性。52×52×255的特征也是类似的过程。

 

3、分类预测Class Prediction

每个边界框都会使用多标记分类来预测框中可能包含的类。本论文用独立的逻辑分类器代替softmax(对每种类别使用二分类的logistic回归,然后遍历所有类别,得到所有类别的得分,然后选取大于阈值的类别),在训练过程中,我们用二元交叉熵损失来预测类别。

这个方法有助于我们把YOLO用于更复杂的领域,如Open Images Dataset 。这个数据集中包含了大量重叠的标签(如女性和人)。如果我们用的是softmax,它会强加一个假设,使得每个框只包含一个类别,但通常情况下这样做是不妥的。多标记的分类方法能更好地模拟数据。

YOLOv3用逻辑回归预测每个边界框的objectness score。如果当前预测的bbox比之前的更好地与ground truth对象重合,那objectness score就是1。如果当前的预测不是最好的,虽然它和ground truth对象重合超过一定阈值(应该是IOU的值),神经网络同样会忽视这个预测。这个阈值设为0.5。每个ground truth对象分配一个bbox,如果bbox并未分配给ground truth对象,那它只是检测错了对象,而不会对坐标或分类预测造成影响。

不同于faster R-CNN的是,yolo_v3只会对1个prior进行操作,也就是那个最佳prior。而logistic回归就是用来从9个anchor priors中找到objectness score(目标存在可能性得分)最高的那一个。logistic回归就是用曲线对prior相对于 objectness score映射关系的线性建模。
 

 

4、 bbox预测Bounding Box Prediction

和YOLOv2一样,采用尺度聚类作为anchor box来预测bbox

在训练期间 利用均方和误差,如果预测坐标的ground truth是tˆ,那相应的梯度就是ground truth值和预测值的差:tˆ-t*

因此ground truth值很容易被求出。

 

YOLOv3采用9个clusters,3个任意尺寸,在cfg文档中有具体数值(成对出现,分别代表高度和宽度):

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

 感受一下9种先验框的尺寸,下图中蓝色框为聚类得到的先验框。黄色框式ground truth,红框是对象中心点所在的网格。

这里注意bounding box 与anchor box的区别:
Bounding box它输出的是框的位置(中心坐标与宽高),confidence以及N个类别。
anchor box只是一个尺度即只有宽高。

 

5、其他

我们看一下YOLO3共进行了多少个预测。对于一个416*416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。

对比一下,YOLO2采用13*13*5 = 845个预测,YOLO3的尝试预测边框数量增加了10多倍,而且是在不同分辨率上进行,所以mAP以及对小物体的检测效果有一定的提升。

 

 

参考:https://blog.csdn.net/leviopku/article/details/82660381

https://zhuanlan.zhihu.com/p/49556105

https://blog.csdn.net/litt1e/article/details/88907542

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值