导读: 当我们提到生成模型的时候,一般来说它的输出是一个 token-by-token 的过程,也可以说是一个 auto-regressive 的过程。而我们今天介绍的生成模型GIT是Image-to-Text,图像到文字的模型。这类模型也可以称为是Image Captioning 模型。GIT模型是基于Transformer结构,也就是基于self-attention 的机制进行图像处理并识别出文字。
--
(资料图片)
01
示例介绍
首先,我们先看几个例子来了解模型可以处理哪类图像并生成文字。
Example 1
例子1的左边为模型输入,右边为模型输出。从输出的这句话我们可以看到模型可以识别出左边的图片是一张卡通,同时可以识别出里面卡通人物的动作(在互相对话)。
Example 2
例子2是一张手机屏幕的上半部分的截屏。模型可以识别出照片内容并可生成一个完整的有正确的主谓宾的句子。从句子内容可看出,模型可以正确识别出屏幕上所显示的时间和下方的日期。这个例子表明GIT模型在具备将图像转成文字的同时还具备文字识别的功能。可能大家会有疑问,模型会不会需要借助OCR的系统?答案是,不会的。 GIT模型是可以直接从图像学到的文本输出。
Example 3
例子3是一张超市价签的图片,从右边识别出的文字可以看出,这个模型可以准确识别出图片是一个价钱和上面所显示的货币和价格 ($14.88)。
Example 4
有人可能会有疑问,模型既然不需要借助OCR系统就可以正确的识别出图片中的文字,是否是模型学习到图片周围的语义信息而得出文本,而并非具备OCR的能力?针对这个问题,我们进行了另一个实验。例子4是一张手动生成的图片。从识别结果可以看出,模型可以准确识别出当前图片的背景和上面不是很标准的两行文字。
Example 5
例子5是一个更具挑战的图片,图片上的句子是用艺术字显示的一段话。对于我们人来说说,在没有相关背景或对艺术字比较熟悉的情况下,想要快速准确读出上面的文字也是有一定难度的。从模型的输出可以看出,模型可以将大部分文字识别正确,除了在一个单词‘Markov’中模型将字母k错误的识别成了l。
看完上面几个例子,我们可以得出这样一个 结论,GIT模型具备了描述图片内容并且以人类可理解的语言表述出来的能力,同时还具备了文字识别OCR的功能。
Example 6
我们看最后一个例子,例子6中的文字并不是规矩的从左到右,而是围绕在硬币的边缘。而从右边的识别结果可以看出,模型成功正确识别图片中的语义。看到这,有人可能会有疑问,在图片输入之前,我们是否进行了图像矫正,将文字变成从左到右的规矩排列呢?答案是否定的,这个模型的输入就是当前我们所看到这张图片的样子。由此可以得出 结论,GIT模型不仅可以识别规矩的文字,也同时具备了识别不规矩文字的能力。
--
02
GIT模型结构介绍
上图为模型的整体架构图。 此模型可以解决图片转文本的任务,而对于其他任务,比如检索等问题,并不是此模型处理的重点。
模型的输入是图片,输出是文本。 图片在进入模型后,首先会经过Image Encoder层,将图片进行编码处理,根据encoder中使用的不同算法,输出的结果也会不同。比如,如果使用CNN进行图像Encoding,我们会得到N*M的 feature representation,因为图片有不同的channel,CNN会合并这些channel,将结果输出为一列。如果使用Transformer结构进行Encoding,输出的就会是多个Tokens。因为模型的输出为文本,所以Image Encoder后面会接Text Decoder。从网络结构来看,此模型是由两大部分组成,分别为:Image Encoder和Text Decoder。因为我们希望模型结构尽可能简单,从模型效果来看,这种网络结构是能达到预期效果的最简化的模型结构。
Text Decoder使用的是Self-Attention的标准结构 。另一种可使用的网络结构是Cross Entropy。图片经过Image Encoder之后,他的输出和文本进行Cross Entropy的计算。在使用交叉熵的结构下,我们发现——在数据量不多的情况下,模型的表现会比较不错,但是当数据量增多并且训练完全的情况下,交叉熵的表现可能会略逊于Self-Attention的结构。我们认为Self-Attention的模型机制可以抓取到更多数据特征。当然二者差别并没有很大,不排除可以通过使用各种训练技巧使交叉熵达到Self-Attention结构的表现。为了简单起见,我们这里就选择使用Self-Attention的结构作为Text Decoder。
在Image Encoder中,我们使用了Florence/CoSwin Encoder 。这个Encoder是一个预训练模型,是由一个contrastive task训练而来。此模型类似于CLIP模型,不过用到另一个contrastive loss。这个loss会考虑到,不同的图会被映射到相同的类别,这类False Positive的问题。总体来说,这个模型的Image Encoder使用了通过contrastive 来进行预训练的预训练模型。
Text Decoder的初始化是随机的 。据我们的观察,如果我们使用了比如Bert这类预训练模型,其结果并不会优于随机初始化。这类现象的原因可能是在多模态的任务下,模型对于图像的理解是十分的重要的,而预训练语言模型起到的作用并没有那么大,也就造成其结果与随机初始化并没有太大的区别。而随机初始化有另一个优点,我们可以更自由地去探索不同网络结构对模型效果的影响。实验中我们测试了不同的transformer block的个数,比如,6,12,24,36。结果发现在我们的任务中6层block是表现最好的,与在NLP任务中层数越多越好的结论是相反的。造成这一结果的原因,据我们分析是因为在多模态任务下,文本的长度往往是比较短的,所涉及到的词汇量远远少于一般NLP任务。因为这个原因,所以在多模态任务下,如果模型结构过于复杂,在模型训练中可能会造成模型训练困难,难以优化等问题。这也就是为什么在我们这个任务下,6层transformer block可以达到最优效果。
训练模型使用的任务是文本生成任务 ,即,当前token是由上一个token预测而来。训练时使用的loss是Cross Entropy Loss。
虽然GIT模型的初始任务是为了Image Captioning而设计的,但在实际使用中我们发现,经过简单的操作,这个 模型也可以运用在VQA和Video任务中 。在训练VQA模型中,输入的文本是Question&Answer对,而预测输出的结果是Answer。在Video任务中,我们发现模型在Video上的表现也达到预期, 具体做法是我们从video中抽取6个Frame,进行encoding。其中我们使用的temporal embedding 从0开始初始化。但是在实验过程中发现,temporal embedding在模型中起到的作用不大。因为当前研究发现,在对video进行处理时,模型可以从Frame中就学到特征信息,而并不需要再增加embedding机制。
结论 :模型训练中image encoder需要选取比较大的,训练数据用到的是0.8B pairs。
--
03
GIT与当前算法比较
Flamingo与GIT架构类似,区别是:Image Encoder,Vison Encoder和Text Decoder的参数是冻结的,通过加入其他机制, 如random initialized module,perceiver resampler,使得模型可以学到数据特征。
Coca同样由Image Encoder和Text Decoder组成,不过Text Decoder由两部分构成,分别为Unimodal Text Decoder和Multimodal Text Decoder会去分别计算Contrastive loss和Captioning Loss。
下图展示了我们的模型与Flamingo和Coca的表现对比:
从结果可以看出, 我们的模型要远远小于Falmingo和Coca模型 。在少量训练数据下,我们的模型在某些任务中可以达到优于其他两个模型的效果。另外,我们的模型与其他目标检测算法相比,训练数据并不需要特别的标注数据;与其他场景文本相关的算法相比,训练数据并不需要OCR文本。
1. 为什么GIT模型的效果会这么好?
上图显示在不同的数据量和模型大小情况下,模型的表现比对。 我们可以得出一个结论,模型的规模越大越好,数据量越多越好 。但是在图片左边,COCO模型在数据达到一定量之后模型表现并不会再随着数据量的增加而提高。尤其在Base模型上,数据越多,模型表现反而越差,可能的原因是Coco的原始数据已经囊括了大部分情况,额外的数据并不会带来更多价值,反而会造成优化困难问题。
2. 模型表现总结
从上图可以看出,GIT模型的表现普遍优于当前SOTA,尤其是在TextCaps这个任务中GIT模型可以超过人类表现。
3. 模型在图片分类任务上的表现
GIT模型也可以用于图片分类任务。之前的图片分类任务的传统做法是要预先确定图片有多少种类,在已知种类的前提下进行模型训练。而我们的GIT模型是一个生成模型,图片类别可以当作输出文本作为训练数据输入模型,训练时并不需要预先知道所有图片类别,所以不存在out-of-vocabulary的问题。 从结果看出,与其他传统算法比对,GIT的表现很有竞争性,并且计算量要小于其他ensemble 或者multi-scale 模型。
右面是GIT模型在ImageNet上的表现,从给出的这几个例子我们可以看出 GIT模型与SOTA模型有2-3个点的差距 。通过分析false positive,我们发现GIT模型在ImageNet数据上的错误判定都是超出我们预期的。因为我们的模型需要做两个判定,一个是label name一个是text captioning。
4. 模型在场景文本识别任务上的表现
模型准确率平均可达到92.9%。与其他当前SOTA模型的表现也不相上下。
--
04
总结
GIT作为生成模型,可以运用到多类任务中,比如图片分类、文本识别、VQA等等。 在12个vision-language任务中创造了新的SOTA。尤其在TextCaps这个任务中,第一次超越人类表现。 提出了一个新的分类方案,通过生成模型来进行分类任务,从而实现在训练和预测阶段都可以Vocabulary-free。今天的分享就到这里,谢谢大家。
分享嘉宾:王建峰博士 微软
编辑整理:Yishu Morningstar Inc
出品平台:DataFunTalk
01/ 分享嘉宾
王建峰| 微软 Principal Researcher
I am a Principal Researcher at Microsoft Cloud & AI and focus on large-scale multimodal representation learning recently. I have broad research interest, including computer vision, e.g. image classification and object detection, and vision-language intelligence, e.g. vision-language pretraining and visual question answering. I received the B.Eng. degree and PhD degree from the University of Science and Technology of China (USTC) .
02/ 关于我们
DataFun: 专注于大数据、人工智能技术应用的分享与交流。发起于2017年,在北京、上海、深圳、杭州等城市举办超过100+线下和100+线上沙龙、论坛及峰会,已邀请超过2000位专家和学者参与分享。其公众号 DataFunTalk 累计生产原创文章800+,百万+阅读,15万+精准粉丝。