Adversarial Stain Transfer for Histopathology Image Analysis(简介)

本文介绍了一种针对组织病理学图像分析的任务,如分类和分割,提出了一个结合内在染色归一化的判别模型。模型通过对抗染色迁移网络和特定任务网络,能有效处理不同染色表现的图像,无需额外预处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组织病理学分析中的对抗染色迁移

      本文所提出方法的目标是为给定的组织病理学图像分析任务(例如,分类或分割)建立一个带有内在染色归一化组件的判别模型。这种模型应该能够处理具有不同统计特性的图像(即,不同染色表现),不需要额外的训练或预处理。

      染色也可以看作是分割任务。

一、该论文中提出的网络结构:

 

        x^A:用于训练的图片,来自病理学实验室A。

        y^Ax^A对应的注释,如,类别标签或分割掩码。

        \{x^B\}:测试图片的集合,与A有相同的组织类型,由于获取过程不同(如,染色剂不同或扫描用的显微镜不同)所以染色表现不同,来自病理学实验室B。

 

生成网络G(x^B;\Theta _G)

      又称染色迁移网络,采用了encode-decode结构和残差连接(在块与块之间用灰色虚线标出)。

      通过学习生成与训练图片\{x^A\}在染色表现方面相似的图片\{\hat{x}^B\},且与测试图片\{x^B\}要在内容上相似。

判别网络C(x;\Theta _C)

      又称特定任务网络,采用了AlexNet结构,同时进行判别和分类。该网络根据从训练集分布中提取的图像以及生成的与测试集类似(就染色而言)的图像进行训练。

      判别→估计输入图像来自训练集的概率P_1(x)而不是来自生成网络的概率P_0(x)

      分类→在给定真实图片\{x^A\}和生成图片\{\hat{x}^B\}时,预测一个特定任务标签\{\hat{y}^A\}

 

二、该论文中提到的Loss:

总loss:

             \underset{\Theta _G,\Theta _C}{min}\ \underset{\Theta _C}{max} \ \alpha L_{adv}(C,G)+\beta L_{r}(G) +\gamma L_{C}(G,C)

1.  对抗损失 L_{adv}

        L_{adv}(C,G) = E_{x\sim {x^A}}[ log C(x;\Theta _C)]\ +\ E_{x\sim {x^B}}[log(1-C(G(x;\Theta _G);\Theta _C))]

2.  正则化损失 L_{r}

        L_{r}(G) = E_{x\sim {x^B}}\left \| W\circ x \ -\ W\circ G(x;\Theta _G) \right \|_2

                W:输入图片 \{x^B\} 的颜色梯度向量域,用于捕捉图片 x^B 的边界,

                  \circ:Hadamard 积

        该 Loss 实际上是加权的L2损失。与 W 做乘积重在惩罚生成图片和输入图片在边界位置上的不同。

        此外,所使用带有跳跃层的encoder-decoder架构可使不同层次上的信息从编码器流向解码器,从而保留了一些与纹理相关的低层信息(如,边界)。

3.  类别损失 L_{c}

      L_{c}(G,C)=E_{x,y\sim \{\hat{x}^B,\hat{y}^B\}}[log C_y(G(x;\Theta _G);\Theta _C)]\ +\ E_{x,y\sim \{x^A,y^A\}}[log C_y(x;\Theta _C)]

      第一个期望对应于生成图片的类别损失,\hat{y}^B为生成图片的预测类别。

      第二个期望表示训练图片的类别损失。

 

算法的伪代码如下:

      算法 1 总结了所提方法的训练过程。

      在每轮训练中,先计算 L_{adv} 对于\Theta_C的梯度,并更新参数(梯度上升);然后计算 L_{C} 对于\Theta_C的梯度,并更新参数(最小化L_{C});最后更新\Theta_G,计算L_{adv}+L_r,进行梯度下降。

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]) ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值