【论文详解】YOLOv3(2018)

1 论文信息

题目:YOLOv3: An Incremental Improvement

论文链接

原代码链接
PyTorch复现代码链接
TensorFlow复现代码链接

2 论文概述

YOLO3 是 YOLO 的第三版,借鉴了 ResNet、RetinaNet、SSD等网络的 tricks,如多尺度融合预测;进一步提高了速度和准确率,特别是在检测小目标方面有了比较显著的提高,但 AP 仍落后于 RetinaNet。

在这里插入图片描述

如上图所示,首先通过特征提取网络 Darknet-53 对输入图像提取特征,得到一定大小的特征图,如13x13;然后将输入图像分成 13x13 grid,GT中目标中心落在某 grid,则由此 grid 预测这个目标,每个 grid 预测 3 个边界框 anchors(YOLO1是2个,YOLO2是5个);最后采用了多尺度融合预测 trick。

3 方法论

3.1 类别预测

很多分类器的输出 label 都是互斥的,即一个目标不可同时是 A 和 B;但YOLO3采用了多标签分类,即输出标签可以是“车”和“卡车”,输出的总和大于1。

YOLO3 采用多个 LR 替换原来的 softmax,以计算输入属于某标签的概率;计算分类损失时,采用二元交叉熵损失函数。

3.2 多尺度融合预测

YOLO3 采用了3个不同的尺度:13x13, 26x26, 52x52. 借鉴了 FPN,越精细的 grid 可以检测出越小的目标。当然,边界框数量也比原来多很多,(13x13+26x26+52x52)x3=10647。

对于COCO数据集来说,YOLO3 的深度是255,即 3x(5+80)=255,其中 3 是每个 grid 预测3个 anchor,每个 anchor 有(x,y,w,h,confidence)5个基本参数,COCO有80个类别,注意此处不算背景类。

YOLO3 采用了 k-means 聚类,选择了 9 个聚类簇,对于COCO,锚定框的宽度和高度为(10x13),(16x30),(33x23),(30x61),(62x45)(59x119),(116x 90),(156x198),(373x326);这9个 priors 根据它们的尺度分为3个不同的组,在检测目标时,给一个特定的特征图分配一个组。

3.3 Darknet-53 特征提取器

原来采用 Darknet-19,YOLO3采用 Darknet-53。如下图所示,采用 3x3 和 1x1 滤波器组成,采用了残差连接,但比 ResNet-152 的 BFLOP 更小。注意,YOLO3 是没有池化层和 FC 层的,前向传播时,张量尺寸的变换是通过改变卷积核的步长实现的。
在这里插入图片描述
网络在特征图的每个 grid 上预测 3 个边界框,每个边界框预测 5 个值;如果这个 grid 距离图像左上角的边距以及边界框的先验维度如下图所示,则预测框实际值如下图所示。
在这里插入图片描述

3.4 边界框预测和损失函数计算

YOLO3 采用 LR 预测每个边界框的目标性得分;计算代价函数方式上做了以下改进:如果 anchor 与 GT 目标比其他目标重叠多,则相应的目标性得分应为1;对于重叠大于预定义值(默认值0.5)的其他先验框,不会产生任何代价;每个GT目标仅与一个先验边界框相关联,如果没有分配先验边界框,则不会导致分类和定位损失,只会有目标性的置信度损失;使用tx和ty(而不是bx和by)来计算损失。最后,依然采用 NMS 移除同一目标的多余预测框。

4 论文效果

在这里插入图片描述
如上图所示,YOLO3 的 mAP 不及 RetinaNet,但速度得到很大的提升。

5 总结

YOLO3 主要是对小目标检测进行了提升,采用了多尺度融合预测,使用了多标签分类;改变了计算代价函数的方式;使用了 Darknet-53 作为特征提取器;但是 AP 仍然需要进一步提升。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLOv8是一种基于深度学习的目标检测算法,是YOLO(You Only Look Once)系列的最新版本。它在YOLOv4的基础上进行了改进和优化,提供了更好的检测性能和速度。 YOLOv8的源码详解可以从以下几个方面进行说明: 1. 网络结构:YOLOv8使用了Darknet-53作为主干网络,由53个卷积层组成,用于提取图像特征。在主干网络后面连接了多个特征金字塔层(FPN),用于多尺度目标检测。 2. 检测头:YOLOv8使用了三个检测头,分别对应不同尺度的目标检测。每个检测头都由一个卷积层和一个全连接层组成,用于预测边界框的位置和类别。 3. 损失函数:YOLOv8使用了YOLO系列常用的损失函数——多尺度损失函数,包括定位损失、置信度损失和分类损失。通过最小化这些损失函数,可以使得模型在目标检测中表现更好。 4. 数据预处理:在源码中,会对输入图像进行一系列的预处理操作,包括图像缩放、填充、归一化等。这些操作可以使得输入图像符合模型的输入要求,并提高检测的准确性。 5. 推理过程:在源码中,会对输入图像进行前向传播,得到目标检测的结果。这一过程中,会经过网络的多个层级,使用卷积和池化等操作提取图像特征,并通过检测头预测边界框的位置和类别。 需要注意的是,YOLOv8的源码可能会有不同的实现版本,具体的细节和实现方式可能有所差异。如果你想详细了解YOLOv8的源码,建议查阅相关的论文和开源代码,以便更好地理解算法的实现原理和细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值