
1. 项目原点智能通风最容易被忽略的“最后一公里感知”矿井智能通风这几年是个热词主通风机变频改造、风门远程控制、局部通风智能联动都有成熟产品了。但整套系统里有个环节经常被低估决策用到的数据到底从哪来。通风闭环依赖三路信息风速风量、风压、气体浓度。气体浓度可以用传感器直接采集风速风压也有超声波、差压变送器这些方案。问题在于不少矿区的测风点和仪表点位并没有全部完成数字化改造很多地方至今沿用传统指针式仪表安装在回风巷、巷道交叉口、主要硐室附近。这些仪表本身没有通信接口也不具备远传能力读数只能靠人。1.1 信息闭环里的缺口仪表数据为什么绕不开很多人会问既然要做智能通风直接全换上数字传感器不就行了实际操作中没那么简单。其一更换仪表涉及停风、动火、接线不是想换就能换的。采区生产任务紧凑留给自动化改造的窗口期往往只有检修班那几个小时。其二某些测点并不适合直接用电子传感器比如高湿度、高粉尘环境下电子敏感元件的长期漂移问题比机械表头更棘手。其三成本账算下来矿山里散布着几十上百块压力表、风压表全部换新不是一笔小数目而且换了以后维护责任并没有消失。所以一个很现实的技术路线是在不更换现场仪表的前提下用机器视觉去“读”它们。彩色摄像机和工业网络摄像机加装防爆外壳部署在仪表正前方定时抓拍AI自动识别表盘位置、提取读数再送入通风系统的集控平台。这套思路相当于给老仪表加了一层“数字皮肤”。1.2 人工巡检的局限与视觉识别的切入点没有在井下走过巡检路线的人可能很难理解仪表读数这件事为什么值得专门立项。人工巡检的痛点有三个层面。第一是距离问题巡检路线动辄几公里走到一个测点可能已经半小时过去中途的风压变化根本来不及记录。第二是环境问题低压头、粉尘弥漫、照明不足人眼读指针式表盘很容易产生视差尤其是那种表盘玻璃已经磨损起雾的旧表同一个数值两个人可能读出两个结果。第三是紧急工况通风异常时恰恰需要频繁读取数据但这个时候人员进入相应区域的危险性也最高非常矛盾。视觉方案切入的点就在这里固定机位一次性安装高频抓拍自动分析。不用天天跑路线不会因为疲劳产生读数偏差紧急状态下依然能持续返回数据。我们的目标很简单——做一个能够稳定识别井下常见仪表的检测与识别系统把表盘位置、指针指向、对应量程全部解析出来最终输出一个可信的数值。2. 技术选型YOLO11-SEG 叠加 HSPAN 的决策链项目目标明确之后接下来就是模型选型。我们在最初调研阶段对比了三条路线传统图像处理、普通目标检测加后续裁剪识别、以及实例分割方案。最终选了 YOLO11-SEG 作为基础框架并在特征融合部分接入了 HSPAN 结构。下面把决策过程完整交代一遍方便你判断这套方案适不适合自己的场景。2.1 仪表识别为什么需要分割能力而不仅是检测框第一反应很多人会说用目标检测框出表盘再裁剪出来做指针识别不就行了吗早期我们也是这么想的第一版原型用的就是普通检测框加 OCR。跑了一个月发现问题不少。仪表这个东西和普通物体不太一样它结构非常紧凑表盘、刻度、指针、表号、玻璃反光全挤在一个小区域内。检测框给出的是一个大致的矩形范围框内除了真正的表盘通常还包含背景墙体、管道、电缆桥架这些干扰信息会直接影响后续指针定位的精度。更麻烦的是井下有些场景里仪表会挨个排列或者上方正好有一根管道横过普通框根本分不清哪个像素属于哪块表。实例分割正好解决这个问题。YOLO11-SEG 在输出目标框的同时还会输出每个目标的逐像素掩膜。掩膜能精确勾勒表盘的圆形区域把背景像素全部排除掉。后续计算指针角度、量程范围、零点位置都基于掩膜做几何分析精度高出一个量级。我们后来还发现分割掩膜对于判断表盘是否被遮挡、玻璃是否破损、指针是否脱落都有很大帮助这些是检测框完全给不了的信息。2.2 HSPAN 特征融合结构在我们项目里的实现方式选定了分割路线第二步是优化特征提取。YOLO11-SEG 本身已经有比较成熟的骨干和颈部结构但如果直接拿默认权重上井下场景小目标和低照度两类问题会非常突出。井下仪表镜面的直径往往不到十厘米在分辨率 1920×1080 的画面里可能只占几十个像素同时现场照明不足表盘细节很容易淹没在噪声里。我们项目里采用的改进方案核心是在特征融合部分引入了 HSPAN 结构。按我们团队的实际实现来说它的设计思路是把颈部网络从普通的路径聚合结构升级为“分层空间金字塔注意力网络”。具体做了三件事第一跨尺度特征增强。对骨干网络输出的浅层特征和深层语义特征做分层融合每层通过多尺度池化获取不同感受野的上下文信息避免小表盘特征在前向传播中被大背景稀释。第二空间注意力加权。在融合后的特征图上生成注意力权重让网络重点聚焦于表盘边缘、指针尖、刻度线这些判别性区域而不是平均分配计算资源。第三跨层跳连。在 P3、P4、P5 三个层级之间增加更短的连接路径让浅层的细节信息和深层的语义信息能够更快相互补充。这对指针这种细长目标的检出特别关键。用一句话总结HSPAN 让模型学会了“哪里值得看哪里可以忽略”。这比单纯把网络加深加宽要高效得多。2.3 对比结果从基线到最终方案的提升选型不能只讲原理最终还是要看数据。我们在同一份验证集上跑了三组对比实验YOLOv8-SEG、YOLO11-SEG、YOLO11-SEG 加 HSPAN。训练集和超参保持一致只替换模型结构避免变量干扰。模型mAP50mAP50-95单帧推理耗时YOLOv8-SEG78.2%52.6%21msYOLO11-SEG82.4%58.3%19msYOLO11-SEG HSPAN87.1%64.2%24ms可以看到HSPAN 带来的提升不是一点点mAP50 提升了约 4.7 个百分点mAP50-95 提升了约 5.9 个百分点。推理耗时有一定增加但在我们设定的 15 秒巡检周期下完全无压力实际部署时每路相机只需要按需调用模型而不是持续跑满帧率所以这点开销完全可以接受。这里也想提醒一句结构改造未必对所有场景都有效但针对“小目标 复杂背景 弱特征”的仪表识别任务效果确实立竿见影。如果你的项目场景是车辆、行人这种大目标可能收益就没那么明显。3. 数据工程让模型在井下光线里“看得见”表模型选得再先进没有数据也是空谈。仪表识别的数据工程比一般目标检测任务更琐碎因为要兼顾不同表型、不同安装角度、不同光源条件还要给分割网络准备高质量的掩膜标注。这一节把我们的采集、标注、增强全流程拆开讲。3.1 现场采集方案与筛选标准项目启动后我们花了三周时间在矿区现场采集图像数据。采集不是随便举着相机拍几张就行要照顾到模型泛化能力得系统性覆盖各类变量。仪表类型方面我们重点覆盖了四类风压表、风速表、温度表、流量表。这四类在矿用通风场景里最常见也是集控平台最关心的测点。安装方式方面尽量涵盖正装、侧装、仰角安装、俯角安装、横竖方向不一等各种情况。光照条件方面分别采集了白天自然光、夜间补光灯、头顶荧光灯、局部强光直射以及无照明全黑环境下的图像。原始素材一共拍了 8600 多张但最后进标注流程的只有 7300 张左右。筛选标准有两条一是画面中出现的目标仪表清晰可见模糊到人眼都无法辨认的直接淘汰二是仪表正在正常运行状态下不存在表盘玻璃碎裂、指针脱落这类极端损坏情况——那些损坏样本我们单独保留后面会拿去做故障识别。这里说个小经验井下拍图最怕的是司机、检修工在画面里走动拍出来一堆人影标注时这些背景区域很难处理所以采集时尽量选检修间隙让现场人员配合规避几分钟。实在避不开的后面通过数据清洗切掉。3.2 类目设计与多边形标注规范图像采集回来标注成了最耗时的一环。我们的类目设计没有搞得太花哨核心是两个类别dial表盘主体区域和pointer指针区域。为什么把指针也单独作为一个分割类别因为后续读数计算需要精确提取指针的走向和角度。如果只有表盘掩膜指针和刻度的相对关系不好求如果有了指针掩膜可以直接通过掩膜骨架计算角度准确性高得多。标注规范上有几个要点。第一表盘标注必须沿表盘外边缘多边形描点不要求像素级完美但最少要 20 个点保证圆形区域拟合精度。第二指针标注要覆盖从指针根部到针尖的完整延伸区域即便是形状不规则的异形指针也要把最外端的尖部标进去。第三表盘玻璃上的反光不属于任何类别不要标进掩膜里——反光区域和表盘本身重合的部分以表盘为准。整个标注过程用了大约 12 人周的工作量前后历经两轮质检。质检员会把标注结果叠加在原图上逐张检查碰到指针边缘描得不干净的一律驳回去重标。宁可前期多花时间也不能把错误标注带入训练。3.3 数据增强策略和难例平衡滤波方式改进后我们做了一整套数据增强流程增强策略分在线增强和离线增强两部分。在线增强主要交给训练框架自带的能力包括随机翻转、旋转、缩放、HSV 色域扰动。这些常规操作对普通场景足够但对井下环境还不够。我们又额外增加了几个针对性操作一是低照度模拟增强。把正常图像随机降低亮度并增加高斯噪声模拟夜间和无补光条件。二是仿射透视变换。井下相机安装角度各不相同同一个表盘在不同视角下会呈现不同的椭圆形状通过仿射变换可以让模型适应这种情况。三是局部遮挡模拟。随机在表盘区域叠加小方块或者粉尘纹理增强模型在被遮挡情况下的鲁棒性。难例平衡方面我们统计了四类仪表的样本数量分布发现风压表占比超过六成流量表不到一成。为了让少数类不被淹没训练时对流量表和温度表提高了采样权重让每个 batch 里不同类别的样本数量相对均衡。最终扩充后的训练集大约 1.6 万张验证集和测试集各约 1100 张来自完全不参与训练的独立场景。4. 训练调参与模型瘦身数据和结构都到位之后训练阶段反而没那么玄乎。我把关键的配置和判断逻辑列出来供你参考。4.1 训练环境与关键超参数训练在一台开发机上完成配备了一颗主流工作站显卡深度学习框架用的是常见版本。输入图像统一缩放到 640×640batch size 设置为 16训练轮次 200 轮。优化器选择了带权重衰减的动量优化器初始学习率设成 0.01采用余弦退火调度逐步降低。初期我们直接用了默认参数跑了一版mAP50 在 80% 左右后续针对实际效果做了三轮调优。第一轮把输入分辨率从 640 提到 768小目标检测有明显改善mAP50 提升了约 2 个百分点代价是训练速度慢了不少。第二轮在损失函数中调低了分类分支的权重因为四类仪表的外形区分度本来就高分类已经不是瓶颈把权重让给分割分支掩膜精度提升更明显。第三轮引入了约 0.0005 的权重衰减抑制过拟合验证集上的损失曲线更加平滑。训练过程中的关键指标包括 box 损失、分割掩膜损失、分类损失三条曲线。我的判断标准很简单训练损失持续下降、验证损失同步下降就继续验证损失开始上升而训练损失还在降就是过拟合信号需要提前停止或增强正则。4.2 训练曲线与指标解读最终模型在验证集上的表现可以分四个维度看分割精度方面mAP50 达到 87.1%mAP50-95 达到 64.2%在工业表计场景已经够用。细看单类风压表最高因为样本量最足、表盘特征最清晰流量表略低主要是因为现场流量表表盘较小且经常被管道遮挡。分类准确率方面接近 98.6%几乎没有类别混淆风压表和温度表偶尔有误判但误差来源主要是相似的外圆形状通过后续后处理可以兜底。指针分割质量方面我们用像素级 IoU 评估平均在 0.83 左右。指针比较细在掩膜边缘会有 1-2 像素的锯齿但对角度计算影响不大。还有一个更直观的指标表盘区域定位误差。我们计算了预测掩膜外接圆圆心和人工标注圆心的欧氏距离在 640×640 的输入下平均偏差为 3.2 像素换算到实际场景约 4-5 毫米足够满足读数需求。4.3 部署前精简与量化注意点训练完的模型是浮点格式直接部署在井下的边缘计算设备上算力和功耗压力都不小。做了一轮精简把模型从 PyTorch 格式导出为通用 ONNX 格式再用推理引擎加载。量化这一步踩过一个坑。最初直接转成 8 位整数量化精度掉得比较多mAP50 跌了近 4 个百分点原因是指针和刻度的细节特征在低比特下损失过大。后来改成了 16 位浮点量化精度损失控制在 0.5% 以内同时推理速度提升了 40% 左右。如果你在做类似项目建议先尝试 16 位浮点不要一上来就追求 8 位整数的极限压缩工业场景稳定优先。部署端最终跑在边缘计算盒子上单帧推理耗时约 24ms加上前后处理一次完整读数大约 80ms。考虑到我们的巡检策略是每 10 秒抓拍一次远远供大于求实时性完全没有瓶颈。5. 读数后处理掩膜到报警的完整链路模型输出的只是“表盘在哪、指针在哪”离真正的读数还有一段路。这一段路如果不做好前面的模型精度再高也是白搭。我把后处理分成三步。5.1 表盘圆拟合与指针角度计算第一步利用表盘掩膜拟合外接圆。做法是把掩膜轮廓的点集提取出来用最小二乘法拟合圆形得到圆心坐标和半径。这个圆的精度直接影响后续角度计算所以拟合时用随机抽样一致性算法做一轮剔除离群点避免掩膜边缘的锯齿像素干扰。第二步从指针掩膜提取指向线。指针区域接通域分析后主要保留最长连通域。考虑到指针通常是细长形我们的做法是提取连通域主方向计算所有像素的协方差矩阵取最大特征值对应的特征向量作为指针方向。这个方向从掩膜重心指向指针尖端比单纯拟合矩形框更加稳定。第三步计算指针角度。以表盘圆心为极点设定正方向为表盘的零刻度方向顺时针旋转到指针方向得到一个角度值。这里有个细节需要特别强调每块表安装在现场的角度未必是正的有些仪表整体装歪了如果直接拿图像坐标算角度会产生系统性误差。我们的办法是在标定环节对每块表记录一次零点偏移值读数计算时自动扣除。5.2 量程映射与告警逻辑角度算出来以后要换算成物理量还得知道量程。每块表、每个测点对应一份参数表包括量程下限、量程上限、零位角度、满位角度。换算公式很简单数值 量程下限 当前角度 - 零位角度/ 满位角度 - 零位角度 × 量程上限 - 量程下限比如一块风压表量程 0 到 5 千帕零位角度 135 度满位角度 45 度当前指针角度 90 度读数值就是 2.5 千帕。就这么简单但实际项目中容易被忽略的是——每块表的位置参数要逐个录入系统不能图省事全部套默认值。读数出来以后接入告警逻辑。我们设定了三层判断第一层是上下限越界读数低于下限或者高于上限直接触发告警第二层是突变判定同一测点相邻两次读数差超过预设阈值说明可能出现异常波动第三层是趋势判断对连续多个读数拟合斜率用于捕捉缓慢的压力爬升。告警消息推送给通风集控平台后由值班人员确认处置。5.3 误检和异常画面的兜底策略再好的模型也会出错后处理必须带容错机制。第一类容错低置信度拒绝。模型输出的置信度低于设定阈值的检测结果不进入读数流程直接标记为“待确认”。阈值设成 0.45低于这个值的宁可漏报也不误报因为误报的读数是假数据比没有数据更危险。第二类容错指针掩膜异常判断。对检测到的指针连通域做面积统计如果面积明显小于历史正常水平可能是指针被遮挡或者相机移位这时候提示巡检而不是输出不可靠读数。第三类容错时间连续性校验。同一个测点在连续周期内的读数如果跳动幅度异常大我们会调取原始抓拍图留档让系统进入“高频抓拍模式”每 3 秒一拍供人工远程复核。这套机制避免了模型偶发误判直接触发风机动作减轻了现场班组被无效告警骚扰的情况。6. 部署阶段的真实踩坑复盘训练完不等于项目完部署上线才是真正考验的开始。这一节把过程中踩过的几个坑摊开来写都是实测数据不是纸上谈兵。6.1 固定支架摇晃与抖动的软处理第一个坑发生在安装后的第三天。现场反馈同一块表白天读数 2.1 千帕晚上变成 1.8 千帕第二天又回到 2.0 千帕。排查半天问题出在相机固定支架上。井下巷道壁面不是平整的混凝土而是凹凸不平的岩面安装支架只拧了两个膨胀螺丝加上巷道内常年有风机震动支架产生了微小的来回摆动。相机视角每晃一度表盘在画面里的位置就偏移几十个像素边缘掩膜也跟着歪。角度计算以表盘圆心为基准本来自适应能力应该很强但摆动幅度太大时圆圈拟合并不能完全消除误差。解决方案是双管齐下物理层面加固支架增加斜撑把相机固定到独立的立柱上和风机的震动源拉开距离算法层面在验证阶段加入了模拟振动的数据增强让模型对视角微变不那么敏感。经过这两轮处理同一测点在连续 24 小时内的读数标准差从原来的 0.3 千帕降到了 0.05 千帕以内。6.2 粉尘水雾对画面影响的处理井下环境没法回避粉尘和水雾。仪表玻璃上积一层薄尘图像看起来只是整体变灰但模型的检测置信度会明显下降。项目试运行期间有几天连续降雨地下渗水量增大有一路相机的镜头前结了一层水雾拍出来的图像完全像蒙了一层毛玻璃模型几乎无法检出表盘。这个问题靠模型本身很难解决我们最后是在图像前端做处理。具体做法是在相机采集线程里增加一个图像清晰度评估器计算画面局部方差和高频分量。当检测到清晰度持续低于阈值就触发镜头清洁提醒并把该测点的读数状态标记为“图像质量异常”不参与通风控制逻辑。同时我们给关键测点的相机加装了小型气帘装置利用压缩空气在镜头前形成一道风墙减少粉尘和水雾附着。实测下来气帘对粉尘遮挡的改善非常明显仪表玻璃上积尘速度减缓了一半以上。也要提醒一句图像质量异常状态的判断阈值不要设得太敏感否则矿山里一阵风飘过就把相机标成故障系统里全是无效告警。我们调了三四轮才找到一个平衡点。6.3 与通风控制系统的联动、去抖与数据质量监测最后一个坑是最微妙的。部署初期我们直接把识别读数送到通风控制系统的实时数据库用来驱动风机的变频决策。几天后控制组反馈说系统频繁出现“振荡”——风机转速时快时慢。追根溯源问题出在读数抖动上。模型对同一块表的连续两次检测读数本来就有少量自然波动比如 2.01 和 2.05 千帕之间跳变。在正常情况下这不是问题但一旦这个波动信号进入闭环控制回路控制器会把它当成真实的风压变化去调整风机转速于是形成了一种微弱的震荡。解决办法是加一个迟滞去抖模块。规则很简单如果当前读数与上一次读数之差小于量程的 1.5%认为没有变化沿用上一次的数值同时只有连续两次读数保持在同一方向变化时才允许更新控制基准值。这样既保留了真实的变化趋势又过滤掉了随机抖动。数据质量监测这块也值得一提。我给每一路相机的读数输出加了一个心跳包包含采集时间、图像清晰度、模型置信度、后处理状态四个字段。集控平台每 5 分钟检查一次心跳包超过 3 个周期没有更新直接报警给维护班组。有了这个机制模型卡死、相机掉线、网络中断都能第一时间定位而不是等到巡检人员发现时已经错过了几个小时的监控数据。项目上线运行两个多月系统整体可用率保持在 98% 以上。比起模型指标我更看重这个可用率——工业现场不问 mAP只看这段时间你有没有稳定地把数据送到该去的地方。最后分享一个项目中的判断原则不管是 YOLO11-SEG 还是 HSPAN都只是手段。这套系统的本质目标是在不更换现场仪表的条件下把读数这件事变成自动、及时、可信赖的环节。如果你的场景也是类似的老设备利旧、数据补盲项目建议先花足够精力把现场采光、安装、标定这些基础工作做扎实再谈模型选型和调参。设备装歪了、光照不行再好的网络结构也只能是在错误的数据上做精致的推理。