第一次上课就翻了车
上周把这个内容放进新课表的时候,我还觉得不就是把两个现成的算法拼起来嘛,能有什么问题。
结果第一节课下课,三个学生围着我,笔记本上画满了问号。原来他们之前做实验,都是尺寸检测归尺寸检测,外观缺陷归外观缺陷,两个任务分开做,各用各的标定,各调各的参数。拼到一起的时候,直接乱了。
调完尺寸检测的亚像素边缘,转到缺陷分割那里,坐标偏了小半个像素,对于公差0.1mm的精密零件,这直接就废了。你调好了坐标,缺陷检测的阈值又不对,把尺寸测量的阴影当成了划痕,误判率快三成。

说实话我那时候也懵。备课的时候照着论文整理的逻辑,先讲尺寸检测流程,再讲外观分割,最后串起来,哪想到结合这么难。
砍了一半公式后,反而通了
回去翻了三个实际工厂的项目方案,突然反应过来。我搞错了核心。一体检测的核心不是发明新算法,是做工程取舍,共享公共步骤。
原来上课我花了两节课讲亚像素边缘提取的四种算法,又花一节课讲语义分割的网络结构,学生记了一堆公式,根本不知道为什么要做一体。
第二天上课我直接把大半的公式推导砍掉,开门见山说,我们现在要解决的问题只有一个:一条生产线只装一个相机,既要量尺寸,又要查外观,怎么最快最准?
第一件事,只做一次坐标系标定。不管是量尺寸还是找缺陷,都用同一个相机-世界坐标转换矩阵,不用尺寸算完再给缺陷模块重新算一遍坐标。
就这一点,直接把偏移问题解决了八成。很多学生一开始想不通,为什么要这么做?分开标定不是各自更准吗?你拿实际产能跟他算一笔账就懂了。一条线一秒出一个零件,你分开跑两次推理,光标定就要占三分之一的时间,算力成本翻一倍,老板会批吗?

第二个取舍,ROI共享。量尺寸的时候我们已经把零件的位置框出来了,外观检测直接在这个框里找缺陷就行,不用再重新跑一遍目标检测找零件位置。又省了一道算力。
之前有个学生硬拼算法,跑一张图要1.8秒,改完这两步,直接压到180ms,差了十倍。你说神奇吗?其实一点都不神奇,只是把重复做的事砍掉而已。
踩过坑才记得住

不过话说回来,我也不会一开始就把这两个点告诉学生。肯定要让他们先踩坑,先硬拼一次,拼到报错,拼到误判率居高不下,拼到他们自己跑来问为什么我明明两个算法都对,合起来就用不了,这个时候再点破,效果才最好。
上次有个学生,为了降低误判,给缺陷检测换了个很大的分割模型,结果算力不够,实验室的旧工控机跑起来直接卡退,他蹲在实验台边挠头挠了一下午,最后自己想出来把不需要检测的区域直接裁掉,只留关键的五个尺寸位置和对应的外观区域,一下就跑通了。
这个感悟,我讲一百遍都不如他自己挠一下午头记得牢。
现在很多教材写算法,都喜欢写得很完美,把所有步骤整理得顺顺当当,好像只要按步骤走就能出结果。实际上做工程哪有这么顺。
一体检测这个东西,说白了就是逼你在有限的成本里做妥协,你要接受有些地方不需要那么高的精度,你要把两个任务的重叠部分挖出来共享,本质上是工程思维的训练,不是算法推导的训练。
我之前把它当成纯算法课来教,错得离谱。现在改成了项目式挖个坑,让学生自己跳,自己爬出来,及格率反而涨了两成,做出来的作品真的能拿到企业的小项目上去用。
哦对,上周还有个毕业的学生回来说,现在公司招人面试,问起一体检测,他把上课踩坑的经历一说,面试官直接就过了。比那些背公式堆模型的好用多了。