背景
- 人工分拣耗时耗力,且分拣正确率不高(60-70%)
- 人工智能领域正在快速发展,其中应用于识别分类方向的深度学习为重点研究方向
技术路线
基于** TensorFlow 框架,实现零件的识别**。
TensorFlow是一个基于数据流编程的符号数学系统,被广泛应 用于各类机器学习算法的编程实现。 本算法由五个部分组成:数据增强、图片标注、训练模型、测试模型、预测模型。数据增强用于对原始收集的图像进行数据扩增,解决初始数据量不足的问题;图片标注,为将各类图片以其特定的文件命名格式进行命名,有利于后期的训练;训练模型,为该算法的核心程序,通过搭建卷积神经网络,进行训练,从而获得最优参数模型;测试模式:通过训练模式所获得的最优参数解,来进行测试集的预测,从而获得正确率,进一步确定训练的效果;预测模型:将未知的图片输入到训练完成的最优参数模型中,从而获得相应的类别。
运行环境
tensorflow 1.5.0
CUDA 9.0.176
CUDNN 7
操作系统:Linux ubuntu 16.04
集成开发、调试及编译环境:pycharm-community-2019.2.1
系统总体结构
该算法基于TensorFlow框架,实现零件的识别。
TensorFlow是一个基于数据流编程的符号数学系统,被广泛应用于各类机器学习算法的编程实现。
本算法由五个部分组成:数据增强、图片标注、训练模型、测试模型、预测模型。
- 数据增强用于对原始收集的图像进行数据扩增,解决初始数据量不足的问题;
- 图片标注,为将各类图片以其特定的文件命名格式进行命名,有利于后期的训练;
- 训练模型,为该算法的核心程序,通过搭建卷积神经网络,进行训练,从而获得最优参数模型;
- 测试模式:通过训练模式所获得的最优参数解,来进行测试集的预测,从而获得正确率,进一步确定训练的效果;
- 预测模型:将未知的图片输入到训练完成的最优参数模型中,从而获得相应的类别。
数据增强
**增强训练数据,就能够提升算法的准确率,因为这样可以避免过拟合,更好地泛化。**主要调用opencv库中的图像处理函数进行按照比例的随机选择图像处理方法,从而对图像进行扩增,其中,图像处理方法,分为几何变换,颜色变换,对比度和亮度变化,加入噪音和图像模糊处理。其中几何变换由分为:随机改变图像的大小,随机进行缩放,旋转,翻转;从原始图像随机裁剪部分图片;图片的水平和竖直翻转。加入噪声主要是对主成分做一个(0,0.1)的高斯扰动。颜色变换为将RGB三个通道的分量大小按照比例进行缩放。对比度和亮度变化为给图片碎甲加一些光照,如锐化,凸点,自适应直方图均衡化等。图像模糊处理分为三个部分:普通模糊,一般模糊和非常模糊处理。
import
cv2
from imgaug import augmenters as iaa
import os
sometimes = lambda aug: iaa.Sometimes(0.5,
aug)
seq = iaa.Sequential([
iaa.SomeOf((0, 5),
[
iaa.Fliplr(0.5),
iaa.Flipud(0.5),
sometimes(
iaa.Superpixels(
p_replace=(0, 1.0),
n_segments=(20, 200)
)
),
iaa.OneOf([
iaa.GaussianBlur((0,
3.0)),
iaa.AverageBlur(k=(2, 7)),
iaa.MedianBlur(k=(3,
11)),
]),
iaa.Sharpen(alpha=(0, 1.0),
lightness=(0.75, 1.5)),
iaa.Emboss(alpha=(0, 1.0),
strength=(0, 2.0)),
iaa.AdditiveGaussianNoise(
loc=0, scale=(0.0, 0.05
* 255)
),
iaa.Invert(0.05,
per_channel=True), # invert color
channels
iaa.AddElementwise((-40,
40)),
iaa.Multiply((0.5, 1.5)),
iaa.MultiplyElementwise((