论文阅读:Multi-scale Domain-adversarial Multiple-instance CNN for Cancer Subtype Classification with ……

code:GitHub - takeuchi-lab/MS-DA-MIL-CNN: Multi-scale Domain-adversarial Multiple Instance Learning CNN (CVPR2020)

Abstract

        提出了一种从组织病理图像中进行肿瘤亚型分类的新方法,该方法能够在给定的全视野数字切片(WSI)中自动检测肿瘤的特异性特征。癌症亚型应参照WSI,即整个病理组织玻片的大尺寸图像(通常为40,000×40,000像素)进行分类,该玻片由癌症和非癌症部分组成。一个困难来自于在WSI中注释肿瘤区域的高成本。此外,还必须通过改变图像的放大倍数从WSI中提取全局和局部图像特征。此外,还应针对不同医院/标本的染色条件差异,稳定地检测图像特征。为了克服这些实际困难,本文将多实例、领域对抗多尺度学习框架有效地结合起来,提出了一种新的基于CNN的癌症亚型分类方法。将该方法应用于多家医院收集的196例恶性淋巴瘤亚型的分类,其分类性能明显优于标准CNN或其他常规方法,准确率也优于标准病理学家的分类结果。

        总结:提出了一种结合多实例、领域对抗多尺度学习框架,基于CNN的方法进行肿瘤亚型分类任务(针对问题提出解决方案)。     

Introduction

        WSI太大无法直接输入到CNN中,所以要先进行切片。若切片有注释表明其是否是肿瘤区,则CNN就得以训练,但是注释成本太高。

        无标签的三个挑战,第一:在WSI中肿瘤区和非肿瘤区是混合,需要基于肿瘤区特征来实现亚型分类。第二:染色条件的差异。第三:病理图像放大后,组织的不同特征会发生改变,在实际中需要反复改变放大倍数来找出所有特征。

        idea是模拟人工操作的机制,通过有效的结合多实例学习、领域对抗规范化和多尺度学习,来解决上述的三个问题。(技术都是现有的,创新点在于结合多种现有的技术来解决特定问题)

        方法应用取得一定的效果。(196例会不会太少)

        贡献,一:结合了三种现有的方法提出了一种新的方法。二:应用了这一方法。三:证明了这一方法。

Preliminaries

Problem setup

        一些设置:{(Xn,Yn)}  表示N个病人的数据集,Xn 表示第n个病人的WSI,Yn表示类别标签。{Dn}表示N个n维向量的集合。切片大小为224*224.

        阳性类别的MSI中可能含有阴性的切片,应用多实例学习的思想:阳性类别的MSI至少包含几个阳性特征的切片,而在阴性类别的MSI中不包含任何含有阳性特征的切片。为了模仿专家在不同尺度下观察MSI,本文也会形成不同尺度的切片。

        下图简要说明WSI、包、实例(补丁)和规模的概念。

 Multiple instance learning (MIL)

        为了解决标注问题,多实例学习(MIL)是一种弱监督学习问题,它不观察实例标签,而是观察称为包的实例组的标签。 在二元分类设置中,如果袋包含至少一个阳性实例,则将阳性标签分配给袋,而如果袋仅包含阴性实例,则将阴性标签分配给袋

Domain-adversarial neural network

        为了解决染色差异的问题,这一方法由于颜色增强和颜色归一化以及它们的结合,DA方法可以忽略对分类任务没有作用的差异(本文中的染色差异)。做法是,在MIL框架内使用DA训练方法对组织病理图像进行分类,将每个患者视为一个单独的域,从而可以有效地忽略每个患者WSI的染色情况。

Multi-scale pathology image analysis

        为了模拟专家反复切换放大倍数来观察不同的组织特征的行为,做法是,在MIL框架内使用多个不同尺度的多个切片。 

Proposed method

        本文将染色后的全切片图像送入神经网络,根据总结输出的每种包的预测类别进行亚型分类任务。

        下图介绍了整体网络结构,主要包含3大模块2个阶段。

        Gf:负责将输入的图像映射到Q维的特征空间h;
        Gy:通过采用注意力机制的一个NN完成将包内的特征向量,映射成整个包的类别概率值;            Gd:通过一个简单的NN将特征向量转换为某个域的概率输出。
        stage 1:同级的DA-MIL网络,主要获得每一级图片的bag label;
        stage 2:多级的DA-MIL网络,可以看到多插入了feature extractor模块。

Stage1: single-scale learning

        会为每一种放大倍率下的patch计算其所属包的类别标签,注意在交叉熵损失函数中加入了对抗域迁移的正则化项,因此整个包的类别标签取决于注意力系数更大的那些示例(instance);DA正则化项的引入主要为了抑制不同染色效果带来的影响。

Stage2: multi-scale learning

        第二阶段不同包中包含了不同放大倍率下采集的patch,插入的特征提取器来自于stage 1中训练得到的并生成各自倍率下的特征向量,并将所有尺度的特征向量聚合起来计算注意力权重,进而判断包的类。

Algorithm

Experiments

Dataset

        来自80个机构的196例病例,包含五种典型病例,DLBCL(GCB、non-GCB)、AITL、HLMC、HLNS。

        采用了分层分类的方法,先进行二分类。再进行第二层的分类。(有参考价值)

Experimental setup

        略

Results

Conclusion

        略

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
image-to-Image Translation with Conditional Adversarial Networks(条件对抗网络的图像到图像转换)是一种用于图像转换的深度学习方法。它通过训练一个生成器网络和一个判别器网络来实现图像的转换。生成器网络将输入图像转换为目标图像,而判别器网络则试图区分生成的图像和真实的目标图像。 这种方法的关键是使用对抗性训练。生成器网络和判别器网络相互竞争,以提高生成器网络生成逼真图像的能力。生成器网络通过最小化判别器网络对生成的图像的判别误差来学习生成逼真的图像。判别器网络则通过最大化对生成的图像和真实图像的判别能力来学习区分真实图像和生成图像。 在条件对抗网络中,生成器网络和判别器网络都接收额外的条件输入,以指导图像转换的过程。这个条件输入可以是任何与图像转换任务相关的信息,例如标签、语义分割图或其他图像。 通过训练生成器网络和判别器网络,条件对抗网络可以实现各种图像转换任务,例如将黑白图像转换为彩色图像、将马的图像转换为斑马的图像等。 这是一个使用条件对抗网络进行图像到图像转换的示例代码: ```python import tensorflow as tf from tensorflow.keras import layers # 定义生成器网络 def build_generator(): # 定义生成器网络结构 generator = tf.keras.Sequential() generator.add(layers.Conv2DTranspose(64, (4, 4), strides=(2, 2), padding='same', input_shape=(256, 256, 3))) generator.add(layers.BatchNormalization()) generator.add(layers.ReLU()) generator.add(layers.Conv2DTranspose(32, (4, 4), strides=(2, 2), padding='same')) generator.add(layers.BatchNormalization()) generator.add(layers.ReLU()) generator.add(layers.Conv2DTranspose(3, (4, 4), strides=(2, 2), padding='same', activation='tanh')) return generator # 定义判别器网络 def build_discriminator(): # 定义判别器网络结构 discriminator = tf.keras.Sequential() discriminator.add(layers.Conv2D(64, (4, 4), strides=(2, 2), padding='same', input_shape=(256, 256, 3))) discriminator.add(layers.LeakyReLU()) discriminator.add(layers.Conv2D(128, (4, 4), strides=(2, 2), padding='same')) discriminator.add(layers.BatchNormalization()) discriminator.add(layers.LeakyReLU()) discriminator.add(layers.Conv2D(256, (4, 4), strides=(2, 2), padding='same')) discriminator.add(layers.BatchNormalization()) discriminator.add(layers.LeakyReLU()) discriminator.add(layers.Conv2D(1, (4, 4), strides=(1, 1), padding='same')) return discriminator # 定义条件对抗网络 class cGAN(tf.keras.Model): def __init__(self, generator, discriminator): super(cGAN, self).__init__() self.generator = generator self.discriminator = discriminator def compile(self, g_optimizer, d_optimizer, loss_fn): super(cGAN, self).compile() self.g_optimizer = g_optimizer self.d_optimizer = d_optimizer self.loss_fn = loss_fn def train_step(self, real_images, labels): # 生成器网络生成假图像 with tf.GradientTape() as tape: fake_images = self.generator([real_images, labels], training=True) # 判别器网络判别真实图像和假图像 real_output = self.discriminator([real_images, labels], training=True) fake_output = self.discriminator([fake_images, labels], training=True) # 计算生成器和判别器的损失 g_loss = self.loss_fn(fake_output, tf.ones_like(fake_output)) d_loss_real = self.loss_fn(real_output, tf.ones_like(real_output)) d_loss_fake = self.loss_fn(fake_output, tf.zeros_like(fake_output)) d_loss = d_loss_real + d_loss_fake # 更新生成器和判别器的参数 g_gradients = tape.gradient(g_loss, self.generator.trainable_variables) d_gradients = tape.gradient(d_loss, self.discriminator.trainable_variables) self.g_optimizer.apply_gradients(zip(g_gradients, self.generator.trainable_variables)) self.d_optimizer.apply_gradients(zip(d_gradients, self.discriminator.trainable_variables)) return {"g_loss": g_loss, "d_loss": d_loss} # 创建生成器和判别器 generator = build_generator() discriminator = build_discriminator() # 创建条件对抗网络 cgan = cGAN(generator, discriminator) # 编译条件对抗网络 cgan.compile( g_optimizer=tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5), d_optimizer=tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5), loss_fn=tf.keras.losses.BinaryCrossentropy(from_logits=True) ) # 训练条件对抗网络 cgan.fit(dataset, epochs=100) # 使用生成器网络进行图像转换 input_image = ... label = ... output_image = generator([input_image, label]) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小强2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值