对应论文:https://arxiv.org/abs/2502.12524
GitHub项目地址:https://github.com/sunsmarterjie/yolov12.git
YOLOv12:实时目标检测的新里程碑
YOLOv12是由Sunsmarterjie团队提出的一种基于注意力机制的实时目标检测框架。作为YOLO系列的最新迭代版本,YOLOv12突破了传统CNN架构的局限性,首次在保持超快推理速度的同时,充分发挥了注意力机制在建模能力上的优势。其核心创新在于设计了一种轻量级注意力模块(如动态轴向注意力、轻量化多头自注意力),既保留了全局特征交互能力,又大幅降低了计算开销。根据论文实验结果,YOLOv12在多个模型规模(N/S/M/L)上均超越YOLOv10/11和RT-DETR系列模型:例如最小版本YOLOv12-N在T4 GPU上以1.64ms的推理延迟达到40.6% mAP,比YOLOv11-N提升1.2% mAP的同时,计算量仅为后者的36%。这种"速度-精度"的突破性平衡使其成为工业质检、智慧工地等实时场景的理想选择。
配置环境和代码
环境准备
为充分利用AutoDL的GPU资源并加速训练过程,建议开启学术资源加速网络(具体命令如下)。本教程基于Ubuntu系统,使用Conda管理虚拟环境以避免依赖冲突。
source /etc/network_turbo # 启用学术网络加速
git clone https://github.com/sunsmarterjie/yolov12.git # 克隆官方仓库
依赖安装
进入项目目录后,需安装以下组件:
- FlashAttention:通过预编译的wheel文件安装NVIDIA优化版注意力算子,可加速自注意力计算约2-3倍
- Conda虚拟环境:创建独立Python环境避免版本冲突
- 项目依赖:
requirements.txt
包含PyTorch、Ultralytics框架等核心依赖
cd yolov12
wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.3/flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
conda create -n yolov12 python=3.11 # 创建Python 3.11环境
conda activate yolov12
pip install -r requirements.txt
pip install -e . # 以开发模式安装项目本身
准备数据集
数据集说明
下载:
链接: https://pan.baidu.com/s/1SqHJtJpKZYUkdA3ASyfZrA?pwd=0615 提取码: 0615
本教程使用的施工场景PPE数据集包含6类安全装备:人员(person)、马甲(vest)、蓝色/红色/白色/黄色安全帽。数据集已按6:2:2划分为训练集、验证集和测试集,标注格式为YOLO通用的TXT文件(每行包含类别ID+归一化坐标)。
# 数据集下载与解压示例(实际路径需根据AutoDL存储位置调整)
unzip train_data.zip -d /root/autodl-tmp/yolov12/dataset/train_data/
数据配置文件
data.yaml
定义了数据路径、类别数和数据增强策略:
- 数据增强:启用了Mosaic(提升小目标检测)、MixUp(缓解过拟合)、HSV颜色扰动(增强光照鲁棒性)
- 几何变换:限制旋转角度(±10°)和平移比例(0.1),避免标注框溢出图像
- 设备适配:
workers=0
适用于AutoDL按秒计费场景,减少内存占用
# data.yaml 完整配置示例
train: /root/autodl-tmp/yolov12/dataset/train_data/train
val: /root/autodl-tmp/yolov12/dataset/train_data/val
nc: 6
names: ['person','vest',"blue helmet",'red helmet',"white helmet",'yellow helmet']
# Data augmentation settings
augmentations:
hsv_h: 0.015 # Hue 增强范围:取值大表示颜色扰动更强(0-1),建议0.01-0.02
hsv_s: 0.7 # Saturation 增强范围:取值大表示饱和度变化更剧烈(0-1)
hsv_v: 0.4 # Value (Brightness) 增强范围:取值大表示亮度变化更剧烈
flipud: 0.5 # 上下翻转概率:取值大表示更多垂直翻转数据(0-1)
fliplr: 0.5 # 左右翻转概率:取值大表示更多水平翻转数据(默认0.5)
mosaic: 1.0 # Mosaic增强概率:取值1表示始终启用(YOLO推荐增强策略)
mixup: 0.2 # MixUp增强概率:取值大表示更多混合图像增强(建议0.1-0.3)
degrees: 10 # 旋转角度范围:取值大表示更大旋转角度(如±45°),取值小避免过度畸变
translate: 0.1 # 平移比例范围:取值大表示更大位移(如0.2),取值小避免目标移出图像
scale: 0.2 # 缩放比例范围:取值大表示更大缩放(如0.5),取值小保持原始尺寸
shear: 0.0 # 剪切变换强度:取值大表示更强的形状变形(默认关闭)
准备训练文件
训练脚本解析
train.py
基于Ultralytics API实现,关键参数说明:
- 模型初始化:加载预训练权重
yolov12n.pt
(可通过yolo download
获取) - 硬件配置:
device='0'
指定GPU训练,batch=120
充分利用16GB显存 - 训练策略:
close_mosaic=10
:最后10轮关闭Mosaic以稳定模型收敛optimizer='SGD'
:YOLO系列常用优化器,配合余弦学习率效果更佳cache=True
:将预处理后的数据缓存到内存,加速后续epoch
# train.py 完整代码
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO(model=r'yolov12n.pt')
model.train(
# 指定数据集的配置文件路径,该文件包含了训练集、验证集的路径以及类别信息等,刚才新建的yaml文件位置
data=r'/root/autodl-tmp/yolov12/yaml/data.yaml',
# 输入图像的尺寸大小,这里将所有输入图像调整为 640x640 像素
imgsz=640,
# 训练的总轮数,即整个数据集会被模型遍历 50 次
epochs=30,
# 每个批次中包含的图像数量,该值需要根据显存大小进行调整,避免显存溢出
batch=120,
# 用于数据加载的工作线程数量,设置为 0 表示使用主线程进行数据加载
workers=0,
# 指定用于训练的设备,0 表示使用第一块 GPU 进行训练,如果是多 GPU 系统,可通过修改该值选择不同的 GPU
device='0',
# 选择的优化器,这里使用随机梯度下降(SGD)优化器来更新模型的参数
optimizer='SGD',
# 在训练的最后 10 个 epoch 关闭 mosaic 数据增强方法,mosaic 是一种将多张图像拼接在一起进行训练的增强技术
close_mosaic=10,
# 是否从上次中断的位置继续训练,设置为 False 表示不继续,而是从头开始训练
resume=False,
# 训练结果(如模型权重、日志等)保存的项目目录
project='runs/train',
# 本次训练的名称,会作为项目目录下的子目录名,用于区分不同的训练实验
name='exp',
# 是否将所有类别视为一个单一类别进行训练,设置为 False 表示不使用单类别训练模式
single_cls=False,
# 是否开启数据缓存,开启后会将处理过的数据缓存起来,以加快后续训练的速度,但会占用一定的磁盘空间,设置为 False 表示不开启
cache=True,
)
训练结果分析
性能指标
经过30个epoch训练,模型在验证集达到0.81 mAP(平均精度均值),表明其对复杂场景下的PPE检测具有较高鲁棒性。
可视化诊断
结果文件夹包含以下关键诊断文件:
-
损失曲线(loss.png):监控分类/定位损失下降趋势,判断是否过拟合
-
PR曲线(PR_curve.png):分析不同类别(如黄色安全帽)的精度-召回率权衡
-
混淆矩阵(confusion_matrix.png):识别易混淆类别(如红帽vs白帽)
-
R曲线(R_curve.png):评估不同置信度阈值下的召回率表现
模型推理与部署
单张图像预测
test.py
实现快速推理:
- 模型加载:指定最佳权重路径(
best.pt
) - 结果保存:自动保存带检测框的图像至输入目录
- 可视化:
show()
方法弹出窗口显示结果,Autodl用不了
# test.py 完整代码
from ultralytics import YOLO
import os
model = YOLO('/root/autodl-tmp/yolov12/runs/train/exp10/weights/best.pt')
input_path = './img/1.jpg'
save_dir = os.path.dirname(input_path)
filename = os.path.basename(input_path)
results = model.predict(
input_path,
save=True,
project=save_dir,
name='',
exist_ok=True
)
results[0].show()
原始图像 vs 预测结果
总结
本文完整演示了基于YOLOv12的施工安全装备检测全流程:
- 环境搭建:通过FlashAttention加速注意力计算,Conda隔离依赖
- 数据准备:定制化YAML配置文件,科学的数据增强策略
- 高效训练:30轮训练即达0.81 mAP,验证了YOLOv12的样本效率
- 结果分析:通过可视化工具诊断模型性能瓶颈
- 工程部署:提供开箱即用的推理脚本
YOLOv12凭借其注意力机制带来的精度优势和轻量化设计的实时性,为工业检测场景提供了新的解决方案。后续可探索:
- 使用LightlyTrain框架在无标签数据上自监督预训练
- 部署到Android设备(参考TensorRT加速方案)
- 扩展到姿态估计、实例分割等下游任务