YOLOv8 架构:深入探讨
YOLOv8 尚未发表论文,因此我们无法直接了解其创建过程中进行的直接研究方法和消融研究。话虽如此,我们分析了有关模型的存储库和可用信息,以开始记录 YOLOv8 中的新功能。
如果您想自己查看代码,请查看YOLOv8 存储库并查看此代码差异以了解一些研究是如何完成的。
在这里,我们提供了有影响力的模型更新的快速总结,然后我们将查看模型的评估,这不言自明。
GitHub 用户 RangeKing 制作的下图显示了网络架构的详细可视化。
YOLOv8 架构,GitHub 用户 RangeKing 制作的可视化
无锚检测
YOLOv8 是一个无锚模型。这意味着它直接预测对象的中心而不是已知锚框的偏移量。
YOLO中anchor box的可视化
锚框是早期 YOLO 模型中众所周知的棘手部分,因为它们可能代表目标基准框的分布,而不是自定义数据集的分布。
YOLOv5 的检测头,在netron.app中可视化
Anchor free 检测减少了框预测的数量,从而加速了非最大抑制 (NMS),这是一个复杂的后处理步骤,在推理后筛选候选检测。
YOLOv8 的检测头,在netron.app中可视化
新的卷积
stem 的第一个6x6
conv 被替换为 a 3x3
,主要构建块被更改,并且C2f替换了C3。该模块总结如下图,其中“f”是特征数,“e”是扩展率,CBS是由a Conv
、a BatchNorm
、a组成的block SiLU
。
在中, (两个具有剩余连接的 3×3C2f
的奇特名称)的所有输出都被连接起来。而在仅使用最后一个输出。Bottleneck``convs``C3``Bottleneck
新的 YOLOv8
C2f
模块
这Bottleneck
与 YOLOv5 中的相同,但第一个 conv 的内核大小从更改1x1
为3x3
. 从这些信息中,我们可以看到 YOLOv8 开始恢复到 2015 年定义的 ResNet 块。
在颈部,特征直接连接而不强制使用相同的通道尺寸。这减少了参数数量和张量的整体大小。
关闭马赛克增强
深度学习研究倾向于关注模型架构,但 YOLOv5 和 YOLOv8 中的训练例程是它们成功的重要部分。
YOLOv8 在在线训练期间增强图像。在每个时期,模型看到它所提供的图像的变化略有不同。
其中一种增强称为马赛克增强。这涉及将四张图像拼接在一起,迫使模型学习新位置、部分遮挡和不同周围像素的对象。
棋盘照片马赛克增强
然而,如果在整个训练过程中执行,这种增强根据经验显示会降低性能。在最后十个训练时期将其关闭是有利的。
这种变化是在 YOLOv5 repo 和 YOLOv8 研究中加班时对 YOLO 建模给予仔细关注的典范。
YOLOv8 精度改进
YOLOv8 研究的主要动机是对COCO 基准进行实证评估。随着网络和训练例程的每一部分都得到调整,新的实验将运行以验证更改对 COCO 建模的影响。
YOLOv8 COCO 精度
COCO(Common Objects in Context)是评估对象检测模型的行业标准基准。在 COCO 上比较模型时,我们查看推理速度的 mAP 值和 FPS 测量。模型应该以相似的推理速度进行比较。
下图显示了 YOLOv8 在 COCO 上的准确性,使用的数据由 Ultralytics 团队收集并发布在他们的YOLOv8 README中:
YOLOv8 COCO评测
在撰写本文时,YOLOv8 COCO 的准确性是推理延迟相当的模型的最新水平。
RF100 精度
在 Roboflow,我们从包含超过 100,000 个数据集的存储库Roboflow Universe中提取了 100 个样本数据集,以评估模型对新领域的泛化能力。我们的基准测试是在英特尔的支持下开发的,是计算机视觉从业者的基准测试,旨在为以下问题提供更好的答案:“该模型在我的自定义数据集上的表现如何?”
我们在我们的RF100基准测试中与 YOLOv5 和 YOLOv7 一起评估了 YOLOv8,下面的箱线图显示了每个模型的_mAP@.50。_
我们将每个模型的小型版本运行 100 个 epoch,我们只用一个种子运行一次,因此由于梯度抽签,我们对这个结果持保留态度**。**
下面的箱线图告诉我们,当针对 Roboflow 100 基准进行测量时,YOLOv8 有更少的离群值和更好的 mAP。
YOLOs _mAP@.50_对抗 RF100
以下条形图显示了每个 RF100 类别的平均_mAP@.50_。同样,YOLOv8 优于所有以前的模型。
YOLO 相对于 RF100 类别的平均_mAP@.50_
相对于 YOLOv5 评估,YOLOv8 模型在每个数据集上产生了相似的结果,或者显着提高了结果。
YOLOv8 存储库和 PIP 包
YOLOv8代码库旨在成为社区使用和迭代模型的地方。由于我们知道这个模型会不断改进,我们可以将最初的 YOLOv8 模型结果作为基线,并期待随着新迷你版本的发布而进行未来的改进。
我们希望的最好结果是研究人员开始在 Ultralytics 存储库之上开发他们的网络。研究一直在 YOLOv5 的分支中进行,但如果模型在一个位置制作并最终合并到主线中会更好。
YOLOv8 存储库布局
YOLOv8 模型使用与 YOLOv5 相似的代码和新结构,其中分类、实例分割和对象检测任务类型由相同的代码例程支持。
模型仍然使用相同的YOLOv5 YAML 格式进行初始化,数据集格式也保持不变。
YOLOv8 CLI
该ultralytics
软件包随 CLI 一起分发。许多 YOLOv5 用户都熟悉这一点,其中核心训练、检测和导出交互也是通过 CLI 完成的。
yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml
您可以将 a task
in [detect, classify, segment]
、 a mode
in [train, predict, val, export]
、 amodel
作为未初始化.yaml
或先前训练的.pt
文件传递。
YOLOv8 Python 包
除了可用的 CLI 工具外,YOLOv8 现在作为 PIP 包分发。这使本地开发变得更加困难,但释放了将 YOLOv8 编织到 Python 代码中的所有可能性。
from ultralytics import YOLO
# 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
文章出处登录后可见!