专栏首页AI算法修炼营一种先分割后分类的两阶段同步端到端缺陷检测方法

一种先分割后分类的两阶段同步端到端缺陷检测方法

本文是一种端到端的先分割后分类的表面缺陷检测方法。主要的创新点在于如何将两类任务更好地进行同步学习,本文首先平衡分割损失和分类损失,然后对负样本的采样方法进行了改进,能够适应于小样本、弱标注等场景。

论文地址:https://arxiv.org/pdf/2007.07676.pdf

基于分割的两阶段神经网络在表面缺陷检测中显示出优异的结果,使该网络能够从相对较少的样本中学习。在这项工作中,本文介绍了一种端到端训练的两阶段网络用于缺陷检测,并对训练过程进行了一些扩展,从而减少了训练时间,同时对表面缺陷检测任务的结果进行改进。为了实现端到端训练,本文在学习过程中仔细平衡了分割损失和分类损失的贡献。同时,调整了从分类到分割网络的梯度流,以防止不稳定的特征破坏学习。作为对学习的进一步扩展,本文提出了负样本的使用频率采样方案,以解决训练期间图像过采样和欠采样的问题,同时在基于区域的分割mask的距离变换算法上采用正像素权重,因此在不需要详细标注的情况下,对存在缺陷可能性较高的区域给予了更高的重视。最后,在三个缺陷检测数据集DAGM,KolektorSDD和SeverstalSteel缺陷数据集上测试了本文方案的性能和所提出的扩展策略,实现了最新的结果。在DAGM和KolektorSDD上达到了100%的检测率。并且在三个数据集上进行的附加消融实验定量地证明了所提出的扩展对总体结果改进的贡献。

简介

一种新颖的两阶段体系结构已被证明在表面缺陷检测中非常成功。具体来说,是在第一阶段进行缺陷分割,然后在第二阶段对有缺陷与无缺陷的表面按图像分类。但是,现有的两阶段体系结构依赖于繁琐的训练过程,因为它们需要首先训练分割层,然后冻结分割层,然后再学习分类层。尽管这种两阶段学习方法产生了最新的结果,但由于需要多次学习,因此它也会导致学习过程缓慢。

在本文工作中,解决了用于表面缺陷检测的两阶段体系结构的缺点,并提出了一种端到端的训练方案,该方案只需要精度不高的像素级标注而且不会影响性能。该方法通过以端到端的方式同时引入分割和分类层的学习来改善学习过程,因此所提出的体系结构不仅使网络的学习更加容易和快速,而且还提高了缺陷检测率。同时,还提出了一种考虑像素级标注的梯度流调整策略,并没有像图像处理那样仅在图像级别的标签上使用弱监督学习,梯度流的策略反而扩展了损失函数,可用来解决基于区域的标注的不确定性,这使得粗略的标注仍然相当容易获得。此外,还引入了无缺陷样本的使用频率采样方法,这进一步提高了缺陷检测性能。

本文的方法:END-TO-END LEARNING FOR TWO-STAGEARCHITECTURE

1、End-to-end learning

为了实现端到端的学习,将损失(分割损失和分类损失)合并为一个统一的损失,以实现同步学习。新的合并损失定义为:

其中Lseg和Lcls分别代表分割损失和分类损失,δ是防止分类损失占主导的额外分类损失权重,而λ是平衡每个网络在最终损失中的贡献的混合因子。注意,λ和δ不会代替SGD中的学习率η,而是对其进行补充。由于损失程度不一,因此它们可以充分控制学习过程。分割损失是在所有像素上平均的,由于只有少数像素是异常的,与分类损失相比,其值相对较小,因此通常使用较小的δ值来防止分类损失占总损失的主导。

同时学习的另一个挑战是在分割网络的特征稳定之前学习分类网络。为了解决这个问题,本文建议从一开始就只学习分割网络,然后逐渐向最后只学习分类的趋势发展。通过将分割和分类混合因子计算为简单的线性函数来表示,公式为:

其中,n代表当前训练周期epoch的索引,total_epoch代表训练周期的总数。如果没有两种损失的逐渐混合,在某些情况下学习将导致爆炸梯度,从而使模型更难以使用。将逐步包括分类网络和排除分段网络的过程称为动态平衡损失。此外,使用较低的δ值可进一步减少早期就学习嘈杂的分割特征的问题,而使用较大的值有时会导致梯度爆炸的问题。

Gradient-flow adjustments 梯度流调整策略

本文建议消除从分类网络到分割网络过程中产生的梯度流,这对于分别以端对端的方式学习分割和分类层是必需的。首先,通过在分类网络使用的最大/平均池化shortcut方法来消除梯度流。在图1中,它用(a)标记。这些shortcut方式利用分割网络的输出映射来加快分类学习的速度。反传播梯度会在分割网络的输出映射中添加误差梯度,但这可能是有害的,因为该输出已经存在像素级标注形式的误差。

同时,本文还建议限制源自于分类网络的分割梯度。在图1中,用(b)标记。在训练的初始阶段,分割网络尚未产生有意义的输出,因此从分类网络反向传播的梯度会对分割部分产生负面影响,因此可以完全停止这些梯度,从而防止分类网络更改分割网络。训练过程首先对分割网络进行训练,然后冻结分割层,最后仅对分类网络进行训练。

2、Frequency-of-use sampling

当前,先分割再分类的两阶段体系结构通常采用交替采样方案实现,该方案在每个训练步骤中通过正样本和负样本之间交替采样来平衡正负样本。而本文通过基于每个负样本的使用频率替换一次随机抽样来改进交替采样方案。现有的交替采样方案会在相同数量的正样本图像中为每个训练周期强制选择负样本图像,然而,由于正样本数量远远小于负样本,所以选择出的样本将相对较小。同时,对每个训练周期均对负样本图像进行均匀随机采样,因此会导致某些样本的过度使用和其他样本的使用不足,如图2左侧所示。

而本文根据使用频率将负样本的随机抽样替换为一个样本抽样。以与该图像的使用频率成反比的概率对每个图像进行采样。如图2的直方图所示,使用频率采样可同时减少样本过度使用和使用不足等问题,并确保在训练过程中均匀使用每个负样本。

3、Loss weighting for positive pixels

当只有近似的,基于区域的标签可用时(如图3所示),本文的方法以不同的方式考虑带标注的缺陷区域的不同像素,特别是,将更多的注意力放在带标注的区域的中心,而不是外部。这减轻了在缺陷边缘产生的歧义,在该边缘通常无法确定缺陷是否存在。因此,通过相应地加权分割损失来实现标签不同部分中的重要性。具体地,使用距离变换算法加权每个像素在正标签处的影响,而不取决于其与最近的负标签像素的距离。

将正像素的权重表示为:

其中,

实验与结果

数据集: DAGM 2007 (《Design of deep convo-lutional neural network architectures for automated feature extractionin industrial inspection》)、KolektorSDD(《Segmentation-based deep-learning approach for surface-defect detection》)、Steel Defect(《Severstal: Steel Defect Detection on Kaggle Challenge》)

评价指标:AP平均精度

实验结果

1、DAGM 2007数据集上的结果

2、 The KolektorSDD数据集上结果

本文的方法在所有情况下均优于baseline,如表II所示。当使用所有正训练样本时,该方法均达到了100%的AP,没有错误分类。所提出的方法还优于其他所有相关方法,包括使用更精确标注进行训练的以及在较弱的监督下进行训练的两阶段体系结构。

3、The Severstal Steel defect数据集上的结果

前两个数据集的结果显示令人满意,因为这两个数据集都包含太多示例,这对于深度学习方法来说是困难的。因此,我们还对The Severstal Steel defect数据集进行了评估,该数据集包含一组更大的更困难的样本。该数据集总共包含12,568张图像,具有4种不同类型的缺陷。图4中显示了来自数据集的少量图像,以及来自分割网络的检测结果和检测结果。

消融实验

更多细节可参考论文原文。

本文分享自微信公众号 - AI算法修炼营(AI_SuanFa),作者:SFXiang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CVPR2020 | 京东AI研究院提出统一样本加权网络,提升通用目标检测性能

    论文地址:https://arxiv.org/pdf/2006.06568.pdf

    AI算法修炼营
  • 语义分割 | 轻量级实时分割经典BiSeNet及其进化

    基于轻量化网络模型的设计作为一个热门的研究方法,许多研究者都在运算量、参数量和精度之间寻找平衡,希望使用尽量少的运算量和参数量的同时获得较高的模型精度。目前,轻...

    AI算法修炼营
  • 语义分割标注工具Semantic Segmentation Editor 快速安装指南

    Semantic-Segmentation-Editor是由日立汽车工业实验室(Hitachi Automotive And Industry Lab)开源的基...

    AI算法修炼营
  • 【机器学习笔记之四】Adaboost 算法

    本文结构: 什么是集成学习? 为什么集成的效果就会好于单个学习器? 如何生成个体学习器? 什么是 Boosting? Adaboost 算法? ---- 什么是...

    Angel_Kitty
  • Adaboost 算法

    本文结构: 什么是集成学习? 为什么集成的效果就会好于单个学习器? 如何生成个体学习器? 什么是 Boosting? Adaboost 算法? ---- 什么是...

    杨熹
  • 解决Error: Cannot find module 'node-sass'问题

    1.在项目目录cmd下运行 npm install -g cnpm --registry=https://registry.npm.taobao.org

    跟着阿笨一起玩NET
  • 深度学习|理解LSTM网络(前篇)

    01 — 回顾 近两天推送介绍了CNN网络,关于这部分的介绍,请参考: 深度学习|卷积神经网络(CNN)介绍(前篇) 深度学习|卷积神经网络(CNN)介绍(后篇...

    double
  • 论终端品牌域名的重要性

      “那当然有用了,没有栏杆护着,掉下去怎么办?”

    躲在树上的域小名
  • 胖虎科技:品牌升级前提前保护好域名

    人们经常会脑门一发热、或者看到商品打折不考虑是否真的需要就买买买,以至于造成好多闲置的物品堆在家里无处安放,而面对这众多闲置的东西,可谓是一大市场!

    躲在树上的域小名
  • IT巨头加大云计算应用 掘金产业链

    随着云计算在关键领域发挥越来越重要的作用,IT巨头和相关决策部门也愈加地重视推动云计算产业的发展。 10月22日从外媒获悉,微软CEO萨蒂亚·纳德拉(Satya...

    静一

扫码关注云+社区

领取腾讯云代金券