1、问题介绍

工业检测

如今深度学习的发展如火如荼,各类神奇的技术如人脸识别、换脸技术啥的,似乎什么问题都只需要Deep Learning一下就可以解决了。但这都是属于民用级别的技术,而真正想要在实际业务中落地,更多的是要渗透到工业中去。

常见的工业检测有如下特点:

  1. 良品多,次品少。如果一个工厂生产的大部分都是坏品,那这个工厂就离倒闭不远了。而恰恰深度学习则需要大量的坏品数据。
  2. 产品换批次,产线更新。经常一换产品,之前优化过的模型就没办法再用了。

就针对这两个问题,目前学术界较为成熟的目标检测、图像分割方法都无法从根本解决这个问题。近几年开始流行的few-shot learning注意到了这个情况,但可惜技术还不是很成熟。

2、模型结构

模型的整体架构如下图所示,看上去非常复杂,但看完下面的讲解你就一定明白了。模型的结构可以拆成四个部分来讲解,设计非常精巧。

1、Backbone

Unet++

模型的主干由UNet++衍生而来。我们不看双输入部分,只看backbone,从x0,0x^{0,0}x0,0下采样到x4,0x^{4,0}x4,0,然后上采样到x0,4x^{0,4}x0,4这一部分,它是呈现一个U型结构,熟悉医学图像分割的同学一定知道,这就是UNet网络。这是分割中非常经典的Encoder-Decoder结构。

DenseNet

而UNet++则参考DenseNet一步步进化而来。DenseNet采用了密集残差边,作为图像分类的backbone有效提高了分类准确率,这种小而美的结构也被采用到了UNet++中。这么做的好处是:1、解决梯度回传时,浅层网络难以优化的问题。2、加强特征融合,使得深层网络可以结合浅层网络的特征,同时融合了低层的细节信息和高层的语义信息,增大了低层的感受野,使得低层在做小目标检测时能获得更多上下文信息。

2、Siamese Network - 孪生网络

孪生网络有两个输入,其诞生的初衷是为了解决小数据集泛化性差的问题。从下图看一个输入对应一个网络,最终会的得到两个输出,这两个输出对应这两个输入的高维特征,对其简单做差可近似看为二者的loss,loss越小代表差异越小,loss越大代表差异越大。通常情况下,两个输入的网络权重是共享的,所以是实质上就是一个网络。

Siam-NestedUNet画蓝色虚线框内采用的就是这样的双输入结构,利用UNet++进行特征提取,只不过它提取的已不是物体的特征,而是两张图的差异信息。如果我们把变化的类别(在检测或分割中对应未知异物)当作要检出的目标,那么Siam-NestedUNet就是将两张图中有差异的部分当作目标进行检出。

3、SENet + ResNet

Siam-NestedUNet的backbone将各个不同层级的特征层concat在一起之后有一个残差Ensemble Channel Attention Module,这个模块可以看成是一个残差块 + 两个CAM构成。其中残差块就是我们熟知的ResNet这里不多赘述,CAM则是取自SENet,也就是我们常说的注意力机制。它将每个特征层(无论多大)统一缩放成1x1的大小,然后经过一个1x1的卷积和relu函数,再经过一个1x1卷积和Sigmoid激活,此时的得到的是一个FFF值,这个FFF值就可以认为是缩放前特征层的占比权重,如果模型认为这一层很有用,那FFF值就会很大,放大它的作用。反之,模型认为这一层没什么用,FFF就会很小,起到抑制作用。

同理,Siam-NestedUNet也就是将这个结构当成一个组件,把所有骨干网络叠加在一起的特征层计算了一组注意力值,进而得出了不同时期特征层的作用。

3、Loss Function

损失函数由bce + dice loss组成。

bce
论文原文中,作者将weight cross entropy的公式看成一个二分类问题,其中LwceL_{wce}Lwce​公式为
Lwce=1H∗W∑k=1H∗Wweight[class]∗(log(exp(y[k][class]))∑l=01exp(y[k][l]))L_{wce} = \frac{1}{H * W}\sum^{H*W}_{k=1}{weight[class]}*(log(\frac{exp(y[k][class]))}{\sum_{l=0}^{1}{exp(y[k][l])}}) Lwce​=H∗W1​k=1∑H∗W​weight[class]∗(log(∑l=01​exp(y[k][l])exp(y[k][class]))​)
其中class在变化检测中只为2,分别是变化类和非变化类,y代表预测。bce为wce的一种特例情况。

dice loss
Dice系数,是一种集合相似度度量函数,通常用于计算两个样本的相似度(值范围为 [0, 1]):
Ldice=2∣X∩Y∣∣X∣+∣Y∣L_{dice} = \frac{2 |X\cap Y|}{|X| + |Y|} Ldice​=∣X∣+∣Y∣2∣X∩Y∣​
这也是语义分割中常用的交并比,X代表Ground Truth,Y代表Prediction。而在实际的变化检测问题中,我们也会将变化类以语义分割的方式进行标注。

4、应用场景

原文中,作者将其应用到了地质勘测的遥感图像中,是一个场景中,五年前和五年后的建筑物变化(道路、房屋的修建)。

虽然常用的语义分割、目标检测网络都已经很强悍了。但任然存在些许的漏检情况,所以我们经常看到的深度学习都是应用在安防安监领域,这些场景下,漏检率5%都可容忍的。但在要求更为严格的工业检测中,漏检是非常不能容忍的,即使你在为你的算法识别准确率达到96%而欢呼雀跃的时候,客户也会拿着那仅有的几个漏检样本问你:“为什么这个检测不出来?”,工厂流水线对漏检率是非常严格的,漏掉一个坏掉的零部件到下游厂商中,做出了一个成品损失可是好几千块。所以这也是为什么深度学习总在工业检测的外围,而不能在核心领域发挥作用的原因。

而Siam-NestedUNet虽然不能对工业的缺陷进行详细的分类,但他能保证不漏检,如果我们将问题具体化,则可以将良品当作模板图,待测样品当成待检图。这样通过变化检测,就有效的得出了异常的位置。

5、复现代码

作者开源的代码库在:https://github.com/likyoo/Siam-NestedUNet

笔者对其进行了修改,数据集是作者使用的遥感分割数据集,原图是1900x1000大小的。原作者将其改成了256x256大小的,代码库在:https://github.com/Runist/Siam-NestedUNet(觉得有用请点star~,这对我很重要)

  • paper: Change detection in remote sensing images using conditional adversarial networks
  • CDD (Change Detection Dataset)

狗都能看懂的变化检测网络Siam-NestedUNet讲解——解决工业检测的痛点相关推荐

  1. 狗都能看懂的CenterNet讲解及代码复现

    文章目录 前言 网络结构 Backbone 数据读取 Loss计算 模型预测 预测结果后处理 预测框转换 训练 tensorboard 可能会出现的现象 总结 论文: https://arxiv.or ...

  2. 狗都能看懂的Self-Attention讲解

    文章目录 1.什么是attention? 2.什么是self-attention? 3.self-attention的原理 4.self-attention的优点 5.Multi-head self- ...

  3. 小学生都能看懂,彻底解决环境搭建难题,一步一截图,再无VMware网络难题

    小学生都能看懂,彻底解决环境搭建难题,一步一截图,再无VMware网络难题 原创 韦东山 百问科技 1周前 上周四我们预告了这周要发布环境搭建的终极解决方案,经过一周的努力,终于写好了文档,Ubunt ...

  4. 【图解】连狗子都能看懂的Python基础总结(二)什么是库、包、模块?

    [图解]连狗子都能看懂的Python基础总结!(二)什么是库.包.模块? 本章内容 什么是模块? 什么是包? 什么是库? 什么是标准库和第三方库? 上次,我们解释了"变量".&qu ...

  5. 春节充电 | 文科生都能看懂的机器学习教程:梯度下降、线性回归、逻辑回归(附动图解释)...

    来源:新智元 本文约4200字,建议阅读10+分钟. 本文浅显易懂的方式讲解机器学习,力求让没有理科背景的读者都能看懂. [ 导读 ]虽然在Coursera.MIT.UC伯克利上有很多机器学习的课程, ...

  6. 文科生都能看懂的机器学习教程:梯度下降、线性回归、逻辑回归

    来源:新智元 本文约4200字,建议阅读10+分钟. 本文浅显易懂的方式讲解机器学习,力求让没有理科背景的读者都能看懂. [ 导读 ]虽然在Coursera.MIT.UC伯克利上有很多机器学习的课程, ...

  7. 语言线性拟合线对称_文科生都能看懂的机器学习教程:梯度下降、线性回归、逻辑回归...

    [新智元导读]虽然在Coursera.MIT.UC伯克利上有很多机器学习的课程,包括吴恩达等专家课程已非常经典,但都是面向有一定理科背景的专业人士.本文试图将机器学习这本深奥的课程,以更加浅显易懂的方 ...

  8. 所有人都能看懂的华为交换机vlan配置

    [vlan小故事]为什么会有vlan?   早期以太网是一种基于CSMA/CD1(Carrier Sense Multiple Access/Collision Detection)的共享通讯介质的数 ...

  9. 新海诚没有参与制作的作品_由新海诚创作,却成为冷门的一部动漫,至今都没看懂...

    原标题:由新海诚创作,却成为冷门的一部动漫,至今都没看懂 由新海诚创作,却成为冷门的一部动漫,至今都没看懂.新海诚我们都很熟悉,他的作品<你的名字><天气之子>等等都给我们留下 ...

最新文章

  1. 2017上半年软考 第六章 重要知识点
  2. C#验证Email是否真正存在,不是验证邮件格式,是邮件地址是否存在 .
  3. 数据库查询新增一列默认值
  4. 存储知识课堂(二):磁盘读写磁头揭秘
  5. 从程序员到CTO的Java技术路线图 (转自安卓巴士)
  6. python编程竞赛规则_用python实行羽毛球比赛规则。
  7. python集合用法_Python 集合(Set)
  8. 园区网VLAN应用实例
  9. Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序
  10. 惊呆了,竟然可以用这种方式秒建 Redis 集群?
  11. day34-2 类和对象(重点)
  12. 测试JUC安全类型的集合(Java)
  13. 通过密钥 SFTP(二)限定用户根目录
  14. qregularexpression和qregexp的区别
  15. .NET程序员修炼之道
  16. unity创建草地_Unity3D研究院之构建游戏地形的基本元素(五)
  17. 高效能管理之要事第一 时间管理表格2
  18. (一) odroid-xu4交叉编译过程
  19. 手机分辨率Android教程(十二)-- 使用DisplayMetrics获取手机分辨率
  20. 计算机网络ip地址划分计算机,计算机网络IP地址协议、分类、子网掩码

热门文章

  1. Sandiaga Uno关注巴厘岛G20 1500亿美元MogaFX外汇收益
  2. Shortcut(二维平面内点的连续性)
  3. 路飞学城项目之集成支付宝支付功能
  4. java派生类属例子_辨析之派生类属和相关类属
  5. 如何通过视频推广让你的App一夜爆红
  6. windows10安装更新很慢ndows,Windows10下载更新一直不动,进度为0怎么办?
  7. 购房卖方违约 买方如何维护自己的合法权益?
  8. 《周易》六十四卦歌诀
  9. plt python 自己制定cmap_在plt.cm.get-cmap中可以使用哪些名称?
  10. 有一个属于自己的网站是不是很酷呢,超详细的建站流程,我都给你总结好了