2026/10/31 21:56:36

熔炼炉烟尘AI视觉识别实战:三分类模型与边缘部署

熔炼炉烟尘AI视觉识别实战:三分类模型与边缘部署 前阵子做完一个熔炼炉烟尘AI视觉识别的项目核心就是给炉前画面做浓烟、淡烟、无烟三分类实时监测。本来以为只是个普通的图像分类任务结果从现场勘察、相机安装、数据采集到模型部署踩了不少坑也总结了不少经验。这篇文章不写PPT式方案就按我实际动手的流程把关键决策、参数、代码思路和排查方法都摊开讲希望给正在做类似工业视觉项目的朋友一点参考。先说明白这东西是干什么的熔炼炉在冶炼过程中炉口冒出的烟气状态能直接反映炉内反应剧烈程度、除尘系统是否正常、辅料投放是否过量。传统做法靠老师傅盯监控或者安装粉尘浓度仪但前者容易疲劳漏看后者只能测烟囱出口的颗粒物往往滞后。我们做的这套系统就是在炉口上方装一个工业相机把画面实时传给边缘计算设备用AI模型判断当前是浓烟、淡烟还是无烟一旦出现浓烟立即告警并联动现场PLC同时把分类结果和截图存进数据库方便事后追溯。适合谁看如果你正要上马类似的工业视觉监测项目或者想在工厂环境里落地一个图像分类小模型这篇文章能帮你少走不少弯路。1. 项目全景为什么要盯住炉口那缕烟1.1 烟色是冶炼工况的“晴雨表”熔炼炉前的烟不是简单的“污染物”它承载着大量工艺信息。我在现场和老师傅聊天时他们年轻时没有在线仪表判断炉况全靠看烟烟气发黑且浓说明燃烧不充分或者有机物、辅料投入过量烟气青白且淡代表反应稳定炉温区间正常烟几乎看不到要么是熔炼间歇期炉子本身安静要么是除尘抽力太大把烟气瞬间拉走这本身也值得关注。所以“浓烟/淡烟/无烟”三分类不是我们凭空拍脑袋定的而是老师傅几十年的经验被数字化了。这套分类对应到生产管理上有三个直接价值。第一是环保监管浓烟溢出意味着无组织排放超标环保平台上随时可能被抓拍第二是设备保护浓烟往往伴随炉压异常除尘布袋可能堵了或脉冲阀坏了早发现一秒就少损失一点第三是工艺优化通过统计浓烟发生的频次和时间段可以反向追溯是不是加料节奏不合理。一个三分类标签背后连接的是安全、环保、设备、工艺四个维度这也是项目能立项的根本原因。1.2 传统监测方式的三个痛点滞后、误报、看不清很多人会问工厂里不是已经有粉尘浓度仪和视频监控了吗为什么还要专门做一套AI识别我在调研阶段把现场现有系统都捋了一遍发现它们各有各的短板。粉尘浓度仪装在烟囱或除尘管道里测的是颗粒物浓度但它反映的是“除尘系统出口”的结果不是炉口局部的瞬时状态。烟气从炉口逸散到被除尘管道吸走中间有几十秒的时间差等浓度仪数值飙起来浓烟早就冒完了。视频监控虽然有但是全靠中控室值班人员眼睛盯一个人同时看十几个画面注意力撑不过二十分钟。更麻烦的是传统视频分析的阈值报警很容易误报——熔炼时火光闪烁、天车经过、蒸汽飘过都会触发假报警现场工人被折腾几次以后就不信这套系统了。这个场景很像家用场景里的烟雾报警器它能告诉你“有烟雾颗粒”但分不清是炒菜油烟还是真失火。我们要做的AI视觉识别本质上就是给监控画面装一个“懂炉况的大脑”直接判断烟气形态是正常还是异常而不是停留在“有没有烟”这个层面上。1.3 为什么用“AI视觉三分类”而不是更复杂的目标检测项目启动时内部也讨论过要不要做目标检测、实例分割把烟团的轮廓、面积、位置都算出来。后来我们统一了判断用户的核心诉求是“炉口到底处于哪种状态”这是一个场景级别的状态判断不是“画面里有几个烟团”的物体检测问题。三分类模型只需要回答“这张图是浓烟、淡烟还是无烟”模型结构简单、训练数据容易标、推理速度快在边缘设备上非常友好。打个比方这就好比体检时你先量体温判断是否发烧而不是直接去做肺部CT。浓烟、淡烟、无烟不是三种“物体”而是同一种烟气在不同工况下的连续形态用分类模型天然合适。而且分类模型的鲁棒性比目标检测强很多烟是半透明的、边界模糊的、随风飘散的检测框本身就很难标准确硬做检测反而会引入大量标注噪声。2. 方案选型从相机硬件到算法模型的取舍2.1 相机选型宽动态比高分辨率更重要工业视觉项目最容易犯的错就是盲目上高分辨率相机。我们最初也想过上800万像素后来现场跑了一圈发现熔炼炉前最要命的问题不是“看不清细节”而是“动态范围不够”。炉子正常冶炼时温度上千度火光强烈而烟气本身是半透明的灰白色或青黑色普通相机会出现两个极端要么炉口火光一片死白要么背景暗得看不见烟。所以我们最终选了宽动态WDR工业相机分辨率只要求500万像素帧率15到30fps就足够。为什么帧率不需要高因为烟气形态变化是秒级的而且我们后面还有滑动窗口做平滑太高的帧率只会增加边缘设备的计算压力。镜头用的12mm定焦视野大概覆盖炉口前方两三米的范围。这里有个关键点不要用自动对焦镜头冶炼现场有剧烈热浪自动对焦会频繁拉风箱画面反复虚化模型就废了。固定焦距、固定光圈调好后用螺丝锁死。安装位置也很讲究。相机不能直接正对炉口热辐射会把传感器烤坏一般装在炉口侧上方斜着向下看炉口区域。防护罩必须配水冷套加压缩空气吹扫镜头前面要持续吹气否则冶炼粉尘十几分钟就能糊满镜片。这个细节如果前期不考虑到位后面模型准确率再高也白搭因为输入图像本身就是糊的。2.2 算力平台边缘盒子为主服务器推理为辅选算力平台时我们对比了三条路线纯CPU工控机、边缘AI盒子、中心GPU服务器统一推理。纯CPU跑MobileNet这类轻量模型虽然也能跑但现场工控机还要处理视频流、数据库写入和告警联动CPU占用率一高推理延迟就不稳定。中心GPU服务器性能强但熔炼车间到机房的网线动辄几百米一旦网络闪断监测就失效了这在安全场景里是不能接受的。最后我们选了边缘AI盒子带GPU或NPU的那种算力大约在30到100 TOPS区间部署在炉前的弱电间里通过网线直连相机模型推理和告警判断都在盒子本地完成。中控室的服务端只负责接收结构化结果、存数据库和展示界面网络断了也不影响现场监测。选型逻辑很简单把计算推到数据产生的地方减少网络依赖这是工业实时监测的第一原则。2.3 网络模型轻量化分类网络加预训练微调模型选型上我们没有用YOLO系列的检测模型而是选了轻量化的图像分类网络比如MobileNetV3、EfficientNet-Lite这类结构。原因前面说过这个任务本质是图像分类。轻量化模型在边缘盒子上的推理延迟能做到几十毫秒而且体积小更新部署都方便。这里必须强调一个经验不要从零训练。我们用ImageNet预训练权重做初始化然后在自己的熔炼炉数据集上微调。虽然熔炼炉烟气和ImageNet里的日常生活图像分布差异很大但预训练模型已经学会了边缘、纹理、颜色等基础视觉特征微调能显著减少训练时间并提高收敛稳定性。在我做过的工业项目里预训练权重即使对“看起来完全不一样”的工业场景也普遍能带来5到10个百分点的准确率提升属于白捡的便宜。3. 三分类模型实现的关键细节从标注到推理3.1 三类状态的判定标准与边界做分类模型前最难的不是写代码而是定“什么是浓烟、什么是淡烟、什么是无烟”。如果标准模糊三个标注员能标出三种结果模型训出来就是一团浆糊。我们最终形成了可量化、可操作的标注规范核心标准是这样定的无烟画面中炉口区域没有可见的烟流背景物体轮廓清晰可辨。淡烟有可见的烟流或烟团但呈半透明状透过烟气还能隐约看到背景轮廓烟色偏白、青或浅灰。浓烟烟团致密、不透明背景被大面积遮挡烟色偏黑、深灰或黄色通常伴随翻滚扩散形态。这里容易踩的坑是淡烟和浓烟的边界。我们规定了一条硬性参考线如果烟气背后炉口钢结构的轮廓还能辨认就是淡烟如果完全看不清且烟团占据画面显著区域就是浓烟。标注时我们还做了双人交叉复核同一批图两人标一致性低于95%的样本直接丢回重标。分类模型的性能上限很大程度取决于标注一致性这一点怎么强调都不为过。3.2 数据采集与样本清洗数量、来源与平衡数据是工业视觉项目的命根子。我们从现场相机连续录制一周的视频覆盖早中晚三个班次、晴天阴天、加料期和正常冶炼期然后用固定帧率抽帧再经过人工清洗。清洗规则有三条第一画面被天车、人员、检修平台大面积遮挡的帧删掉第二镜头起雾、被粉尘糊住的模糊帧删掉第三熔炼炉停炉检修期间的“死画面”删掉。最终每个类别保留8000到15000张图三类加起来约三万张。这个数量对于三分类任务来说完全够用再多边际收益就很小了。类别平衡上我们发现“淡烟”样本天然偏少因为正常冶炼时烟气形态比较稳定变化不多于是我们做了两件事一是采集时特意选择不同风量、不同物料配比时段增加淡烟形态的多样性二是在训练时给淡烟类别更高的损失权重让它不至于被样本多的类别“淹没”。3.3 训练配置与评估指标一个可复用的基准方案下面给出我们实际用的训练配置都是常见做法直接抄作业问题不大。输入分辨率224×224数据增强用随机水平翻转熔炼炉画面左右对称、随机亮度对比度扰动、随机旋转正负10度、随机裁剪缩放。训练用PyTorch优化器AdamW初始学习率1e-3配合CosineAnnealing学习率调度主干用MobileNetV3-Large预训练权重最终全连接层改成3分类。Batch size在边缘盒子上设32训练60个epochLoss用CrossEntropy并按类别的样本数比例设置权重。评估指标不能只看总体准确率要重点看混淆矩阵和每类召回率。我们给浓烟召回率定的硬目标是95%以上因为浓烟的后果最严重宁可把淡烟误报成浓烟也不能让真正的浓烟漏掉。第一次训练出来的模型总体准确率93%但浓烟召回率只有88%一看混淆矩阵大量浓烟被分成了淡烟。原因在于浓烟形成过程中存在大量中间帧烟气从淡变浓的过渡态模型分不清。解决方案是加强数据清洗把模糊的过渡帧重标同时适当增加浓烟样本的亮度扰动让模型对烟色和密度更敏感。3.4 实时监测的工程化逻辑滑动窗口与连续帧判决模型在单帧上跑得再准直接拿来做实时告警也会被现实打脸。工业现场画面里可能有一帧突然飘来一片水蒸气模型误判成浓烟触发警报也可能加料瞬间烟从无到有只闪过一帧。解决这个问题必须做时间维度的平滑这是工业视觉和学术竞赛最大的区别。我们用的是连续帧判决加去抖状态机模型每秒处理两帧每一帧输出一个三分类结果然后放进一个长度为6的滑动窗口里。只有当一个类别在窗口内出现至少4次状态才切换。也就是说从烟气形态变化到系统确认并告警大约有2到3秒的延迟这在工业场景里完全可以接受换来的是误报率大幅下降。状态切换还设置了“保持时间”比如从淡烟变无烟要连续确认5帧才真正切过去避免烟团飘动时状态来回跳。告警输出通过Modbus TCP写PLC寄存器同时把分类结果、置信度和截图以JSON格式推给中控平台。4. 实操过程从现场走线到模型上线的完整链路4.1 第一周现场勘察、设备安装与数据准备项目启动的头几天我们基本都泡在车间里。第一步是选相机安装点用脚手架和临时支架把相机架在炉口侧上方反复调整俯仰角确认画面能覆盖炉口全部区域且没有立柱遮挡。第二步是布线工业现场布线不能怕麻烦网线和电源线分开走金属穿线管避免动力电缆干扰信号。相机供电用工业级24V电源现场电压波动大必须带稳压和防浪涌功能否则相机晚上容易自动重启。第三步是调试图像参数。刚开始用自动曝光模式拍出来的画面惨不忍睹炉火一亮整个画面全是白的。我们换成手动曝光把快门时间固定在一个适中值然后打开宽动态模式同时拉低高光区域的增益。熔炼炉火光不是持续均匀的它会波动所以后期训练数据里专门加入了不同曝光倾向的增强样本让模型适应“亮度变化但分类不变”的真实场景。数据采集阶段录像机连续跑了一周每天按8小时有效生产时段保存累计超过300GB视频。4.2 数据标注与第一版模型在反复折腾中找手感这周的工作量最大。我们用脚本定时从视频里抽帧每5秒抽一帧抽出来的图先做个粗筛再用一个简单工具快速打标签。为了让模型见多识广我有意把不同时间段的图像混在一起早班、中班、夜班的光照完全不同夜间补光灯下的烟色和白天的烟色差别很大这些都要让模型学到。第一版模型训完测试集整体准确率93%看着还行但一分析混淆矩阵就发现问题淡烟召回率只有79%很多淡烟被认成了无烟。这个结果其实在预料之内因为淡烟本来就是最模糊的类别半透明的烟在暗背景下和工地背景融为一体。当时咬咬牙做了两个调整一是重新梳理淡烟标注把“能看到烟但很淡”的样本单独抽出来再标一次二是设了类别权重淡烟的损失权重调到1.5倍。改了之后淡烟召回率提到91%整体准确率到95.6%。第一版模型上线试运行后还发现一个新问题除尘风机喷吹瞬间画面里会扬起一大股粉尘白花花一片模型直接判成浓烟。这其实是“粉尘”和“烟”的语义混淆从图像上看它们确实都表现为大面积不透明遮挡。解决办法是在采集阶段专门截取喷吹时段的大量画面把它标为无烟或淡烟因为这不是炉况异常让模型学会区分“从下往上冒的粉尘”和“从炉口翻涌的烟”。这件事让我更深刻地理解了一个道理分类模型区分的是“视觉模式”不是物理本质你必须把所有会出现的视觉干扰模式都喂给它。4.3 边缘端部署与实时化改造把模型压到能跑模型验证通过后真正上线前的最后一步是部署优化。边缘盒子上我们先用推理框架把PyTorch模型转换成优化格式再做INT8量化模型体积从几十兆降到十几兆推理延迟从80毫秒降到30毫秒左右。这里有个值得提醒的点量化后一定要用真实现场数据重新跑一遍评估因为INT8量化会让模型精度轻微下降烟气和火光这种高动态范围的场景尤其容易掉点。我们量化后浓烟召回率从95%掉到92%后来通过校准数据集选择时多覆盖了夜间灯火通明的样本才把召回率拉回94%。部署架构是相机RTSP视频流接入盒子盒子里的推理服务每500毫秒取一帧完成分类后走状态机逻辑结果经Modbus TCP传给现场PLC同时把告警记录和截图推到中控室服务器。服务器端用Web界面展示当前状态、历史趋势和告警日志支持按时间段筛选浓烟发生次数。上线第一周系统运行稳定内存占用几乎不变单帧推理延迟没超过50毫秒告警从烟气出现到中控室弹窗约2秒现场反应时间比原来人工盯屏快了一个数量级。5. 常见问题与排查技巧实录5.1 烟与水蒸气、灰尘分不清这是工业烟气识别最典型的干扰问题。熔炼车间里既有熔炼烟气也有冷却水产生的水蒸气还有除尘器喷吹扬起的灰尘。图像上它们都是半透明或不透明的白色/灰色团块。排查时我们发现一个有趣现象烟气通常从炉口位置向上翻涌水蒸气多从地面或管道缝隙飘出除尘粉尘是瞬间弥漫整个画面的。因此除了给模型补充对应负样本我们还在算法后处理上加了空间先验——如果异常烟雾区域不在炉口ROI范围附近就算分类结果是浓烟也不告警。这种“模型规则”的组合非常实用纯靠模型硬扛永远有死角。5.2 熔炼火光反光与夜间低照度火光反光会改变烟气的视觉颜色浓烟在强光下可能看起来发红亮淡烟在逆光下会接近透明。排查时我们发现夜间补光灯虽然能照亮炉口但会在钢铁结构上形成镜面反射这些高光点被增强后的模型误当成浓烟团。解决办法有三个层面图像预处理加局部直方图均衡把动态范围压下来数据增强里人工模拟强光斑在训练时把熔炼炉高亮背景区域作为噪声专门加进去。实际上模型训练到最后对光亮变化已经很不敏感了但这个问题在项目初期确实让我失眠了好几天。5.3 换炉型、换物料后模型失效工业生产的残酷之处在于你以为模型稳定了结果车间第二天换了批矿料烟的颜色从青白变成黄褐模型立刻懵了。这是因为烟气的颜色、密度和物料成分强相关。我们给出了一套务实的应对方案保留已上线的通用模型用新炉型的视频快速采集几百帧人工标记后做小规模微调整个过程控制在半天内完成。同时建议现场每换一次物料批次就把当天的烟气截图存到“新待标注池”每周抽几百帧快速人工确认发现准确率下降再启动微调。工业视觉项目不是“一锤子买卖”持续的数据回流和模型迭代是常态。5.4 常见问题速查表故障现象可能原因排查方法解决办法浓烟频繁误报除尘喷吹粉尘、水蒸气干扰查看告警截图对比干扰源时间补充负样本增加ROI空间规则淡烟漏报成无烟暗夜环境对比度不足检查夜间图像亮度和补光状态增加夜间数据增强提高淡烟权重画面模糊、特征丢失镜片粉尘覆盖或镜头热浪扰动到现场看镜头吹扫是否正常加大压缩空气压力清洗镜片模型在换料后准确率下降烟色发生明显变化采集新批次图片跑预测用新数据微调模型告警延迟过大网络抖动或盒子CPU抢占看盒子CPU占用和网络丢包限制其他进程改用固定IP直连6. 我对这类项目的一些实践经验项目收尾后我最大的体会是工业AI项目成功的关键不是模型多先进而是对现场物理环境的理解有多深。熔炼炉烟尘AI视觉识别这个项目技术上就是一套再普通不过的图像分类加状态机但它能真正落地靠的是把“老师傅看烟”的经验转换成标注规范把“现场硬件环境”的约束转换成相机安装和防护方案把“恶劣图像干扰”转换成数据增强和规则兜底。这些东西写不出来的时候觉得神秘做通了之后回头看都是些踏踏实实的笨功夫。另外还想分享一个小技巧这类项目一定要把“浓烟不漏报”放在最高优先级宁可牺牲一些误报率指标也不能让真正的浓烟逃过去。我们在告警逻辑里加了一个“置信度若低于阈值但类别概率分布异常则自动记录待人工复核”的缓冲机制这样做不会频繁打扰操作工又不会漏掉极端情况。后续这个项目的自然扩展方向是在现有三分类基础上增加烟尘浓度的相对量化估计或者把不同炉膛编号都做成可配置模型再或者叠加炉压、温度等工艺参数做多模态联合判断。工业视觉这条路一但跑通第一个落地场景后面的价值就越做越大了。