ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

熔炼炉炉前烟尘视觉识别:轻量级CNN三分类与边缘部署实战

熔炼炉炉前烟尘视觉识别:轻量级CNN三分类与边缘部署实战 1. 项目缘起与整体设计思路1.1 为什么要在熔炼炉炉前做烟尘视觉识别熔炼炉车间有个很现实的问题炉前加料、扒渣、出铜、出铝这些工序烟尘状态直接反映炉内反应情况和环保排放水平。老师傅凭经验看烟色就能判断燃烧是否充分、要不要调风量、什么时候该关炉门但这种经验很难量化更没法24小时盯着。环保在线监测设备通常测的是烟囱末端排放炉前逸散烟尘反而成了盲区。我接触这个项目的出发点很朴素用普通工业摄像头对着炉门拍让算法实时判断当前是浓烟、淡烟还是无烟把结果推给中控室和除尘系统。浓烟触发加大引风、淡烟维持、无烟降频节能。整套方案不依赖昂贵的红外热像仪或激光散射设备一台带PoE的枪机加一台边缘计算盒子就能跑起来单炉口硬件成本能压到几千块。这个题目适合谁参考做工业视觉的算法工程师、冶金企业的自动化技术人员、以及计算机视觉方向想做落地项目的学生。它不像人脸识别那样有现成数据集但场景足够垂直三类状态边界清晰标注成本可控是个很好的工业视觉入门实战。1.2 三分类任务的定义与边界划分浓烟、淡烟、无烟这三个类别听起来简单实际定义起来要非常小心。我最初按“烟的浓度”去分结果标注员之间分歧很大。后来改成可操作的视觉判据浓烟炉门开口区域被烟尘大面积遮挡背景炉壁或炉内亮光基本不可见烟团有明显的翻滚纹理灰度值整体偏暗且方差大。淡烟能看到烟尘飘动但炉门开口的亮区或炉壁轮廓仍可辨认烟呈半透明状边缘模糊。无烟炉门区域清晰无持续飘动的烟尘可能有少量热气扰动但无颗粒感。注意火焰和烟要分开。炉内明火属于正常状态不能因为画面有亮橙色就判成浓烟。我在标注规范里明确写了“火焰不计入烟尘”否则模型会把出渣时的火光误判。1.3 技术路线选型为什么不用目标检测而用分类有人第一反应是用YOLO去检测“烟”这个目标。我试过效果不稳定。原因是烟没有固定形状边界模糊标注框很难画一致而且炉前烟尘经常和背景、炉壁、火焰粘连检测框会飘。改成整图分类后问题简单很多把炉门区域裁出来缩到224×224直接分三类。分类任务对边界不敏感标注只需要给整张图打一个标签标注效率提升至少三倍。模型选型上我最终用了轻量级CNN主干是MobileNetV3-Small输入224×224输出3类。理由很直接边缘盒子算力有限工业现场要的是稳定和低延迟不是刷榜。MobileNetV3-Small在INT8量化后单帧推理能压到10ms以内配合每秒5帧的采样完全够用。训练阶段用ResNet18做对比精度只差1.2个百分点但推理速度慢了一倍多不划算。1.4 整体系统架构整套系统分四层采集层炉门侧上方装一台200万像素工业枪机PoE供电RTSP推流帧率25fps实际抽帧到5fps做推理。边缘推理层一台带NPU的边缘计算盒子跑量化后的分类模型输出三类概率和置信度。业务逻辑层连续多帧投票避免单帧抖动误报浓烟持续超过3秒才触发除尘联动。展示与联动层中控室大屏显示当前状态同时通过Modbus TCP把信号给PLC控制引风机频率。这个架构的好处是推理在本地不依赖网络断网也能跑坏处是模型更新要现场刷机所以我在盒子上留了远程模型热更新的接口。2. 数据采集与标注的实操细节2.1 摄像头安装位置与成像质量摄像头装得好不好直接决定项目成败。我踩过的坑一开始把摄像头装在炉门正前方结果炉门一开强光直射画面过曝烟和火焰全白成一片。后来改到炉门侧上方约30度俯角距离炉口3到4米画面里炉门开口占画面下半部分背景是车间墙壁对比度好很多。参数设置上曝光用自动但限制上限避免炉门打开瞬间过曝白平衡固定不要用自动否则烟色会随光线漂移增益调低噪点少。镜头选6mm定焦视野刚好覆盖炉门和周边一米范围。如果炉口尺寸变化大可以用2.8-12mm变焦镜头但变焦后要重新标定ROI。实操心得装好后先录一段包含加料、扒渣、出料全过程的视频回放检查有没有反光、水雾、镜头脏污。镜头前加个简易气帘或防尘罩熔炼车间粉尘大镜头两天不擦就糊了。2.2 数据采集策略与样本均衡我采集了连续两周的视频覆盖三个班次、不同天气、不同原料批次。抽帧策略是每秒抽1帧但遇到状态切换时加密到每秒5帧因为切换瞬间的样本最有价值。最终原始帧约12万张去重和筛选后保留约3万张。样本均衡很关键。实际生产中无烟状态占60%以上浓烟可能只占10%。如果直接训练模型会偏向无烟。我的做法是无烟随机下采样到1万张淡烟和浓烟各保留1万张左右再补充一些边界样本比如刚起烟、烟将散尽的过渡帧。最终训练集2.8万张验证集4千张测试集4千张三类基本均衡。2.3 标注规范与质量控制标注用LabelImg或CVAT都行但规范必须统一。我写了三页的标注手册核心几条只标注炉门开口区域内的烟炉门外飘散的烟不算。火焰、热气、水蒸气不计入烟尘。烟尘遮挡面积超过开口区域70%判浓烟30%到70%判淡烟低于30%判无烟。画面模糊、镜头脏污、完全过曝的帧直接丢弃不标注。标注员培训后先标500张我逐张检查分歧率控制在5%以内才开始批量标。最终3万张里我抽检了3000张错误率约2.1%主要是淡烟和浓烟的边界帧。这些边界帧后来单独拿出来做难例挖掘对提升模型鲁棒性帮助很大。2.4 数据增强与预处理工业场景不像自然图像增强不能乱用。我用的增强包括随机水平翻转、亮度对比度微调±10%、高斯噪声、随机裁剪裁掉边缘5%到10%。不用垂直翻转因为炉门上下方向有物理意义不用大角度旋转摄像头是固定的。预处理统一到224×224归一化用ImageNet均值方差。这里有个细节炉门区域只占原图一部分我先把ROI裁出来再缩放而不是整图缩放。ROI用固定坐标因为摄像头位置不动。如果摄像头可能被碰歪加一个基于炉门边缘的自动校正但那是后期优化第一版固定ROI够用。3. 模型训练与边缘部署全流程3.1 训练环境与基础配置训练在本地工作站上跑单卡RTX 3060 12GPyTorch 1.13CUDA 11.7。数据加载用DataLoaderbatch size 64num_workers 8。优化器用AdamW学习率3e-4余弦退火权重衰减1e-4。损失函数用交叉熵但给浓烟类加了1.5倍权重因为浓烟漏报的代价比误报高——漏报浓烟可能导致环保超标误报只是多开一会儿风机。训练轮次设了80轮实际在第52轮验证集准确率到峰值98.3%之后开始过拟合。我保存了验证集最优的权重同时用EMA指数移动平均平滑参数最终测试集准确率97.8%浓烟召回率98.5%淡烟召回率96.2%无烟召回率98.1%。3.2 模型量化与推理加速边缘盒子是瑞芯微RK3588NPU算力6TOPS。PyTorch模型不能直接跑要转成ONNX再转RKNN。转换过程中有几个坑ONNX opset版本选11太高RKNN不支持。输入固定为1×3×224×224动态shape在NPU上效率低。量化用混合量化第一层和最后一层保持FP16中间INT8精度损失最小。量化后模型大小从9.8MB降到2.6MB单帧推理从FP16的28ms降到INT8的8ms。实测连续跑24小时NPU占用率稳定在35%左右盒子温度控制在55度以内不需要额外风扇。3.3 多帧投票与状态机设计单帧分类会有抖动比如烟刚起时模型在淡烟和浓烟之间跳。我加了一个长度为15帧的滑动窗口窗口内多数投票决定当前状态。同时设计了一个简单状态机当前状态为无烟连续5帧浓烟才切到浓烟。当前状态为浓烟连续10帧无烟才切回无烟。淡烟作为过渡态切换条件放宽到3帧。这样处理之后状态切换次数从每分钟十几次降到两三次中控室看曲线不再眼花。状态机参数可以根据现场烟尘变化速度调反应慢的炉子可以把窗口拉长。3.4 与PLC和除尘系统的联动联动通过Modbus TCP。边缘盒子作为客户端PLC作为服务端盒子把当前状态写到一个寄存器0无烟1淡烟2浓烟。PLC程序里做逻辑浓烟持续3秒引风机频率加到45Hz淡烟维持30Hz无烟降到20Hz。同时中控大屏用WebSocket推状态每500ms更新一次。注意联动逻辑一定要加延时和死区否则烟尘一闪就调风机设备频繁启停容易坏。我在PLC里加了最小运行时间保护风机频率变化间隔不低于30秒。4. 现场常见问题与排查实录4.1 模型误报漏报的典型场景现场跑起来后误报主要集中在几种情况问题现象可能原因排查方法解决措施出渣时火光被判浓烟训练集火焰样本少回放误报帧补充火焰负样本标注为无烟镜头脏污导致全图模糊判淡烟图像质量下降检查镜头加镜头脏污检测模糊度超阈值报警夜间补光不足判无烟红外灯功率不够对比白天夜间换大功率补光灯或加夜间增强水蒸气被判淡烟水汽和烟纹理相似观察季节变化补充水蒸气样本标注为无烟烟刚起时在淡烟浓烟间跳边界样本不足看置信度曲线增加过渡帧训练调状态机窗口4.2 边缘盒子稳定性问题盒子跑久了会遇到内存泄漏、NPU驱动崩溃。我做了几件事推理进程用systemd守护崩溃自动重启每24小时定时重启一次推理服务日志轮转避免磁盘写满。另外盒子电源要稳车间电压波动大加了个小UPS实测能扛住瞬间掉电。4.3 网络与数据回传RTSP流如果直接拉带宽占用高。我在盒子上做了抽帧只把推理结果和关键帧截图回传原始视频本地存7天。关键帧是状态切换前后各5秒的图用于事后追溯。回传用MQTT轻量且支持断线重连。4.4 模型迭代与远程更新现场数据分布会变比如换了原料、改了工艺模型需要迭代。我在盒子上留了一个模型更新接口通过内网上传新模型文件校验MD5后热替换推理服务自动重载。更新过程不影响PLC联动因为状态机在业务层模型只负责出概率。5. 实操心得与后续扩展方向这个项目从立项到稳定运行花了约三个月其中数据采集和标注占了一半时间。我的体会是工业视觉项目算法只占三成七成在数据和现场适配。模型精度从95%提到98%可能只要一周但从98%到稳定运行要解决镜头脏污、光照变化、设备抖动、网络中断一堆杂事。几个具体建议第一标注规范一定要先小批量试标分歧率降下来再铺开否则返工成本极高。第二边缘部署优先选支持INT8量化的芯片FP16在工业盒子上往往跑不动。第三联动逻辑一定要加延时和死区别让算法直接控设备。第四留好远程更新和日志回传现场跑起来后你不可能天天去车间。后续可以扩展的方向一是加烟尘浓度回归不只分类还输出一个0到1的浓度值更精细地控风机二是多炉口统一管理一个盒子跑多路视频分摊成本三是结合炉内温度、风量等时序数据做多模态融合提前预测烟尘变化趋势。这些我还在试等跑稳了再整理出来。
返回列表