Learning Vision from Models Rivals Learning Vision from Data
论文:https://arxiv.org/abs/2312.17742
TL; DR:只使用机造数据进行训练达到了与真实数据训练相当的效果。本文提出了 SynCLR。首先使用 LLM 来根据视觉概念词生成图像描述,再用文生图模型来生成来根据每个图像描述生成多张图像,这样就构造出了纯机造合成的数据集。然后在该数据集上,将同一个描述生成的图像视作正样本对,进行对比学习训练。模型性能与全部用真实数据的模型相当。
导言
在现如今的通用大模型时代,大规模且高质量的数据无疑是决定模型性能的关键。尤其是随着半监督/自监督学习的兴起,数据的规模动辄上亿。人工标注监督数据的方式已不可行,往往需要从网络上爬取一些弱监督数据(如图像文本对 -> CLIP),或者构建一些自监督任务(如实例判别 -> SimCLR、MoCo)。而网络数据的质量或自监督任务的粒度又会限制模型的性能。如何组织高质量且带有合理粒度监督信号的数据称为一个关键问题。
近两年,语言生成大模型(LLMs)和视觉生成模型(DIffusion Models)发展迅速。在图文领域生成式模型的高质量生成结果,使得机造数据称为一种可行的方案。本文提出了一种使用生成式模型机造数据,并进行训练的方法,称为 SynCLR。相比于以前的“从数据中学习”(learning from data)的范式,作者称这为“从模型中学习”(learning from models)。
使用模型机造数据的这种方式有一个很大的优势:我们可以通过控制隐变量、生成条件或者超参数,来控制生成出的数据。“生成条件”就是一种天然的监督信号。并且其监督粒度也可以随我们设置。
下图对比了自监督(SimCLR)、有监督和本文方法(SynCLR)监督信号粒度的对比。自监督方法认为每一张图片一个单独的类别,监督信号要求每一张图片的特征都要分开。这没有考虑到图中主体语义(狗)是相同的,监督粒度过于细。传统的有监督方法认为只要主体是狗的图片,都是同一类。这没有考虑到图像的其他细节、背景的语义会有很大的不同,监督粒度太粗。而本文方法是以一段自然语言的 “图像描述” 作为分类的依据,这样既保证了同一类内图片内容语义,又不会把类别分的太细,监督信号的粒度最合适。
方法
数据构造
本方法的目标是在不使用任何真实图像和文本数据的条件下,构造一个机造合成数据集,并使用图片描述作为分类别的监督信号,来训练一个图像编码器。本方法数据构造的过程中要用到三个关键资源:一个大语言模型 g 1 g_1 g1、一个文生图模型 g 2 g_2 g2、一个视觉概念列表 C C C。
整个方法的数据构造和训练共三个步骤:
- 使用 g 1 g_1 g1 来生成一组图像描述 T T T。它涵盖了 C C C 中全部的视觉概念
- 对于 T T T 中的每个图像描述,使用 g 2 g_2 g2 生成多个多张图片。从而得到一个合成图像数据集 X X X
- 在 X X X 上进行训练出一个视觉编码器 f f f
具体来说,本文使用的 g 1 g_1 g1 是 LLaMa 2 7B, g 2 g_2 g2 是 SD1.5。关于使用大语言模型,根据视觉概念词生成出图片描述的构造方式、prompt 等具体细节这里不再赘述,可参考原文。
下图是不同的图像描述生成的多张图像示例。
视觉表征学习
数据构造完成后,我们要以图片描述为粒度来进行视觉表征对比学习训练。训练的方法与 StableRep 类似。这里的一个关键点是我们的每个图片描述对应了多张生成图像,在训练时,他们彼此之间都是正样本。也就是说,我们这里的损失是一个多正例的对比学习损失。
其他的,还用到了很多对比学习表征训练的技巧:
- 掩码图像建模:预测掩码掉的图像块,来自 iBOT;
- Sinkhorn-Knopp 算法:替换掉 softmax-centering 方法,来自 DINO-ENT;
- EMA:动量更新编码器,来自 MoCo;
- Multi-crop:结合局部特征和全局特征,来自 SwAV;
- Projection-head:多接一个映射头,很多对比表征学习方法都用了,最早来自 SimCLR。
其他具体的视觉概念词、超参等设置参考原文。
实验
原文的消融和对比实验很详实,有兴趣可以去看。这里看一个最主要的结果,SynCLR 与其他方法在分类任务上的对比。可以看到,SynCLR 在平均结果上达到最高,但在 ImageNet 上比 DINO-V2 还是稍差一些。要注意,SynCLR 是完全没有用任何真实数据的。
总结
笔者最近一直在思考多模态的数据飞轮。图生文/文生图模型可以生成原始数据(可以加一些互联网真实数据),而 CLIP 又能过滤低质数据(可以加一些人工标注),高质量的数据又反过来可以用来训练图生文/文生图/CLIP模型,如此往复迭代,是否能实现数据质量和模型性能的共同提升呢?
这篇文章在机造生成数据作出了一些探索。没有用任何真实数据,仅凭生成模型机造数据,就达到了视觉表征学习 SOTA 的性能。虽然最终训练的目标不是 CLIP 类的图文相关性模型,但是还是从机造数据训练模型的角度给了多模态数据飞轮的很多参考。很有意义。
回想对比 OpenAI CLIP 用的 WIT400M 数据集的构建可以分为 1.收集 metaword 和 2.根据 metaword 从网络上爬取相关图片两步。本文则是机造 caption 和机造图片两步,本来爬虫干的活改成模型来干。
在多模态汇总,模型生成数据+模型过滤数据,其中有无信息增益,这个过程能否反复迭代,飞轮能否转起来,还需要更多的研究。