昨天的文章中,咱们回顾了 YOLO 家族的前 9 个架构。本文中将持续总结最初 3 个框架,还有本月最新公布的 YOLO V8.
YOLOR
Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao
“You Only Learn One Representation: Unified Network for Multiple Tasks”2021/05, https://arxiv.org/pdf/2105.04…
这个名称的翻译可能会有不同,“你只学习一种示意”。作者说这与之前的 YOLO 版本无关,概念也与 YOLO 有所不同。
因为有隐性常识(以前教训的概括)和显性常识(通过感官感知)。所以了解图片中显示的内容的人比不了解的一般神经网络可能更好地解决。
卷积神经网络通常执行一个单个的特定的工作,而 YOLOR 的指标是同时能够训练它们同时解决多个工作,在他们学习解析输出以取得输入的同时,YOLOR 试图迫使卷积网络做两件事:
- 理解如何取得输入
- 试图确定所有不同的输入可能是什么。
所以模型有多个输入,而不是一个输入。
YOLOR 试图联合显性和隐性常识。对于神经网络,它们的显性常识存储在凑近输出的层中,而隐性常识存储在较远的层中。YOLOR 成为一个对立的神经网络。
论文介绍了神经网络中内隐性常识与显性常识整合过程中的关键问题:
在隐式常识的学习过程中引入了核空间对齐、预测细化和多任务学习等办法。向量、神经网络和矩阵合成是用来建模隐性常识和剖析其有效性的办法。
长处
公布时的检测精度和检出率高于竞争对手
YOLOv6 / MT-YOLOv6
Meituan, China.
“YOLOv6: A Single-Stage Object Detection Framework for IndustrialApplications”2022/09, https://arxiv.org/pdf/2209.02…
美团的博客地址:https://tech.meituan.com/2022…
v6 的改良次要集中在三个方面:
- backbone 和 neck 局部对硬件进行了优化设计
- forked head 更精确
- 更无效的训练策略
backbone 和 neck 的设计是利用硬件方面的劣势,如处理器外围的计算个性,内存带宽等,以进行无效的推理。
backbone
neck
作者别离应用 Rep-Pan 和 EfficientRep 块从新设计了架构的局部。
美团团队进行的试验表明,计算提早和检测精度显著升高。特地是,与 YOLOv6-nano 模型相比,YOLOv6-nano 模型的速度进步了 21%,精度进步了 3.6%。
头部解耦
分叉头第一次呈现在 V5 中。它用于网络分类局部和回归局部的拆散计算。在 v6 中,这种办法失去了改良。
训练的策略包含:
- anchorless
- SimOTA 标记策略
- SIoU 盒回归的损失
长处
检测精度和检出率高于竞争对手
应用规范的 PyTorch 框架,能够不便的进行微调
YOLOv7
Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao.
作者与 YOLOv4 的团队雷同,能够认为是 YOLO 的官网公布。
“YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors”2022/07, https://arxiv.org/pdf/2207.02…
与其余实时模型相比,所提出的办法达到了最先进的性能。
次要计算单元是 E -ELAN(扩大高效层聚合网络)
它的设计思考了以下影响计算精度和速度的因素:
- 内存拜访老本
- I / O 比率
- element-wise 操作
- 激活
- 梯度门路
不同的利用须要不同的模型。在某些状况下检测精度是更重要的 - 那么模型应该有更多的可训练参数。在其余状况下,速度更重要模型应该更小,以便推理得更快。
在缩放 v7 时,须要思考以下超参数:
- 输出分辨率
- 宽度(通道数)
- 深度(层数)
- 级联(特色金字塔的数量)
下图显示了一个同步模型扩大的示例。
论文还探讨了一套能够在不减少训练老本的状况下进步模型性能的办法。
再参数化是在训练后利用于改良模型的技术。它减少了训练工夫,但进步了推理性能。有两种类型的从新参数化,模型级和模块级。
模型从新参数化能够通过两种形式实现:
- 应用不同的训练数据,训练多个设置雷同模型。而后均匀它们的权重失去最终模型。
- 均匀模型不同训练轮次权重。
模块化再参数化在钻研中较为罕用。该办法将模型训练过程划分为大量的模块。对输入进行集成以失去最终模型。
在 v7 体系结构中,能够有多个头来执行不同的工作,每个头都有本人的损失。标签分配器是一种思考网络预测和实在预测并调配软标签的机制。它生成软标记而不是硬标记。
长处
公布时检测精度和检出率高于竞争对手
应用规范的 PyTorch 框架,能够不便的进行微调
后期模型总结
在介绍 V8 之前,咱们再总结一下以前的模型
尽管上表并未提及所有进步性能的改良和发现。然而 YOLO 的倒退咱们能够看到一些模式。
Backbone 最后由一个分支(GoogLeNet、VGG、Darknet)组成,而后过渡到蕴含跳跃连贯的架构(Cross-Stage Partial connections — CSPDarknet、CSPRepResNet、Extended-ELAN)。
Neck 最后也由一个分支组成,而后以特色金字塔网络的各种批改模式逐渐倒退,这样能够在不同尺度下放弃物体检测的准确性。
Head:在晚期版本中只有一个 head,它蕴含所有输入参数——分类、bbox 的坐标等。前面的钻研发现将它们分成不同的头会更有效率。从基于锚点到无锚点也产生了转变(v7 除外——出于某种原因,它依然有锚点)。
数据加强:仿射变换、HSV 抖动和曝光变动等晚期加强非常简单,不会扭转对象的背景或环境。而最近的一些——MixUp、Mosaic、CutOut 等扭转了图像的内容。均衡这两个方向加强的比例对于神经网络的无效训练都很重要。
YOLO v8
YOLOv3 之前的所有 YOLO 对象检测模型都是用 C 语言编写的,并应用了 Darknet 框架,Ultralytics 公布了第一个应用 PyTorch 框架实现的 YOLO (YOLOv3),YOLOv3 公布后不久,Joseph Redmon 就来到了计算机视觉钻研社区。
YOLOv3 之后,Ultralytics 公布了 YOLOv5,在 2023 年 1 月,Ultralytics 公布了 YOLOv8。
YOLOv8 蕴含五个模型,用于检测、宰割和分类。YOLOv8 Nano 是其中最快和最小的,而 YOLOv8 Extra Large (YOLOv8x)是其中最精确但最慢的,具体模型见后续的图。
YOLOv8 附带以下预训练模型:
- 指标检测在图像分辨率为 640 的 COCO 检测数据集上进行训练。
- 实例宰割在图像分辨率为 640 的 COCO 宰割数据集上训练。
- 图像分类模型在 ImageNet 数据集上预训练,图像分辨率为 224。
与之前的 YOLO 模型相比,YOLOv8 模型仿佛体现得更好。不仅是 YOLOv5,YOLOv8 也当先于 YOLOv7 和 YOLOv6 等
与其余在 640 图像分辨率下训练的 YOLO 模型相比,所有 YOLOv8 模型在参数数量类似的状况下都具备更好的吞吐量。
上面咱们看看模型到底更新了什么
YOLOv8 尚未发表论文,所以咱们无奈失去构建时的钻研办法和融化钻研的详细信息。然而咱们能够从代码中看到他的改良,上面这张图是由 GitHub 用户 rangging 制作,展现了网络架构的具体可视化。
YOLOv8 是一种无锚点模型,这意味着它间接预测对象的核心,而不是已知锚框的偏移量。锚点是晚期 YOLO 模型中家喻户晓的很麻烦的局部,因为它们可能代表指标基准框的散布,而不是自定义数据集的散布。
无锚点缩小了预测框的数量,从而放慢了非最大克制 (NMS) 的速度。下图为 V8 的检测头局部的可视化
新的卷积
stem 的第一个 6×6 conv 变为 3×3,次要构建块也应用 C2f 取代了 C3。该模块总结如下图,其中“f”是特色数,“e”是扩大率,CBS 是由 Conv、BatchNorm 和前面的 SiLU 组成的块。
在 C2f 中,Bottleneck 的所有输入(两个具备残余连贯的 3×3 卷积)都被连接起来。而在 C3 中,仅应用了最初一个 Bottleneck 的输入。
Bottleneck 与 YOLOv5 中雷同,但第一个 conv 核大小从 1 ×1 更改为 3 ×3。咱们能够看到 YOLOv8 开始复原到 2015 年定义的 ResNet 块。
neck 局部,特色间接连贯,而不强制雷同的通道尺寸。这缩小了参数计数和张量的总体大小。
Mosaic 加强
深度学习钻研往往侧重于模型架构,但 YOLOv5 和 YOLOv8 中的训练过程是它们胜利的重要组成部分。
YOLOv8 在在线训练中加强图像。在每个轮次,模型看到的图像变动略有不同。
Mosaic 加强,将四张图像拼接在一起,迫使模型学习新地位,局部遮挡和不同四周像素的对象。
教训表明,如果在整个训练程序中进行这种加强会升高性能。在最初 10 个训练轮次敞开它则进步了性能。
以下性能来自 Ultralytics 的 github
能够看到,目前来说 YOLOv8 的精度和推理提早都是最先进的。
YOLOv8 代码构造
YOLOv8 模型利用了与 YOLOv5 相似的代码,但采纳了新的构造,其中应用雷同的代码来反对分类、实例宰割和对象检测等工作类型。模型依然应用雷同的 YOLOv5 YAML 格局初始化,数据集格局也放弃不变。
ultralytics 还提供了通过命令,许多 YOLOv5 用户应该对此很相熟,其中训练、检测和导出交互能够通过 CLI 实现的。
yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml
PIP 包也能够很简略的让咱们进行定制的开发和微调训练:
fromultralyticsimportYOLO
# Load a model
model=YOLO("yolov8n.yaml") # build a new model from scratch
model=YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
# Use the model
results=model.train(data="coco128.yaml", epochs=3) # train the model
results=model.val() # evaluate model performance on the validation set
results=model("https://ultralytics.com/images/bus.jpg") # predict on an image
success=YOLO("yolov8n.pt").export(format="onnx") # export a model to ONNX format
这使得能够方便使用咱们的数据集进行训练,具体训练的形式有很多文章,咱们这里就不阐明了。
https://avoid.overfit.cn/post/7596c1ba2d9544189f46e1abf6445c60