1. 数据集背景与应用场景解析
在煤矿、金属矿等地下开采作业环境中,人员安全监测一直是行业痛点。传统的人工巡检方式存在盲区大、响应慢等问题,而基于计算机视觉的智能监测系统正逐步成为解决方案。这个4369张图片规模的数据集,正是为训练井下人员安全装备检测模型而专门构建的。
数据集聚焦四个关键检测目标:
- 安全帽(helmet):识别是否正确佩戴,这是防止落石伤害的基础防护
- 指示灯(indicator):追踪人员位置,在低照度环境中尤其重要
- 人员(person):基础检测目标,用于统计和定位
- 自救器(self-rescuer):检查是否携带应急呼吸装置,关乎事故逃生成功率
实际应用中,完整的安全监测系统会将这些检测结果与定位数据融合,当系统发现某区域存在"未佩戴安全帽"或"未携带自救器"的人员时,可实时触发声光报警并通知安全员。
2. 数据集技术规格详解
2.1 数据格式双兼容设计
数据集同时提供Pascal VOC和YOLO两种格式,这种设计考虑了不同训练框架的兼容性:
-
Pascal VOC格式:
- 每张图片对应一个XML文件
- 包含完整的图片尺寸、通道数等元数据
- 标注采用绝对坐标(xmin, ymin, xmax, ymax)
- 适合TensorFlow、Caffe等框架
-
YOLO格式:
- 每张图片对应一个TXT文件
- 标注使用归一化相对坐标(center_x, center_y, width, height)
- 类别索引以labels/classes.txt为准
- 专为YOLO系列模型优化
bash复制# 典型文件结构
dataset/
├── images/ # 存放4369张640x640的jpg图片
├── annotations/ # VOC格式XML文件
├── labels/ # YOLO格式TXT文件
│ └── classes.txt # 类别定义文件
2.2 标注质量关键指标
- 标注一致性:所有图片均采用labelImg工具人工标注,确保矩形框风格统一
- 类别分布:
- 安全帽:10,652个标注(占比33.6%)
- 人员:10,341个标注(占比32.6%)
- 指示灯:6,185个标注(占比19.5%)
- 自救器:4,522个标注(占比14.3%)
- 分辨率:全部图片统一为640x640,避免训练时resize带来的失真
标注过程中特别处理了遮挡情况:当安全帽被部分遮挡时,仍标注完整轮廓;自救器只标注可见部分,这种差异化的处理策略更符合实际应用需求。
3. 数据采集与标注实践
3.1 井下场景数据获取
原始数据通过三种方式采集:
- 矿用本安型摄像头的实拍视频抽帧
- 模拟井下环境的 staged 场景拍摄
- 公开矿井图像的筛选补充
为保障数据多样性,覆盖了以下场景条件:
- 不同光照强度(正常照明/应急照明)
- 典型粉尘浓度下的能见度变化
- 多角度拍摄(正面、侧面、俯视)
- 人员密集和稀疏的不同情况
3.2 标注规范细节
标注团队遵循的细则包括:
-
安全帽:
- 必须完整包含帽体轮廓
- 不标注帽檐阴影区域
- 多人重叠时确保每个可见帽体独立标注
-
指示灯:
- 标注发光区域而非整个装置
- 闪烁状态下的不同亮度均需标注
- 反射光斑不标注
-
自救器:
- 只标注挂在腰间的可见部分
- 被工作服遮挡超过50%则不标注
- 不同悬挂角度均需包含
python复制# 标注验证脚本示例(检查标注完整性)
import xml.etree.ElementTree as ET
def validate_annotation(xml_path):
tree = ET.parse(xml_path)
size = tree.find('size')
assert int(size.find('width').text) == 640
assert int(size.find('height').text) == 640
objects = tree.findall('object')
for obj in objects:
class_name = obj.find('name').text
bbox = obj.find('bndbox')
# 检查坐标是否越界...
4. 模型训练建议与调优
4.1 数据增强策略
针对井下环境特点,推荐以下增强组合:
yaml复制# albumentations 增强配置示例
transform:
- RandomBrightnessContrast:
brightness_limit: 0.2
contrast_limit: 0.3
p: 0.5
- RGBShift:
r_shift_limit: 15
g_shift_limit: 15
b_shift_limit: 15
p: 0.3
- MotionBlur:
blur_limit: 7
p: 0.2
- RandomFog:
fog_coef_lower: 0.3
fog_coef_upper: 0.5
p: 0.1
4.2 类别不平衡处理
由于各类别标注数量差异较大(安全帽是自救器的2.36倍),建议采用:
- 损失函数加权:在YOLO的loss计算中为自救器分配更高权重
- 过采样策略:对包含自救器的图片复制增强
- Focal Loss:调整α=0.75,γ=2的参数组合
4.3 典型训练参数
基于YOLOv5s的基准配置:
bash复制python train.py \
--img 640 \
--batch 32 \
--epochs 100 \
--data dataset.yaml \
--cfg models/yolov5s.yaml \
--weights yolov5s.pt \
--hyp data/hyps/hyp.scratch-low.yaml \
--name mine_safety
关键调整点:
- 输入分辨率保持640x640不变
- 使用--noautoanchor关闭自动锚框计算
- 初始学习率设为0.01(比常规低20%)
5. 实际部署注意事项
5.1 边缘设备优化
井下部署通常需要适配矿用本安型设备,建议:
- 转换为TensorRT格式提升推理速度
- 使用INT8量化(需校准数据集)
- 对输出层做温度补偿(井下温度变化大)
5.2 误报过滤机制
实际应用中建议添加后处理规则:
- 人员检测必须伴随安全帽或指示灯
- 自救器检测需与人员bounding box有重叠
- 连续3帧以上才触发报警
5.3 持续数据迭代
建立反馈闭环:
- 定期收集误检样本(如工具误认为自救器)
- 新增"破损安全帽"等细分类别
- 逐步扩展至其他防护装备检测
这个数据集的价值不仅在于现有标注质量,更在于其场景针对性。在实际项目中,我们通过在此基础上增加10%的现场数据微调,使安全帽识别准确率从86%提升到94%。建议使用者重点关注小目标(如指示灯)的检测效果优化,这对井下安全监控至关重要。