资讯动态

基于YOLO26的工厂人员违规检测算法研究与部署实践

发布时间:2026/10/18 13:19:58 来源:尧图企业网站定制
搞定了几套工厂人员违规检测的项目之后我对这类需求的判断基本固定了算法选型重要但真正决定项目能不能落地的是数据质量、标注规范和部署链路里的那些脏活累活。这篇文章就以一个基于 YOLO26 的工厂人员违规行为检测算法研究与实现为切入点把从需求拆解、数据准备、模型训练到最终部署的完整过程讲清楚。项目目标很直接就是在工厂监控画面里实时识别未戴安全帽、进入危险区域、违规吸烟、接打电话这类行为并在触发条件时联动报警。这套方案适合三类人参考一是要做工业视觉落地却总被误报漏报困扰的算法工程师二是正在评估自研还是外采巡检系统的安环部门技术人员三是想把 YOLO 系列真正用于实际场景的学生或独立开发者。文章里不会堆理论全部是能直接复用的实践经验。1. 项目背景与方案选型1.1 工厂场景里到底要检测什么工厂人员违规检测听起来是一个算法问题但动手之前必须先把它翻译成具体的视觉任务。我习惯把工厂里的违规行为先分成四类来梳理因为每一类的处理难度和判断逻辑完全不同。第一类是个体防护穿戴类比如未戴安全帽、未穿反光背心或工服。这类问题的特点是“目标小但状态清楚”人的头部在监控画面里往往只占几十个像素但有没有帽子是明确的二分类。真正的难点在于安全帽颜色五花八门白色、红色、黄色都有而且有些人会戴普通布帽、草帽甚至头巾模型很容易把这些当成正样本。第二类是区域闯入类比如人员进入设备运转区、高压配电室、危化品存放区。这类检测不能只看人本身还需要配合电子围栏或 ROI 区域才能判断是否真的越界。单纯的目标检测模型只能告诉你“这里有人”至于这个人在不在禁区需要在后处理逻辑里叠加坐标判断。第三类是行为禁止类比如吸烟、打电话、睡觉、离岗。这是最麻烦的一类因为行为是时序概念单帧画面经常无法判断。比如打电话手举到耳边这个动作在一帧里可能被当成喝水或者挠头抽烟的烟雾也可能和蒸汽、粉尘混淆。第四类是异常状态类比如人员倒地、长时间不动。这类通常需要检测加跟踪再加时序规则才能判断不是目标检测单模型能解决的。把这四类拆清楚之后算法方案才能定下来。很多项目失败不是因为模型不行而是从一开始就没搞清楚“检测”和“事件判断”是两个层次的问题。1.2 为什么是 YOLO26 而不是其他算法说实话工厂现场的关键词永远是实时性、稳定性、可部署性。我在方案选型时把主流目标检测路线都过了一遍结论很明确传统视觉方案可以直接排除二阶段检测器速度上不合适Transformer 系检测器在边缘设备上又太重最后的平衡点还是落在 YOLO 系列上。传统方案比如背景差分加颜色阈值、HOG 加 SVM对固定场景的单一目标比如只检测安全帽偶尔有效但光线一变化、角度一偏、遮挡一出现就全线崩溃。工厂走廊、车间、装卸区的光照条件差异极大逆光和夜间红外画面是常态手工特征根本扛不住。二阶段检测器以 Faster R-CNN 为代表精度确实好但它要把候选区域生成和分类回归分成两步推理速度很难达到多路视频流实时处理的要求。工厂场景往往要同时看几十路摄像头单路再慢一点算力成本就上去了。Transformer 系检测器精度也很能打但训练成本高、对数据量要求大而且部署时算子兼容性经常出问题。不少边缘推理盒子的加速库对多头注意力模块支持并不完善转换过程能熬掉你一周时间。YOLO26 这个版本延续了单阶段 anchor-free 的整体思路骨干网络里的高效特征提取模块、多尺度融合结构、动态解耦检测头在保持高帧率的同时把精度也拉到了可用的水平。更关键的是它的工程生态很成熟训练框架统一模型可以方便地导出 ONNX 再转到 TensorRT、OpenVINO 这些推理引擎。对于工厂这种既要求实时性又要长期维护的落地项目这是最稳的路线。2. 数据准备与标注方案2.1 数据来源的三种途径工业场景算法的上限很大程度由数据决定模型结构反而是后话。YOLO26 再强没有足够贴近现场的数据喂进去照样会漏检误检测到怀疑人生。我在项目里用的是自采数据、合成数据加公开底座三管齐下的方式。自采数据是主力。从试点工厂的监控系统里导出一段时间的录像覆盖不同机位、不同时段、不同天气。这里有个细节机位覆盖比视频时长更重要。同一个车间同一个角度的视频再长也只是在重复同样的特征而装卸区、仓库、通道、生产线旁边这些不同场景的视角差异才是模型泛化能力的关键。我当时的经验是至少覆盖 10 个以上不同机位的画面每个机位截取不同时段的各时段段录像做抽帧。合成数据用来补齐低频高危场景。比如人员闯入危险区域、倒地这类行为真实监控里可能一个月都碰不到几次违规样本但恰好是业务最关心的。处理办法有两种一种是用仿真工具渲染一批带标注的合成图像另一种更轻量的做法是图像拼接把人员目标用 Cut-Paste 的方式粘贴到背景图上再经过随机模糊和色彩扰动让它看起来自然。后者我在项目里实测下来很好用能快速补齐类别数量而且不破坏标注格式。公开底座数据主要拿来预训练比如常见的目标检测数据集里已经包含大量行人、安全帽、反光衣等类别。先用这批数据让模型建立通用的特征提取能力再用工厂自采数据做迁移学习收敛速度和小样本表现都会明显提升。每个违规类别的实例数量我的建议是不要少于 2000 个安全管理类属于低频但高风险最好往 5000 个以上做。注意这里说的是实例数量不是图片数量一张图里可能同时存在多个戴安全帽的人每个实例都算数。2.2 类别定义与标注规范标注规范是整条链路里最容易被低估的环节。标注的人如果标准不统一模型训练出来必然混乱。比如“未戴安全帽”和“戴了普通帽子”这两类很容易互相污染很多时候模型的误检根本不是算法bug而是标注的人自己都分不清边界。我在项目里会把类别定义写成一张表发给所有标注人员作为判定依据。比如安全帽类别明确为“硬质安全帽只要顶戴在头上就算正样本不要求帽带系好”普通帽子和布帽单独归类反光背心类别定义为“大面积反光材料覆盖躯干”只有一点点反光条的工装外套不算打电话类别要求“手机贴耳或手持手机在胸前高度”拿在手里自然放下不算。标注工具用的是开源的图形标注工具支持矩形框和多边形。框的规范也有讲究要求矩形框紧贴目标的最小外接范围宁可稍微紧一点也不要随意放大。小目标不要硬标如果目标小于 20 乘 20 像素要么放弃这个框要么切图后再标注硬标出来的模糊框只会给训练带来噪声。数据质量的把关不能省。统一标准下先由一人完成初标再由另一人复核抽检不一致率超过百分之五就要全部返工。这个流程在多轮标注迭代之后会明显提升模型效果。我的体会是标注噪声确实是模型精度上限的隐形天花板与其花时间调参不如先把一致性做扎实了。2.3 数据增强策略数据增强的定位不是把训练集变大而是模拟现场里那些你没收集到的变化。工厂监控的真实情况往往比想象中复杂逆光、夜间红外、镜头脏污、压缩卡顿这些东西在公开数据集里根本看不到。YOLO26 训练框架里自带的基础增强里Mosaic 是默认开启的。它的做法是把四张图随机拼接成一张相当于让模型学到不同尺度、不同目标位置的混合上下文对小目标检测和密集场景帮助很大。另一类是 MixUp两张图加权融合可以提升模型对遮挡和重叠情况的鲁棒性。但我更想说的是针对工业场景的定制增强。我在项目里额外加了批量随机亮度对比度扰动用来模拟车间不同位置的照度差异加了高斯模糊和运动模糊模拟低分辨率摄像头和快速移动的目标还专门模拟了 JPEG 压缩伪影因为很多监控系统存储的视频本身就有马赛克块。遮挡增强也值得重点做。真实场景里人员会被货架、设备、行人遮挡我在数据管线里随机在人头位置叠加遮挡物图案或者用另一个目标框去遮盖部分区域。这招对降低漏检率特别有效项目里加了这一步之后危险区域闯入这个类别的漏检率大概下降了七八个百分点。需要留意的是增强策略不是越多越好开太猛反而可能导致训练不稳定。我在项目里把每类增强的开启概率控制在 0.5 左右最后十几个 epoch 还会逐步关闭 Mosaic让模型在接近真实分布的数据上做微调收敛效果更稳。3. 模型训练与性能调优3.1 网络结构与迁移学习思路YOLO26 的整体结构可以拆成 Backbone、Neck、Head 三段来理解。Backbone 负责从图像里提取不同尺度的特征前面几层关注边缘纹理后面几层关注语义信息Neck 做多尺度的特征融合把大目标的语义信息和中小目标的细节信息合并起来Head 是解耦的检测头把分类、框回归分别输出。这个设计对工厂场景的适配性在于车间里既有装满货物的大目标又有远距离的人脸、局部肢体这类小目标多尺度特征融合做得越细小目标召回能力越强。YOLO26 用的高效特征提取模块在计算量增加有限的情况下提升了特征感受野这对检测远处小人很有帮助。迁移学习是不可跳过的一步。工厂自采数据即便有上万张相对真实世界还是太少从零训练不现实。我的做法是先加载预训练权重然后分两阶段训练第一阶段冻结骨干网络权重只训练检测头学习率开在 0.001训练大概十个 epoch让检测头先适应自己的数据集分布第二阶段解冻全部网络参数学习率降到 0.0001 重新训练让骨干特征针对工厂场景做差异化调整。为什么不直接全量训练因为没有必要一上来就让骨干网络大动干戈。前期特征提取的能力通用目标检测数据集已经教得很好直接微调会破坏已有特征收敛反而慢。分阶段训练既稳定又能把训练时间压缩大概三分之一。3.2 关键超参数配置以 YOLO26 训练流程为例以下是一份在工厂数据上实测可用的核心参数配置可以直接作为起点参考。# 数据集配置格式按实际路径修改 path: ./factory_dataset train: images/train val: images/val names: 0: helmet 1: no_helmet 2: vest 3: no_vest 4: smoking 5: phone 6: person训练命令我习惯写成yolo detect train \ datafactory.yaml \ modelyolo26.pt \ imgsz960 \ epochs300 \ batch16 \ lr00.01 \ warmup3 \ cos_lrTrue \ close_mosaic10参数设置背后的逻辑值得展开说。imgsz 输入分辨率我直接从 640 提到了 960。原因很简单工厂监控里人员目标偏小640 的分辨率在远端摄像头画面上经常只有二三十个像素检测器很难稳定抓到。960 输入能直接把小目标的特征信息量提升但代价是训练显存和推理耗时的增加。如果你的 GPU 只有 8G 显存batch 要降到 8或者把 imgsz 先放 800 训练最后再微调到 960。学习率策略用的是 warmup 加 cosine 退火前三个 epoch 学习率从小往大爬升避免初始阶段梯度爆炸后面逐步下降让模型在收敛区走得稳。训练的最后一个阶段把 mosaic 增强关掉避免拼接图导致的虚边界影响最终精度这是一个很有效的训练技巧。anchor-free 检测头对正样本的定义有自己的匹配策略不需要像以前那样手动调锚框尺寸模型会把目标中心点落在哪个网格哪个网格就负责预测这个目标。好处是减少了超参调整工作量对小目标的适应性也更好。3.3 评估指标与阈值调优模型训练完之后不急着部署先看评估指标。mAP50 和 mAP50-95 是两个最常看的前者表示框与真值重叠度超过一半就算命中后者要求更严格重叠度逐步提升。工厂场景我一般以 mAP50 作为主要参考因为安全告警业务不需要像素级精准框大概把目标框住就足够触发后续逻辑。但真正要关注的是 Precision 和 Recall 的平衡。业务方往往两头都想要漏报要低误报也要少。问题是这两者在原理上冲突。我把权衡方法写成一张速查表方便根据不同客户诉求调整。业务诉求调整方向具体操作降低漏报降低置信度阈值从 0.5 降到 0.3允许更多候选参与后续确认降低误报提高置信度阈值提高到 0.6 以上只保留高置信度结果两者兼顾调 NMS 阈值与跟踪确认配合跟踪器连续多帧确认而不是单帧一锤定音项目里有一次客户反馈误报太多观察后发现是防砸鞋、反光柱、红色告示牌被识别成了安全帽或反光衣。这时只看 mAP 没有意义我把报警截图拉出来做混淆矩阵分析发现颜色特征干扰占了八成以上。于是把负样本难例加入到训练集再调整类别损失权重误报数量才真正降下来。阈值调整这一步最好做成配置项放在部署系统里让现场实施人员在界面上就能调节而不是每次改参数都要重新训练模型。报警阈值调整对最终可用性的影响常常比换模型结构还大。4. 部署落地与推理加速4.1 模型压缩从剪枝到量化训练好的模型直接部署到边缘设备上往往会超预算尤其面对多路摄像头并发推理时显存和算力都是瓶颈。压缩是绕不开的一步。剪枝方面用的是结构化通道剪枝思路。训练时加入稀疏化约束让部分卷积通道的权重趋于零然后在推理前把这些低贡献通道直接裁剪掉只保留有效计算图。剪枝比例我会控制在 20% 到 30%实际效果是推理速度提升两到三成精度几乎不掉点。超过这个比例就会开始明显影响小目标召回需要反复测试验证。量化是更激进也更有效的手段。把模型浮点权重校准到 INT8 精度模型体积缩小到原来的四分之一推理耗时也能明显下降。但量化是有代价的校准集如果选得不好模型精度的掉点能达到三到五个点在工厂这种对安全告警敏感的场景里不可接受。我一般从验证集里挑几百张覆盖各类场景的图作为校准集量化完再跑一遍完整验证集确认精度掉点在 1% 以内才放行。实际操作中最常见的坑是量化之后小目标检测性能掉得比大目标严重因为小目标本身的特征信息量就小量化噪声更容易淹没有效特征。如果遇到这种情况可以对小目标类别的损失做加权或者在量化中保留部分高敏感层为浮点精度混合精度部署也是常用的折中方案。4.2 从 RTSP 流到报警联动的完整链路工厂监控系统普遍支持 RTSP 视频流协议部署端要做的事就是先把视频流接入进来再做解码、预处理、推理、后处理最后输出报警事件。视频流接入要考虑多路并发。摄像头一路接一路解码线程开太多会互相争抢 CPU 资源导致整体丢帧。我在项目里的做法是限制解码线程数量每路摄像头的推流按需抽帧默认每路每秒处理五到十帧就够了。工厂违规行为不是高速运动事件十五帧的实时性要求远比连续视频流流畅度更重要。推理引擎选择主要看硬件。GPU 平台优先转 TensorRTCPU 平台可以转 OpenVINO。导出流程是一致的先用训练框架把模型导出成 ONNX 格式再用推理引擎的转换工具做优化和量化。ONNX 是中间交换格式推理引擎都能读但每个引擎支持的算子集合不完全一样导出时要注意某些后处理算子是否被完整支持。多路视频并发时我更推荐引入批处理模式把多路的帧攒在一起送进模型推理比逐路推理节省大量时间和算力。后处理阶段给每个目标分配独立 ID同时与跟踪模块对齐这样可以支持后面要讲的连续帧确认逻辑。4.3 用业务逻辑兜底检测结果模型输出的是单帧的检测框和置信度但业务方真正要的是一条“某某在几点几分进入了危险区域”的告警事件。从框到事件中间还有一层必须做的逻辑那就是业务兜底。首先是 ROI 区域的划定。不是所有检测到的行人都需要告警只有行人坐标与危险区域多边形发生重叠时才算触发事件。在画面上用坐标处理库把多边形区域预先配置好推理结果直接做坐标判断能过滤掉大量无意义检测。然后是连续帧确认机制。单帧检测到目标就报警误报率会很难看。我在项目里接入跟踪算法对每个目标跨帧关联只有连续检出 N 帧且满足行为条件才触发报警如果中途失联 M 帧则取消这次告警。这个机制能显著压制因为光照闪动、画面抖动引发的偶发误报。一般民用监控场景 N 取 3 到 5 帧工业化现场可以再放宽一点。报警联动部分系统需要输出事件截图、报警视频片段和检测结果日志同时触发现场的声光报警器或者通过接口推送到生产管理平台。这一层的可靠性比算法精度更容易被忽视因为一旦算法输出正常但系统没有成功推送报警整个方案就变成摆设。我自己在交付前测试时会对每一路摄像头实测报警链路确保丢失告警率为零。5. 实测中的问题与排查记录5.1 小目标与遮挡造成的漏检先讲小目标漏检。这是工厂场景里最集中的问题因为监控摄像头挂得高、角度远一米七的成人全身在画面里经常才五十像素高戴没戴安全帽完全依赖头部那十几像素的特征。我刚开始用 640 输入训练时未戴安全帽类别的召回率只有七成左右客户根本接受不了。排查步骤是先看验证集里哪类样本被漏检把漏检图全部导出来肉眼分析原因。发现占比最高的两类是“目标太小”和“光线太暗”。针对小目标提升输入分辨率到 960 立竿见影召回率立刻往上走了几个点针对光线太暗我在增强策略里强化了低照度模拟同时在数据采集阶段补充了夜间红外场景的样本。另一个处理小目标的思路是切图推理。把大分辨率画面切成四块重叠的子图分别推理再合并结果相当于变相放大目标尺寸。代价是数据量变大导致推理耗时增加通常只在单路高价值摄像头需要极强召回时使用。遮挡漏检则是另一套解法。车间里人员密集目标之间互相遮挡、被货架遮挡关联跟踪时常断链。处理上除了增加遮挡模拟的增强数据我还在后处理里把“局部检出”的策略改得更宽容允许只有上半身检出时也保留目标 ID靠跟踪轨迹的连续性来做行为判断。5.2 误检高发场景与难例挖掘误检比漏检更折磨人因为漏检是“发生了没报”用户未必发现误检是“没发生乱报”天天响警报把保安烦死最后直接把系统关掉。所以误报率控制对项目存亡来说非常关键。我在排查误检时发现工厂环境里的相似物是最大的干扰源。红色告示牌、红色安全帽模型把红色漆桶当成人头反光衣把油桶、塑料反光带当成正目标打电话类别把喝水、扶眼镜、擦汗动作全部误触发了。处理方法按优先级来最难的是找样本补训练集把线上报警截图持续回流每隔两周跑一轮难例挖掘把这段时间内所有的误报截图挑选整理后加入训练集重新训练。这个流程看起来笨但实测下来是降低误报最有效的方式。第二个处理手段是后处理规则比如结合人体关键点检测确认头部位置存在人脸特征才触发安全帽相关判断比如打电话检测要求目标的手部区域和脸部区域发生重叠避免单纯依靠整体框误报。还有一类误报来源是置信度阈值设置太低。现场实施人员为了方便演示把阈值调到 0.25平时看着灵敏度很高但误报也一起放大。我建议把默认置信度阈值定在 0.45 到 0.5 之间并保留线上可调能力先保证可用性再追求灵敏度。5.3 训练与部署环节的常见坑训练阶段最容易出问题的三个点分别是梯度不稳定、过拟合和类别不平衡。梯度不稳定通常表现为损失曲线突然飙升或变成 NaN。常见原因是学习率太大、warmup 没开或者开太短、图片里存在错误标注产生的极端梯度。我一般会把初始学习率从 0.01 临时降到 0.001 试跑如果能稳定收敛说明梯度本身就大需要调小学习率如果是数据问题则重点检查标注框里是否有坐标越界、类别标错的情况。过拟合的主要信号是训练损失一路下降验证集 mAP 却停滞甚至下跌。工厂场景小数据集配合大模型很容易出现。应对策略是增强正则提高数据增强强度降低模型层结构的宽度如果数据量实在有限也可以用公开数据集做辅助预训练卡在一个不明显的欠拟合但更泛化的状态反而更好。类别不平衡在违规检测里很明显“正常佩戴”的样本大概是“违规行为”样本的十倍以上模型学完之后会倾向于把所有情况预测为正常以满足整体准确率的损失。解决办法是在损失函数里给稀缺类别加权重或者对稀缺类样本做重复采样把每轮训练里正负样本比例拉回到三比一左右。部署阶段的坑主要在算子兼容上。ONNX 导出的模型在某些推理引擎里会有速度高峰抖动、内存占用不断增加的问题严重时表现是长时间运行后显存被占满。排查方向是看后处理部分是否用了动态 shape动态 shape 在大部分引擎里都会引起额外资源开销尽量把输入尺寸固定多路视频流在队列里做 padding 对齐到统一尺寸能省下不少隐性开销。6. 落地效果与后续扩展到这里完整的方案链路已经清楚了。从需求拆解到效果复盘再往后的方向也基本明朗。以我个人的经验来说模型结构选型永远是相对简单的环节真正决定项目成败的是数据规范、阈值调优和业务逻辑兜底这三件事的组合。你要让模型在真实环境里扛住成千上万次推理就必须把这些细节做扎实。试点产线的三个月里系统每天处理几十路摄像头的数据日均告警数量从上线初期的几十次逐步降到个位数而有效的违规行为发现数量翻了一倍。最有成就感的一个案例是某条物流通道原本需要安排专人值守系统稳定运行后巡检频次直接降了六成。当然这个过程中也暴露出不少从测试环境里看不出来的问题比如摄像头被落叶遮挡、机房断电后服务自动拉起失败、存储盘写满导致报警图片丢失。这些问题现在都已经通过周边配套的系统手段解决了。后续扩展方向我个人比较看好两个。第一个是把单帧检测升级成完整的行为识别链路检测加跟踪加姿态估计用骨架数据去判断爬高、跨越传送带、摔倒这类更复杂的动作。第二个方向是让系统和现场执行打通不只是被动告警而是把检测结果作为信号源联动门禁控制、设备减速、广播提醒这些生产安全动作。对工厂安全管理来说后者的价值会更大因为它把算法从“监工”的角色变成了安全机制的一部分。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑