论文解读《Semi

论文解读《Semi-Imagevia Crossof》
基于多关注点交叉蒸馏的半监督病理图像分割
论文出处:
论文地址:论文地址
代码地址:代码地址
一、摘要:
(1) 病理图像的分割是准确诊断肿瘤的关键步骤 。然而,获取这些图像的密集注释用于训练是劳动密集型和耗时的 。为了解决这个问题,半监督学习(SSL)具有降低标注成本的潜力,但它受到大量未标记训练图像的挑战 。
(2) 提出了一种新的 基于多重关注交叉蒸馏(CDMA)的半监督方法。
(3) 首先,我们提出了一个 多注意三分支网络(MTNet)。其次,在三个解码器分支之间引入 交叉解码器知识蒸馏 (Cross, CDKD) 。
(4) 在公共数据集上,将本文提出的CDMA与八种最先进的SSL方法进行了比较 。
二、引言
(1) 在这项工作中,我们提出了一种新的 基于多关注交叉蒸馏(CDMA) 的半监督病理图像分割方法 。
(2) 首先,提出了一种多注意力三分支网络(MTNet) 。与MC-Net+[19]基于不同的上采样策略不同,我们的MTNet在三个解码器分支中使用不同的注意机制。
(3) 其次,受到最近研究中平滑标签对噪声鲁棒学习更有效的观察[10,22]的启发,我们 提出了一种交叉解码器知识蒸馏(CDKD)策略。在CDKD中,每个分支使用软标签监督作为其他两个分支的老师。
(4) 此外,受EM[15]的启发,我们将 基于不确定性最小化的正则化应用于解码器之间的平均概率预测。
二、方法
图1所示 。我们的CDMA用于半监督分割 。三个解码器分支使用不同的关注来获得不同的输出 。为了更好地处理有噪声的伪标签,提出了交叉解码器知识蒸馏(CDKD)方法,并将不确定性最小化应用于三个分支的平均概率预测 。Lsup仅用于标记图像 。
2.1 多注意力三分支网络(MTNet)
(1) CA分支 通道注意块() :
其中F表示输入特征映射 。

分别表示空间维度上的平均池化和最大池化 。MLP和σ分别表示多层感知和激活函数 。Fc是由通道注意力校准的输出特征映射 。
class ChannelAttention(nn.Module):def __init__(self, in_planes, ratio=16):super(ChannelAttention, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.max_pool = nn.AdaptiveMaxPool2d(1)self.fc1 = nn.Conv2d(in_planes, in_planes // ratio, 1, bias=False)self.relu1 = nn.ReLU()self.fc2 = nn.Conv2d(in_planes // ratio, in_planes, 1, bias=False)self.sigmoid = nn.Sigmoid()def forward(self, x):avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x))))max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x))))out = avg_out + max_outreturn x*self.sigmoid(out)
(2) SA 分支 空间注意力。SA块为:
其中Conv表示卷积层 。

分别是通道维度上的平均池化和最大池化 。⊕的意思是串联 。
class SpatialAttention(nn.Module):def __init__(self, kernel_size=7):super(SpatialAttention, self).__init__()assert kernel_size in (3, 7), 'kernel size must be 3 or 7'padding = 3 if kernel_size == 7 else 1self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)self.sigmoid = nn.Sigmoid()def forward(self, x):avg_out = torch.mean(x, dim=1, keepdim=True)max_out, _ = torch.max(x, dim=1, keepdim=True)y = torch.cat([avg_out, max_out], dim=1)y = self.conv1(y)return x*self.sigmoid(y)
(3) CSA 分支 对每个卷积块使用一个CSA块来校准特征映射 。CSA块由CA块和SA块组成,同时利用信道和空间注意力 。
class CBAM(nn.Module):def __init__(self, in_planes, ratio=16, kernel_size=7):super(CBAM, self).__init__()self.ca = ChannelAttention(in_planes, ratio)self.sa = SpatialAttention(kernel_size)def forward(self, x):out = self.ca(x)result = self.sa(out)return result