IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【阅读笔记】《Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection》 -> 正文阅读

[人工智能]【阅读笔记】《Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection》

Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection



介绍

??传统缺陷检测时,所用的训练样本都是无缺陷的正常样本,但是在某些情况下也能收集到少量的缺陷样本,直接把这些缺陷样本丢弃未免有些浪费,毕竟这些样本中蕴含着真实存在的缺陷特征,若将此类缺陷样本纳入训练,或许当网络再次遇到类似的缺陷时能够更好地分割。
??本论文所提出的一种多头网络就是用于解决上述问题,充分利用可见异常,同时不会造成严重的过拟合现象。
??论文中的两种天鹅:黑天鹅与灰天鹅,灰天鹅象征着可见异常(seen anomaly),即训练集中的已知异常样本;黑天鹅象征着不可见异常(unseen anomaly),即网络未来测试中可能遇到的各式各样的异常类型。

论文地址:https://arxiv.org/pdf/2203.14506.pdf
官方代码:https://github.com/choubo/DRA


DAR多头网络

??论文中所提出了一种DAR多头网络,整个网络分为正常头(Normality learning head)、伪异常头(Pseudo anomaly)、可见异常头(Seen anomaly)和潜在异常头(Latent residual anomaly),每个头分开训练,训练不同的内容,得到每个头的异常分数,然后组合起来即可知道某样本是否为异常样本。

1.特征提取(feature extractor)

??在此之前,为了获取不同感受野的信息,对原图进行不用程度的下采样,分别进行之后的操作。
??本实验中使用的特征提取器依旧为预训练的resnet18网络,将其conv5_x层输出作为提取出的特征信息。

2.正常头(holistic head)

??正常头中所要训练的目标是对正常样本的分类,即score越接近1,是正常样本的概率越大,在训练时将所有image送入该头中。holistic head的网络结构也十分简单,相当于一个普通二分类网络的最后几层,将feature extractor提取出的feature maps平均池,而后通过两层全连接层获得正常分数normal scores。

class HolisticHead(nn.Module):
    def __init__(self, in_dim, dropout=0):
        super(HolisticHead, self).__init__()
        self.fc1 = nn.Linear(in_dim, 256)
        self.fc2 = nn.Linear(256, 1)
        self.drop = nn.Dropout(dropout)

    def forward(self, x):
        x = F.adaptive_avg_pool2d(x, (1, 1))
        x = x.view(x.size(0), -1)
        x = self.drop(F.relu(self.fc1(x)))
        x = self.fc2(x)
        return torch.abs(x)

3.可见异常头(seen head)

??可见异常为训练集中包含的异常样本,在训练时Label=1,将可见异常与正常样本一并送入该头中,通过一个普通的卷积层得到feature maps各个channel的异常分数,使用Top-K选取其中异常分数较大的K个进行平均,得到该头的异常分数anomaly score,异常分数越接近1,该image是异常的概率越大。

class PlainHead(nn.Module):
    def __init__(self, in_dim, topk_rate=0.1):
        super(PlainHead, self).__init__()
        self.scoring = nn.Conv2d(in_channels=in_dim, out_channels=1, kernel_size=1, padding=0)
        self.topk_rate = topk_rate

    def forward(self, x):
        x = self.scoring(x)
        x = x.view(int(x.size(0)), -1)
        topk = max(int(x.size(1) * self.topk_rate), 1)
        x = torch.topk(torch.abs(x), topk, dim=1)[0]
        x = torch.mean(x, dim=1).view(-1, 1)
        return x

4.伪异常头(pseudo head)

??所谓伪异常,即使用数据增强的方法仿真出一些未来可能出现的unseen anomaly,论文中使用CutMix方法实现数据增强,CutMix分为Cut与Mix两个步骤,Cut就是将图片的一部分区域剪切掉,Mix就是在剪切掉的区域中随机填充其他image的区域像素值。伪异常头与上述的可见异常头使用相同的网络结构,伪异常Label=2。
在这里插入图片描述

5.潜在异常头(composite head)

??未来可能出现的那些异常与seen anomaly几乎无共同点,与normal samples仅有很少的不同处,只用异常本身的特征很难检测出来的,但在高阶复合特征空间中很容易被检测出来,复合特征具有更强的可分辨性。
在这里插入图片描述
??首先,从normal samples中随机抽取的一小部分图像,计算其feature maps的平均值获得可供参考的正常特征图。
在这里插入图片描述
??然后相减获得标识异常与正常区别的残差特征图。

在这里插入图片描述

class CompositeHead(PlainHead):
    def __init__(self, in_dim, topk=0.1):
        super(CompositeHead, self).__init__(in_dim, topk)
        self.conv = nn.Sequential(nn.Conv2d(in_dim, in_dim, 3, padding=1),
                                  nn.BatchNorm2d(in_dim),
                                  nn.ReLU())

    def forward(self, x, ref):
        ref = torch.mean(ref, dim=0).repeat([x.size(0), 1, 1, 1])
        x = ref - x
        x = self.conv(x)
        x = super().forward(x)
        return x

训练过程

??训练过程中,由四个head共同训练,并且每个head参数不共享、独立进行优化。损失函数使用deviation loss,比cross entropy loss或focal loss更稳定、性能更好。将所有abnormal head分数相加,减去normal head的分数即可得到异常分数,通过该异常分数来判断一张图片是否存在异常。
??

??关于deviation loss,首先使用Z-score定义异常样本与正常样本异常分数的偏差(μ和σ在实验中为标准正态分布)
在这里插入图片描述

??然后定义loss:
在这里插入图片描述

??当样本异常时,y=1,loss为0和a-dev中较大的一项,即pred尽可能大
??当样本正常时,y=0,loss为abs(dev),即pred尽可能小


总结

??经过测试,该DAR网络在MVTec AD数据集上整体表现良好,但依旧存在某些问题,如对cable样本的poke insulation和cable swap缺陷的检测表现不佳…

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:32:47  更:2022-07-21 21:34:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 9:03:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计