4、数据集准备:公开数据集(如SHWD、VOC、COCO)与自建数据集,标注工具(LabelImg、CVAT)使用及数据增强策略
智慧工厂安全生产AI系统的性能上限,本质上由训练数据的质量与规模决定。无论是人员闯入检测、安全帽佩戴识别,还是危险区域越界告警,模型在真实产线环境中的泛化能力,都直接取决于数据集是否覆盖了足够的光照条件、视角变化、遮挡程度和场景复杂度。本章将系统讲解如何组合使用公开数据集与自建数据集,如何高效使用LabelImg与CVAT完成标注,以及如何通过数据增强策略在有限标注成本下最大化模型鲁棒性。
4.1 公开数据集选型与适配策略
4.1.1 核心原理:公开数据集的定位与局限
公开数据集的价值在于提供大规模、多样化的预训练基础。SHWD(Safety Helmet Wearing Dataset)是目前安全帽检测领域最常用的公开数据集,包含约7,581张图像,标注了佩戴安全帽(helmet)和未佩戴(head)两类目标,图像来源涵盖工地、工厂、道路等多种场景。VOC(PASCAL VOC)和COCO(Common Objects in Context)虽然不直接包含安全帽类别,但其80类通用物体检测能力为模型提供了丰富的特征提取基础,通常作为预训练权重使用。
然而,公开数据集存在明显的场景偏差。SHWD中的图像多为户外施工场景,光照均匀、背景相对简单;而智慧工厂内部往往存在密集管道、设备反光、暗光区域、粉尘干扰等复杂条件。直接使用SHWD训练的模型部署到工厂环境,通常会出现15%-30%的精度下降。因此,公开数据集只能作为"冷启动"基础,必须配合自建数据集进行领域适配。
4.1.2 判断方法:如何评估公开数据集的适用性
在选择公开数据集时,建议从以下四个维度进行量化评估:
| 评估维度 | 关键指标 | 适配阈值 | 不达标时的应对策略 |
|---|---|---|---|
| 场景相似度 | 图像背景、光照、视角与目标工厂的相似程度 | 主观评分≥3/5 | 增加自建数据比例至60%以上 |
| 类别覆盖度 | 是否包含目标类别及相似负样本 | 目标类别存在且负样本≥20% | 补充标注"干扰物"类别(如安全帽拿在手中) |
| 标注质量 | 边界框精度、漏标率、类别一致性 | 漏标率≤5% | 人工抽检500张,修正错误标注 |
| 数据规模 | 每类目标实例数量 | 每类≥2,000实例 | 结合多个数据集或使用数据增强扩充 |
4.1.3 实战场景:SHWD+VOC组合适配工厂环境
某汽车零部件工厂需要部署安全帽检测系统,产线存在金属反光、油污、暗光等干扰。项目组采用"SHWD+VOC+自建"的三层数据策略:首先使用COCO预训练权重初始化模型,然后使用SHWD进行第一轮微调(约50个epoch),使模型掌握安全帽的基本视觉特征;接着从工厂部署的12路摄像头中抽取2,000帧图像,人工标注5,000个安全帽实例和1,200个未佩戴实例,与SHWD合并后做第二轮微调。最终模型在工厂测试集上的mAP达到89.3%,相比仅用SHWD训练的模型(mAP 72.1%)提升了17.2个百分点。
4.2 自建数据集:采集、筛选与标注规范
4.2.1 核心原理:自建数据集的不可替代性
自建数据集的核心价值在于捕获工厂的"私有特征":特定机台的灯光角度、特定通道的监控视角、特定工服的颜色、特定设备的反光特性等。这些特征无法从公开数据集中获得,却是模型在真实环境中准确工作的关键。自建数据集的建设应遵循"场景驱动、难例优先、持续迭代"的原则,而非一次性大规模采集。
4.2.2 操作流程:从视频抽帧到数据集成型
- 视频采集规划:覆盖不同班次(白班/夜班)、不同天气(晴天/阴天/雨天)、不同季节,确保光照多样性。每个点位至少采集2小时连续视频,包含人员正常走动、停留、弯腰、搬运等动作。
- 关键帧抽取:使用OpenCV或ffmpeg按1-2秒间隔抽帧,避免连续帧高度相似。对于人员快速移动的场景,可适当提高抽帧频率。
- 图像筛选:剔除模糊帧(Laplacian方差<100)、过曝/欠曝帧、重复帧。保留包含目标但目标占比<5%的"小目标"图像,这类图像对模型鲁棒性至关重要。
- 难例补充:从模型初版推理结果中,筛选置信度在0.3-0.7之间的"模糊样本",人工确认后加入训练集。这是提升模型区分"安全帽拿在手中"与"佩戴安全帽"等易混淆场景的有效手段。
- 数据集划分:按7:2:1划分训练/验证/测试集,划分时确保同一视频来源的图像不跨集合,避免数据泄漏。
4.2.3 案例拆解:危险区域闯入检测的数据建设
某化工厂需要在反应釜周边设置危险区域闯入告警。初始方案直接使用公开行人检测模型,但部署后发现两个严重问题:一是工厂内工人穿着全身防护服,与公开数据集中的日常行人外观差异巨大,漏检率高达40%;二是反应釜区域的蒸汽和管道遮挡导致大量误检。
项目组重新设计数据采集方案:在反应釜区域部署2台临时摄像头,连续采集一周(覆盖3个班次),共获得180小时视频。通过运动检测算法筛选出包含人员活动的片段,抽帧得到3,200张图像。标注时不仅标注人员位置,还额外标注了"遮挡程度"(无遮挡/部分遮挡/严重遮挡)和"姿态"(站立/弯腰/蹲下)两个属性。同时,从误检样本中筛选出200张包含蒸汽、管道阴影、移动设备的图像,标注为"干扰物"负样本。最终模型在保留测试集上的召回率从58%提升至91%,误报率从每10分钟3次降至每2小时1次。
4.3 标注工具实战:LabelImg与CVAT
4.3.1 核心原理:工具选型与标注格式
LabelImg是轻量级桌面标注工具,适合个人或小团队使用,默认输出Pascal VOC格式的XML文件,也可转换为YOLO的TXT格式。CVAT(Computer Vision Annotation Tool)是Intel开源的Web端标注平台,支持多人协作、自动标注(基于预训练模型)、属性标注和复杂形状标注,适合中大型项目。对于智慧工厂安全AI项目,建议根据团队规模和标注复杂度选择:标注量小于5,000张且单人操作时用LabelImg;标注量更大或多角色协同时用CVAT。
4.3.2 操作流程:LabelImg标注安全帽检测数据
# 安装LabelImg(Ubuntu环境)
pip install labelImg
# 启动标注工具
labelImg images/ classes.txt
# classes.txt内容示例
helmet
head
person
forklift
标注时需注意:使用"W"键创建矩形框,框选目标时紧贴目标边缘,留2-3像素余量;对于重叠目标,分别标注并确保边界框不互相包含;标注完成后使用"Ctrl+S"保存XML文件。对于YOLO格式训练,可使用以下脚本转换:
import xml.etree.ElementTree as ET
import os
def convert_voc_to_yolo(xml_file, classes):
tree = ET.parse(xml_file)
root = tree.getroot()
img_w = int(root.find('size/width').text)
img_h = int(root.find('size/height').text)
lines = []
for obj in root.findall('object'):
cls = obj.find('name').text
if cls not in classes:
continue
cls_id = classes.index(cls)
bbox = obj.find('bndbox')
x1 = float(bbox.find('xmin').text)
y1 = float(bbox.find('ymin').text)
x2 = float(bbox.find('xmax').text)
y2 = float(bbox.find('ymax').text)
# 转换为YOLO格式(中心点+宽高,归一化)
cx = (x1 + x2) / 2 / img_w
cy = (y1 + y2) / 2 / img_h
w = (x2 - x1) / img_w
h = (y2 - y1) / img_h
lines.append(f"{cls_id} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}")
return lines
4.3.3 实战场景:CVAT多人协作标注工厂数据集
某项目需要标注8,000张工厂图像,包含安全帽、人员、叉车、危险区域四类目标。项目组使用CVAT搭建标注平台,配置了3名标注员、1名审核员的工作流。CVAT的"任务分配"功能将数据集按批次分配给标注员,每批200张;标注员完成后提交,审核员在线检查并反馈修改意见。通过CVAT的"自动标注"功能,先用预训练的YOLO模型生成初版标注,标注员只需修正错误框和补充漏检目标,效率提升约3倍。整个标注周期从预期的3周缩短至10天,标注一致性(通过二次抽检评估)达到96%。
4.4 数据增强策略:从基础到进阶
4.4.1 核心原理:增强的本质是引入先验不变性
数据增强的核心思想是:通过人为变换模拟真实世界的变化,让模型学习到"目标在何种变化下保持不变"。对于智慧工厂场景,需要重点模拟的不变性包括:光照不变性(不同班次的光照差异)、尺度不变性(人员距离摄像头的远近)、视角不变性(不同安装角度的摄像头)、遮挡不变性(设备管道造成的部分遮挡)。
4.4.2 增强方法分类与选择
| 增强类型 | 具体方法 | 适用场景 | 注意事项 |
|---|---|---|---|
| 几何变换 | 水平翻转、随机旋转(±15°)、随机缩放(0.5-2.0倍)、随机裁剪 | 所有场景 | 旋转角度不宜过大,否则目标形变失真 |
| 颜色扰动 | 亮度调整(±30%)、对比度调整(±20%)、HSV色相偏移(±10°) | 多班次工厂、户外场景 | 避免过度饱和导致颜色失真 |
| 噪声与模糊 | 高斯噪声(σ=0.01-0.03)、高斯模糊(核大小3-5)、运动模糊 | 低照度、摄像头抖动场景 | 模糊程度需与真实监控画质匹配 |
| 遮挡模拟 | Random Erasing(随机矩形遮挡)、CutOut | 管道遮挡、设备遮挡场景 | 遮挡面积控制在目标面积的10%-30% |
| 混合增强 | MixUp(图像线性混合)、Mosaic(四图拼接) | 小目标检测、密集场景 | Mosaic对显存要求较高,需调整batch size |
4.4.3 案例拆解:增强策略解决小目标检测难题
某仓库的监控摄像头安装在6米高的立柱上,人员目标在图像中仅占20×40像素左右。初始模型对该场景的召回率仅为45%。项目组采用组合增强策略:首先使用Mosaic增强,将4张不同场景的图像拼接为一张,使模型在训练时看到更多小目标样本;其次使用Random Erasing模拟货架遮挡;最后使用HSV颜色扰动模拟不同时段的光照变化。经过3个epoch的增强训练,小目标召回率提升至78%,但出现了新的问题——模型对正常尺寸目标的检测精度略有下降(mAP下降2.3%)。
项目组通过调整增强策略解决了该问题:将Mosaic的概率从1.0降至0.5,并增加"尺度均衡采样"——在训练时按目标尺寸比例采样,确保小目标与大目标的比例不超过3:1。最终模型在保持大目标精度的同时,小目标召回率达到82%。
4.4.4 常见误区与复盘
- 误区一:增强时未同步修改标注框。例如随机旋转后,边界框需要重新计算,否则标注与图像内容不匹配,导致训练发散。
- 误区二:训练集增强但验证集不增强。验证集应保持原始分布,否则评估结果无法反映真实性能。
- 误区三:忽略测试时的增强(TTA)。在推理阶段使用多尺度测试(如0.8x、1.0x、1.2x)并融合结果,可额外提升2%-5%的mAP,但会增加推理时间,需根据实时性要求权衡。
- 误区四:自建数据集与公开数据集混合时未做类别平衡。SHWD中"helmet"类实例远多于"head"类,直接混合会导致模型偏向多数类。建议对少数类进行过采样或使用Focal Loss。
数据集建设是智慧工厂安全AI项目的基石工程,需要系统性地规划数据源、标注流程和增强策略。公开数据集提供通用特征基础,自建数据集解决场景适配问题,数据增强则在不增加标注成本的前提下提升模型鲁棒性。三者有机结合,并建立"模型误检反馈→补充难例→重新训练"的闭环迭代机制,才能持续提升模型在真实产线环境中的表现。建议项目组在启动初期就建立数据版本管理机制(如使用DVC或Git LFS),记录每次数据变更的内容和原因,确保模型训练的可复现性。