你只需看一次:实时且通用的多任务模型
A-YOLOM 插图
贡献
- 轻量化集成模型:我们开发了一种轻量级模型,能够将三个任务整合到一个统一的模型中。这对于需要实时处理的多任务场景尤其有利。
- 自适应连接模块:特别为分割架构的颈部区域设计了新颖的自适应连接模块。此模块可以无需手动设计就能自动连接特征,进一步增强了模型的泛化能力。
- 简洁通用的分割头:设计了一个轻量、简单且通用的分割头。对于同一类型的头部任务,我们使用了统一的损失函数,这意味着无需为特定任务定制设计;它仅由一系列卷积层构成。
- 广泛实验:基于公开可用的自动驾驶数据集进行了大量实验,证明我们的模型在推理时间和可视化方面优于现有工作。此外,我们在真实道路数据集上也进行了测试,结果表明我们的模型显著优于目前最先进的方法。
结果
-
参数与速度
模型 参数 (M) FPS (bs=1) FPS (bs=32) YOLOP 7.9 26.0 134.8 HybridNet 12.83 11.7 26.9 YOLOv8n(det) 3.16 102 802.9 YOLOv8n(seg) 3.26 82.55 610.49 A-YOLOM(n) 4.43 39.9 172.2 A-YOLOM(s) 13.61 39.7 96.2 -
交通对象检测结果
模型 召回率 (%) mAP50 (%) MultiNet 81.3 60.2 DLT-Net 89.4 68.4 Faster R-CNN 81.2 64.9 YOLOv5s 86.8 77.2 YOLOv8n(det) 82.2 75.1 YOLOP 88.6 76.5 A-YOLOM(n) 85.3 78.0 A-YOLOM(s) 86.9 81.1 -
可行驶区域分割结果
模型 mIoU (%) MultiNet 71.6 DLT-Net 72.1 PSPNet 89.6 YOLOv8n(seg) 78.1 YOLOP 91.6 A-YOLOM(n) 90.5 A-YOLOM(s) 91.0 -
车道线检测结果
模型 准确度 (%) IoU (%) ENet N/A 14.64 SCNN N/A 15.84 ENet-SAD N/A 16.02 YOLOv8n(seg) 80.5 22.9 YOLOP 84.8 26.5 A-YOLOM(n) 81.3 28.2 A-YOLOM(s) 84.9 28.8 -
消融研究 1: 自适应连接模块
训练方法 召回率 (%) mAP50 (%) mIoU (%) 准确度 (%) IoU (%) YOLOM(n) 85.2 77.7 90.6 80.8 26.7 A-YOLOM(n) 85.3 78.0 90.5 81.3 28.2 YOLOM(s) 86.9 81.1 90.9 83.9 28.2 A-YOLOM(s) 86.9 81.1 91.0 84.9 28.8 -
消融研究 2: 不同多任务模型和分割结构的结果
模型 参数 mIoU (%) 准确度 (%) IoU (%) YOLOv8(segda) 1,004,275 78.1 - - YOLOv8(segll) 1,004,275 - 80.5 22.9 YOLOv8(multi) 2,008,550 84.2 81.7 24.3 YOLOM(n) 15,880 90.6 80.8 26.7
注意事项
本工作中参考的工作包括 Multinet、DLT-Net、Faster R-CNN、YOLOv5s、PSPNet、ENet、SCNN、SAD-ENet、YOLOP、HybridNets 以及 YOLOv8。感谢他们的出色贡献。
可视化
- 实际道路
系统要求
- Python 版本:3.7.16
- PyTorch 版本:1.13.1
- 推荐 GPU:NVIDIA GeForce RTX 4090 或更高性能的 GPU
- 如果使用 NVIDIA GeForce GTX 1080 Ti,建议批量大小为 16。尽管训练时间会更长,但仍可行。
强烈建议创建纯净环境并遵循指示进行设置,以避免因 YOLOv8 自动检测环境包而可能引起的变量值变化问题。
数据准备及预训练模型
- 下载图像
- 预训练模型:A-YOLOM(包含两个版本,分别为 "n" 和 "s")
- 下载检测标注
- 下载可行驶区域分割标注
- 下载车道线分割标注
推荐的数据集目录结构如下:
# 根据 id 表示对应关系
├─dataset root
│ ├─images
│ │ ├─train2017
│ │ ├─val2017
│ ├─detection-object
│ │ ├─labels
│ │ │ ├─train2017
│ │ │ ├─val2017
│ ├─seg-drivable-10
│ │ ├─labels
│ │ │ ├─train2017
│ │ │ ├─val2017
│ ├─seg-lane-11
│ │ ├─labels
│ │ │ ├─train2017
│ │ │ ├─val2017
更新您的数据集路径于 ./ultralytics/datasets/bdd-multi.yaml
文件中。
训练
- 设置训练配置文件
./ultralytics/yolo/cfg/default.yaml
- 运行
python train.py
开始训练 - 可以根据需要修改
train.py
中的设置,如模型路径、数据路径、GPU 设备编号等
评估
- 设置评估配置文件
./ultralytics/yolo/cfg/default.yaml
- 运行
python val.py
进行评估 - 修改
val.py
中的相关路径和设置
预测
- 运行
python predict.py
进行预测 - 修改
predict.py
中的源图像路径、设备选择、输出尺寸等参数
扩展性
代码易于扩展至任何多任务分割和检测任务,只需修改模型 YAML 和数据集 YAML 文件中的信息,并按照我们的标签格式创建您的数据集即可。请记住,在检测任务名称中保留"det",在分割任务名称中保留"seg"。
当您更改检测任务类别数量时,请相应地调整 dataset.yaml
和 model.yaml
中的 "tnc" 值。"nc_list" 也需要更新,应与您的 "labels_list" 顺序相匹配。例如,如果您的 "labels_list" 包括检测对象、可行驶区域和车道线,则 "nc_list" 应设置为 [7,1,1]。
通过这些详细说明,您可以开始使用 YOLOv8 多任务模型进行自己的项目开发。希望这能帮助您快速启动并在多个计算机视觉任务上取得优异成绩。
最后
计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,远程协助,代码定制,私聊会回复!