赞
踩
对于医学领域相关深度学习模型的发展,与其他领域相比,存在以下困难:
本文关注于三篇连接文本和图像的对比学习模型,从而打造可迁移的视觉模型,在下游微调任务及零样本分类任务上应用表现良好。
简单来说,三者的关系如下:
下面会对这三篇文章进行分析,从模型设计,数据集及训练,应用及表现三个方向上进行介绍。
参考资料,侵权必删:
作者提出了一种无监督的方法ConVIRT,用于从自然配对的图像和文本中学习医学视觉表示。其方法依赖于通过两种模态之间的双向目标,将图像表示与配对的文本表示进行对比。ConVIRT在4个医学图像分类任务和2个图像检索任务上的性能优于其他方法,并且得到了更高质量的表示。与有监督的ImageNet预训练模型相比,ConVIRT能够在标记数据少一个数量级的情况下达到相同水平的分类精度。
作者进行了分类任务和Zero-shot任务的测试。
作者了四个下游分类任务场景,并使用不同比例(1%,10%,all)的任务数据集对模型进行调整(两种方式: linear probe只训练最后的分类层,fine-tuning)。
从上到下依次是:
像CLIP一样,多模态最强的还是Zero-shot,不需要微调,通过图片的提示进行分类. 作者测试了两种Zero-shot任务.
CLIP的英文全称是Contrastive Language-Image Pre-training,即一种基于对比文本-图像对的预训练方法或者模型。CLIP是一种基于对比学习的多模态模型,与CV中的一些对比学习方法如moco和simclr不同的是,CLIP的训练数据是文本-图像对:一张图像和它对应的文本描述,这里希望通过对比学习,模型能够学习到文本-图像对的匹配关系。为了训练这个模型,OpenAI采集了超过4亿的图像-文本对。CLIP在诸多多模态任务上取得了非常好的效果,例如图像检索,地理定位,视频动作识别等等,而且在很多任务上仅仅通过无监督学习就可以得到和主流的有监督算法接近的效果。CLIP的思想非常简单,但它仅仅通过如此简单的算法也达到了非常好的效果,这也证明了多模态模型强大的发展潜力。
CLIP的核心思想是将图像和文本映射到同一个特征空间。这个特征空间是一个抽象的概念,例如当我们看到一条狗的图片的时候,我们心中想的是狗,当我们读到狗的时候我们想的也是狗,那么我们心中想象的狗,便是“特征空间”。
所以CLIP也是由两个编码器组成,如图所示:
# image_encoder - 残差网络 或者 ViT # text_encoder - CBOW 或者 文本Transformer # I[n, h, w, c] - 训练图像 # T[n, l] - 训练文本 # W_i[d_i, d_e] - 训练图像生成的特征向量 # W_t[d_t, d_e] - 训练文本生成的特征向量 # t - softmax的温度(temperature)参数 # 提取多模态的特征 I_f = image_encoder(I) #[n, d_i] T_f = text_encoder(T) #[n, d_t] # 多模态特征向特征空间的映射 I_e = l2_normalize(np.dot(I_f, W_i), axis=1) T_e = l2_normalize(np.dot(T_f, W_t), axis=1) # 计算余弦相似度 logits = np.dot(I_e, T_e.T) * np.exp(t) # 构建损失函数 labels = np.arange(n) loss_i = cross_entropy_loss(logits, labels, axis=0) loss_t = cross_entropy_loss(logits, labels, axis=1) loss = (loss_i + loss_t)/2
下面将ConVIRT和CLIP做一个比较,从模型上来看CLIP是ConVIRT的简化版(参考鱼子酱):
对比开放的计算机视觉应用,目前的所有的视觉公开数据集(例如ImageNet等)的应用场景都是非常有限的,为了学习到通用的图像-文本多模态通用特征,我们首先要做的便是采集足够覆盖开放计算机视觉领域的数据集。这里OpenAI采集了一个总量超过4亿图像-文本对的数据集WIT(WebImage Text)。为了尽可能的提高数据集在不同场景下的覆盖度,WIT的首先使用在英文维基百科中出现了超过100次的单词构建了50万个查询,并且使用WordNet进行了近义词的替换。为了实现数据集的平衡,每个查询最多取2万个查询结果。
CLIP的图像编码器选择了5个不同尺寸的残差网络以及3个不同尺寸的ViT,并对模型细节做了调整,具体介绍如下。
残差网络
CLIP采用了ResNet-50作为基础模型,并在其基础上做了若干个调整。主要调整如下:
CLIP采用的Transformer共有5组,它们依次是ResNet-50,ResNet-100以及按照EfficientNet的思想对ResNet-50分别作4倍,16倍和64倍的缩放得到的模型,表示为ResNet-50x4,ResNet-50x16,ResNet-50x64。
Vision Transformer
CLIP的图像编码器的另一个选择是ViT,这里的改进主要有两点:
CLIP的文本编码器使用的是Transformer,它共有12层,512的隐层节点数以及8个头。
与CV中常用的先预训练然后微调不同,CLIP可以直接实现zero-shot的图像分类,即不需要任何训练数据,就能在某个具体下游任务上实现分类,这也是CLIP亮点和强大之处。用CLIP实现zero-shot分类很简单,如图所示:
步骤可以整理成下面这样:
这里我们给出了一个基于CLIP的一个实例(参考官方notebook),这里任务共有6个类别:“dog”, “cat”, “bird”, “person”, “mushroom”, “cup”,首先我们创建文本描述,然后提取文本特征。然后我们读取要预测的图像,输入Image Encoder提取图像特征,并计算与文本特征的余弦相似度。预测过程的代码如下:
# 首先生成每个类别的文本描述 labels = ["dog", "cat", "bird", "person", "mushroom", "cup"] text_descriptions = [f"A photo of a {label}" for label in labels] text_tokens = clip.tokenize(text_descriptions).cuda() # 提取文本特征 with torch.no_grad(): text_features = model.encode_text(text_tokens).float() text_features /= text_features.norm(dim=-1, keepdim=True) # 读取图像 original_images = [] images = [] texts = [] for label in labels: image_file = os.path.join("images", label+".jpg") name = os.path.basename(image_file).split('.')[0] image = Image.open(image_file).convert("RGB") original_images.append(image) images.append(preprocess(image)) texts.append(name) image_input = torch.tensor(np.stack(images)).cuda() # 提取图像特征 with torch.no_grad(): image_features = model.encode_image(image_input).float() image_features /= image_features.norm(dim=-1, keepdim=True) # 计算余弦相似度(未缩放) similarity = text_features.cpu().numpy() @ image_features.cpu().numpy().T
相似度如下所示,可以看到对于要预测的6个图像,按照最大相似度,其均能匹配到正确的文本标签:
进一步地,我们也可以对得到的余弦相似度计算softmax,得到每个预测类别的概率值,注意这里要对相似度进行缩放:
logit_scale = np.exp(model.logit_scale.data.item())
text_probs = (logit_scale * image_features @ text_features.T).softmax(dim=-1)
top_probs, top_labels = text_probs.cpu().topk(5, dim=-1)
得到的预测概率如下所示,可以看到6个图像,CLIP模型均能够以绝对的置信度给出正确的分类结果:
prompt在这里起到的是“提示”作用.
那么为什么要去做prompt呢?作者给出了两个理由:1. Polysemy多义性;例如remote这个词,名词的时候是“遥控器”,形容词的时候是“遥远”;再例如ImageNet中的cranes(鹤) 和construction cranes(起重机),属于名词的歧义性 2.就是上面说的训练的时候用的句子,如果推理不做prompt,直接用单词,会出现distribution gap。
因此作者做了一个简单的prompt:将类别标签扩展为‘A photo of a {object}’这么一个句子,然后将这个句子和图片输入到预训练模型中去做配对,最终输出匹配度最高的标签。除了这种方法,还有其他很多prompt的方法,运用我们知道的一些先验知识去进行prompt。例如,我们对Oxford-IIIT Pets这样一种全都包含的动物的数据集来说,可以写成“A photo of a {label},a type pf pet”,这样可以大大提高分类的准确率。
简单来说,prompt learning的核心是通过构建合适prompt(提示)来使预训练模型能够直接应用到下游任务,这和之前的预训练+微调属于不同的范式。论文也说了,如果我们直接采用类别标签作为文本描述,那么很多文本就是一个单词,缺少具体的上下文,而且也和CLIP的训练数据不太一致,效果上会不如采用A photo of {label}(ImageNet数据集上可以提升1.3%)。论文也实验了采用80个不同的prompt来进行集成,发现在ImageNet数据集上能带来3.5%的提升,具体见CLIP公开的notebook。
首先是CLIP和17年的一篇工作Learning Visual N-Grams from Web Data的在3个分类数据集上zero-shot效果对比,如下表所示,可以看到CLIP模型在效果上远远超过之前的模型,其中在ImageNet数据集可以达到76.2,这和全监督的ResNet50效果相当,不用任何训练数据就能达到这个效果是相当惊艳的。
更进一步地,论文还对比了zero-shot CLIP和ResNet50 linear probing(ImageNet数据上预训练,在加上线性分类层进行finetune)在27个数据集上表现,如下图所示,其中在16个数据集上CLIP可以超过ResNet50。但是在一些特别的,复杂的或者抽象的数据集上CLIP表现较差,比如卫星图像分类,淋巴结转移检测,在合成场景中计数等,CLIP的效果不如全监督的ResNet50,这说明CLIP并不是万能的,还是有改进的空间。如果认真看下图的话,CLIP表现较差的竟然还有MNIST数据集,分类准确度只有88%,这是不可思议的,因为这个任务太简单了,通过对CLIP训练数据进行分析,作者发现4亿的训练数据中基本上没有和MNIST比较相似的数据,所以这对CLIP来说就属于域外数据了,表现较差就比较容易理解了。这也表明:CLIP依然无法解决域外泛化这个深度学习难题。
作者认为对于上述那些难得数据集,Few-shot会比Zero-shot的衡量更合理, 即只用少量的样本来微调模型;因此作者就做了Few-shot的实验(横坐标代表每个类里面用了几个训练样本). 横坐标是指在每个类别中选出了几个训练样本,纵坐标就是模型的准确率了(在20个数据集上的平均结果,因为有7个数据集中有些训练样本不足16个);
这里对比了3个模型:在ImageNet21K上训练的BiT-M ResNet-152x2,基于SimCLRv2训练的ResNet50,以及有监督训练的ResNet50。可以看到CLIP的zero-shot和最好的模型(BiT-M)在16-shot下的性能相当,而CLIP在16-shot下效果有进一步的提升。另外一个比较有意思的结果是:虽然CLIP在few-shot实验中随着样本量增加性能有提升,但是1-shot和2-shot性能比zero-shot还差,这个作者认为主要是CLIP的训练和常规的有监督训练存在一定的差异造成的。
除此之外,论文还进行了表征学习(representation Learning)实验,即自监督学习中常用的linear probe:用训练好的模型先提取特征,然后用一个线性分类器来有监督训练。下图为不同模型在27个数据集上的average linear probe score对比,可以看到CLIP模型在性能上超过其它模型,而且计算更高效:
在研究中首先对收集的 OpenPath 数据集进行了完整的描述,并提出了 PLIP(病理语言-图像预训练)模型,该模型通过对比学习对来自OpenPath的成对图像和文本进行训练。接下来,作者团队对提出的模型进行了全面评估,主要评估其通过零样本学习适应新文本的能力。此外,PLIP可以作为一种通用的图像编码器来捕获更好的病理图像表示,从而可以通过线性探测来训练和分类新数据集,进而提高不同组织类型和学习任务的性能。这种通用图像编码器对于注释数据有限的临床任务特别有帮助。最后,PLIP 为病理图像提供了灵活的搜索引擎,可以作为临床医生和病理学实习生的强大教育和信息共享工具。
与其他仅在分类标签上训练的监督学习和分割病理模型不同,自然语言文本丰富了语义和相关知识,这可以进一步增强对图像的理解,并促进多种下游应用。在这项研究中,作者团队在OpenPath上使用对比学习对预训练的对比语言-图像预训练(CLIP)模型进行了微调。为了完成对比学习,本研究集成了病理图像预处理流程,包括图像降采样,随机裁剪和数据增强(方法)。在之后的训练阶段,PLIP模型从文本和图像编码器中生成两个嵌入向量,然后通过对比学习优化这些向量,使其对每个配对的图像和文本向量相似,对非配对的图像和文本不相似。
建立的 PLIP 模型,其架构与CLIP描述的架构相同。该架构基于视觉变压器作为图像编码器(ViT-B/32,可以接收大小 = 224 × 224 像素的输入图像)和文本变压器作为文本编码器(最大序列长度 = 76 tokens) . 图像最初调整为最大尺寸 512 像素;然后,它们在输入图像编码器之前被随机裁剪为 224 × 224 像素。图像和文本编码器都输出 512 维向量,并通过最小化给定批次的对比损失进行优化。对比学习在成对的图像和文本中施加了更高的余弦相似度,迫使模型学习图像和文本之间的正确关系。
美国和加拿大病理学会和病理学主题标签本体项目推荐了32 个 Twitter 病理学亚专业的特定主题标签。作者团队使用这 32 个标签来检索从2006年3月21日(第一个Twitter帖子的日期)到2022年11月15日的相关推文,以建立迄今为止最大的公共病理学数据集,其中每个图像都有自然语言描述。
在检索数据时,作者遵循了Twitter和其他实体的使用政策和指南。为了确保数据质量,OpenPath遵循严格的队列纳入和排除协议,包括删除转发、敏感推文和非病理图像,以及额外的文本清理。最终的 OpenPath 数据集包括:(1)推文:来自 Twitter 帖子(推文)的 116,504 个图像-文本对,跨 32 个病理学亚专业的特定主题标签;(2) 回复:59,869对图片-文本对,这些图片-文本对来自推文中获得最多赞的相关回复,如果适用的话;(3) PathLAION:从互联网和 LAION 数据集中抓取的 32,041 个附加图像-文本对。OpenPath中的标题使用了17个单词的中位数来描述相应图像中的医疗状况。
在本研究中,作者团队对PLIP 的零样本能力进行了系统评估,该能力能够在不需要再培训的情况下大规模学习新课程。评估是在四个外部验证数据集上进行的:(1) 9种不同组织类型的Kather结肠数据集;(2) PanNuke数据集(良性和恶性);(3) DigestPath数据集 (良性和恶性);(4) WSSS4LUAD 数据集(肿瘤和正常)。对数据集的评估通过将标签转换为句子(例如,将“肿瘤”转换为“肿瘤的 H&E 图像”)来进行。作为自然比较,作者团队还将 PLIP 与原始 CLIP 模型进行了比较。
比较结果通过评估加权 F1 分数(考虑类别不平衡时精确度和召回率的综合衡量标准)考量,而通过作者方面的分析表明,PLIP 始终优于基线 CLIP 模型以及预测多数类别(或多数)的结果。例如,PLIP 在 Kather 结肠数据集(九个类别)上实现了 F1 = 0.565(95% 置信区间 (CI) = 0.559–0.572)。在 PanNuke 数据集(良性与恶性)中,PLIP 达到 F1 = 0.656(95% CI = 0.639–0.667)。在 DigestPath 数据集中(良性与恶性),PLIP 达到 F1 = 0.832 (95% CI = 0.829–0.834)。在 WSSS4LUAD(肿瘤与正常)中,PLIP 达到 F1 = 0.734(95% CI = 0.723–0.745)。
因此可以说,本研究证明了,在预测大多数类别时,PLIP的所有这些性能都大大高于CLIP。研究还计算了Matthews相关系数(MCC),结果表明 PLIP 是所有数据集中的最佳模型。
为了更深入地了解 PLIP 图像编码器的功能,作者团队使用了四个不同的测试数据集(Kather colon、PanNuke、DigestPath和WSSS4LUAD)来评估图像表示的能力。首先用PLIP图像编码器计算图像嵌入,然后通过均匀流形近似和投影进行降维。在没有对这些数据集进行训练的情况下,作者团队发现 PLIP 仍然可以有效地区分 Kather 结肠数据集中的各种组织亚型。与其他基线模型的性能相比(例如扩展数据中的 CLIP 模型),PLIP 有效区分了正常结肠粘膜 (NORM) 和结直肠腺癌上皮 (TUM),尽管两者具有相似的形态和纹理模式,而且无法被其他基线模型所区分识别。
在PanNuke数据集中,PLIP揭示了有趣的器官特异性分离,特别突出了乳房和结肠亚群。事实上,结肠集合形成了两个相对干净的亚簇,其中一个富集了恶性组织图像。此外,PLIP模型分别从DigestPath和WSSS4LUAD数据集中分离了正常、良性、肿瘤和恶性图像斑块。对于DigestPath,我们也注意到不同图像下采样率和染色变化之间的明显分离。
受这些发现的鼓舞,作者团队再次提出假设——假设PLIP 图像编码器可以作为多种病理图像分类任务的首选预训练主干。为此,他们在四个不同数据集(Kather colon、PanNuke、DigestPath 和 WSSS4LUAD)的训练分割的图像嵌入向量之上训练了一个简单的线性分类器,并将四个数据集的测试分割与两个基线模型(原始CLIP模型的图像编码器和深度神经网络的多任务预训练(MuDiPath))的分类性能进行了比较。
结果表明,与仅使用分类标签训练的传统深度学习模型相比,PLIP 可以实现相当或更高的性能。这可能是由于文本注释的丰富内容,这可能使模型能够利用更高级别的语义视觉语言关系,并提供对图像更全面的理解,包括视觉和亚视觉细胞间模式。
为了进一步了解 PLIP 的优势,作者团队通过在四个外部验证数据集上进行微调,将 PLIP 与端到端深度学习模型 ViT-B/32 进行了比较。ViT-B/32 是一种最先进的模型,具有与 PLIP 图像编码器相同的架构,因此有助于直接比较 PLIP 对比学习的优势。他们通过使用不同比例的训练数据(1%、5%、10%、50%和100%)来评估数据效率方面的微调性能。从图中可以看出,PLIP具有更好的性能;并且,当训练集规模较小时,相对于端到端监督学习的改进尤其明显。
与零样本学习类似,零样本学习可以从给定图像的候选池中识别最接近的文本。而图像检索是一种可以从给定文本或图像的候选池中识别最接近的图像的技术。这是通过直接计算同一嵌入空间下每对图像-文本或图像-图像的余弦相似度来完成的。
在评估检索性能方面,作者团队使用了 Twitter 验证数据集上的 Recall@10 和 Recall@50 指标来评估图像检索性能。评估过程中,研究者发现,找到与给定文本相关的确切图像十分具有挑战性,因为可能会出现许多相似的图像只与一个描述相匹配的情况。尽管如此,PLIP的图像检索性能相较CLIP来说还是提高了不少,比如Recall@10 = 0.271(比CLIP高4.5倍),Recall@50 = 0.527(比CLIP高4.1倍)。这表明,在前50张图像中检索目标图像,有52.7%的机会检索成功,因此这是一项具有挑战性但可以实现的任务。
此外,与基线CLIP和不同数据集的随机性能相比,PLIP表现出了显著的性能改善。PLIP 在 Twitter 验证数据集上展示了相对于基线方法的最大优势(与随机检索相比,Recall@10 和 Recall@50 的倍数变化 = 55.3 和 21.4)。
最后,文本到图像和图像到图像检索系统可以充当图像搜索引擎,使用户能够匹配多个查询中的图像,并根据句子描述或输入图像检索最相关的图像。这个通用系统可以理解语义和相关知识,例如“被脂肪包围的乳腺肿瘤”。此功能为探索和检索大型病理数据集提供了强大的工具,使用户能够高效、准确地识别满足特定标准的相关图像。此外,图像到图像检索可用于检索与目标图像输入相似的相关病理图像,例如包含有丝分裂图的图像,这证明了其从输入图像理解关键概念的能力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。