论文笔记——Using Progressive Context Encoders for Anomaly Detection in Digital Pathology Images

写的都是自己的一些理解,有些问题自己也没搞明白,有些可能是错的,希望大家指正,共同进步。

 这篇文献主要讲的是对皮肤癌的检测,旨在推理出异常的区域。该方法对黑色素瘤的识别达到了89%的像素级准确率。

在学习文献之前,要先了解关于皮肤的一些医学知识,这个文中也介绍了。

人的皮肤由三部分组成,分别是 表皮、真皮和皮下组织。

  • 皮下组织由白色脂肪组成,在H&E染色后呈白色空泡。
  • 真皮由胶原蛋白组成,在皮肤组织中占大部分。
  • 表皮才是要诊断的区域,但很少。

文献中的数据集:

文中一共用到了200张正常slide和9张有病变的,是他们跟一个实验室合作的,应该没有公开。

在不同阶段用了不同的子数据集,后面会在不同阶段内详细介绍。


文献的整体框架流程(论文中的原图)

文中将整个过程分为了4个步骤,分别是数据预处理、利用渐进式增长GAN网络(Progressively Growing GANs)重建正常图像、计算误差分布(Error distribution calculation ,NERD)、数据后处理。PS 前面是按自己理解写的过程名字,下面用原文中的标题。


Phase 0: Preprocessing

这一步就是数据预处理,目的是去除图片中的真皮和皮下组织。具体过程如下:

  1. 首先将40X的WSI先切成小patch(切的是1024*1024)。
  2. 利用预训练的ResNet50将每个patch编码成一个向量特征。
  3. 将所有的向量特征进行PCA主成分分析,并提取第一主成分的前80%的patch。这样做的目的就是删除了胶原蛋白和空泡,并且文中还说人工检查了,这种筛选真实有效。我一脸黑人问号,为什么这样就删除了???
  4. 最后划分数据集,150+25+25+9(后面还会说)。

 Phase 1:Network weight training

 这一步主要是训练GAN网络,目的是重建出正常的皮肤组织图像。在这一步共用了150张正常皮肤组织slide的patch,共150, 330415 patches。

GAN的网络结构:

  • 生成器是类似于unet网络的一个加跳接的AE。
  • 判别器是一个标准的渐进式 GAN 判别器。不会的看参考文献1,个人感觉训练的时候会很麻烦。

在训练过程中,需要对输入的patch先做数据增强,随机掩掉20%的区域。这样做的目的是强迫生成器学习正常区域的编码,并解码时根据上下文信息补全mask区域的信息。


 Phase 2:Error distribution calculation (NERD)

 这一步主要是计算绝对误差分布的,目的是找到原图x和生成图\widehat{x}之间的绝对误差的高斯分布,在推理时通过马氏距离判断异常值。在这一步共用了25张正常皮肤组织slide的patch,共44693 patches。

这一步是在假设成立的条件上做的。假设原图x和生成图\widehat{x}之间的绝对误差符合多元高斯分布,那这一步的本质就是对这个绝对误差高斯分布的最大似然估计。确定一个高斯分布只需要两个参数,均值和方差。

文中说NERD是被训练出来的,但没有介绍是怎么训练的,还说把GAN网络的参数固定了,那就更没有可以训练的参数了。推测可能只是用25张正常slide求了个均值和协方差(3×3),每个颜色通道单独求均值

协方差矩阵计算公式:


 Phase 3:Dynamic distance threshold, KDE smoothing, and dilation

 这一步主要是计算马氏距离,并根据马氏距离计算阈值和定位异常区域。在这一步共用了25张正常皮肤组织slide的patch,共52517 patches。

在推理时,计算出 生成图\widehat{x} 每个像素的马氏距离 就可以确定该像素是否超出预期分布。因此,如果确定一个阈值 就可以将线性回归问题转化为二分类问题,大于阈值的被定为异常、小于阈值的被定位正常。所以这一步又使用25张正常的slide求了所有像素马氏距离的均值和标准差。

马氏距离公式如下:

     其中Σ是多维随机变量的协方差矩阵,μ为样本均值。

与phase2的区别:phase2是利用25张slide 计算了 原图x和生成图\widehat{x}之间的绝对误差的高斯分布,代表了所有正常皮肤组织和重建图之间的绝对误差的高斯分布。phase3是利用phase2计算出来的均值和方差来计算一个新的patch 原图x和生成图\widehat{x}之间的绝对误差的feature map中每个像素的马氏距离,然后利用这些马氏距离的均值和标准差做为最后的阈值。

将问题转化为二分类问题后,就可以得到一张对应 生成图\widehat{x} 的语义分割图mask,里面白的色区域代表了异常的像素值(马氏距离大于阈值)。但是单个像素不能代表这块区域的皮肤异常(文中说40X下的一个像素也远小于一个细胞),而且单个像素异常也可能是噪声。所以做了一个滤波,把没有联通区域的零散点去除。

过滤后用了一个带宽为100的two dimensional gaussian kernel density estimator (KDE) 做平滑,然后将结果归一化,做成灰度KDE图像。最后把灰度KDE图像与默认阈值0.2进行比较得到二值mask,使用Shapely做最后处理(这步只感觉是处理patch之间的缝的,是否有其他作用没看出来)。

最后就得到了想要的异常区域,大概样子就是这样。

吐槽,官方给的代码GitHub - Steven-N-Hart/P-CEAD,用tensorflow写的,可读性有点差,让人头秃~

参考文献

  1. Karras,T.,Aila,T.,Laine,S.Lehtinen,J.Progressive Growing of GANs for Improved Quality,Stability,and Variation.ArXiv171010196 Cs Stat (2018)

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值