【YOLO12全网首发】训练+测试行人摔倒

YOLO12在2025年2月新鲜出炉啦~~~~

官方开源地址:github链接

论文下载地址:paper

目录

🔔🔔摘要

🍎🍎0.YOLOv12的主要创新点

🍀架构创新

🍀优化机制

🍀性能优势

⛵⛵运行环境搭建

🍉🍉1.数据集介绍

🍇🍇2.实现效果

🍓🍓3.YOLOv12算法步骤

🍋3.1数据准备

🍋3.2模型选择

🍋3.3加载预训练模型

🍋3.4数据组织 

🍭🍭4.目标检测训练代码

🌷4.1训练结果展示 

🐸🐸5.目标检测推理代码

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🔔🔔摘要

        长期以来,改进YOLO框架的网络架构一直至关重要,但以往的研究主要集中在基于卷积神经网络(CNN)的改进上,尽管注意力机制在建模能力方面已被证明具有优越性。这是因为基于注意力的模型在速度上无法与基于CNN的模型相匹配。本文提出了一个以注意力为核心的YOLO框架,即YOLOv12,它在保持与之前基于CNN的模型相同速度的同时,利用了注意力机制的性能优势

        YOLOv12在准确性方面超越了所有流行的实时目标检测器,同时保持了竞争力的速度。例如,YOLOv12-N在T4 GPU上的推理延迟为1.64毫秒,达到了40.6%的mAP,超过了先进的YOLOv10-N和YOLOv11-N,分别提高了2.1%和1.2%的mAP,且速度相当。这种优势还扩展到了其他模型规模。YOLOv12还超越了改进DETR的端到端实时检测器,如RT-DETR和RT-DETRv2:YOLOv12-S在运行速度比RT-DETR-R18和RT-DETRv2-R18快42%的情况下,仅使用了它们36%的计算量和45%的参数,就击败了它们。

🍎🍎0.YOLOv12的主要创新点

🍀架构创新

  • 引入注意力机制:YOLOv12采用注意力机制为核心,而YOLOv11则延续了YOLOR的CSPPAN结构和BOF技术。YOLOv12通过精心设计的区域注意力模块和后期优化,如移除位置编码、调整MLP比例、减少层深度等,解决了注意力机制计算速度慢且性能相差较大的问题,实现了在保证实时性的同时大幅提升性能。

  • R-ELAN结构:YOLOv12设计了R-ELAN结构,包括两个改进点:引入块级残差设计和重新设计的特征聚合方法。这种结构有利于更好地保留和整合特征信息,从而提高模型的性能。例如,在YOLOv12-X模型中,R-ELAN结构使得模型能够更准确地识别目标,特别是在复杂背景下的小目标检测,相比YOLOv11的ELAN结构,检测精度得到了显著提升。

  • 网络架构优化:YOLOv12的网络架构从YOLOv11的CSPPAN转向类似AELAN+SE的结构。CSPPAN结构虽然具有良好的特征融合能力,但在处理大规模数据时可能会出现计算量较大、模型复杂度过高的问题。AELAN+SE结构通过更高效的特征聚合和通道注意力机制,不仅降低了计算量,还提高了特征表达能力,使模型在检测精度和速度之间达到了更好的平衡。

🍀优化机制

  • 多尺度特征融合:YOLOv12优化了多尺度特征融合。YOLOv11在多尺度特征融合方面可能存在一些不足,如不同尺度特征之间的交互不够充分。而YOLOv12在这一方面进行了改进,通过更高效的融合机制,使得模型能够更好地利用不同尺度的特征信息,从而提高检测精度。例如,YOLOv12可能采用了更先进的跨尺度连接方式,使得低层的细节特征和高层的语义特征能够更好地融合,进而提升对不同大小目标的检测性能。

  • FlashAttention技术:YOLOv12引入了FlashAttention技术,这一技术显著优化了注意力计算过程。在YOLOv11中,注意力模块的计算可能会受到内存访问速度的限制,导致计算效率低下。FlashAttention技术通过优化内存访问模式和计算流程,极大地提高了注意力机制的计算效率,使得YOLOv12在保持注意力机制优势的同时,实现了更快的推理速度。

  • 优化器微调及质量管理:YOLOv12在训练过程中对优化器进行了微调,并且注重质量管理。通过对学习率调度、权重衰减等参数的精细调整,以及对模型训练过程中的质量监控和管理,确保了模型能够更稳定、更高效地收敛,从而提高了最终模型的性能。例如,YOLOv12可能采用了更先进的学习率调整策略,如余弦退火学习率或动态学习率调整,使得模型能够在训练过程中更好地适应数据的变化,避免过拟合和欠拟合的问题。

  • 取消TAL结构:与YOLOv11相比,YOLOv12取消了TAL结构。TAL结构可能在YOLOv11中对多尺度检测起到了一定的作用,但其存在的问题导致了性能瓶颈。YOLOv12通过其他机制替代TAL结构,例如采用更灵活的锚框分配策略或动态调整多尺度特征的权重,从而在不引入额外计算成本的情况下,改善了多尺度检测的性能。

🍀性能优势

  • 更高的检测精度:YOLOv12在多个尺度的模型上都实现了更高的检测精度。例如,YOLOv12-N的mAP达到了40.6%,相比YOLOv11-N的39.4%提高了1.2%;YOLOv12-S的mAP为48.0%,比YOLOv11-S的46.9%高出1.1%。

  • 更快的推理速度:由于采用了更高效的架构和优化机制,YOLOv12在保持高性能的同时,推理速度也得到了提升。例如,YOLOv12-N在T4 GPU上的推理延迟为1.64ms,而YOLOv11-N为1.5ms。虽然在绝对延迟上略高,但考虑到YOLOv12实现了更高的精度,其性价比更高。

  • 更少的计算资源消耗:YOLOv12在计算资源消耗方面也更少。例如,YOLOv12-N的FLOPs为6.5G,与YOLOv11-N相同,但参数量均为2.6M,实现了资源的有效利用。这使得YOLOv12在资源受限的设备上也能够高效运行,如边缘计算设备或移动设备。

⛵⛵运行环境搭建

        按照如下命令依次执行,建立虚拟环境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
conda activate yolov12
pip install -r requirements.txt
pip install -e .

🍉🍉1.数据集介绍

 首先介绍使用的数据集,数据集中共包含7774张影像,部分影像展示如下:

label为txt格式的yolo目标检测格式,示例txt文件内容为:

        其中训练验证比例为7:1,6802张(训练):   972张(验证),也可自行分数据集。 

🍇🍇2.实现效果

        使用YOLOv12实现的预测效果如下:

摔倒检测识别精度为82.3%

🍓🍓3.YOLOv12算法步骤

🍋3.1数据准备


        数据集共包含7774张影像,其中训练集6802张 ,验证集972张。主要是摔倒,从混淆矩阵中可以看到,摔倒的占比最高。

        模型训练label部分采用的是YOLO格式的txt文件,所以如果自己的数据集是xml格式需要进行转换哦。具体txt格式内容如1.数据集介绍中所示。

🍋3.2模型选择

        以YOLOv12n为例,模型选择代码如下:

from ultralytics import YOLO
 
# Load a model
model = YOLO('yolov12.yaml')  # build a new model from YAML


        其中yolov12.yaml为./ultralytics/cfg/models/v12/yolov12n.yaml,可根据自己的数据进行模型调整,打开yolov12n.yaml显示内容如下:

# YOLOv12 🚀, AGPL-3.0 license
# YOLOv12 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 1 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov12n.yaml' will call yolov12.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.50, 0.25, 1024] # summary: 465 layers, 2,603,056 parameters, 2,603,040 gradients, 6.7 GFLOPs
  s: [0.50, 0.50, 1024] # summary: 465 layers, 9,285,632 parameters, 9,285,616 gradients, 21.7 GFLOPs
  m: [0.50, 1.00, 512] # summary: 501 layers, 20,201,216 parameters, 20,201,200 gradients, 68.1 GFLOPs
  l: [1.00, 1.00, 512] # summary: 831 layers, 26,454,880 parameters, 26,454,864 gradients, 89.7 GFLOPs
  x: [1.00, 1.50, 512] # summary: 831 layers, 59,216,928 parameters, 59,216,912 gradients, 200.3 GFLOPs

# YOLO12n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv,  [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv,  [128, 3, 2]] # 1-P2/4
  - [-1, 2, C3k2,  [256, False, 0.25]]
  - [-1, 1, Conv,  [256, 3, 2]] # 3-P3/8
  - [-1, 2, C3k2,  [512, False, 0.25]]
  - [-1, 1, Conv,  [512, 3, 2]] # 5-P4/16
  - [-1, 4, A2C2f, [512, True, 4]]
  - [-1, 1, Conv,  [1024, 3, 2]] # 7-P5/32
  - [-1, 4, A2C2f, [1024, True, 1]] # 8

# YOLO12n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 2, A2C2f, [512, False, -1]] # 11

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 2, A2C2f, [256, False, -1]] # 14

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 11], 1, Concat, [1]] # cat head P4
  - [-1, 2, A2C2f, [512, False, -1]] # 17

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 8], 1, Concat, [1]] # cat head P5
  - [-1, 2, C3k2, [1024, True]] # 20 (P5/32-large)

  - [[14, 17, 20], 1, Detect, [nc]] # Detect(P3, P4, P5)

        主要需要修改的地方为nc,也就是num_class,此处数据集类别为1类,所以nc=1。

  

🍋3.3加载预训练模型


        加载预训练模型yolov12n.pt,可以在第一次运行时自动下载,如果受到下载速度限制,也可以自行下载好(下载链接),放在对应目录下即可。

🍋3.4数据组织 


         yolov12还是以yolo格式的数据为例,./ultralytics/cfg/datasets/data.yaml的内容示例如下:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test:  # test images (optional)
 
# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  # ...
  77: teddy bear
  78: hair drier
  79: toothbrush

        这个是官方的标准coco数据集,需要换成自己的数据集格式,此处建议根据自己的数据集设置新建一个fall_detect_coco128.yaml文件,放在./ultralytics/cfg/datasets/目录下,最后数据集设置就可以直接用自己的fall_detect_coco128.yaml文件了。以我的fall_detect_coco128.yaml文件为例:

 
path: /home/datasets/fall_datset  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test: images/test # test images (optional)
 
names:
  0:  fall

🍭🍭4.目标检测训练代码


        准备好数据和模型之后,就可以开始训练了,train.py的内容显示为:

from ultralytics import YOLO

model = YOLO('yolov12n.yaml')

# Train the model
results = model.train(
  data='fall_detect_coco128.yaml',
  epochs=600, 
  batch=256, 
  imgsz=640,
  scale=0.5,  # S:0.9; M:0.9; L:0.9; X:0.9
  mosaic=1.0,
  mixup=0.0,  # S:0.05; M:0.15; L:0.15; X:0.2
  copy_paste=0.1,  # S:0.15; M:0.4; L:0.5; X:0.6
  device="0,1,2,3",
)

# Evaluate model performance on the validation set
metrics = model.val()

# Perform object detection on an image
results = model("path/to/image.jpg")
results[0].show()

        训练完成后的结果如下:

        其中weights文件夹内会包含2个模型,一个best.pth,一个last.pth。

        至此就可以使用best.pth进行推理检测是否有人员摔倒。

🌷4.1训练结果展示 

在此贴上我的训练结果:

🐸🐸5.目标检测推理代码

推理python代码如下:

from ultralytics import YOLO

model = YOLO('yolov12{n/s/m/l/x}.pt')
model.predict()

若需要完整数据集和源代码可以私信

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷 

<think>嗯,用户想了解YOLO摔倒检测数据集的清洗和标注方法。首先,我需要回忆一下YOLO的数据处理流程。数据清洗通常包括去除低质量图像、处理重复数据和标注错误。比如,模糊的图片或者标注框不准确的图片都需要处理。然后是数据标注,YOLO使用的是TXT格式,每个图像对应一个TXT文件,里面包含类别、中心点坐标、宽度和高度,这些都要归一化的数值。 接下来,用户可能关心具体的步骤。清洗阶段可能需要自动化工具,比如用OpenCV检测模糊图像,或者用哈希值去重。标注工具方面,LabelImg和CVAT比较常用,支持YOLO格式。另外,数据增强也是重要的一环,比如旋转、翻转、调整亮度等,可以增加数据集的多样性,提升模型泛化能力。 还需要注意标注的准确性,特别是摔倒动作的界定。比如,半蹲和完全摔倒的区别,可能需要制定明确的标注规则,或者进行多人标注再统一审核,避免主观差异。此外,数据平衡也很重要,确保不同场景、光照条件下的样本都有覆盖,避免模型过拟合某些特定情况。 可能用户在实际操作中会遇到标注格式转换的问题,比如从VOC的XML转成YOLO的TXT,这时候需要写脚本处理。另外,数据清洗后的存储结构也需要规范,比如YOLO数据集通常分为train、val、test目录,每个下面有images和labels文件夹。 用户可能没有提到但需要注意的还有隐私问题,尤其是涉及监控视频时,需确保数据匿名化处理。此外,数据增强的具体参数设置,比如旋转角度范围、缩放比例等,这些细节可能影响模型效果。最后,整个流程可能需要多次迭代,不断根据模型表现调整数据集,比如增加难例样本。</think>### YOLO摔倒检测数据集的清洗和标注方法 #### **一、数据清洗方法** 1. **去除低质量数据** - 模糊、过度曝光或遮挡严重的图像需剔除,可用OpenCV计算图像清晰度(如Laplacian梯度)筛选,例如清晰度低于阈值$th_{\text{clear}} = 50$的图像直接删除[^3]。 - 使用哈希算法(如MD5)检测重复或相似度过高的图像,保留唯一性样本。 2. **标注一致性检查** - 通过脚本验证标注文件(TXT格式)与图像的对应关系,删除无标注或标注框超出图像边界的异常数据。 - 检查类别标签是否符合规范(如仅包含"fall"和"non-fall"两类)[^3]。 3. **场景平衡** - 确保数据集中包含不同光照条件(白天/夜晚)、拍摄角度(俯视/平视)和背景复杂度(室内/室外)的样本,避免模型过拟合单一场景。 --- #### **二、数据标注方法** 1. **标注工具选择** - 推荐使用LabelImg(支持VOC XML格式)或CVAT(支持YOLO TXT格式),标注时需定义两类标签: ```txt # YOLO格式示例(class_id x_center y_center width height) 0 0.45 0.63 0.12 0.25 # 摔倒 1 0.72 0.31 0.08 0.15 # 非摔倒 ``` 2. **标注规则** - **关键点定义**:人体关节点(如头部、手部、脚部)需完全包含在边界框内,框体需覆盖倒地姿态的全身区域[^2]。 - **特殊场景处理**: - 半摔倒状态(如膝盖着地)需由3名标注员交叉验证,投票决定标签类别。 - 多人重叠场景需标注所有可见个体的完整边界框。 3. **数据增强策略** - 对标注后的数据应用Mosaic增强、随机旋转(角度范围$\theta \in [-15°,15°]$)和HSV色彩扰动($\Delta H=0.1$, $\Delta S=0.7$, $\Delta V=0.4$),提升模型鲁棒性。 --- #### **三、质量验证流程** 1. **统计学验证** - 计算标注框宽高比分布,过滤异常值(如宽高比$>3:1$的框体可能为错误标注)。 - 分析类别平衡性,若正负样本比例超过$1:5$,需通过过采样或合成数据(如使用GAN生成跌倒图像)调整。 2. **模型辅助验证** - 使用预训练YOLOv8s模型进行初步推理,统计漏检/误检样本,针对性补充困难样本[^2]。 --- #### **四、数据集结构示例** YOLO标准目录结构: ```bash yolo_fall_dataset/ ├── train/ │ ├── images/ # 存放JPG文件 │ └── labels/ # 存放对应TXT标注 ├── val/ │ ├── images/ │ └── labels/ └── test/ ├── images/ └── labels/ ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zy_destiny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值