A Simple-yet-Effective Volume Contrastive Learning Framework for 3D Medical Image Analysis
一个简单而有效的三维医学图像分析体积对比学习框架
是通过自监督学习搭建的学习框架
自监督学习是无监督学习下的一个分支;
它通过从未标注的数据中生成伪标签来进行训练。自监督学习利用数据的内在结构或属性来创建训练任务,从而在没有人工标注的情况下进行学习。自监督学习常用于预训练模型,然后将预训练的模型迁移到有标注的数据上进行微调(finetune)。
自监督学习的监督信息不是人工标注的,而是是通过辅助任务(pretext)在大规模无监督数据中自动构造监督信息,通过得到的标签,就可以类似有监督学习一样进行训练。
VoCo的辅助任务(pretext):首先从不同区域的一组基本作物,同时强制它们之间的特征差异,我们将它们用作不同区域的类分配。然后,我们随机裁剪子体积,并通过对比它们与不同基本作物的相似性来预测它们属于哪个类(位于哪个区域),这可以看作是预测不同子体积的上下文位置。
具体流程:
1.首先定义一个Pretext task (辅助任务),即从无监督的数据中,通过巧妙地设计自动构造出有监督(伪标签)数据,学习得到一个预训练模型。
通过10k dataset 训练得到 预训练模型 VoCo_10k.pt.
2.然后可以将预训练模型,通过简单的Finetune,应用到下游的多个应用场景,以分割任务为例:BTCV(腹部)、MM-WHS(全心)。
-
加载预训练模型:
- 使用预训练模型的权重初始化下游任务的模型(SwinUNETR)。
- 在
main.py
中,通过args.pretrained_checkpoint
加载预训练模型VoCo_10k.pt
。将预训练模型VoCo_10k.pt中的预训练权重,加载到SwinUNETR模型中.
-
定义下游任务的模型结构:
- 使用SwinUNETR模型进行分割任务。加载预训练权重后,定义模型的结构。
- 在
main.py
中,定义了SwinUNETR模型,并加载预训练权重。
-
设置优化器和损失函数:
- 定义优化器(如AdamW)和损失函数(如DiceCELoss)。
- 在
main.py
中,设置了优化器和损失函数。
-
进行训练和验证:
- 使用训练数据进行模型训练,并在验证数据上进行评估。
- 在
trainer.py
中,定义了训练和验证的具体过程。
对于不同部位分隔的调整:
pre - processing (scale intensity,spacing) can be different.
Now we set scale intensity[-175, 250] for abdomen and head neck [0,1700] for heart [-500,1000] for chest. for spacing and size it should be depended by specific datadet