3D Self-Supervised Methods for Medical Imaging

深度学习在医学影像分析需大量标注数据,而标注耗时费力。文章将五种2D自监督任务扩展到3D图像,提出3D-CPC、3D-RPL等方法。在脑部肿瘤、胰腺肿瘤分割及糖尿病视网膜病变任务上实验,结果显示自监督学习能利用无标注数据,但方法有局限,数据量和方法对效果的影响待研究。

3D Self-Supervised Methods for Medical Imaging

论文信息

  • Paper: [NeurIPS2020] 3D Self-Supervised Methods for Medical Imaging
  • Link: https://papers.nips.cc/paper/2020/file/d2dc6368837861b42020ee72b0896182-Paper.pdf
  • Code: https://github.com/HealthML/self-supervised-3d-tasks

背景梳理

深度学习在医学影像分析上的应用需要依赖于大量的有标注数据,而医学影像数据多为3D图像(CT,MRI),标注需要专业的医生花费大量的时间和精力。近期许多自监督的方法的提出,通过数据本身的结构或者特性,设计自监督任务,利用生成的伪标签进行训练来学习图像表征。经过自监督学习预训练得到的模型,在目标任务上只需要少量的标注数据对模型进行微调即可获得较好的效果。近期的多数关于自监督的工作都是基于2D图像设计的,无法直接在3D医疗图像上使用,今天要介绍的文章将五种自监督任务扩展到3D图像上,相比于直接训练(train from scratch)和2D的自监督学习方法,在3D医疗图像分割的任务上取得了较好的效果。

主要贡献

方法设计

基于现有的2D自监督方法,提出了五种3D自监督方法,包括:3D Contrastive Predictive Coding, 3D Rotation prediction, 3D Jigsaw puzzles, Relative 3D patch location, and 3D Exemplar networks。

实验结果

本文在三个不同的任务上,从数据有效性,性能和收敛速度三个角度进行了分析,比较了提出的3D自监督方法。

方法

3D Contrastive Predictive Coding(3D-CPC)

对比预测编码方法[1]由DeepMind首次提出,核心的思想也是对比学习(Contrastive Learning),通过编码序列数据中数据之间的关联信息来学习表征,具体的做法是预测未来(下一个或者相邻)样本的潜在空间(latent space)。

这篇文章将CPC扩展到了3D,对每个输入数据,如下图所示,crop相同大小的重叠的3D patch xi,j,kx_{i,j,k}xi,j,k,通过编码器gencg_{enc}genc得到在隐空间的表达zu,v,w=genc(xi,j,k)z_{u,v,w}=g_{enc}(x_{i,j,k})zu,v,w=genc(xi,j,k)。然后通过上下文网络(context network) gcxtg_{cxt}gcxt 进行汇总得到上下文向量(context vector) ci,j,k=gcxt({zu,v,w}u≤i,v,w)c_{i,j,k}=g_{cxt}(\{z_{u,v,w}\}_{u\leq i,v,w})ci,j,k=gcxt({zu,v,w}ui,v,w)。由于向量ci,j,kc_{i,j,k}ci,j,k捕捉了相对于xi,j,kx_{i,j,k}xi,j,k上下文的更高层的内容,因此可以预测下一个patch的隐空间的表达 zi+l,j,k,l≥0z_{i+l,j,k},l\geq0zi+l,j,k,l0zi+l,j,kz_{i+l,j,k}zi+l,j,k作为positive的样本,从输入图像其他位置随机crop的patchznz_{n}zn作为negative的样本,通过CPC损失函数进行优化:
KaTeX parse error: Undefined control sequence: \bbox at position 2: \̲b̲b̲o̲x̲[white, 3px]{ \…

Relative 3D patch location (3D-RPL)

RPL是预测3D patch位置的任务,利用图像中的空间上下文信息作为监督。
如下图所示,将输入图像划分为由NNN个非重叠patch组成的3D网格{xi}i∈{1,2,...,N}\{x_i\}_{i \in \{1,2,...,N\}}{xi}i{1,2,...,N}。以网格中心的patch作为参照,从周围的patch中随机选取一个query patch xqx_qxq,3D-RPL的任务即为预测query patch xqx_qxq 的位置 yqy_qyq。将问题建模为一个N−1N-1N1的分类问题,损失函数定义为:
KaTeX parse error: Undefined control sequence: \bbox at position 2: \̲b̲b̲o̲x̲[white, 3px]{\m…

3D Jigsaw puzzle Solving (3D-Jig)

Jigsaw就是将输入图像打乱后进行拼图任务。
如下图所示,将输入图像划分成一个n×n×nn\times n\times nn×n×n的3D 网格,然后从一组预设的排列组合中随机选择一种,进行打乱操作。大小为PPP的排列组合是从n3!n^3!n3!中可能的排列组合中选择出来的,每个排列组合被分配一个索引yp∈{1,2,....,P}y_p\in\{1,2,....,P\}yp{1,2,....,P}。因此这个问题就被建模为一个P-way分类任务,最小化交叉熵损失函数LJig(ypk,y^pk)\mathcal{L}_{Jig}(y_{p}^{k},\hat{y}_{p}^{k})LJig(ypk,y^pk),其中k∈{1,...,K}k\in \{1,...,K\}k{1,...,K} 是从提取的K个puzzles中选取的一个任意的3D puzzle。

3D Rotation prediction (3D-Rot)

Rotation 通过简单地预测输入图像的旋转角度来学习视觉表征。
如下图所示,输入图像在RRR个考虑的度数中随机旋转一个度数r∈{1,...,R}r\in \{ 1,...,R\}r{1,...,R}。本文中作者使用的度数为90度的倍数,沿着3D坐标系(x,y,z)(x,y,z)(x,y,z) 的每个轴。每个轴有4种可能的旋转,总共12种可能的旋转。沿着3个轴旋转0度的结果相同,所以共有10种旋转方式。这种情况下问题被建模为一个10分类问题,最小化LRot(rk,r^k)\mathcal{L}_{Rot}(r_{k},\hat{r}_{k})LRot(rk,r^k),其中k∈{1,...,K}k\in \{1,...,K\}k{1,...,K}

3D Exemplar networks (3D-Exe)

定义训练集X={x1,...,xN}X=\{x_1,...,x_N\}X={x1,...,xN},和包含KKK种图像变换的集合T={T1,...,TK}\mathcal{T}=\{T_1,...,T_K\}T={T1,...,TK},通过对每个训练样本进行变换可以得到新的surrogate类别 Sxi=Txi={Txi|T∈T}{S_{x}}_{i} = \mathcal{T} x_i = \{ Tx_i | T \in \mathcal{T} \}Sxi=Txi={TxiTT}。最初的Exemplar网络是对新的类别进行分类的任务,然而随着数据集的增加,类别数也会很大,分类任务会变得很难。
本文提出的3D-Exe参考对比学习的思想,通过triplet损失函数进行学习,如下图所示,假设xix_ixi是一个训练样本,ziz_izi是其对应的embedding vector,xi+x_i^{+}xi+xix_ixi的变换(正样本),xi−x_i^{-}xi是数据集中的另一个样本,损失函数定义如下:
KaTeX parse error: Undefined control sequence: \bbox at position 2: \̲b̲b̲o̲x̲[white, 3px]{ \…
其中D(.)D(.)D(.)L2L_2L2距离。

实验结果

Brain Tumor Segmentation Results

对于脑部肿瘤分割任务,本文使用UK Biobank的数据集进行自监督任务的训练,该数据集包含约22k 3D 脑部MRI数据,使用BraTS 2018的脑肿瘤分割数据集(285个训练数据,66个验证数据)来评估有效性。与2D的自监督方法相比较,并且还对比了使用不同比例训练数据的结果,如下图所示。

从图中可以看出以下几点:

  1. 2D自监督任务的结果与3D网络直接训练差不多,可见对于该任务3D模型的必要性(这里应该再有一个2D-From scratch)的结果。
  2. 使用3D自监督任务进行预训练的结果要明显好于直接训练,尤其是对于标注数据量很少的情况以及比较难分割的部位。

Pancreas Tumor Segmentation Results

对于胰腺肿瘤分割任务,本文使用medical decathlon benchmarks的胰腺数据集,包含420个CT扫描,划分为训练集和测试集。先使用训练集的数据进行自监督任务的训练,再对目标任务进行微调,结果如下图所示。

Diabetic Retinopathy Results

作者还在糖尿病视网膜病变2019年Kaggle挑战赛的2D数据集上进行训练,该数据集包含5590张2D眼底图像,将2D自监督任务与2D baseline对比,结果如上图所示。

分析与总结

本文将常见的自监督方法扩展到3D,应用于医疗影像分析,可以作为后续3D医疗影像自监督学习/预训练模型研究的baseline,从结果来看自监督学习可以有效地利用大量的无标注数据,尤其是在标注样本很少的情况下会有很好的performance。
但从方法角度看,本文只是将已有的2D自然图像上的自监督学习的任务进行一个简单的扩展,没有根据医学图像和目标任务的特点进行设计,并不是每个自监督任务都能学习到有用的特征表达,甚至有的自监督任务预训练后会降低性能。
从实验设计上看,在Brats2018上引入了相当多额外的数据用于预训练,但结果相较于SOTA提升并不多,如果有只使用Brats2018的training set进行预训练的实验结果会怎样?对于一个预训练模型,数据量和自监督方法对效果的影响仍有待研究。

参考文献

[1] Representation Learning with Contrastive Predictive Coding (ECCV2020)
Link: https://arxiv.org/pdf/1807.03748.pdf
Code: https://github.com/jefflai108/Contrastive-Predictive-Coding-PyTorch

在医学图像分析领域,自监督学习(Self-supervised Learning)已经成为一种重要的方法,用于减少对大量人工标注数据的依赖。与传统的监督学习不同,自监督学习通过设计预训练任务从无标签数据中提取有用的信息,从而提升模型在下游任务中的性能。 ### 医学图像中的自监督学习应用 1. **预训练任务的设计** 在医学图像中,常见的自监督任务包括图像重建、旋转预测、拼图任务和对比学习等。例如,研究人员可以将医学图像分割成多个小块,并随机排列这些块,然后训练模型重新排列它们以恢复原始图像[^3]。这种策略能够帮助模型学习到医学图像的空间结构信息。 2. **对比学习(Contrastive Learning)** 对比学习是一种流行的自监督学习方法,在医学图像处理中被广泛应用。通过最大化同一图像经过不同增强后的特征相似性,同时最小化不同图像之间的相似性,模型能够学习到具有判别性的特征表示。这种方法已被用于乳腺癌检测、肺部CT图像分类等任务中[^4]。 3. **生成模型的应用** 自编码器(Autoencoder)、变分自编码器(VAE)以及生成对抗网络(GAN)等生成模型也被用于医学图像的自监督学习。例如,使用自编码器进行图像去噪或重建,可以帮助模型学习到医学图像的低维潜在表示,进而用于图像分割或分类任务。 4. **迁移学习与微调** 通过在大规模无标签医学图像上进行自监督预训练后,模型可以在少量标注数据上进行微调,从而显著提高诊断准确率。这种方法已经在皮肤病变分类、脑部MRI分析等任务中取得了良好效果[^5]。 ### 示例代码:基于PyTorch的简单对比学习框架 以下是一个简化的对比学习示例,适用于医学图像任务: ```python import torch import torch.nn as nn import torchvision.models as models class ContrastiveModel(nn.Module): def __init__(self, backbone='resnet18'): super(ContrastiveModel, self).__init__() self.encoder = models.resnet18(pretrained=False) self.encoder = nn.Sequential(*list(self.encoder.children())[:-1]) # Remove classification layer self.projector = nn.Sequential( nn.Linear(512, 256), nn.ReLU(), nn.Linear(256, 128) ) def forward(self, x1, x2): z1 = self.projector(self.encoder(x1).squeeze()) z2 = self.projector(self.encoder(x2).squeeze()) return z1, z2 # SimCLR-style contrastive loss class NTXentLoss(nn.Module): def __init__(self, temperature=0.5): super(NTXentLoss, self).__init__() self.temperature = temperature self.criterion = nn.CrossEntropyLoss() def forward(self, z_i, z_j): batch_size = z_i.size(0) representations = torch.cat([z_i, z_j], dim=0) similarity_matrix = F.cosine_similarity(representations.unsqueeze(1), representations.unsqueeze(0), dim=2) sim_ij = torch.diag(similarity_matrix, batch_size) sim_ji = torch.diag(similarity_matrix, -batch_size) positives = torch.cat([sim_ij, sim_ji], dim=0) nominator = torch.exp(positives / self.temperature) denominator = torch.sum(torch.exp(similarity_matrix / self.temperature), dim=1) - torch.exp(torch.diag(similarity_matrix)/self.temperature) loss = -torch.log(nominator / denominator).mean() return loss ``` 该代码展示了如何构建一个简单的对比学习模型及其损失函数,适用于医学图像的特征学习任务。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值