工业检测背景知识
打光 lighting
采集 capture
图片处理 procssing
建模 modeling
深度学习,端到端
系统集成的能力,各方面都不能太差
案例:手机玻璃盖板的检测
难点:
打光很困难
缺陷的面积小,难以观测
深度学习在工业检测的应用
mask r cnn
功能是进行高层次的语义抽象
边界明显(人,车很容易分出来)
但缺陷检测是:
底层纹理的检测,部分和局部几乎没什么关系。
数据标注很困难(很多缺陷经验丰富的老师傅才能标注,每个工人标注的不一样)
为什么要用深度学习
1.弱的语义信息不代表没有语义信息
2.传统的规则不够general
比如:遥控器的型号在变化,阈值不能general
很多传统的机器学习做得挺好的(定一个阈值,卡阈值就好),但是传统方法进展停滞的挺久的了
网络设计
网络越深,概念不断抽象,丢掉越来越多和任务无关的细节。
使用image net pre-trained model,比直接训练效果好
检测使用coco效果好
(1)dense net:channel-wise concat feature map,使得每一层的特征可以得到充分使用。是网络更加简洁,表达性也好。
因为可以复用底层的特征,所以在工业检测中效果有时很比resnet好。
(2)RCF net:融合每个stage的所有卷积层的feature map。
可视化结果显示,中间层包含了丰富的细节特征。
自己的设计(分类任务)
1.(dense net)每个stage 内部使用dense net,复用特征形成层级之间的高速通路
2.(RCF net)每个stage 的输出降采样之后拼接到最后的输出,形成层级之间的高速通路
--> 加强底层特征在最终决策中的比重进行分类任务。
比res_net,dense_net结果好,但是思想都是一样的。
如何选取任务
1.分类
缺陷占原图的比重很大30%
原图分块之后,每一块进行分类,one stage dectection
2.分割
适用于划痕(框不住)等。
标注成本高一些,实际还是会有所取舍。
3.检测
画框框
评价指标:都是分类(good / no good)!!!
任务设计
1.使用阈值将分割、检测的结果直接转化为分类结果
(1)缺陷的面积、周长
(2)检测框的置信度
…….
2.训练模型的时候使用多任务框架,分类作为主任务,检测和分割是辅助任务
3.直接使用分类模型,检测框和分割直接作为attention模块(让模型聚焦到分类任务)引入
多任务框架(推荐)
u-net:
分割任务的最好baseline,把特征在channel级别concat,尽可能的复用底层特征。但是不适用于辅助任务的设计
1.多任务——分割(segment)
分类主网络的stage+分割辅助网络
每个stage都降采样到原图1/16,然后接一个分类损失
辅助网络采用net2net_transform(演讲者在比赛的时候采用的),分辨率没有变,感受野一样,尽可能保存细节信息。
>实现细节:去掉pooling,加dilate
作用:
可以把segment作为attention
可以把segment的结果直接可视化,看segment这一步是不是找到了缺陷的位置,来判断模型的泛化能力。
使用dialate可以让分辨率下降慢一下。
2.多任务——检测
(1)one stage(在缺陷面积大的时候使用)
(2)two stage(在非常遇到小缺陷的时候用。能放大缺陷)
FPN是检测任务常用的网络,bottom-up, top-down高层检测大物体,底层检测小物体
3.多任务——分类
FPN到了最高层的时候,加上global pooling,可以把控全局信息,进行分类
和传统方法结合来提升鲁棒性
1.直接融合结果
一个record高,一个preception高,就直接融合两个方法
2.用传统方法做图片处理
图像增强(增加对比度等)
在第一层的卷积里加入写死的两个卷积
本来是3通道输入,再加入2个用传统算法做处理的通道,concat,作为输入
3.传统的方法作为attention引入卷积神经网络
(1)神经网络自学习得到_residual attention论文方法
右边是神经网络的预测,左边是attention 掩码,pixel-wise相乘。
因为是soft attention,所以+1
使用soft attention(确定每个区域被关注的程度大小),通过M(x)注意力掩码实现。
每个stage使用attention要比全局使用attention更好
总之,要保证神经网络有足够的学习空间
(2)实践过程中生成掩码的方法:、
canny算子
引入multi-task,子任务产生的掩码,分割或者检测任务产生的掩码。
如何解决标注数据不够的问题
定义问题
分类 分割 检测
采用半监督方法——mean teacher, self training
因为工业检测中存在大量的无标签数据,所以用半监督的方法。
只使用在分类 分割任务中,检测还没有半监督的方法。
迭代标记的流程
1.(网络debug)首先用分类的方式标注数据,一个类30-40张,训练模型,过拟合。
特征可视化,缺陷太小了,虽然分类分对了,但是关注点不是缺陷。就要用检测或者分割的方式来标注数据
2.使用少校样本+大量无标记的样本,进行半监督训练,在验证集上进行可视化,测试
3.有针对性的收集更多的标注数据(表现差的,针对性多采数据)训练模型
图片过大怎么办
分块,每块单独处理,然后合并
降采样的标准——人眼仍然能发现缺陷
参考
【极市】马智恒-深度学习在工业缺陷检测中的应用
网友评论