YOLO模型详解

背 景

YOLO,you only look once,是著名的图像目标识别模型系列。YOLO(You Only Look Once)以其快速而著称,最初由Joseph Redmon等人在2015年提出。与传统的二阶段目标检测方法不同,YOLO将整个检测过程简化为一个单一的回归问题,通过一次遍历即可同时预测图像中物体的位置和类别。

YOLO的主要优势在于其速度和准确性之间的良好平衡。相比其他目标检测方法(如DPM和R-CNN系列),YOLO不仅检测速度快,而且整体检测精度并不差。此外,据说YOLO还具有较低的误检率,因为它在整个图像上进行全局推理,减少了背景错误的可能性。

但笔者极为有限的工作经验中,几乎不记得任何一款主流自动驾驶系统的图像识别模型,是采用YOLO的。

这是非常奇怪的,因为自动驾驶系统中目标识别的速度就是生命线,目标识别速度越快,留给后面(路径)规划和控制(执行)的时间就越宽裕。而且快速识别对于规避突然出现的目标有明显的行车安全意义。

以快速而著称的YOLO,为什么没有一统江山,成为车辆自动驾驶的绝对主流图像识别方案呢?本文将带着这个问题,梳理整个YOLO模型的技术脉络,阐明原理,从原理出发回答这个问题。

 

 

two-stage VS one-stage

一般的图像识别思路,是先定位再分类,也就是对一种图片中存在的多个目标,每一个用一个最小框框出来,然后把这个最小框喂给分类器,判断里面的东西应该分类到哪一类目标,是车是马,是人是动物,等等。先定位再分类就是two stage两阶段法。

这个最小框的学名叫做bounding box(bbox,有的翻译成边界框),它十分重要。最小是指,如果更小就必然要丢失目标的某一部分,就像截图再小就有一部分截不进来。如果更大,就会把无关背景带进框内,对分类算法造成额外的困难。

这个bounding box除了刚刚好精确地把目标框出来,以帮助对它进行分类外。另外一个重要作用是对目标的精确定位,这对自动驾驶判定和预测障碍物位置,然后精确规划避障路线,十分紧要。

图片

图1 two-stage图像识别,图片来自CSDN

两阶段图像识别是如此的自然,以至于one-stage一阶段目标识别反而让人理解起来比较困难,因为让人觉得不那么直观。

在这里,克服这个不直观”的学习心理学要点是:放弃对目标定位的精确性要求,这里只需要识别目标,但不保证定位目标。

打一个更加直观的比方:识别一只猫,我们只需要框住这只猫足够大的面积,足以判定是只猫就行,至于锚的别的没有框进来的部位在哪里,我们只给一个概率性的猜测就行了。所以走路时要注意,虽然识别出了猫,但走路时还是可能踩到猫的尾巴,如果猫尾巴刚好没被框进来的话,因为不知道完整的猫的精确位置。

具体说来,YOLO(You Only Look Once)的作者们认为,目标检测中的两个核心任务——提取候选区域(定位)和逐一识别(分类),完全可以由一个单独的网络来同时完成,而无需分成两个阶段。颠覆了传统的目标检测方法,如R-CNN系列,它们通常分为两个阶段:首先生成候选区域(Region Proposal),然后对这些区域进行分类。YOLO通过一种统一的框架实现了定位和分类的同时处理,以下是具体实现方式:

1.图像划分:YOLO将输入图像划分为一个SxS的网格结构,S是很小的整数,比如7或者13。所以划分出的网格单元是大单元,不是小单元。每个网格单元负责预测位于该网格内的目标的位置和类别。如果一个目标的中心落在某个网格单元内,那么这个网格单元就负责预测该目标。

2.边界框bounding box预测:对于每个网格单元,YOLO预测B(B一般是3-5,不会太大)个边界框以及每个边界框的置信度分数。置信度分数反映了模型对该边界框内存在目标的信心程度,以及边界框与实际目标的吻合程度。置信度分数计算公式为:Pr(Object) * IOU(pred, truth),其中Pr(Object)表示网格单元内存在目标的概率,IOU(pred, truth)表示预测边界框与真实边界框之间的交并比。

3.类别预测:除了预测边界框外,每个网格单元还会预测C个类别概率,即P(c|Object),表示在存在目标的情况下,目标属于某一类别的条件概率。这些类别概率是针对整个网格单元的,而不是针对单个边界框。

4.统一损失函数:YOLO设计了一个统一的损失函数,用于同时优化边界框坐标、置信度分数和类别概率。这种多任务学习的方式使得模型能够在训练过程中平衡定位和分类的任务。损失函数包括定位误差、置信度误差和类别误差三部分。

5.单次前向传播:YOLO通过一次前向传播即可完成目标检测的所有任务。这得益于其独特的网络结构设计,使用卷积层和全连接层相结合的方式来提取特征并进行预测。相比于两阶段的方法,YOLO显著提高了检测速度,能够达到实时检测的效果。

6.回归问题处理:YOLO将目标检测视为一个回归问题,直接从整幅图像中预测出目标的边界框坐标和类别概率。这种方法避免了生成候选区域的过程,简化了检测流程,同时也减少了由于候选区域不准确带来的误差。

总体来说,YOLO是把待处理的图片分为一些面积比较大、数量比较少的网格单元。对每个单元预测单元中存在物体的可能性(用置信度分数表示),以及物体的分类可能性的概率分布。这些网格单元越多,YOLO的计算量就越大。

从上面过程可以看出,YOLO是“看部分推测整体”,从而实现一阶段目标识别的;而两阶段目标识别算法是“看整体推测整体”。“看部分推测整体”,当然也就意味着有一些部分是看不到,既不知道位置,也不知道是什么。除非非常幸运,这个物体恰好完全被包含在某个划分出来的网格单元里面。

 

YOLO架构和核心技术原理

早期YOLO的架构图最好的体现了YOLO的基本思想,后期添加了太多细节反而模糊了基本原则。所以本文采用早期YOLO的架构图来说明。

图片

图片

图片

图2 YOLO V1的架构图,来自CSDN

图片

图3 典型的卷积神经网络CNN架构图,ALexNet,来自Github

对比YOLO的架构和典型CNN的架构ALexNet,会发现明显的相似性,前面都是从大到小的卷积层(带池化层),用于图像识别;逐步过渡到FC(full connection)的全连接层,也就是典型的前馈神经网络,或者叫多层感知机。

最后输出时略有不同,ALexNet因为只负责分类,也就是通过识别物体属于哪一类来说明物体是是什么东西,所以最后是softmax层输出物体属于某一类物体的概率分布。喂给ALexNet的输入就是框好的物体,定位问题不是主要问题。

图片

图4 仅仅分类而不强调定位的目标识别数据集示例,来自网络

而YOLO的最终输出要丰富得多,不仅是物体的分类信息,也就是属于每一类的可能性,也称为分类置信度ci,还要输出另外一种猜测,对物体的bounding box的猜测,请参见下图:

图片

图5 YOLO对每一块单元格的输出,图片来自网络

YOLO对每一块单元格的输出,具体是:

Pc:这个格子包含物体的概率,比如蓝色格子是背景,没有值得识别的物体,这个概率是0。这里有没有值得识别的物体,是取决于训练数据。训练数据中没有把树叶当作物体,训练出来的模型也就视树叶为无物。

然后b系列是本单元格中预测的物体的bounding box的坐标和长宽。这个boucing box完全可以超出本单元格的范围,与邻近单元格预测的bounding box高度重合。

假设一只猫刚好被划分进左右两个单元格,左边是猫的后半身,右边是猫的前半身。左边的单元格根据后半身,“从局部推测整体”,预测出整只猫的bouncing box,是一个向右延申的大方框;类似的,右边单元格根据前半身,“从局部推测整体”,预测出整只猫的bouncing box,是一个向左延申的大方框。对于良好训练的模型,这两个大方框必然有一定的重合性。

但是敏感的读者会说,猫可是柔韧性很强的动物,猫的后半身在这里,前半身完全可以扭到任意可行方向,反过来也类似。不能从前半身推测猫的后半身位置。

读者的这种担心完全正确,YOLO的核心其实多多少少类似盲人摸象,摸到大象墙壁一样的身体,就宣称识别出了大象,但大象的实际具体位置相比于预测的bounding box,可能偏左一点,偏右一点,偏上偏下一点都有可能。

YOLO这种从局部部分推测整体的能力完全是训练数据集赐给它的礼物,训练数据集就是给它看某个物体的各个不同部分,然后告诉它这个物体的真实位置和分类是什么。YOLO学习的就是这个。

至于输出中的c系列,就是当前单元格如果包含物体的部分,这个物体所属的分类是什么,也就是它属于每一种分类的概率,这些概率加起来是1。比如YOLO2支持9000种分类,那么c系列的长度就是9000,每一种都有一个概率值,概率最大的就是该物体最可能属于的分类。

 

YOLO编年史

YOLO(You Only Look Once)模型代表着计算机视觉领域中目标检测的一个重要里程碑。自2015年首次提出以来,YOLO系列经历了多个版本的迭代和改进,每个版本都在性能、速度和应用场景上有所提升。

图片

图6 YOLO发展史鱼骨图,来自CSDN

  • YOLOv1

发布时间:2015年 。

核心创新:YOLOv1将目标检测问题转化为一个回归问题,直接从整张图像预测边界框和类别概率。这种方法显著提高了检测速度,使其成为首个能够实现实时检测的模型之一。

性能:尽管速度快,但YOLOv1在定位精度上略逊于一些两阶段检测器。

  • YOLOv2 (YOLO9000)

发布时间:2016年 。

改进点:引入了Batch Normalization技术,优化了网络训练过程。

使用更深的Darknet-19网络结构,增强了特征提取能力。

支持更多的类别检测,达到了9000类 。

性能提升:相比YOLOv1,YOLOv2在mAP(mean Average Precision)上有显著提高。

  • YOLOv3

发布时间:2018年。

改进点:使用Darknet-53作为主干网络,进一步提升了特征提取能力。

支持多尺度预测,增强了对小目标的检测能力。

应用场景:YOLOv3在保持实时性的同时,提供了更高的检测精度,适用于复杂的实际场景。

  • YOLOv4

发布时间:2020年。

改进点:引入了CSPDarknet53作为主干网络,减少了计算量并提高了性能。

利用Mish激活函数替代传统的ReLU,提升了网络表现。

采用了多种先进的训练技巧,如CutMix和Mosaic数据增强。

性能:YOLOv4在多个指标上超越了之前的版本,尤其是在资源受限环境下的表现尤为突出。

  • YOLOv5

发布时间:2020年。

开发者:Glenn Jocher。

特点:开源且易于使用,支持PyTorch框架。

提供了多种预训练模型,适应不同的硬件条件。

性能:YOLOv5在速度和精度之间找到了良好的平衡,成为工业应用中的热门选择。

  • YOLOv6

发布时间:2022年。

改进点:优化了模型架构,减少了推理时间。

增强了轻量化设计,更适合边缘设备部署。

应用场景:YOLOv6专注于提高效率和降低功耗,适合移动设备和嵌入式系统。

  • YOLOv7

发布时间:2022年。

特点:在不增加额外计算成本的情况下,显著提升了检测精度。

引入了EfficientRepBackbone等新技术,优化了模型效率。

性能:YOLOv7在多个基准测试中表现出色,特别是在高分辨率图像上的检测能力。

  • YOLOv8

发布时间:2023年。

开发者:Ultralytics LLC。

特点:统一了分类、实例分割和目标检测的任务支持。

作为目前最稳定的版本,提供了更灵活的API和工具链,便于用户定制化开发。

应用场景:YOLOv8扩展了YOLO系列的应用范围,支持更多类型的计算机视觉任务。

  • YOLOv9

YOLOv9 是 YOLO 系列中的一个重要升级版,它引入了多种创新技术来提升模型性能。包括引入了可编程梯度信息 (PGI) 和广义高效层聚合网络 (GELAN) 。

此外,YOLOv9 在架构上支持动态锚点和增强的框抑制技术,这使得模型在处理复杂场景时更加高效 。根据研究团队的说法,YOLOv9 在计算效率和参数减少方面表现出色,适合需要高性能计算的应用场景 。

  • YOLOv10

YOLOv10是YOLOv9 和 YOLOv11 之间的过渡版本。

  • YOLOv11

YOLOv11 是 YOLO 系列的最新版本不仅在精度上高于前辈,还在任务支持的多样性上进行了优化,使其能够适应更广泛的应用场景。YOLOv11 在 Ultralytics 生态系统内进行了优化,以支持高精度和多功能任务。

与 YOLOv9 相比,YOLOv11更注重高精度和任务的灵活性,适用于需要精确检测和多样化任务支持的场合。

YOLO版本

论文链接

代码链接

YOLOv1

https://arxiv.org/pdf/1506.02640

一般直接从v3开始读代码

YOLOv2

https://arxiv.org/pdf/1612.08242#page=4.24

一般直接从v3开始读代码

YOLOv3

https://arxiv.org/pdf/1804.02767

YOLO: Real-Time Object Detection

YOLOv4

https://arxiv.org/pdf/2004.10934

darknet

YOLOv5

无论文

yolov5

YOLOX

https://arxiv.org/pdf/2107.08430

YOLOX

YOLOv6

https://arxiv.org/pdf/2209.02976

YOLOv6

YOLOv7

https://arxiv.org/pdf/2207.02696

yolov7

YOLOv8

无论文

ultralytics

YOLOv9

https://arxiv.org/pdf/2402.13616

yolov9

YOLOv10

https://arxiv.org/pdf/2405.14458

yolov10

YOLOv11

无论文

yolo

 

总 结

以快速而著称的YOLO,为什么没有一统江山,成为车辆自动驾驶的绝对主流图像识别方案呢?笔者认为主要还是one-stage带来的目标定位精确性不是特别高。也就是说,YOLO的优势也是它的劣势

更加具体的,导致YOLO在某些自动驾驶场景中应用受限的因素如下:

定位精度不足:YOLO算法的一个已知问题是其定位精度相对较低,特别是在检测小目标时。这对于自动驾驶来说是一个重要的考量因素,因为需要准确地识别和定位诸如行人、交通标志等较小的目标,可以参考文章《YOLO的局限性和优化方向》
https://wenku.csdn.net/column/4vsyt9pob9

对远距离目标的检测能力有限:有报告指出,YOLO在检测远处的目标(如交通灯)时可能存在困难。这在自动驾驶中是一个关键问题,因为系统需要能够提前识别到远处的交通信号以做出适当的反应。这实际上是小目标识别问题,远处的交通灯在图像上太小了。

多任务需求:自动驾驶不仅需要目标检测,还需要进行路径规划、行为预测等多种任务。虽然YOLO擅长快速目标检测,但可能无法单独满足所有这些需求。因此,在一些复杂的自动驾驶系统中,可能会结合使用多种算法来完成不同的子任务。

计算资源限制:尽管YOLO以其速度和效率著称,但在资源受限的嵌入式平台上运行时,仍需考虑其计算开销。对于高性能计算平台而言,这可能不是问题;但对于计算能力有限的设备,则可能需要选择更轻量级的解决方案。

模型复杂度与训练难度:虽然YOLO系列算法已经发展到了较新的版本(如YOLOv11),但随着模型变得越来越复杂,其训练和调整过程也变得更加具有挑战性。这对开发团队的技术能力和资源投入提出了更高要求。简单说就是YOLO膨胀得太厉害了,不管是规模还是技术复杂度。

尽管如此,YOLO仍然因其高效的实时目标检测能力而在自动驾驶领域得到了广泛应用,只是较少单独作为主力图像目标识别方案而已。例如,它被用于检测车辆、行人、近距离交通标志和路侧建筑等对象。或者在一些特殊场景中,比如垃圾车识别垃圾类型和垃圾桶,比如道路遗撒监控,检测路面覆盖物是渣土,还是污水等等。

 

最后

如果你真的想学习人工智能,请不要去网上找那些零零碎碎的教程,真的很难学懂!你可以根据我这个学习路线和系统资料,制定一套学习计划,只要你肯花时间沉下心去学习,它们一定能帮到你!

这里也给大家准备了人工智能各个方向的资料,大家可以微信扫码找我领取哈~
也可以微信搜索gupao66回复32无偿获取哦~ 

### YOLO11模型架构 YOLO11继承了YOLO系列一贯的设计理念,即通过单阶段检测器实现快速而高效的目标检测。相比于YOLOv8,YOLO11的主要改进在于将C2f组件替换为C3k2,并引入了一种新的注意力机制——C2PSA模块[^4]。 #### C3k2 组件 C3k2是一种新型卷积层设计,旨在提高特征提取能力的同时减少计算量。该组件采用了更高效的内核配置方式来增强局部感受野的效果,从而提升了模型对于复杂场景下的目标识别精度。 #### C2PSA 注意力模块 为了进一步提升模型性能,YOLO11加入了基于通道和空间维度上的双重自适应加权策略(C2PSA),使得网络能够更加聚焦于重要区域的信息处理过程,进而改善整体表现效果。 --- ### YOLO11的特点 - **更高的准确性**:得益于新加入的C2PSA注意力建模技术,YOLO11能够在保持实时性的前提下显著提升检测质量; - **更快的速度**:优化后的C3k2结构不仅增强了特征表达能力还降低了运算成本,实现了速度与效率之间的良好平衡; - **更好的鲁棒性**:通过对不同尺度物体的有效捕捉以及背景噪声抑制功能的应用,使YOLO11具备更强的实际应用价值; --- ### 使用方法详解 要使用YOLO11模型进行目标检测任务,可以通过访问Coovally平台完成相应操作: 1. 登录到Coovally网站后导航至【全部模型】板块; 2. 利用搜索栏查找`YOLO11`关键词定位所需版本; 3. 下载官方提供的预训练权重文件或直接在线创建个人专属实例; 4. 转跳至【模型集成】界面按照提示说明执行必要的环境搭建工作; 此外,如果希望在本地环境中运行YOLO11,则需先安装Python依赖库并加载指定格式(.pt)的参数集: ```python from ultralytics import YOLO11 model = YOLO11('path_to_your_weights_file/yolov11s.pt') results = model.predict(source='your_image_or_video', conf=0.5, iou=0.45) ``` 此段代码展示了如何利用Ultralytics框架调用已训练好的YOLO11模型来进行图像/视频流中的对象识别作业[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值