不知道大家对Halcon深度学习的分类原理基本掌握了解多少?作为一名视觉工程师,怎样将它应用在平时传统算法检测需要费九牛二虎之力的产品检测上。那么接下来将会详细介绍Halcon 深度学习分类之工业缺陷检测流程。

说明:产品原图不方便展示,敬请谅解。

制作自己的样本集

要想训练网络,首先得制作自己的数据集。水果分类中一共5个类别,Mnist分类中,一共10个类别。本例子我只想检测缺陷有无,所以只需2类即可(0代表OK,1代表NG)。

到这里,有的童鞋肯定会有这样的顾虑,深度学习需要大量的训练样本,但缺陷样品很难搜集,样本集不丰富。所以要想办法丰富训练样本,我根据同一个缺陷位置上下左右间隔固定位置抠图(64 x 64)保证每个负样本不重复,且抠的图均包含缺陷信息,这样样本数就会大大增加。正样本(背景)我间隔旋转角度随机获取(我的产品是圆环状),保证样本的丰富性。选择的正、负样本比例为5:1(正样本12000张,负样本2400张)。(这部分需要自己写脚本实现,要不然手动抠图,那估计要疯)

正样本部分截图

负样本部分截图

下图展示的是两种缺陷类型。为了丰富图像库,根据上述的描述方式,分别获取两种不同缺陷的负样本。从图中可以看出,每个样本都包含缺陷特征,但不重复。

图像预处理

这部分和Mnist应用一样,没有进行额外的处理。

网络参数均和Mnist一样,由于数据量比较大,训练速度慢的有点感人。

这部分依然需要自己写脚本,将要测试的图像进行切块处理(和训练样本大小一致64 x 64)。由于是检测缺陷有无,所以切块样本集只要涵盖整张测试图像即可,这样可以节约检测时间。当然如果对节拍要求不严格,完全可以用分类网络将缺陷边界分割出来,只不过切块方式是逐像素的。

下图代码部分是检测缺陷脚本,输入一张相机采集图,输出NGOK,如果NG则输出缺陷区域。

部分结果截图展示

误检漏检是避免不了的,比如脏污误检成缺陷,部分漏检。这时候我们可以将误检区域抠出来丢到正样本中去,漏检区域丢到负样本中,重新训练。通过逐渐优化网络,最终会得到一个满意的Model。

这个例子代码和上一篇的Mnist应用代码大同小异,除了样本制作以及测试脚本不同外,其他部分一样。

作者:CSDN博主「智信仁勇严道」。

声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。

返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。