工业视觉踩坑实录(九):调了三天算法没效果,最后发现是灯的问题

摘要:条烟品类检测,听起来就是拍张照片做分类。但条烟表面的BOPP覆膜是个噩梦——左右条形光打出两道高亮反光带,换成漫反射灯管反光变成散乱一片。调了三天预处理算法,最后靠偏振镜消反光才彻底搞定。这篇文章从条烟检测的真实经历出发,聊聊工业视觉里光源这个最容易被低估的环节。

在这里插入图片描述

关于作者

我接触视觉整整10年。

机器视觉、烟草、煤矿等行业都有深度开发经验。从硬件选型、算法开发、模型训练,到上位机开发及部署,都在一线磨过。

之前是多家公司人工智能团队的技术负责人。现在自己创业了,还在继续做视觉落地这件事。

作者说

搞工业视觉的兄弟们有没有经历过这种绝望——

算法调了三天,参数试了几百组,换着花样加预处理,结果都不行。后来发现根本不是算法的问题,就是灯的问题。

你没看错,灯的问题。

而且不是灯坏了,是灯用错了。

车间现场,我的检测模型当场翻车

5年前做烟草的时候,接的一个条烟品类检测的项目。

需求不复杂:传送带上过来一条烟,相机拍一张图,算法判断是哪个品牌。条烟那么大一个东西,包装上颜色、图案、文字都有,人眼扫一眼就分得清。我当时觉得这单挺轻松。

实验室里用的光源方案是左右两侧各一条条形光源,从两侧打光。在实验室环境下效果还不错,准确率95%以上,不算惊艳但完全够用。带着设备就去了现场。

到了现场,把相机架好,接上光源,拍了一张图。

我当时就愣住了。

图像上覆膜反光一片狼藉——左右两条灯打在BOPP膜上,两侧各一道高亮反光带,直接把中间的印刷区域切成了三段。更离谱的是,不同角度的反射光互相干扰,明暗不均得像打了马赛克。这根本不是实验室里拍的那种图像。
在这里插入图片描述

条形光反光太厉害了,不行。当时想了个"土办法"——换成了漫反射的灯管。就是那种磨砂灯罩的日光灯,想着漫反射应该能把光打散,反光会好一些。

确实比条形光好了一点,反光不那么集中了,但问题没根本解决。覆膜还是覆膜,漫反射光打上去照样有镜面反射成分,只是从"两道高亮条带"变成了"一片散乱反光"。条烟表面的印刷图案还是被搅得一塌糊涂。

搞了半天,光源方案从条形光换到漫反射灯管,效果从"完全不行"变成了"勉强凑合但不够用"。这不是换灯能解决的事——是整条技术路线都需要重新想。

更让人崩溃的是,不同品牌条烟在这个光源条件下的表现完全不一样。

黄鹤楼的包装颜色几乎全白,本身对比度就低。覆膜反光一加,整张图白茫茫一片,颜色特征几乎为零,跟一张白纸没什么区别。

和天下正好反过来。包装颜色几乎全黑,覆膜反光打上去直接变成高光斑,黑色区域过曝失真。暗部细节全部丢失。
在这里插入图片描述

一白一黑两个极端。同一个光源方案,不可能同时伺候好。

条烟表面这层BOPP透明覆膜,是整个项目的核心障碍。你要检测的不是覆膜,覆膜是障碍——目标是透过覆膜看清印刷图案的颜色、纹理和文字,然后做品类分类。但覆膜会反光,而且反光完全不可控,直接把颜色信息搅成一锅粥。

疯狂调参的三天

我的第一反应是:光源条件差,那就用算法来补。

说真的,这个思路在视觉工程师里特别普遍。遇到图像质量问题,第一反应就是加预处理。我自己以前也是这么干的。

RGB转HSV,把亮度通道和颜色通道拆开处理。自适应直方图均衡化,把对比度拉高。局部对比度增强,试图像素级地把细节抠出来。

黄鹤楼勉强凑合——本来全白,做了均衡化之后勉强能分出一些明暗层次,但分类置信度一直上不去。和天下彻底没救,怎么调都不行,黑色区域过曝的那些像素,信息已经丢了,再怎么增强也增强不回来。

那三天我几乎把能试的预处理方案全试了一遍。CLAHE的clip limit从2.0调到8.0,高斯滤波的核从3×3试到15×15,颜色空间在RGB、HSV、Lab之间来回切……

没用。或者说,微弱的改善远远达不到生产要求。

你想想看,我在做什么?我是在用算法去对抗一个物理问题。

覆膜反光是光的反射行为,是物理现象。算法可以做一些补偿,但在信息已经丢失的像素上,它无能为力。就好比一张照片拍糊了,你用锐化工具能拉回一点边缘,但不可能把完全模糊的细节凭空创造出来。

第三天晚上,我坐在工厂办公室里盯着屏幕,突然意识到一个问题:我从头到尾没有质疑过光源。

漫反射灯管+偏振镜

坦率讲,当时对光源方案确实不够重视。觉得条烟检测又不需要特别精细的光学条件,随便凑合一下就行了。这个心态本身就错了。

左右条形光反光严重,漫反射灯管反光散乱但也不够用。那怎么办?

最终方案其实挺简单的:漫反射灯管+偏振镜。还是用两侧的漫反射灯管——它比条形光的反光集中度低,方向性更弱,这是优势。但在镜头前和每个灯管前各加一片线偏振片。

原理我不复杂地解释一下。

换上偏振镜方案之后,同一个检测模型,参数几乎不用改,准确率直接拉到了可用水平。之前花了三天调的预处理方案,一个都没用上。

怎么说呢,这种经历多了之后你会形成一种直觉:当算法怎么调都不行的时候,先去看图像。图像质量有问题,百分之八十是光源的锅。而不是模型不行,不是特征工程做得不够,不是数据集不够大。

第二步,偏振镜——很多人不知道的杀手锏

光源发出的光,振动方向是四面八方的。当这束光照到覆膜表面,一部分穿透过去照亮了印刷图案(这是我们要的漫反射光),另一部分被覆膜表面反射回来(这是干扰我们的镜面反射光)。

关键区别在于:穿过覆膜的那部分光,在穿透过程中振动方向会被打乱;而覆膜表面直接反射回来的那部分光,振动方向是有规律的。

偏振片的作用就是只让某个特定振动方向的光通过。如果你在镜头前加一片线偏振片,调整角度让它只接收漫反射光(振动方向被打乱的),同时挡住镜面反射光(振动方向有规律的),覆膜反光就从图像里"消失"了。

在这里插入图片描述

加了偏振镜之后,图像质量的提升是肉眼可见的。覆膜几乎从画面中"消失"了,你能看到的就只有条烟表面的印刷图案本身,干净得像没覆膜一样。黄鹤楼的白色区域出现了细微的色差和纹理层次,和天下的黑色区域保住了暗部细节。

说实话,我早期做项目的时候根本不知道偏振镜这招。是后来被一个光学方案商的技术给"科普"的。查了一下才知道,偏振消反光在工业视觉里其实是一个很成熟的技术方案,透明瓶身检测、玻璃表面缺陷检测、镜面金属检测都在用。但很多做算法的人包括我自己,初期完全不知道。大家都在图像处理上下功夫,没人去想光学层面的问题。

我自己的感受是,工业视觉这个领域,光学和算法是上下游关系,不是两个独立的事情。光源决定了你能获取什么样的图像信息,算法是在这个信息基础上做判断。你不可能用算法去弥补信息缺失——信息没了就是没了。

光源角度偏了五度,漏检率卡在5%

条烟检测那个项目让我彻底重视了光源问题。但光源的坑不止这一个。

19年的时候,有个检测亮面金属外壳缺陷的项目。表面类似镜面,检测目标是微小凹坑和划痕。光学方案是低角度条形光掠射,利用凹坑的阴影和划痕的高亮反光与背景形成对比。
在这里插入图片描述

实验室里调好的光源角度大概15度,效果很漂亮,缺陷清晰,背景干净。到现场安装时,支架的安装孔位有点偏,实际角度大概20度。

就差五度。

肉眼看图像"也还行",缺陷大致能看到,边缘稍微模糊了一点,对比度稍微低了一点。当时没太在意,觉得算法能补。

结果上线后漏检率一直卡在5%左右下不去。加了一堆图像增强手段,没用。

后来拆开重新检查安装,发现角度偏了。调回15度之后,漏检率直接降到0.8%。

五度的差距,就是"勉强能用"和"完全不能用"的临界点。而且这个偏差你很难通过软件弥补——不是简单的亮度对比度问题,是光照几何关系变了,缺陷的特征表现形式都不同了。

所以现在我对光源安装精度极其矫情。角度、距离、位置,全部打标记,装完用水平仪和量角器确认。被五度逼疯过一次就够了。

下午三点的阳光,杀得猝不及防

还有个坑是环境光干扰。虽然很多人知道,但真遇到了还是挺抓狂。

有个项目在厂房里部署,靠近窗户。上午一切正常,检测结果稳定。到了下午两三点,太阳西晒,阳光透过窗户斜着打进来,直接扫过检测工位。

图像亮度瞬间飙升,整个画面过曝,算法直接报废。等阳光移走之后又恢复正常。

一开始我完全没往环境光上想,只觉得下午结果偶尔波动,排查了很久。后来有一天正好在现场,亲眼看着阳光慢慢扫过来,才恍然大悟。

解决方案是组合拳:茶色遮光罩把检测区域完全封闭,同时相机曝光参数全部锁死。自动曝光在工业视觉里基本是毒药——环境一变它就跟着变,你的算法参数就全废了。

用了半年,精度偷偷掉了3%

这个坑比较隐蔽。

一个稳定运行了大半年的检测系统,客户反馈漏检变多了。查软件日志、查硬件状态、查数据分布,折腾了一周多,最后是现场维护的师傅随口说了一句"那个灯好像没以前亮了"。

LED光源亮度会随使用时间衰减。那个系统三班倒连续运行,半年大概13000小时,亮度已经掉了12%左右。亮度下降12%,对高反光、低对比度场景来说,信噪比本来就在勉强够用的临界点上,再降一点就直接跌破底线了。

换新灯之后精度立刻恢复。

这之后我做了一件事:系统维护清单里加了一项——每三个月用照度计测一次光源亮度,衰减超过15%直接换。别等精度掉了客户投诉了才想起来。

回头看

这些坑踩完之后,我养成了几个习惯。

到现场部署,第一件事不是架相机、不是跑算法,而是先在检测位置拍几张环境照片,看看有没有杂散光源、有没有震动、有没有灰尘。环境确认没问题了再开始调系统。

光源方案跟算法一起设计,不要割裂。条烟检测那个项目就是最好的例子——漫反射灯管本身不够用,加了偏振镜之后模型参数几乎不用改,之前三天调的预处理一个都没用上。

曝光、增益、白平衡、光源亮度、光源角度——全部锁死,写到配置文件里。让相机和光源忘记自己还有自动功能。

还有就是,如果你在某个问题上卡了很久,换个角度想想。不一定是算法的问题,也不一定是模型的问题。可能就是灯的问题。


📎 相关专栏

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐