前⾔
上⼏篇⽂章分别对⽐了Halcon深度学习分类模型的框架,例⼦的详细分析,以及在Mnist上的应⽤等。想必⼤家已经对Halcon深度学习的分类原理基本掌握,是不是有点兴奋?是不是想要在⼯业缺陷检测上⼩试⽜⼑?作为⼀名视觉⼯程师,当然按捺不住内⼼的激动,想要应⽤在平时传统算法检测需要费九⽜⼆虎之⼒的产品检测上。那么接下来将会详细介绍Halcon 深度学习分类之⼯业缺陷检测流程。
说明:产品原图不⽅便展⽰,敬请谅解。
电池盖帽要想训练⽹络,⾸先得制作⾃⼰的数据集。⽔果分类中⼀共5个类别,Mnist分类中,⼀共10个类别。本例⼦我只想检测缺陷有⽆,所以只需2类即可(0代表OK,1代表NG)。
双端面机械密封
到这⾥,有的童鞋肯定会有这样的顾虑,深度学习需要⼤量的训练样本,但缺陷样品很难搜集,样本集不丰富。所以要想办法丰富训练样本,我根据同⼀个缺陷位置上下左右间隔固定位置抠图(64 x 64)保证每个负样本不重复,且抠的图均包含缺陷信息,这样样本数就会⼤⼤增加。正样本(背景)我间隔旋转⾓度随机获取(我的产品是圆环状),保证样本的丰富性。选择的正、负样本⽐例为5:1(正样本12
000张,负样本2400张)。(这部分需要⾃⼰写脚本实现,要不然⼿动抠图,那估计要疯) ctsb
正样本部分截图
光伏组件检测负样本部分截图
下图展⽰的是两种缺陷类型。为了丰富图像库,根据上述的描述⽅式,分别获取两种不同缺陷的负样本。从图中可以看出,每个样本都包含缺陷特征,但不重复。
图像预处理
这部分和Mnist应⽤⼀样,没有进⾏额外的处理。
训练⽹络
⽹络参数均和Mnist⼀样,由于数据量⽐较⼤,训练速度慢的有点感⼈。
缺陷检测
这部分依然需要⾃⼰写脚本,将要测试的图像进⾏切块处理(和训练样本⼤⼩⼀致64 x 64)。由于是检测缺陷有⽆,所以切块样本集只要涵盖整张测试图像即可,这样可以节约检测时间。当然如果对节拍要求不严格,完全可以⽤分类⽹络将缺陷边界分割出来,只不过切块⽅式是逐像素的。
下图代码部分是检测缺陷脚本,输⼊⼀张相机采集图,输出NGOK,如果NG则输出缺陷区域。
检测结果
部分结果截图展⽰
塑钢拉链
误检漏检是避免不了的,⽐如脏污误检成缺陷,部分漏检。这时候我们可以将误检区域抠出来丢到正样本中去,漏检区域丢到负样本中,重新训练。通过逐渐优化⽹络,最终会得到⼀个满意的Model。
代码
这个例⼦代码和上⼀篇的Mnist应⽤代码⼤同⼩异,除了样本制作以及测试脚本不同外,其他部分⼀样。
上⼀篇:Halcon 深度学习分类之Mnist应⽤