ALBEF,BLIP,BLIP2 都是 Junnan Li 大佬的杰作,給了我很大的啟發(fā)。ALBEF去掉了笨重的Detector,BLIP統(tǒng)一了理解與生成,BLIP2再次刷新了我的認(rèn)知,感謝大佬!
BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
論文連接:https://arxiv.org/abs/2301.12597
代碼倉庫:https://github.com/salesforce/LAVIS/tree/main/projects/blip2
HF上的Demo:
https://huggingface.co/spaces/Salesforce/BLIP2
TL,DR
實(shí)現(xiàn)了開放性的多模態(tài)內(nèi)容理解與生成,讓我們有了更多的想象空間;
從新的視角去看待圖文模態(tài),引入了LLM模型。CV模型是傳感器,負(fù)責(zé)感知,LLM模型是處理器,負(fù)責(zé)處理;
相對友好的計(jì)算資源,比起動輒幾百張卡的大模型,BLIP 2 最大的模型也不過16張A100 40G;
傳統(tǒng)圖文任務(wù)上性能爆表;
從泰坦尼克號說起
開始前介紹論文前我們先來討論下,實(shí)現(xiàn)圖片中的問答,需要什么能力呢?
圖片里發(fā)生了什么:一位男士在船頭摟著一位女士。(感知-CV模型的能力)
問題問的什么:電影的結(jié)尾是什么?(感知-NLP模型的能力)
圖片和電影有什么關(guān)系:這是泰坦尼克號里的經(jīng)典鏡頭。(對齊融合-多模態(tài)模型的能力)
電影的結(jié)尾是什么:泰坦尼克號沉沒了。(推理-LLM模型的能力)
對不同模型扮演角色的理解
從上面的問題可以看出,為了解決這個問題,需要幾個模型配合一下。其實(shí)自從多模態(tài)模型(特別是圖文多模態(tài)模型)出現(xiàn),模態(tài)之間怎么配合就是個問題。
19年20年的時候,ViLBERT和Uniter采用了Object-Text對來提升模型對圖片的理解能力。Object的引入,不可避免的需要一個笨重的檢測器,去檢測各種框,使得圖像模態(tài)顯得比較笨重。而且檢測器模型不可避免的會存在漏檢的問題,可以參考后來Open-Vocabulary一些工作,比如ViLD。這一階段,顯然對圖像的理解是多模態(tài)的重頭戲,文本更多是輔助圖像任務(wù)的理解。
到了21年22年,去掉檢測器成了主流,ViLT,ALBEF,VLMo,BLIP 等等都拋棄了檢測器,徹底擺脫了CNN網(wǎng)絡(luò)的舒服,全面擁抱Transformer,當(dāng)然這也得益于本身ViT模型在CV領(lǐng)域的大放光彩,讓兩個模態(tài)的有機(jī)融合成為了可能。在這一階段,文本模態(tài)感覺已經(jīng)可以和圖像模態(tài)平起平坐了。從在各項(xiàng)具體下游任務(wù)(VQA、VG、ITR)的實(shí)際表現(xiàn)上來說,已經(jīng)比較令人滿意了。但總感覺差點(diǎn)味道,就是復(fù)雜推理。比如VQA上的問題,大多數(shù)是簡單的邏輯計(jì)算或識別,感覺還不夠智能。
那么如何實(shí)現(xiàn)更加復(fù)雜的推理呢?眾所周知,NLP領(lǐng)域一直領(lǐng)先于CV領(lǐng)域的發(fā)展。得益于更豐富的語料庫,NLP領(lǐng)域的已經(jīng)擁有了一些具有初步推理能力模型的研究,特別是LLM大模型的出現(xiàn)。(今天谷歌剛剛發(fā)布了22B的ViT,而在NLP領(lǐng)域這個規(guī)模的模型應(yīng)該已經(jīng)不算新聞了。)我對于LLM能力有多強(qiáng)的理解,其實(shí)也是ChatGPT之后才有明確的感知。
23年1月,BLIP2出來了,引入了LLM。從圖像上看,BLIP2大概由這么幾個部分組成,圖像(Image)輸入了圖像編碼器(Image Encoder),得到的結(jié)果與文本(Text)在Q-Former(BERT初始化)里進(jìn)行融合,最后送入LLM模型。我是學(xué)自動化出身的,從自動化的角度看看BLIP2。
之前的模型大多都關(guān)注在了傳感器和融合算法的設(shè)計(jì)上,但忽略了處理器的重要作用。BERT模型雖然能理解文本,但卻沒有世界觀的概念,沒有龐大的背景知識庫,只能作一個傳感器。只有LLM模型,才能實(shí)現(xiàn)這一角色,統(tǒng)一起各個模態(tài)的信號,從一個宏觀的角度去看待這個問題。這里引用一段原文中的話。
Powered by LLMs (e.g. OPT (Zhang et al., 2022), FlanT5 (Chung et al., 2022)), BLIP-2 can be prompted to perform zero-shot image-to-text generation that follows natural language instructions, which enables emerging capabilities such as visual knowledge reasoning, visual conversation, etc.
目前看,或許LLM就是下一代多模態(tài)模型的關(guān)鍵一環(huán)。
言歸正傳,我們開始介紹論文。
如何統(tǒng)一多模態(tài)的表征
LLM本質(zhì)上是個語言模型,自然無法直接接受其他模態(tài)的信息。所以如何把各個模態(tài)的信息,統(tǒng)一到LLM能理解的特征空間,就是第一步要解決的問題。為此,作者提出了Q-Former。
為了融合特征,那Transformer架構(gòu)是最合適不過的了。熟悉ALBEF或者BLIP的同學(xué)或許發(fā)現(xiàn),Q-Former的結(jié)構(gòu)和ALBEF其實(shí)很像,如果看代碼的話,可以發(fā)現(xiàn)就是在ALBEF基礎(chǔ)上改的。
相較于ALBEF,最大的不同,就是Learned Query的引入。可以看到這些Query通過Cross-Attention與圖像的特征交互,通過Self-Attention與文本的特征交互。這樣做的好處有兩個:(1)這些Query是基于兩種模態(tài)信息得到的;(2)無論多大的視覺Backbone,最后都是Query長度的特征輸出,大大降低了計(jì)算量。比如在實(shí)際實(shí)驗(yàn)中,ViT-L/14的模型的輸出的特征是257x1024的大小,最后也是32x768的Query特征。
這里其實(shí)有點(diǎn)疑問,也歡迎大家討論。論文里是這樣講的:
This bottleneck architecture works together with our pre-training objectives into forcing the queries to extract visual information that is most relevant to the text.
作者通過Q-Former強(qiáng)制讓Query提取文本相關(guān)的特征,但如果在推理時沒有文本先驗(yàn),那什么樣的特征算是相關(guān)的呢?
針對Q-Former的三個訓(xùn)練任務(wù)分別是 Image-Text Contrastive Learning (ITC),Image-grounded Text Generation (ITG),Image-Text Matching (ITM)。其中 ITC 和 ITM 任務(wù),與ALBEF中的實(shí)現(xiàn)類似,只不過圖像特征改為了Query的特征,具體可以參考代碼實(shí)現(xiàn)(ITC和ITM)。這里比較特別的是ITG任務(wù),與ALBEF中的MLM不同,這里改成了生成整句Text的任務(wù),類似Captioning,具體代碼實(shí)現(xiàn)ITG。實(shí)際上,這幾個任務(wù)都是以Query特征和文本特征作為輸入得到的,只不過有不同的Mask組合,具體可以參考上圖中的右圖。
第一階段,對于模型的訓(xùn)練,就是由以上三個任務(wù)組成,通過這幾個任務(wù),實(shí)現(xiàn)了對于特征的提取與融合。但現(xiàn)在模型還沒見過LLM。我們現(xiàn)在用傳感器完成了數(shù)據(jù)的提取與融合,下一步,我們得把數(shù)據(jù)轉(zhuǎn)換成處理器能識別的格式。
變成LLM認(rèn)識的樣子
通過第一階段的訓(xùn)練,Query已經(jīng)濃縮了圖片的精華,現(xiàn)在要做的,就是把Query變成LLM認(rèn)識的樣子。
為什么不讓LLM認(rèn)識Query,而讓Query變成LLM認(rèn)識呢?這里的原因有兩:(1)LLM模型的訓(xùn)練代價有點(diǎn)大;(2)從 Prompt Learning 的觀點(diǎn)來看,目前多模態(tài)的數(shù)據(jù)量不足以保證LLM訓(xùn)練的更好,反而可能會讓其喪失泛化性。如果不能讓模型適應(yīng)任務(wù),那就讓任務(wù)來適應(yīng)模型。
這里作者針對兩類不同LLM設(shè)計(jì)了不同的任務(wù):
Decoder類型的LLM(如OPT):以Query做輸入,文本做目標(biāo);
Encoder-Decoder類型的LLM(如FlanT5):以Query和一句話的前半段做輸入,以后半段做目標(biāo);
為了適合各模型不同的Embedding維度,作者引入了一個FC層做維度變換。
至此,模型兩階段的訓(xùn)練方法就介紹完了。
訓(xùn)練細(xì)節(jié)
作為圖文預(yù)訓(xùn)練的工作,工程問題往往是關(guān)鍵。BLIP2的訓(xùn)練過程主要由以下幾個值得關(guān)注的點(diǎn):
訓(xùn)練數(shù)據(jù)方面:包含常見的 COCO,VG,SBU,CC3M,CC12M 以及 115M的LAION400M中的圖片。采用了BLIP中的CapFilt方法來Bootstrapping訓(xùn)練數(shù)據(jù)。
CV模型:選擇了CLIP的ViT-L/14和ViT-G/14,特別的是,作者采用倒數(shù)第二層的特征作為輸出。
LLM模型:選擇了OPT和FlanT5的一些不同規(guī)模的模型。
訓(xùn)練時,CV模型和LLM都是凍結(jié)的狀態(tài),并且參數(shù)都轉(zhuǎn)為了FP16。這使得模型的計(jì)算量大幅度降低。主要訓(xùn)練的基于BERT-base初始化的Q-Former只有188M的參數(shù)量。
最大的模型,ViT-G/14和FlanT5-XXL,只需要16卡A100 40G,訓(xùn)練6+3天就可以完成。
所有的圖片都被縮放到224x224的大小。
實(shí)驗(yàn)部分
作者首先用了整整一頁的篇幅,為我們展示了BLIP2的 instructed zero-shot image-to-text generation 能力。這里暫且按下不表,到后面一起討論。我們先看看BLIP2在傳統(tǒng)的一些圖文任務(wù)上的效果。
Image Captioning
作者用圖片配合文字 prompt “a photo of”作為模型的輸入。訓(xùn)練過程中凍結(jié)LLM,訓(xùn)練Q-Former和CV模型??梢钥吹?,在域內(nèi)數(shù)據(jù)集(COCO)上,其表現(xiàn)并沒有非常亮眼,但在域外數(shù)據(jù)集NoCaps上,BLIP2顯示出了強(qiáng)大的泛化能力,相交之前的模型有明顯的提升。
Visual Question Answering
訓(xùn)練的參數(shù)和IC任務(wù)一致,主要是Q-Former和ViT。不同的是,Q-Former和LLM都有Question作為文本輸入。Q-Former的文本輸入,保證了Query提取到的特征更加的精煉。
Image-Text Retrieval
ITR任務(wù),作者只采用了第一階段的Q-Former和ViT來做,沒有引入LLM。具體的做法與ALBEF類似,先通過ITC任務(wù)算出點(diǎn)積相似度,再取Topk的匹配對,作ITM任務(wù),得到最后的Matching Score。Flickr30K上再次刷新了SOTA,特別是I2T,基本飽和了。
Instructed Zero-shot Image-to-Text Generation
我覺得這個能力才是BLIP2最亮眼的地方。文章中是這樣說的:
Selected examples of instructed zero-shot image-to-text generation using a BLIP-2 model w/ ViT-G and FlanT5XXL, where it shows a wide range of capabilities including visual conversation, visual knowledge reasoning, visual commensense reasoning, storytelling, personalized image-to-text generation, etc.
首先我們來看看BLIP2對信息的檢索能力,下面幾個例子都是對圖片中物體的背景知識提問,可以看到,模型都給出了相應(yīng)的答案。這里體現(xiàn)的實(shí)際上是LLM強(qiáng)大的背景知識庫。圖中有什么(ViT)+ 問的是什么(Q-Former,LLM)+ 找答案 (LLM)。
下面的幾個問題,都是要求模型對圖片的內(nèi)容進(jìn)行進(jìn)一步的推理。比如圖二,需要建立對男人驚訝和雞之間的因果聯(lián)系。
最后的幾個問題是開放性的生成問題。需要模型有一定的長文本生成能力。
為了進(jìn)一步探索BLIP2模型的效果,我也自己測試了一些Demo,這里采用的是ViT-G和FlanT5的模型組合,Hugging Face 上提供的CKPT加起來有50G左右了,作為一個平時接觸CV多一點(diǎn)的人來看,是想當(dāng)炸裂的,一般我模型的CKPT和最后那個零頭差不多。
先介紹一下測試的輸入格式,這里主要參考:
GitHub - NielsRogge/Transformers-Tutorials: This repository contains demos I made with the Transformers library by HuggingFace.
我測試了如下形式的輸入樣例,其中比較特別的是Incontext Learning,這里除了圖片中的信息,我還會給出一段文本中的信息,希望模型通過綜合兩個模態(tài)的信息給出答案。
下面是一些測試樣例以及有趣的發(fā)現(xiàn)。粗體為模型的輸出結(jié)果。
樣例:Airbus 380
首先,我們問幾個簡單的問題
Q: What type of aircraft is this?
A: a a380
Q: What are the characteristics of this type of aircraft?
A: the a380 is the largest commercial passenger airline.
可以看到BLIP2基本給出了正確的回答,但當(dāng)我詢問飛機(jī)載客量時,模型確依然給出了380,推測可能是這個飛機(jī)和380這個數(shù)字的聯(lián)系比較緊密。
Q: How many people can this aircraft accommodate?
A: 380
于是,同樣的問題,我們給出一點(diǎn)文字上的提示,這里摘取了一段Wiki上的介紹送入模型。
C: The Airbus A380 is a large wide-body airliner that was developed and produced by Airbus. It is the world's largest passenger airliner and only full-length double-deck jet airliner. Airbus studies started in 1988, and the project was announced in 1990 to challenge the dominance of the Boeing 747 in the long-haul market. The full-length double-deck aircraft has a typical seating for 525 passengers, with a maximum certified capacity for 853 passengers.
Q: How many people can the aircraft in this figure accommodate?
A: 853
這時,我們可以看到,模型成功的給出了回答。也就是說,模型有聯(lián)合兩個模態(tài)信息聯(lián)合推理的能力。如果我們使點(diǎn)壞呢,比如給出錯誤的Context。
C: The Airbus A350 is a long-range, wide-body twin-engine jet airliner developed and produced by Airbus.
Q: What type of aircraft is this figure?
A: airbus a350
可以看到,模型輸出了錯誤的答案??赡苡捎诒旧鞮LM對文字更加關(guān)注,而且Figure的概念可能對他來說并不熟悉,在他看來,32個Query只不過是帶Visual信息的Word Token。
樣例:交通標(biāo)志
在這個樣例中,我們直接讓模型自己生成個問題。
Q: Give me several question about the figure.
A: What is the speed limit on the road?
接著,我們問問看,模型自己知道答案么?
Q: What is the speed limit on the road?
A: 40 mph.
可以看到,模型準(zhǔn)確地給出了限速。接著我們讓他做一些簡單邏輯判斷。
Q: Can I drive 70 mph here?
A: No.
Q: Can I drive 30 mph here?
A: Yes.
模型竟然都能夠正確的給出答案。最后,來個OCR的任務(wù),讓模型輸出牌子上寫了什么。
Q: What is written on this sign?
A: speed limit 40.
模型同樣也給出了正確的答案??梢钥吹?,模型對于邏輯判斷和圖片中文字的識別,都有一定的基礎(chǔ)。
樣例:表格
這里先用文章中自己的表格做測試。
Q: What is the name of the table?
A: a comparison of the mri and ct scans.
Emmm,屬于是自家人不認(rèn)自家人了。問問他認(rèn)識自己不?
Q: Do you know BLIP2?
A: BLIP2 is a protein that in humans is encoded by the BLIP2 gene.
好吧,不認(rèn)識。接著又有一些問題,模型的回答也不是很好。
Q: Which model in the table performs best?
A: dcm vs dcm vs dcm vs dcm vs dcm vs dcm.
Q: How many training parameters does BLIP2 have?
A: BLIP2 has a total of ten training parameters.
原因的話,其實(shí)比較好理解,表格的圖片相對于自然圖像的Gap較大,模型本身可能缺乏相應(yīng)的訓(xùn)練數(shù)據(jù);其次,雖然32的Query使得信息變得精煉,但也使得模型的表達(dá)能力有了瓶頸,加上224x224的大小,這種小文字的識別其實(shí)是比較困難的。我們看下個例子。
樣例:圖表1
我們讓模型自己問個問題。
Q: Give me several question about the figure
A: What is the percentage of survival for those with no adolescent treatment?
可以看到,模型提問的大致方向是可以的,比如存活率。但是圖表中的Adjuvant Treatment卻被識別成了adolescent treatment。這說明,模型有一定的OCR能力,但不多。尤其是對于這種比較小又不常見的文字,很容易識別錯誤。
樣例:圖表2
同樣,先讓模型自己問個問題。
C: Caption: Fig. 3. The hospitalization and ICU ?gures from our simulation.
Q: Give me several question about the figure
A: What is the population of the city?
自問自答一下。
C: Caption: Fig. 3. The hospitalization and ICU ?gures from our simulation.
Q: What is the population of the city?
A: NYC population 8 million.
從這里不難看出,模型其實(shí)對于常見的單詞,即使圖片比較小也能夠很好地識別到。最后來個最難的。
Q: On day 20, approximately how many people were hospitalized?
A: 200, 000.
這個問題的要求其實(shí)挺高,需要模型根據(jù)坐標(biāo)去推斷數(shù)值,不出意外的回答錯誤了。
Limitation
首先,不可否認(rèn)的是,這篇工作確實(shí)讓我們的想象空間更多了,尤其是 Instructed Zero-shot Image-to-Text Generation 的能力,我覺得肯定還有沒有發(fā)現(xiàn)的潛在能力。但我們從測試樣例中也看到,模型還存在一些問題。在文章中,作者也給出了一些Bad Case,比如錯誤的建立聯(lián)系,錯誤的推斷依據(jù)以及過時的知識庫。
作者在文中對自己模型的不足主要解釋為,首先,
However, our experiments with BLIP-2 do not observe an improved VQA performance when providing the LLM with in-context VQA examples. We attribute the lack of in-context learning capability to our pretraining dataset, which only contains a single image-text pair per sample.
由于圖文數(shù)據(jù)集大多數(shù)是一對一的匹配,所以很難讓模型建立上下文的聯(lián)系。
其次,
BLIP-2's image-to-text generation could have unsatisfactory results due to various reasons including inaccurate knowledge from the LLM, activating the incorrect reasoning path, or not having up-to-date information about new image content.
這個主要是由于LLM模型本身局限決定的。
除了作者提到的幾點(diǎn),我覺得一下幾點(diǎn)也是可以探索的:
細(xì)粒度的識別,由于圖像的信息都濃縮在了32個Query中,所以能否識別細(xì)粒度信息以及圖像中重要的位置信息就成了疑問;
更多的任務(wù),BLIP2強(qiáng)大zero-shot能力,能不能應(yīng)用在更多的任務(wù)上,多模態(tài)的類似VG,單模態(tài)的類似Classification。
當(dāng)然從傳感器與處理器的角度去看,其他模態(tài)(比如Audio)也可以拿個傳感器去測,然后送給處理器分析分析hhh
當(dāng)然,BLIP2的能力應(yīng)該還遠(yuǎn)遠(yuǎn)沒有被挖掘完,等有新的認(rèn)識了再分享。