Python----目标检测(《YOLOv3:AnIncrementalImprovement》和YOLO-V3的原理与网络结构)

一、《YOLOv3:AnIncrementalImprovement》

1.1、基本信息

论文地址:

[1804.02767] YOLOv3: An Incremental Improvement

我们对YOLO进行了一些更新!我们做了一些小的设计更改来使其更好。我们还训练了这个新的网络,非常不错。它比上次稍大,但更加准确。不过它依然很快,请放心。在320x320的情况下,YOLOv3在28.2 mAP中以22毫秒的速度运行,准确性与SSD相当,但快了三倍。当我们查看老旧的5IOUmAP检测指标时,YOLOv3表现得相当不错。在Titan X上实现了579AP50,而RetinaNet在198毫秒内实现了575AP50,性能相似,但快了3.8倍。像往常一样,所有代码可以在Joseph Redmon - Survival Strategies for the Robot Rebellion上找到。

1.2、主要内容

核心改进

结合残差网络(ResNet)思想,提出新的主干网络 Darknet-53(53层卷积),兼顾速度与性能。

采用 多尺度预测(3种尺度),融合浅层细粒度特征与深层语义特征,提升小目标检测能力。

使用 维度聚类生成锚框(9个聚类,分3个尺度),通过逻辑回归预测目标存在概率。

性能表现

速度:在Titan X GPU上,320×320分辨率下仅需22毫秒,比RetinaNet快3.8倍。

精度:AP50指标达57.9,与RetinaNet(57.5)相当,但速度显著占优。

局限性:高IOU阈值(如AP75)下性能较弱,边界框精确定位能力不足。

失败尝试

线性激活替代sigmoid导致mAP下降。

Focal Loss未提升性能(可能与YOLOv3的独立目标性预测机制冲突)。

双IOU阈值训练策略效果不佳。

1.3、作用影响

技术贡献

推动实时目标检测的实用化,平衡速度与精度,适用于嵌入式设备和实时系统。

Darknet-53成为高效主干网络设计的参考,影响后续轻量化模型(如YOLOv4、YOLOv5)。

行业影响

广泛应用于安防监控、自动驾驶、工业检测等对实时性要求高的场景。

引发对目标检测评估指标的反思(如AP50 vs. COCO复杂指标)。

1.4、对未来展望

那么,其他那些为视觉研究提供大量资金的人是军方,他们从来没有做过任何可怕的事情,比如用新技术杀死很多人,哦等等.....我对大多数使用计算机视觉的人充满希望,他们只是用它做快乐、好的事情,比如在国家公园里计算斑马的数量,或者跟踪它们的猫在家里游荡。但是计算机视觉已经在被用于有问题的用途,作为研究人员,我们有责任至少考虑我们的工作可能造成的伤害,并考虑减少它的方式。我们欠世界这么多。

二、YOLOV3

下图中可以看到,2018年测试性能的数据集变成了COCO数据集,可以看到 YOLOV3的速度是非常快的,但是它的mAP并不是非常的高(mAP50 95)。

下图中可以看到,当IOU=0.5的时候,即mAP-50时,可以看到YOLOV3的速 度不仅快的,而且还非常准。

2.1、输入处理(Input)

YOLOV3在输入上没做任何的变化。

2.2、骨干网络(Backbone)

修改骨干网络为darknet53

YOLOv3的Backbone在YOLOv2的基础上设计了Darknet-53结构。 Darknet-53结构引入了ResNet的残差思想,类似于ResNet。

同时,darknet53网络并没有池化层(池化层指的是下采样的池化,并不是 全局平均池化)。

2.3、Neck结构

YOLOv3引入了FPN的思想,以支持后面的Head侧采用多尺度来对不同size 的目标进行检测,越精细的grid cell就可以检测出越精细的目标物体。 YOLOv3设置了三个不同的尺寸,分别是19×19,38×38和76×76,他们之间 的比例为1:2:4。

其中,在Neck结构CBL*5中,5层CBL分别是:1x1,3x3,1x1,3x3,1x1 的卷积。

在Neck结构CBL中,是1x1的卷积。 输入时608,

经过Backbone的第一个Res8之后,得到的特征张量缩放比为 8:608/8=76,即76x76x256。

经过Backbone的第二个Res8之后,得到的特征张量缩放比为16: 608/1638,即38x38x512。

Concat是在通道上进行相加。

Neck结构的基础上顺势而为融合了3个尺度,在多个尺度的融合特征图上分 别独立做检测,19x19的检测大尺寸物体,38x38的检测中尺寸物体, 76x76的检测小尺寸物体。

2.4、 检测头(Head)

255是与Anchor Box有关的,那么在YOLOV3中,Anchor Box的尺寸也是有 聚类算法产生的,经过聚类算法,有9个尺寸的Anchor Box,分别为: (10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90), (156x198),(373x326),YOLOV3会在三个预测特征层上进行预测,所以每 个预测特征层都有3个Anchor Box(按照先后顺序排好的,3个为一组,也 就是每个预测特征层有3个Anchor Box)。

特征图层 特征图大小 Anchor Box尺寸(修正后) Anchor Box数量
特征图层1(大目标) 13x13 (116x90),(156x198),(373x326) 13x13x3
特征图层2(中目标) 26x26 (30x61),(62x45),(59x119) 26x26x3
特征图层3(小目标) 52x52 (10x13),(16x30),(33x23) 52x52x3

那么COCO数据集有80类,3x(4+1+80)就得到255了。

三、正负样本分配

3.1、正样本分配原则

与GT BOX的IOU最大的Anchor Box最为正样本。 如果一个Anchor Box与GT BOX的IOU不是最大的,但是又大于某个阈值, 那么就丢掉,既不是正样本又不是负样本。

3.2、负样本分配原则

除去正样本和丢弃的样本剩下的就是负样本。 如果某个Anchor Box不是正样本,那么它就没有定位损失和类别损失, 只有置信度损失。

其实我们可以看出来,这种正负样本分配的方式时有问题的,他会导致正负 样本数量失衡,从而影响训练结果,所以在几年前人们用YOLOV3的时候, 他们选择正样本的方式是:只要某个grid cell中的Anchor Box和GT BOX的 IOU大于某个阈值就视为正样本,这样正样本的数量就更多了。

四、损失函数

原文中没有详细的给出,这里根据源码给出:

YOLOV3的损失函数也包括三部分:定位损失、置信度损失、类别损失。

其中定位损失与YOLOV2是完全一致的。

但是置信度损失、类别损失采用了逻辑回归的策略,正常情况下,要实现多 分类是由Softmax+多元交叉熵组成,但是在YOLOV2中,采用的是 Softmax+回归的思想,这本身就很奇怪了,但是YOLOV3更为震撼,它用了 Softmax+二元交叉熵来解决该问题。

损失函数用了多个独立的用于多标签分类的Logistic分类器,取消了类别之 间的互斥(即one-hot),可以使网络更加灵活。YOLOv2使用Softmax+回 归器,认为一个检测框只属于一个类别,每个检测框分配到概率最大的类 别。但实际场景中一个检测框可能含有多个物体或者有重叠的类别标签。 Logistic分类器主要用到Sigmoid函数,可以将输入约束在0到1的范围内,当 一张图像经过特征提取后的某一检测框类别置信度经过sigmoid函数约束后 如果大于设定的阈值,就表示该检测框负责的物体属于该类别。

4.1、置信度损失

4.2、分类损失

相关推荐
小和尚同志几秒前
通俗易懂的 MCP 概念入门
人工智能·aigc
莱茵菜苗11 分钟前
Python打卡训练营day46——2025.06.06
开发语言·python
爱学习的小道长12 分钟前
Python 构建法律DeepSeek RAG
开发语言·python
dudly15 分钟前
大语言模型评测体系全解析(下篇):工具链、学术前沿与实战策略
人工智能·语言模型
zzlyx9924 分钟前
AI大数据模型如何与thingsboard物联网结合
人工智能·物联网
luojiaao40 分钟前
【Python工具开发】k3q_arxml 简单但是非常好用的arxml编辑器,可以称为arxml杀手包
开发语言·python·编辑器
说私域1 小时前
定制开发开源AI智能名片驱动下的海报工厂S2B2C商城小程序运营策略——基于社群口碑传播与子市场细分的实证研究
人工智能·小程序·开源·零售
英英_1 小时前
视频爬虫的Python库
开发语言·python·音视频
猛犸MAMMOTH1 小时前
Python打卡第46天
开发语言·python·机器学习
多多*1 小时前
微服务网关SpringCloudGateway+SaToken鉴权
linux·开发语言·redis·python·sql·log4j·bootstrap