- YOLOv3: An Incremental Improvement论文地址
- PaperwithCode在目标检测的排名
- Github仓库地址,100Kstar
- 《YOLO1》论文精读:第一次实现端到端的目标检测
- 《YOLO2》论文精读:7项措施和联合训练让YOLO1更好、更快、更强大
- YOLO1论文最新由Facebook AI发表于2016年5月,截止现在2024年10月,引用数是52854次。
- YOLO2由华盛顿大学研究机构于2016年12月发布,截止2024年10月,引用数是23157次。
- YOLO3由华盛顿大学研究机构于2018年4月发布,截止2024年10月,引用数是30304次。
文章目录
- 论文核心内容(省流版本阅读这里即可)
- 复习YOLO1的推理过程
- 复习YOLO1的训练过程
- 复习YOLO2的推理过程
- 复习YOLO2的训练过程
- [1. 三大改进措施](#1. 三大改进措施)
-
- [1.1. 损失计算方式的改变](#1.1. 损失计算方式的改变)
-
- [1.1.1. 坐标损失,没有变化,还是YOLO2的](#1.1.1. 坐标损失,没有变化,还是YOLO2的)
- [1.1.2. 置信度损失,有变化,只用一个最优先验边界框计算损失](#1.1.2. 置信度损失,有变化,只用一个最优先验边界框计算损失)
- [1.1.3. 类别损失,有变化,使用binary cross-entropy进行多标签分类](#1.1.3. 类别损失,有变化,使用binary cross-entropy进行多标签分类)
- [1.2. 单尺度预测13x13 变成 多尺度预测32x32\16x16\8x8](#1.2. 单尺度预测13x13 变成 多尺度预测32x32\16x16\8x8)
- [1.3. DarkNet19 变成 DarkNet-53](#1.3. DarkNet19 变成 DarkNet-53)
- 最后
论文核心内容(省流版本阅读这里即可)
YOLOv3(You Only Look Once version 3)是YOLO系列目标检测算法的第三个版本,它在YOLOv2的基础上进行了改进,旨在提供更快更准确的目标检测性能。
-
背景与动机:
- YOLOv3的开发基于YOLOv1和YOLOv2的成功经验,旨在保持实时检测速度的同时提高检测精度。
- YOLO系列算法的主要特点是将整个检测过程视为一个回归问题,直接从输入图像到边界框坐标和类别概率进行预测,而不是使用区域提议(region proposal)的方式。
-
网络架构改进:
- 使用Darknet-53作为基础特征提取器,它比之前版本使用的Darknet-19更深,并且在保持实时性的同时提供了更好的特征表达能力。
- 通过多尺度预测来提升小物体的检测能力,即在不同的特征图层级上进行检测,这样可以捕捉到不同大小的物体。
-
训练策略:
- 引入了标签平滑(label smoothing)来减少过拟合的风险。
- 使用了数据增强技术,如图像翻转、颜色抖动等,以增加模型的泛化能力。
- 还使用了批量归一化(batch normalization),这有助于加速收敛并改善训练稳定性。
-
损失函数调整:
- YOLOv3采用了改进的损失函数,更加重视边界框的位置准确性以及置信度分数的准确性。
-
核心贡献:
- 检测精度的提升:通过引入更深的网络结构和多尺度预测机制,YOLOv3在多个基准测试集上取得了显著的性能提升。
- 灵活性与可扩展性:YOLOv3的设计允许容易地进行修改和扩展,以便于研究者根据具体应用需求进行调整。
- 实时性:尽管提高了检测精度,YOLOv3仍然保持了较高的帧率(FPS),使其适用于需要实时处理的应用场景。
总之,YOLOv3通过一系列的技术改进,在保持实时检测速度的同时,大幅提升了检测精度,特别是在小目标检测方面表现突出。这些改进为后续的研究工作奠定了坚实的基础。
复习YOLO1的推理过程
下面逐步描述YOLO1的推理流程:
- 给模型输入一张只有人、狗、自行车三个待检测对象的图像,得到7x7x2=96个预测边界框和7x7x2=96个边界框的置信度,以及7x7=49个网格单元格的类别预测分数。
- 通过非极大值抑制(Non-Maximum Suppression, NMS)挑选出三个预测边界框,分别预测人、狗、自行车。非极大值抑制(Non-Maximum Suppression, NMS)是一种常用的技术,用于消除重复的边界框预测。在目标检测任务中,同一物体可能会被多次预测为不同的边界框,NMS的作用就是从这些重叠的边界框中挑选出最有代表性的那个。
- NMS的工作流程
步骤1 - 排序:首先按照边界框的置信度得分对所有边界框进行降序排序。
步骤2 - 选取最高分:从排序后的列表中选取得分最高的边界框。
步骤3 - 计算IoU:计算得分最高的边界框与其他所有边界框的交并比IOU。
步骤4 - 剔除高IoU:如果某个边界框与已选中的边界框IoU高于设定的阈值,则剔除该边界框。
步骤5 - 迭代:重复步骤2至4,直到没有边界框剩余为止。
复习YOLO1的训练过程
下面逐步描述YOLO1的训练过程:
-
给模型输入一张只有人、狗、自行车三个检测对象的图像,得到7x7x2=96个预测边界框数值和7x7x2=96个边界框的置信度数值,以及7x7=49个网格单元格的类别预测分数数值。
-
图像会被分成7x7=49个网络单元格,图像中有三个检测对象人、狗、自行车,根据YOLO1的核心思想,那么就会有三个网络单元格分别负责检测人、狗、自行车,假设为gridPerson、gridDog、gridBicycle。
-
对于gridPerson、gridDog、gridBicycle这三个网格单元格里面的所有预测边界框(这里是3x2=6个边界框),需要计算坐标的平方差损失L~1~、置信度的平方差损失L~2~;对于gridPerson、gridDog、gridBicycle这三个网格单元格,需要计算类别的交叉熵损失L~3~。
-
对于其它7x7-3=46个网格单元格,需要计算置信度的平方差损失L~4~
-
总损失L = 5xL~1~ + L~2~ + L~3~ + 0.5xL~4~
-
根据这个损失函数,使用Adam进行训练优化
复习YOLO2的推理过程
下面逐步描述YOLO2的推理过程:
- 给模型输入一张只有人、狗、自行车三个待检测对象的图像,得到13x13x9=1521个预测边界框和13x13x9=1521个边界框的置信度,以及13x13=169个网格单元格的类别预测分数。
- 将边界框预测值转变成预测边界框的实际坐标
- 通过非极大值抑制(Non-Maximum Suppression, NMS)挑选出三个预测边界框,分别预测人、狗、自行车。这点跟YOLO1的过程是一致的。
复习YOLO2的训练过程
跟YOLO1的差别在于
- 每个网格单元格预测9个边界框,而不是2个
- 图像被切分成13x13=169个网格单元格,而不是7x7=49个
- 网络输出的预测值的坐标,需要多一层计算转换,才能变成真正的像素坐标
下面详细描述YOLO的训练过程中损失计算:
- 给模型输入一张只有人、狗、自行车三个检测对象的图像,得到13x13x9=1521个预测边界框和13x13x9=1521个边界框的置信度数值,以及13x13=169个网格单元格的类别预测分数数值。
- 图像会被分成13x13=169个网络单元格,图像中有三个检测对象人、狗、自行车,根据YOLO2的核心思想,那么就会有三个网络单元格分别负责检测人、狗、自行车,假设为gridPerson、gridDog、gridBicycle。
- 对于gridPerson、gridDog、gridBicycle这三个网格单元格里面的所有预测边界框(这里是3x9=27个边界框),需要计算边界框坐标的平方差损失L~1~、最优边界框的置信度的平方差损失L~2~;对于gridPerson、gridDog、gridBicycle这三个网格单元格,需要计算类别的交叉熵损失L~3~。
- 对于其它13x13-3=166个网格单元格,需要计算置信度的平方差损失L~4~
- 总损失L = 5xL~1~ + L~2~ + L~3~ + 0.5xL~4~(跟YOLO1一样)
- 根据这个损失函数,使用Adam进行训练优化(跟YOLO1一样)
1. 三大改进措施
YOLO3主要描述了三个有用的改进措施,分别为:
- 损失函数
- 多尺度预测
- Darknet53作为主干网络图像特征提取器
我们在下面会逐步解释每一项的做法和原理
1.1. 损失计算方式的改变
为了方便介绍后面的知识,这里解释几个名称:
- Sum of Squared Error (SSE,误差平方和)
- Logistic Regression(逻辑回归)
1.1.1. 坐标损失,没有变化,还是YOLO2的
跟YOLO2一样,我们的系统使用K-means聚类出来的锚点边界框来预测检测物体的边界框。该网络预测了每个边界框的4个坐标,t~x~,t~y~,t~w~,t~h~。如果单元格偏离图像的左上角(c~x~,c~y~),并且锚点边界框的宽度和高度为p~w~,p~h~,则预测对应于:
在训练过程中,对于坐标的优化,我们使用sum of squared error 损失函数。
1.1.2. 置信度损失,有变化,只用一个最优先验边界框计算损失
YOLOv3使用logistic regression预测每个边界框的置信度分数。如果先验锚点边界框与ground truth object的IOU超过任何其他先验锚点边界框,则应该为1。
如果先验锚点边界框不是最好的,就算IOU超过某些阈值,我们也不会对这些先验锚点边界框进行预测。与Faster R-CNN 和YOLO2 不同,我们的系统只为每个ground truth object分配一个边界框。如果一个先验锚点边界框没有分配给一个ground truth object,它不会造成坐标或类预测的损失,只有置信度损失。
1.1.3. 类别损失,有变化,使用binary cross-entropy进行多标签分类
每个框使用多标签分类来预测边界框可能包含的分类。在训练过程中,我们使用binary cross-entropy损失来进行类预测。
当我们在更为复杂的领域分布图像数据集中,如开放图像数据集时,这个公式会有帮助。在这个数据集中有许多重叠的标签(即女人和人)。使用softmax假设每个盒子都有一个类,但通常不是这样。一种使用多标签的方法可以更好地对数据进行建模。
1.2. 单尺度预测13x13 变成 多尺度预测32x32\16x16\8x8
YOLOv3预测了3个不同大小的边界框。我们的系统使用类似的做法从金字塔网络中提取特征。从我们的基本特征提取器中,我们添加了几个卷积层。最后一个卷积层输出边界框四个坐标、置信度和类别概率值。在我们的COCO 实验中,每个尺度上我们预测3个边界框,所以张量是N×N×[3∗(4 + 1 + 80)],其中4个值表示边界框的位置偏移,1个值表示置信度和80个类别概率。
接下来,我们从网络倒数前两层中提取特征图,对它们进行2倍上采样。我们还从网络的早期获取一个特征映射,并使用连接将其与我们的上采样特征合并。该方法允许我们从上采样的特征中获得更有意义的语义信息,并从早期的特征图中获得更细粒度的信息。然后我们添加了一些卷积层来处理这个组合的特征映射,并最终预测一个类似的张量,尽管现在是它的两倍。
我们再次执行同样的设计来预测最终的比例。因此,我们对第三个尺度的预测受益于所有先前的计算以及网络早期的细粒度特征。
我们仍然使用k-means聚类来确定我们的先验锚点边界框。我们只是任意地选择了9个集群和3个尺度,然后按尺度均匀地划分集群。在COCO数据集上,9个聚类分别为:(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116×90)、(156×198)、(373×326)。
1. 多尺度预测的意义
在实际应用中,目标物体可能会出现在不同的尺度上,即有的目标可能很大,占据图像的大部分区域;而有的目标则很小,只占据图像的一小部分。因此,单一尺度的特征图可能无法有效地检测所有大小的目标。多尺度预测能够帮助模型更好地适应不同大小的目标。
2. 特征金字塔的形成
YOLOv3利用了特征金字塔的概念,它通过在网络的不同深度处提取特征,并将这些特征融合在一起。具体来说,YOLOv3会在网络的三个不同层级产生输出,这三个层级对应的特征图具有不同的分辨率,通常较深的层对应较小的特征图(高分辨率图像的下采样),而较浅的层对应较大的特征图。
3. 输出层的选择
YOLOv3选择了三个不同的层级作为输出层,这些层级的特征图大小通常是输入图像大小的1/32、1/16和1/8。这意味着:
- 最深的输出层产生的特征图最小,但具有最丰富的语义信息,适合检测大尺度的目标。
- 中间的输出层特征图较大,能够提供较好的空间定位信息,适合检测中等尺度的目标。
- 最浅的输出层特征图最大,保留了较多的细节信息,适合检测小尺度的目标。
4. 融合不同层次的信息
为了进一步提升检测效果,YOLOv3还会将较深层次的特征图通过上采样(upsampling)的方式与较浅层次的特征图融合,这种融合有助于结合高层的语义信息和底层的空间信息,使得模型能够更好地识别和定位目标。
1.3. DarkNet19 变成 DarkNet-53
我们使用了一个新的网络来进行特征提取。我们的新网络是YOLOv2中使用的Darknet-19中使用的网络和ResNet网络之间的混合方法。我们的网络使用连续的3×3和1×1卷积层,但现在也有一些快捷连接,而且要大得多。它有53个卷积层,所以我们将它称为Darknet-53!
Darknet-53比Darknet-19强大得多,并且比ResNet-101或ResNet-152更有效。以下是ImageNet的一些研究结果:
每个网络都用相同的设置进行训练,并在256×256,单个裁剪的精度下进行测试。运行时间在Titan X 硬件,输入为256×256测试的。因此,Darknet-53的性能与最先进的分类器相当,但浮点操作更少,速度更快。Darknet-53比ResNet-101好并且快了1.5倍。Darknet-53与ResNet-152具有类似的性能,而且速度快了2倍。
Darknet-53也实现了每秒最高的浮点运算。这意味着网络结构更好地利用了GPU,使其更有效率的评估,从而更快。这主要是因为ResNets的层太多了,效率不是很高。
最后
如果朋友们对YOLO系列感兴趣,后续会持续更新YOLO4 -- YOLO11,敬请关注!