缺陷检测(一)-- 通过CNN方法实现布匹缺陷检测

参考论文:
《A fast and robust convolutional neural network-based defect detection model in product quality control》–Tian Wang·Yang Chen·Meina Qiao·Hichem snoussi

1. CNN结构设计:

1.1. 输入图像:

三通道彩色图像或单通道灰色图片

1.2. ConV(卷积层):

卷积层利用一组滤波器,且这组滤波器仅连接到最后一层输出的一小部分。使用33或55的矩阵去卷积计算在整个图像上提取特征

1.3. 激活函数层—ReLU:

主要是用来客服梯度消失并且加快训练速度(f(x)=max(0,x))

1.4. 池化层(Pool):

通过缩小参数矩阵尺寸,减小参数数量

1.5. Fully Connected Layer(全连接层):

该层的作用大概是整合前面具有类别区分性的局部信息,输出的neuron等于输入的类别数
P(zi)=exp(zi)/sum(exp(zi))

以上几层堆叠在一起形成完整的CNN,将输入值向前反馈到网络中进行决策,然后通过反向传播方法更新参数

2. 数据集设计:

总共分为6类输入数据,图片大小为512*512px,每类包含1000个无缺陷图片和150个有缺陷图片(每个纹理背景上只有一个标记的缺陷区域)
将数据分为70%用来train,30%用来验证
在这里插入图片描述

在这里插入图片描述

设计为11层的CNN网络体系结构,第一个全局帧分类部分已128*128像素大小的下采样图像作为输入,并输出6个神经元,每个神经元代表相应的类成员的概率。第二个子帧检测部分提取与第一部分相同的迷你块,并且金输出两个神经元,指示该快是否有缺陷

3.模型实施:

可以将模型分两个部分来实现,分别是全局帧分类部分和子帧检测部分

全局帧分类是根据背景纹理特征进行分类,最后output输出6个neuron,分别代表属于哪类纹理的概率

子帧检测部分在第一部分的基础上检测对应图片是否有缺陷,输出为2个neuron

主要结构如上图所示:
C(32,3,3)-S(2,2,2)-C(64,3,3)-C(64,3,3)-S(2,2,2)-C(128,3,3)-C(128,3,3)-S(2,2,2)-FC(1024)-FC(1024)-FC(6)/FC(2)

其中C(n,3,3)表示卷积层,用n个分类器及(3,3)大小矩阵来卷积

S(2,2,2)表示用2*2来进行下采样,步长为2

FC(n)表示用n个neuron来进行全连接

为了减少模型计算量,可以进行以下操作:

1.将512512px的图像进行下采样至128128大小的图像输入

2.使用填充策略在特征图的边界周围填充0

3.通过max-pooling进行下采样

第二部分主要是最后一层全连接层与第一部分不同,输出的是两个neuron表示图像是否有缺陷。

并且不同的是:
1.采用从原512512大小图像中提取128128像素图像块作为输入

2.按照滑动窗口的方法进行滑动,滑动窗口尺寸为128*128像素,以64像素步长沿图像的行、列进行滑动。

3.经过以上操作,可以得到49个结果小块,只需要训练6个类似的子网,每个子网可作为一类无缺陷与缺陷块输入
在这里插入图片描述
全局帧分类部分和子帧检测部分协同工作以进行缺陷检测。给定图像,第一部分确定该样本属于哪个类别。然后将此图像分为49个块,并进行馈送,根据第一部分的输出进入属于第二部分的子网中。如果检测到任何块有缺陷,则将整个图像标记为有缺陷

4.Training details

关于overfitting问题的优化:

1.对于第一部分,训练起来比较容易,且没有出现overfitting的现象,主要原因是6种纹理背景差异较大,易于区分并且训练数量足够

2.在第二部分,因为缺陷图像在每个类别中进展很小一部分比例(约13%),并且每个缺陷中只有很小一部分区域被标记成缺陷,因此要使用扩充training数据量的方法避免overfitting

解决方法:
对于训练数据,可以采用有效的数据扩充策略!

对于每一类训练集中的缺陷图像:

1.采样:从每幅图像中手动提取22个大小为128*128像素的缺陷块

2.扩充:通过线性变换(旋转/镜像)将这些块增多8倍

对于无缺陷图像:

1.执行滑动窗口(128X128px),沿x,y以64px为步长滑动,这样便增加了49倍无缺陷图像数

经过以上操作,在第二部分的training中,training set中每类有34300张无缺陷图像和18656张有缺陷图像

关于Loss function

1.采用cross-entropy的方法

2-在训练中用50个样本的mini-batches 随机梯度下降的方法来更新权重参数

3-将动量和学习率衰减纳入随机梯度下降优化器和每次迭代中权重的更新规则中

在这里插入图片描述

i–迭代索引;w-权重超参数;
u-动量系数;v-当前速度矢量;
lr–学习速率;d-学习速率的衰减参数;
▽g-每次迭代中对于w的mini-batch上梯度的平均值

经过上文实验,u动量系数一般设置为0.9;而学习速率衰减参数则设置为0.012

4-每一层的权重参数均根据满足N~(0,n/2)的截断随机正态分布进行初始化
n表示两层之间的连接数,
并将每一层的偏置值先初始化为0,并重新计划ReLU(根据He et al【1】)

其他:

5-引入L2正则化[2],在loss function中添加权重衰减项,以在训练过程中惩罚较大权重并避免overfitting(实验中正则化系数设为5X10^-5)

6-在训练阶段中,在倒数第二和第三层全连接层使用drop-out策略,概率为0.5,也有助于避免overfitting

7-为了加快训练速度,可以采用batch normalization 以解决内部convariate偏移问题

训练结果如下:
在这里插入图片描述

5.Result

论文中使用的机器硬件为NVIDIA GTX1080 8GB GPU,通过8小时完成,在测试中,每秒能够检测27张图片

6.相关索引:
【1】. He K ,Zhang X,Ren S,Sun J(2015) Delving deep into rectifiers:Surpassing human-level performance on imagenet classification. In:Proceedings of the IEEE international conference on computer vision,pp 1026-1034

【2】. L2正则化
在这里插入图片描述

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值