论文阅读笔记《A weak supervision machine vision detection method based on artificial defect simulation》
核心思想
本文提出一种弱监督的缺陷检测方法,并且提出一种人工缺陷合成方法,能够解决缺少缺陷样本的问题。本文将缺陷分为了线形缺陷和块状缺陷两种形式,顾名思义线形缺陷就是类似划痕、条状的缺陷(如图a,b),块状缺陷就是一团一团的那种缺陷(如图c,d)。
线形缺陷合成过程可以分为以下几步:首先通过随机游走算法生成缺陷的骨架,其次将骨架转化为连通区域,并且对连通区域做膨胀计算。然后根据高斯分布生成缺陷区域的灰度值,最后将缺陷区域和原始图像融合起来,过程如下图所示
1. 生成骨架
骨架是通过随机游走的方式生成的,选定一个起始点,然后随机生成要走的方向,用固定的步长乘以方向角的余弦和正弦就能得到下一步要去的位置,计算过程如下
Δ
θ
\Delta\theta
Δθ就是在有限的范围内随机采样的角度,
Δ
ϕ
\Delta\phi
Δϕ表示一个随机的突变角度,
s
g
n
sgn
sgn表示符号函数,可能取1或-1,
s
s
s表示一个固定的步长。
2. 生成缺陷区域
因为线形缺陷通常都是有一定的宽度的,且不同位置宽度也是不同的,为了形成有宽度的缺陷,先将骨架中的各个点连接起来,得到一个宽度为1个像素的缺陷区域,然后再利用形态学中的膨胀运算,就可以获得带有宽度的缺陷。此外,有些划痕缺陷可能不是连续的,所以在做膨胀处理之前,可以先将骨架分成若干个部分,然后膨胀计算后,随机移除几个部分就能形成不连续的缺陷了。
3.生成灰度值
线形缺陷遵循一个特点就是中间区域的颜色更深,边缘区域的颜色更浅。作者通过形态学中的腐蚀计算和布尔差分操作将缺陷分成两个区域,对于每个区域中灰度值都根据高斯分布进行计算,计算方法如下
V
a
l
μ
Val_{\mu}
Valμ表示基础灰度值,决定了整个区域的亮度;
V
a
l
σ
Val_{\sigma}
Valσ是从0到
σ
\sigma
σ之间的随机数,表示了整个区域中灰度值的变化。
4.图像融合
最后就是将生成好的缺陷图像和正常的图像融合起来了,融合的方法如下
α
\alpha
α是一个融合系数,决定的缺陷的影响程度,
α
\alpha
α越接近于0,缺陷的颜色越浅,该位置越接近于背景图像。为了让合成的图像跟接近自然的缺陷图像,在融合处理后,对融合图像进行了均值滤波。
块状缺陷的生成可以分为以下几个步骤:首先生成随机的不规则的闭合曲线,其次根据闭合曲线生成不规则的缺陷区域,然后利用高斯分布得到缺陷区域的灰度值,最后把缺陷图像和正常图像进行融合。整个过程如下图所示
1. 生成不规则闭合曲线
如上图所示,闭合曲线是由
k
k
k个结构点决定的,
k
k
k个结构点对应
k
k
k个内角,且内角和为
2
π
2\pi
2π。为了得到这些个内角,先在
[
0
,
2
π
]
[0,2\pi]
[0,2π]上取
k
−
1
k-1
k−1个随机点
θ
i
\theta_i
θi,然后就把
2
π
2\pi
2π分成了
k
k
k个大小随机的内角
Δ
θ
i
\Delta\theta_i
Δθi。然后计算
k
k
k个结构点的坐标,计算过程如下
ρ
\rho
ρ表示结构点到中心的距离,
ρ
μ
\rho_{\mu}
ρμ表示一个基半径,决定整个缺陷区域的整体尺寸,
ρ
σ
\rho_{\sigma}
ρσ是0到
σ
\sigma
σ的随机数,决定半径的浮动值。当
k
k
k个结构点都确定了之后,利用B样条插值的方式将结构点连接起来,就可以获得闭合的曲线。
2.生成缺陷区域
块状的缺陷也可以分成两种形式:联通结构(Blob structure)和簇状结构(Cluster structure)。对于联通结构的缺陷,上文描述的不规则曲线围成的区域即是缺陷区域。而对于簇状结构的缺陷,要将纹理图像生成的方法和不规则曲线生成方法相结合,如下图所示
纹理图像生成是通过柏林噪声(Perlin noise)和分形技术(fractal technologies)实现的。首先要生成一个带有不同频率和幅值的二维柏林噪声图像,然后利用分形叠加的方式来获得更多冗余的纹理图像。二维柏林噪声图像的生成方式如下:首先定义一个平面的网格图像,然后在每个网格的顶点处生成一个随机的梯度向量
g
u
,
v
g_{u,v}
gu,v,如下图所示
g
r
a
d
x
,
g
r
a
d
y
grad_x,grad_y
gradx,grady分别表示
x
,
y
x,y
x,y方向上的梯度值。
P
(
x
,
y
)
P(x,y)
P(x,y)表示坐标为
(
x
,
y
)
(x,y)
(x,y)的像素点,
n
0
,
0
,
n
0
,
1
,
n
1
,
0
,
n
1
,
1
n_{0,0},n_{0,1},n_{1,0},n_{1,1}
n0,0,n0,1,n1,0,n1,1分别表示
P
(
x
,
y
)
P(x,y)
P(x,y)与四个顶点之间的方向向量
然后计算每个梯度向量
g
g
g和对应的方向向量
n
n
n之间的内积
w
w
w
得到的
w
0
,
0
,
w
0
,
1
,
w
1
,
0
,
w
1
,
1
w_{0,0},w_{0,1},w_{1,0},w_{1,1}
w0,0,w0,1,w1,0,w1,1可以作为权重值,与柏林噪声损失函数相结合,柏林噪声函数如下
结合后每个像素点处的噪声值计算方式如下
为了生成更多冗余的纹理,采用分形叠加的方式将二维柏林噪声图像和不同频率和幅值的噪声图像相叠加
w
w
w表示叠加项的权重,
s
s
s表示叠加项的频率控制量,最后将噪声值转化为灰度值
3.生成灰度值
块状缺陷的灰度值可以由三种方法计算:高斯纹理,柏林噪声纹理和实际缺陷纹理。高斯纹理在线形缺陷中已经介绍了,柏林噪声缺陷如上文所述,实际缺陷纹理生成方式采用了图像缝合技术。
4.图像融合
图像融合方法与线形缺陷的融合方式相同。
在获得了合成缺陷图像之后可以对网络进行一个弱监督的训练,本文采用Faster RCNN算法实现缺陷的检测,先用合成的缺陷图像对网络进行初步训练,然后再用经过数据增强的真实缺陷图像对网络进行优化训练得到最终的模型。整个过程如下图所示
创新点
- 提出一种人工缺陷生成的方式,并利用合成的缺陷图像对检测网络进行与训练
算法评价
本文非常详细的介绍了人工缺陷生成的方式,对于其中的每个细节都介绍的非常详细,并且生成的缺陷图像在纺织物缺陷,印刷缺陷,金属表面缺陷等任务中都能够应用,因此我觉得这篇文章的意义还是非常重大的,值得好好学习。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。