文章目录

  • 前言
  • P-Net
  • MEMSTC-Net
  • 总结

前言

不管是医学图像还是工业图像领域,异常检测都是非常重要的一个研究方向(在训练时只有正常样本,测试时需要模型判断输入样本是否存在异常)。存在一个先验:正常/健康的样本都存在着规律性的结构,而异常样本由于异常/病变区域的存在,其结构通常会被损坏【如上图所示,其展示了"眼底图像中的结构化血管",“光学相干断层扫描图像中的结构化解剖结构”】。

那么,如何利用图像这种结构-纹理的关系到异常检测中来呢?本文介绍上海科技大学Kang Zhou分别在ECCV2020和TNNLS2020上发表的两篇文章,其创新性地将这种对应关系编码到重构方法中,其中第二篇期刊文章是第一篇会议论文的扩展。

P-Net

论文全称:Encoding Structure-Texture Relation with P-Net for Anomaly Detection in Retinal Images(上海科技大学)
原文地址:https://arxiv.org/pdf/2008.03632.pdf
代码:https://github.com/Kevin-KangZhou/P_Net_Anomaly_Detection and https://github.com/YutingXiao/P-Net_Mvtec_AD


PNet如上所示,主要分为三个模块:① 结构提取模块【原图】;② 图像重构模块;③ 结构提取模块【重构图像】。在训练时,首先从原始图像提取结构信息,然后对原图和结构信息分别编码,将两个编码特征进行拼接后送入解码器进行图像重构,重构后的图像会再次经过一个结构提取模块,提取结构信息【作为regularization】,同时约束重构误差和结构信息误差。在测试时,采用同样的流程,通过比较重构误差和结构误差来进行异常检测。下面主要介绍这几个模块的详细设计:

结构提取模块: 首先对于医学数据作者采用了语义结构信息(如前言中的例子),但数据集中并没有存在这些结构信息,因此作者采用了一种域自适应的图像分割方法AdaSeg,利用类似域的分割数据集进行域自适应分割。方法的整体框架如上图图(a)所示,采用一个权重共享的U-Net对源域和目标域同时进行分割,损失函数如下,对于源域采用GT直接优化,而目标域采用一个域判别器进行对抗训练。最后的效果如上图(b)所示。


当结构提取模块训练好后,后面就固定权重,不再进行更新了。

对于工业数据,简单地采用canny edge作为结构信息,构造一个网络学习边缘分割(作为结构提取模块),采用交叉熵进行训练。

图像重构模块:将原图和提取到的结构信息分别送入两个编码器中进行编码,将编码特征拼接后一起送入解码器进行重构。其中,结构信息编码器和解码器采用skip connection,避免下采样丢失结构细节。损失函数采用L1 loss以及增加一个域判别器D使用adversarial loss


结构提取模块(重构图像):最后将重构图像再送入一次特征提取模块,提取结构特征。主要有两个目的:① 促进图像能够更好地进行重构【类似regularizer的作用】;② 可以与原图的结构信息进行比较,并作为一个异常评测指标。损失函数同样采用L1 loss

损失函数与异常评估准则:训练的目标函数如下所示,包括重构过程中的对抗损失、重构损失以及结构重构损失。

测试阶段的流程与训练阶段一致,最后可以得到重构图像I^\hat{I}I^、重构的结构信息S^\hat{S}S^,同时考虑两者的L1重构误差,得到异常得分:

实验中λf\lambda_fλf​取0.8

部分实验结果:本文主要关注MVTec AD上的效果,如下所示:

MEMSTC-Net

论文全称:Memorizing Structure-Texture Correspondence for Image Anomaly Detection(上海科技大学)
原文地址:https://ieeexplore.ieee.org/document/9513473

由于这篇论文是上一篇论文的扩展,因此主要介绍两者的区别之处,相同的模块会一笔带过

这篇文章的主要网络框架如下所示,与前一篇文章主要的不同在于:① 引入了一个memory bank用于存储正常样本structure - texture的对应关系,文中称此模块为structure-texture correspondence memory, STCM; ② 训练时采用多个结构信息(semantic structure errorlow-level structure);③ 测试时移除了原图编码分支,只利用结构特征进行重构,避免原图编码了异常特征【限制异常区域被很好地重构】。

网络主要分为五个模块:① 特征提取模块:用于提取结构信息;② 信息编解码模块:编码特征结构信息和原图特征,以及解码重构部分;③ STCM模块:存储/更新结构-纹理的映射关系;④ Attention-guided fusion模块:加权融合不同的重构结构;⑤ Structure regularization, SR模块:再次提取结构信息,作用与上文一致。


结构编码模块:除了要编码语义结构,本文还引入了low-level结构信息,其实就是Canny edge。其中网络结构与上文一致。

对于MVTec AD数据集,同样还是只使用canny edge

信息编解码模块:训练时对来自不同域【原图(纹理)、语义结构、low-level结构】的特征分别进行编码(Enct,Encs,EnceEnc_t,Enc_s,Enc_eEnct​,Encs​,Ence​),同时采用不同的解码器(Dect,Decs,DeceDec_t,Dec_s,Dec_eDect​,Decs​,Dece​)进行重构,分别计算L1 loss


值得注意的是,训练时采用的解码器【以及原图的编码器EnctEnc_tEnct​】在测试时会丢弃。因为文章的重点在于建立structure - texture的对应关系,并利用这种对应关系进行重构,简单地理解就是在测试时只根据结构信息进行重构。而训练时之所以要加这些编码器和解码器,是为了确保编码器提取到的是正确的的结构和纹理信息,并以此建立对应关系。

STCM模块:如上图所示,模块中存储的是key-value对,其中key指的是结构特征,value是图像(纹理)特征。k表示存储尺寸,在索引时,采用欧氏距离度量检索最近邻项,如下式所示:

更新采用简单的FIFO策略,即在训练时,在每个batch(大小为n,n<<k)内根据结构特征纹理特征的对应关系,构建键值对(zs,j,zt,jz_{s,j},z_{t,j}zs,j​,zt,j​),依次对Memory Bank中的存储项进行更新:

注意,不同的结构信息采用不同的STCM模块。

Attention-guided融合模块:两种结构信息经过编码模块STCM模块后,得到两个索引后的特征,分别送入同一个编码器(DectDec_tDect​,注意:这是和编解码模块中的DectDec_tDect​是同一个)进行重构,能得到两个重构图像。作者为了更好地融合这两幅图像,额外构造了一个加权模块:输入原图,学习一组图像权重(sigmoid),利用这个权重进行图像加权融合。


得到最终的重构图像之后,与上文一样,采用L1 loss和对抗损失进行约束。

SR模块:其实就是和上文一致,对重构后的图像再次进行结构特征提取,然后采用L1 loss进行约束。只不过这里采用了两个特征,loss相应地也要增加为两个。

训练目标、测试流程以及评分策略: 除了结构提取模块的额外训练之外,在训练过程中,采用的损失函数主要有如下几个:

如最开始的网络结构图所示,在测试时,输入样本经过两个特征提取模块提取到对应的结构信息,并分别进行编码。编码得到的特征分别送入对应STCM模块进行检索,将检索后的特征送入编码器得到两幅重构图像,进行加权融合得到最终的重构结果。将重构结果送入SR模块提取重构图像对应的结构信息,利用和上文一致的方式进行异常评分:

在计算异常得分时,只使用语义结构信息,因为low-level信息容易受到背景噪声的影响。

部分实验: 只展示了MVTec上的结果,但在医学数据集上的效果增益更明显,详情见原文。

总结

本文主要介绍了两篇关于“如何在异常检测中利用结构-纹理的一致性”的论文,其来自同一个作者。两篇的核心思想都是:将结构信息融入到重构方法中,提升重构的质量,并利用比较图像与原图的结构信息用于异常得分评测。

思想富有创新性,在医学数据集上也展现了不错的效果,并且也在工业数据集上进行了实验。由于博主目前主要关注的是自然图像和工业图像的异常检测,所以在描述时也有所偏重。下图展示了第二篇论文在MVTec AD数据集上展现的可视化结果,其实从肉眼的效果来看,某些类上的重构并不算太好,但图像能够保留原有正常区域重构清晰的情况下,对异常区域的表现与原图不同,从而也能达到不错的检测效果。

ECCV / TNNLS 20 - 如何在异常检测中利用“结构structure - 纹理texture”一致性【P-Net,MemSTC-Net】相关推荐

  1. 异常检测中的浅层模型与深度学习模型综述(A Unifying Review of Deep and Shallow Anomaly Detection)

    A Unifying Review of Deep and Shallow Anomaly Detection 异常检测中的浅层模型与深度学习模型综述 摘要:随着众多异常检测方法(基于生成模型,单分类 ...

  2. 基于机器学习的UEBA在账号异常检测中的应用

    UEBA UEBA是一种采用高级数据分析方法.面向用户和实体网络行为,进行异常检测和调查的技术,也是安全智能分析切入点. U:表示用户(User),UEBA不是一般的安全分析,而是以分析用户活动为首要 ...

  3. VAE逻辑整理及VAE在异常检测中的小实验(附代码)

    VAE逻辑整理及VAE在异常检测中的小实验(附代码) Variance和control variate 两种常见的分类器 相应代码 Minst数据集的训练和重构 KDD99数据  本文主要讲解一下整个 ...

  4. 异常检测中的评价指标——TPR/FPR/P/A/F/R

    1.异常检测 相对于一般的分类问题(例如sklearn.datasets的load_iris数据集,是针对蝴蝶类型进行分类,对每一种类别同等关心),这里的"异常检测"主要指在多分类 ...

  5. 一文搞懂异常检测中离群、异常、新类、开集、分布外检测异同

    点击上方"迈微AI研习社",选择"星标★"公众号 重磅干货,第一时间送达 选自丨机器之心 MMLab@NTU 你是否也曾迷惑于「离群检测,异常检测,新类检测,开 ...

  6. 异常检测中的三种异常:点异常、上下文异常、集合异常

    文章目录 直观解释 点异常 上下文异常 集合异常 see also Reference 直观解释 异常检测问题遇到的异常可以分为三类,分别是点异常(Point Anomalies).上下文异常(Con ...

  7. 【CV】PAA论文解读:在物体检测中利用概率分布来将anchor分配为正负样本

    本文转自|AI公园 导读 又一篇anchor匹配策略的文章,不过确实是简单有效,在ATSS上只需要很小的修改就可以提升性能.GFL2在框的预测上用上了概率分布,这里又在anchor匹配上用上了概率分布 ...

  8. 无监督异常检测中的阈值确定

    实际部署中, 需要设置阈值判断待测样本是否属于异常类,无监督方法对缺陷发生概率的表达往往基于异常分数. (1)将归一化的注意力图作为异常分数图,用于像素级的缺陷分割,该方法对阈值设置不敏感 (2)Pa ...

  9. 【CVPR2018】物体检测中的结构推理网络

    物体检测,是计算机视觉任务的基础,其精度将直接影响相关视觉任务的效果,在深度学习方法兴起之前,开展了很多利用场景上下文来提高检测精度的研究.近年来,随着Faster RCNN等深度学习方法的兴起,在日 ...

最新文章

  1. Domino Web开发规则之三:以资源管理库为中心开发
  2. Java中的输入输出流
  3. ios开发-系统架构
  4. N001-SQL Server 2016企业版本安装
  5. 【PM模块】外包服务、工作清场管理、预防性维护
  6. 系列笔记 | 深度学习连载(6):卷积神经网络基础
  7. PyTorch | torch.randperm()使用方法
  8. java openssl_verify_CryptoAPI:如何使用CryptVerifySignature验证来自OpenSSL或Java的DSA签名...
  9. 移动端海洋实时仿真技术研究与实现
  10. UVA 10733 - The Colored Cubes(Ploya)
  11. 苹果4s怎么越狱教程_苹果手机:iPhone 11/XS系列iOS13-13.3越狱教程
  12. 公开说说别人看不到_为什么我在QQ空间里面发表说说别人看不到
  13. Nginx配置多个二级域名和多个CA证书
  14. Spring Bean生命周期(简单易懂)
  15. 南通大学计算机专业校区,南通大学计算机科学与技术专业
  16. Navicat导出整个数据库
  17. Office中快速删除批注
  18. 分布式计算的基本原理
  19. Windows 8 傻瓜式安装教程
  20. 加快云网融合发展,打通算力传输大动脉

热门文章

  1. 360 se html document 广告,360浏览器弹窗广告如何关闭?教你彻底删除屏蔽360se.exe广告!...
  2. C刷题:一个方法团灭LeetCode股票买卖问题
  3. antd select 设置默认选中
  4. LTE(4G) - NR(5G) Counter Check信令描述
  5. 《Unreal大象无形》读书笔记
  6. OGG 19C—— 二、GoldenGate 安装配置
  7. 阿里fastjson_再爆安全漏洞,这次轮到Jackson了,竟由阿里云上报
  8. TIMI游戏工作室开发测试流程
  9. 微信小程序云开发配置环境
  10. 夕阳西下,行业内卷,土木转行Python的几个方向?