ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

安全帽目标检测数据集 两万多张图片 带YOLO标注

安全帽目标检测数据集 两万多张图片 带YOLO标注

数据集获取主页 个人简介

最近在搞安全帽检测项目,最头疼的从来不是调参,而是搞数据。网上那些开源数据集,要么标注稀碎,要么场景单一,真扔进模型里,效果那叫一个感人。

被坑了几次后,心一横,自己动手攒了一份。过程就不提了,说多了都是泪(懂的都懂)。现在搞完了,感觉不拿出来给同行们避避坑,都对不起掉的这些头发。

这份数据集的核心就俩字:省心。你拿到手,5分钟就能把训练跑起来。

1. 数据结构

完全按YOLO官方推荐的结构来,一层都不带错的:

你的项目目录/ ├── datasets/ │ └── helmet_data/ # 这是数据集根目录 │ ├── train/ │ │ ├── images/ # 24040张图 │ │ └── labels/ # 24040个txt,一个不少 │ ├── val/ │ │ ├── images/ # 1978张 │ │ └── labels/ # 1978个 │ └── test/ │ ├── images/ # 979张 │ └── labels/ # 979个

2. 数据质量

  • 尺寸统一:全部预处理成了640x640,不用你再操心resize对齐的问题。
  • 标注扎实:只标两类,0: head(人头),1: helmet(安全帽)。重点看下面的统计

头盔的样本量是人头的3倍多,这很符合实际场景(一个画面里好多人戴了帽子)。我们特意做了数据增强,缓解这个不平衡问题。

3. 怎么用

在数据集根目录(就是helmet/那一层),给你备好了这个data.yaml文件:

names: path: /你的路径/datasets/Helmet # 就改这里! train: train/images val: val/images test: test/images nc: 2 # 类别数 names: ['头', '安全帽'] # 类别名,别写反了

YOLOv8(推荐,代码最简洁)下载【yolov8s.pt】

from ultralytics import YOLO # 1. 加载模型 model = YOLO('yolov8n.pt') # 也可以用 yolov8s.pt, yolov8m.pt,从官网下载 # 2. 训练(直接指定yaml路径) results = model.train( data='path/to/helmet/data.yaml', epochs=100, imgsz=640, batch=16, device='0' # 用GPU,如果是CPU就改成'cpu' ) # 3. 验证(训练完自动验证,也可以单独跑) val_results = model.val() # 自动加载最佳权重验证 print(f"mAP50-95: {val_results.box.map:.4f}") print(f"mAP50: {val_results.box.map50:.4f}")

4. 能跑出什么效果?

我们拿YOLOv8m试了个水,默认参数跑了200轮,在测试集上mAP@0.5能跑到0.97以上。这还只是基线模型,你拿去用更好的模型或者调调参,冲到更高问题不大。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进