本文转载自:Deep Learning Engine
论文导读
“ 预训练模型能够加速任务模型收敛速度和提升模型性能。自然场景图像有ImageNet预训练模型,但此类数据和医学图像差异较大。因此腾讯提出了一个基于70万X光数据进行训练的模型,以作为该领域的预训练模型。模型及训练代码已开源!”
论文地址:
https://arxiv.org/abs/2007.07423
代码地址:
https://github.com/funnyzhou/C2L_MICCAI2020
比较学习
超越ImageNet 预训练
摘 要
Abstract
本期分享一篇MICCAI2020的一篇关于医学图像的预训练模型论文《Comparing to Learn: Surpassing ImageNet Pretraining on Radiographs by Comparing Image Representations》。在深度学习领域,预训练模型有着举足轻重的地位,特别是以自然场景数据为代表的ImageNet预训练模型是大多任务模型初始化参数的不二选择。对于医学图像来说,其和自然场景数据差异大。医学任务模型用ImageNet预训练模型就不太合适。因此,作者提出了一种新型的预训练方法(C2L),利用该方法在70万X光无标注数据上进行训练。利用预训练模型在不同的任务和数据集上均取得了优于ImageNet预训练模型更好的SOTA结果。
01
—
Introduction
ImageNet预训练模型通过迁移学习应用到2D医学图像分析中已被证实是有效的。大量的实验证明,预训练模型与从头开始训练相比,模型能够快速收敛并且能获得更好的准确率。这样的结果主要归因于两个因素:高效的深度神经网络算法以及从大量自然场景图像中学得的通用特征表达。但显而易见的问题是医学图像和自然场景图像是具有显著差异的。那么能否通过某种方法训练一个基于医学数据的预训练模型?
众所周知,医学数据需要该领域专业医师进行标注。这类高质量,多数量的标注数据能够直接提升模型的性能。但医学数据往往因为涉及病人隐私等原因而受到管控和限制,无法获取到大量的带医生诊断结论的数据。那么,开发一种不带标注数据的方法在医学领域就显得尤为重要。一些利用未标注数据进行自监督学习的模型也取得了不错的性能表现,但还无法超过在ImageNet上进行预训练的模型。
通过上述分析,作者提出了一种全新的自监督预训练方法C2L(Compare to Learn)。此方法旨在利用大量的未标注的X光图像预训练一个2D深度学习模型,使得模型能够在有监督信息的条件下,通过对比不同图像特征的差异,提取通用的图像表达。与利用图像修复等代理任务方法不同的是,作者提出的方法是一种自定义特征表达相似性度量。文中重点关注图像特征级别的对比,通过混合每个批次的图像和特征,提出了结构同质性和异质性的数据配对方法。设计了一种基于动量的“老师-学生”(teacher-student architecture)对比学习网络结构。“老师”网络和“学生”网络共享同一个网络结构,但是更新方式不同,其伪代码如下。
02
—
Proposed Method
Batch Mixup and Feature Mixup:每一个批次的输入图像数据,首先进行随机数据增强(如随机裁剪,旋转等),生成两组数据。与传统的图像级混合方法不同,作者提出了一种基于批次级的混合方法。假设每个批次包含Z张图像,其中。随机打乱,构造配对数据。
其中,~ Beta(1.0,1.0)分布。通过实验发现,对两组数据使用相同的混合因子和数据打乱方法对模型的性能有提升效果。作者对特征的表达也使用了相同的数据混合策略。
其中指数因子控制着动量的程度。如伪代码及流程图所示,"教师"网络同时利用自身和"学生"网络进行更新。而在实际中,作者输入和到"学生"模型,输入和到"教师"模型。分别使用和表示"学生"网络和"老师"网络的输出特征向量。
Homogeneous and Heterogeneous Pairs:为了构造同质数据对,作者假设数据增强(包括文中用到的mixing operation混合操作)只会略微改变训练数据的分布。那么每个同质性配对的数据包含的是经过一些列同样的数据增强,批次数据混合以及特征混合的数据。对于同质数据对,只需要将当前特征和所有的已经存储的队列中特征进行对比。
Feature Comparison, Memory Q and Loss Function:如伪代码如所示,C2L模型优化最小化同质数据对之间的距离,最大化异质数据之间的距离。
解读上述公式,作者首先通过设计两组不同数据增强后的数据(
),分别对应"学生"和"老师"两个模型。对于学生模型,只进行batch mixup,也就是将一个批次内的数据进行混合,输出两个特征向量
和
,分别对应混合前和混合后数据特征;对于"老师"模型,多加了一个Feature mixup,也就是在输出的特征向量处进行了再次的混合操作。在损失函数的设计上,利用交叉熵损失函数,进行优化(伪代码中已写得非常清楚)。在训练的过程中,会有一个记忆队列Q,保存特征向量以进行迭代优化。
消融实验发现,本文提出的混合方法相比与原始的混合方法有约1.6%的性能提升。使用文中定义的数据增强策略能够提升数据的多样性,增加网络提取不同X光数据特征的能力。
使用C2L模型,在后续任务上进行模型的微调
与预训练模型Model Genesis以及在ImageNet和MoCo数据集上进行预训练的模型相比,使用ResNet-18和DenseNet-121网络结构在C2L预训练模型的基础上做Fine-tune,性能提升显著。后续的实验均验证了C2L预训练模型的优越性,也从侧面证明了预训练模型对性能提升的帮助。
03
—
DATASETS & Results
预训练:ImageNet 预训练使用了约一百万带标注的数据。本文作者使用了
ChestXray14,MIMIC-CXR,CheXpert和MURA四种不带标签的约70万数据进行无监督预训练。只用了ChestX-ray14 进行消融实验以选择合适的超参数。
实现细节以及消融实验:由于已开源,这里就不展开细说。
首先看看Mix方法做的实验结果,发现Batch mixing 和Feature mixing提升明显。
对比数据增强策略和记忆队列Q保存特征长度对性能的影响。
ChestX-ray14数据集上性能的对比。C2L模型性能提升显著。
CheXpert数据集中,预训练模型及MG等性能的对比,C2L约有1%的提升。
Kaggl肺炎数据集不同阈值下mAP,C2L也有不错的表现。
04
—
Conclusion
作者提出了一种自监督学习方法C2L,利用次方法从无标签医学数据中提取这类数据的特征表达。这种方法通过利用数据间的相关性作为监督信息而无需额外人工标注数据。
05
—
结语
作者从问题的发现,Idea的提出以及后续的实验验证。笔者作以下几点个人的思考和总结:
1、预训练模型对任务模型进行参数初始化,再进行Fine-tune是可以在一定程度上提升模型性能以及加快模型收敛速度的;2、预训练模型数据与任务模型数据的相关性影响性能。即如果任务模型数据和预训练数据强相关,那么性能的提升和训练收敛速度的提速都较明显;而如果数据差异较大,可能对任务模型有帮助,但帮助不会太大;3、作者提出的方法从数据相关性构造监督信息,然后对无标签数据进行训练以达到预训练模型的效果。此方法可以在实际工作中,结合任务需求及数据集大小,参照该方法训练自己的预训练模型;4、开源70万量级的X光预训练模型和训练代码是真的香;5、数据决定了算法模型的上限!深入挖掘数据,也许可以进一步找到提升天花板高度的梯子!