最近在做目标检测的项目,看到了许多关于优化算法的论文,今天就来分享一篇。
略。
以 3C 产品智能化生产过程中对产品组件的分类识别为背景搭建图像采集系统, 为了提高检测范围系统通过运动模块带的相机左右移动。系统主要包括工控机、运动控制模块和相机模块,如图 1 所示。运动控制模块主要包括固高运动板卡 GTS-400-PG-VB-PCI、汇川伺服电机 ISMH1-10B30CB 和伺服驱动器 IS620PS1R61-AB。相机模块主要包括工业相机和光源、镜头等,工业相机选用 1200 万像素 USB3.0 海康威视 MVCE120 -10UC 的彩色相机, 镜头选用海康威视 MVL -MF1628M-8MP 焦距为 12 mm 的镜头,光源选择环形白色光源。 工业相机通过 USB 接口与工业相机连接实现图像的采集。
实验过程中图像采集时,3C 零件随机摆放在实验台上,相机可在丝杠上移动, 通过相机移动确保 3C 组件都出现在相机视野范围内。 系统采集的图像分为样本一图像、样本二图像和待分类图像。 系统采集的图像如图 2 所示。
3C 产品组件的位置和角度随机、背景复杂,直接进行特征提取增加计算量降低分类速度。 要首先对图像进行预处理,完成目标的分割去除图像背景中的干扰信息, 快速准确提取组件的图像特征。不同类型的 3C 产品组件轮廓形状不同,本文将 3C产品组件的形状特征作为分类特征, 创建多层感知器神经网络模型, 训练的多层感知器神经网络模型实现 3C 组件的自动分类识别。 分类识别流程主要分为图像预处理、特征提取和分类。
图像的预处理图像预处理包括图像灰度化、增强、平滑、锐 化、分割、去噪、恢复等,用于改善图像质量、方便零件的分类及识别。Blob 分析是对图像进行二值化,分割得到目标和背景,然后进行连通区域检测[6]。BLOB 分析主要包括图像获取、图像分割、形态学处理和特征提取等,Halcon 图像处理软件可以快速、简便地实现。
Halcon 含有相机驱动程序, 选择对应相机的驱动就可以直接连接相机。 Halcon 异步采集算子主要包括:异步采集开始算子grab_image_start 和读取异步采集的图像 grab_image_async。利用 rgb1_to_gray 算子将 RGB 图像转换为灰度图像 。RGB 图像的三个通道作为输入图像的前三个通道传递。图像根据公式(1)进行转换。转换图和灰度直方图如图 3 所示。
利用 threshold 算子实现阈值分割。 区域的灰度值 g 满足MinGray≤g≤MaxGray。 使用 connection 算子来实现区域的连通部分分, 利 用 select_shape 算子选取指定形状特征的区域,本文通过面积特征实现指定特征的选取。 阈值分割与特征选取图如图 4。
本文根据圆度特征进行分类,circularity 获取零件的圆度特征。 形状因子 C=F/(π*R2),F 是区域的面积,R 是从中心到所有轮廓像素的最大距离,样本一圆度值都小于 0.5,样本二圆度值都大于 0.8。
MLP 多层感知神经网络模型是一种基于神经网络的、动态的分类器,神经网络直接决定类之间的分割超平面。 多层神经网络的典型结构是一层输入单元层、一层或多层隐藏节点层、一层输出单元层。 本文选用 MLP 神经网络模型作为分类器实现 3C产品组件的分类, 使用 Halcon18.0 软件内置函数实现 MLP 神经网络模型训练和测试。
利用 create_class_mlp 算子创建基于神经网络的 mlp 分类器,特征数为 1,输出类为 2 个,输出方法选择“softmax”用于分类。 分类器包括三层,一层输入层、一层隐藏单元层、一层输出层,create_class_mlp 算子的原型如下:create_class_mlp (::NumInput,NumHidden,NumOutput, OutputFunction,Preprocessing,NumComponents, RandSeed : MLPHandle)。
其中 NumInput 用于训练和分类的特征空间的维度数 ,NumHidden 表示神经网络中隐藏层的单元数量,NumOutput表示输出的分类数量,OutputFunction 表示神经网 络 的 输 出 单元使用的函数,可选的有 softmax、logistic、linear。
利用 for 循环读取训练样本提取特征 , 利 用 add_sample_class_mlp 算子将每个零件的圆度特征加入 MPL 分类器。
利用 train_class_mlp 算子进行样本的训练,算子的原型如下:train_class_mlp (::MLPHandle,MaxIterations, WeightTolerance:ErrorTolerance,Error, ErrorLog)其中 MaxIterations 表示优化算法的最大迭代次数,ErrorTolerance 表示优化算法的两次迭代之间的误差均值的阈值。
利用 classify_class_mlp 算子对对未知对象进行分类。 算子模型如下:classify_class_mlp (::MLPHandle,Features,Num :Class, Confidence)
Features 输入的待评估的特征向量,Num 寻找的最佳分类的数量。
本文采集 100 张 (40 张样本一、40 张样本二、 混合图片 20张)3C 组件图像作为数据集,40 张样本一和 40 张样本二图像共80 张为训练集,每次从数据集中随机抽取 10 张用于产品分类识别,分类效果图如图 5 所示。20 次分类试验结果表明分类准确率达 99.8%,每个组件的分类时间均小于 20 ms。 实验结果证明了本文所提方法能够快速实现 3C 产品分类和位置检测。
本文从实际需求出发提出了基于 MPL 分类器的零件识别方法。 通过提取 3C 组件的圆度来训练 MPL 分类器模型,使用训练完成的 MPL 分类器模型实现 3C 组件的自动分类。 通过改变形状特征可以实现更多不同零件的识别检测。
文章来源:万松峰. 基于 MPL 分类器的零件识别 [J]. 工业控制计算机, 2022,35(11)
其实关于3C产品的零部件识别,目前市面上有许多大大小小的机器视觉公司都在做,甚至不需要懂算法,有专业的机器视觉工程师来进行建模。大家感兴趣的话可以看看跑码地Coovally这个平台,和其他的平台比起来,最大的有点应该就是便宜了,不是单独卖一个模型,而是打包一整套的“软件平台+硬件设备+生态服务”,这一点还是很香的。