当前位置: 首页 > news >正文

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

一、《YOLOv3:AnIncrementalImprovement》

1.1、基本信息

  • 标题:YOLOv3: An Incremental Improvement

  • 作者:Joseph Redmon, Ali Farhadi

  • 机构:华盛顿大学(University of Washington)

  • 发表时间:2018年

  • 代码地址:Joseph Redmon - Survival Strategies for the Robot Rebellion

论文地址:

         [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、分类损失

http://www.xdnf.cn/news/767269.html

相关文章:

  • 20250602在Ubuntu20.04.6下修改压缩包的日期和时间
  • 分布式锁优化:使用Lua脚本保证释放锁的原子性问题
  • SQL进阶之旅 Day 12:分组聚合与HAVING高效应用
  • 微服务-Sentinel
  • Oracle expdp过滤部分表数据
  • vue-12 (路由守卫:全局、每个路由和组件内)
  • 【Unity】相机 Cameras
  • 项目管理进阶:56页大型IT项目管理实践经验分享【附全文阅读】
  • 数据库系统概论(十四)详细讲解SQL中空值的处理
  • Leetcode 2123. 使矩阵中的 1 互不相邻的最小操作数
  • 数据结构之堆:解析与应用
  • 高阶数据结构——并查集
  • vscode 插件 eslint, 检查 js 语法
  • mysql分布式教程
  • 构建高性能风控指标系统
  • AIGC工具平台-GPT-SoVITS-v4-TTS音频推理克隆
  • Arbitrum Stylus 合约实战 :Rust 实现 ERC721
  • Windows 账号管理与安全指南
  • Java后端优化:对象池模式解决高频ObjectMapper实例化问题及性能影响
  • SCAU8639--折半插入排序
  • JS手写代码篇---手写类型判断函数
  • Linux 基础指令入门指南:解锁命令行的实用密码
  • 无他相机:专业摄影,触手可及
  • 【C++高级主题】转换与多个基类
  • 电力系统时间同步系统
  • 玩客云 OEC/OECT 笔记(2) 运行RKNN程序
  • 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——4. 配置服务器终端环境 zsh , oh my zsh, vim
  • 数智管理学(十六)
  • 需求调研文档——日志文件error监控报警脚本
  • CSS强制div单行显示不换行