0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用BLIP-2 零樣本“圖生文”

深度學(xué)習(xí)自然語言處理 ? 來源:Hugging Face ? 2023-03-03 11:06 ? 次閱讀

本文將介紹來自 Salesforce 研究院的 BLIP-2 模型,它支持一整套最先進(jìn)的視覺語言模型,且已集成入 Transformers。我們將向你展示如何將其用于圖像字幕生成、有提示圖像字幕生成、視覺問答及基于聊天的提示這些應(yīng)用場景。

BLIP-2 模型文檔:
https://hf.co/docs/transformers/main/en/model_doc/blip-2

Transformers 模型及文檔:
https://hf.co/transformers

簡介

近年來,計(jì)算機(jī)視覺和自然語言處理領(lǐng)域各自都取得了飛速發(fā)展。但許多實(shí)際問題本質(zhì)上其實(shí)是多模態(tài)的,即它們同時(shí)涉及幾種不同形式的數(shù)據(jù),如圖像和文本。因此,需要視覺語言模型來幫助解決一系列組合模態(tài)的挑戰(zhàn),我們的技術(shù)才能最終得到廣泛落地。視覺語言模型可以處理的一些 圖生文 任務(wù)包括圖像字幕生成、圖文檢索以及視覺問答。圖像字幕生成可以用于視障人士輔助、創(chuàng)建有用的產(chǎn)品描述、識別非文本模態(tài)的不當(dāng)內(nèi)容等。圖文檢索可以用于多模態(tài)搜索,也可用于自動(dòng)駕駛場合。視覺問答可以助力教育行業(yè)、使能多模態(tài)聊天機(jī)器人,還可用于各種特定領(lǐng)域的信息檢索應(yīng)用。

現(xiàn)代計(jì)算機(jī)視覺和自然語言模型在能力越來越強(qiáng)大的同時(shí),模型尺寸也隨之顯著增大。由于當(dāng)前進(jìn)行一次單模態(tài)模型的預(yù)訓(xùn)練既耗費(fèi)資源又昂貴,因此端到端視覺語言預(yù)訓(xùn)練的成本也已變得越來越高。

BLIP-2 通過引入一種新的視覺語言預(yù)訓(xùn)練范式來應(yīng)對這一挑戰(zhàn),該范式可以任意組合并充分利用兩個(gè)預(yù)訓(xùn)練好的視覺編碼器和 LLM,而無須端到端地預(yù)訓(xùn)練整個(gè)架構(gòu)。這使得我們可以在多個(gè)視覺語言任務(wù)上實(shí)現(xiàn)最先進(jìn)的結(jié)果,同時(shí)顯著減少訓(xùn)練參數(shù)量和預(yù)訓(xùn)練成本。此外,這種方法為多模態(tài)ChatGPT 類應(yīng)用奠定了基礎(chǔ)。

BLIP-2 論文鏈接:
https://arxiv.org/pdf/2301.12597.pdf

BLIP-2 葫蘆里賣的什么藥?

BLIP-2 通過在凍結(jié)的預(yù)訓(xùn)練圖像編碼器和凍結(jié)的預(yù)訓(xùn)練大語言模型之間添加一個(gè)輕量級 查詢 Transformer (Query Transformer, Q-Former) 來彌合視覺和語言模型之間的模態(tài)隔閡 (modality gap)。在整個(gè)模型中,Q-Former 是唯一的可訓(xùn)練模塊,而圖像編碼器和語言模型始終保持凍結(jié)狀態(tài)。

67e8ea1c-b91e-11ed-bfe3-dac502259ad0.pngBLIP-2 框架概覽

Q-Former 是一個(gè) transformer 模型,它由兩個(gè)子模塊組成,這兩個(gè)子模塊共享相同的自注意力層:

  • 與凍結(jié)的圖像編碼器交互的圖像 transformer,用于視覺特征提取
  • 文本 transformer,用作文本編碼器和解碼器
68045db0-b91e-11ed-bfe3-dac502259ad0.pngQ-Former 架構(gòu)

圖像 transformer 從圖像編碼器中提取固定數(shù)量的輸出特征,這里特征的個(gè)數(shù)與輸入圖像分辨率無關(guān)。同時(shí),圖像 transformer 接收若干查詢嵌入作為輸入,這些查詢嵌入是可訓(xùn)練的。這些查詢還可以通過相同的自注意力層與文本進(jìn)行交互 (譯者注: 這里的相同是指圖像 transformer 和文本 transformer 對應(yīng)的自注意力層是共享的)。

Q-Former 分兩個(gè)階段進(jìn)行預(yù)訓(xùn)練。

第一階段,圖像編碼器被凍結(jié),Q-Former 通過三個(gè)損失函數(shù)進(jìn)行訓(xùn)練:

  • 圖文對比損失 (image-text contrastive loss): 每個(gè)查詢的輸出都與文本輸出的 CLS 詞元計(jì)算成對相似度,并從中選擇相似度最高的一個(gè)最終計(jì)算對比損失。在該損失函數(shù)下,查詢嵌入和文本不會(huì) “看到” 彼此。
  • 基于圖像的文本生成損失: 查詢內(nèi)部可以相互計(jì)算注意力但不計(jì)算文本詞元對查詢的注意力,同時(shí)文本內(nèi)部的自注意力使用因果掩碼且需計(jì)算所有查詢對文本的注意力。
  • 圖文匹配損失 (image-text matching loss): 查詢和文本可以看到彼此,最終獲得一個(gè)幾率 (logit) 用以表示文字與圖像是否匹配。這里,使用難例挖掘技術(shù) (hard negative mining) 來生成負(fù)樣本。

圖像 transformer 作為一個(gè)信息瓶頸 (information bottleneck),查詢嵌入經(jīng)過它后,其輸出嵌入已經(jīng)不僅僅包含了視覺信息,而且包含了與文本相關(guān)的視覺信息。這些輸出嵌入用作第二階段 LLM 輸入的視覺前綴。該預(yù)訓(xùn)練階段主要涉及一個(gè)以基于圖像的文本生成任務(wù),損失函數(shù)使用因果 LM 損失。

BLIP-2 使用 ViT 作為視覺編碼器。而對于 LLM,論文作者使用 OPT 和 Flan T5 模型。你可以找到在 Hugging Face Hub 上找到 OPT 和 Flan T5 的預(yù)訓(xùn)練 checkpoints。

在 Hugging Face Hub 中檢索 BLIP-2 相關(guān)模型:
https://hf.co/models?other=blip-2

但不要忘記,如前所述,BLIP-2 設(shè)計(jì)的預(yù)訓(xùn)練方法允許任意的視覺主干模型和 LLM 的組合。

通過 Hugging Face Transformers 使用 BLIP-2

使用 Hugging Face Transformers,你可以輕松下載并在你自己的圖像上運(yùn)行預(yù)訓(xùn)練的 BLIP-2 模型。如果你想跑跑本文中的示例,請確保使用大顯存 GPU。

我們從安裝 Transformers 開始。由于此模型是最近才添加到 Transformers 中的,因此我們需要從源代碼安裝 Transformers:

pipinstallgit+https://github.com/huggingface/transformers.git

接下來,我們需要一個(gè)輸入圖像?!都~約客》每周都會(huì)面向其讀者舉辦一場 卡通字幕比賽。我們從中取一張卡通圖像輸入給 BLIP-2 用于測試。

卡通字母比賽鏈接:
https://www.newyorker.com/cartoons/contest#thisweek

importrequests
fromPILimportImage

url='https://media.newyorker.com/cartoons/63dc6847be24a6a76d90eb99/master/w_1160,c_limit/230213_a26611_838.jpg'
image=Image.open(requests.get(url,stream=True).raw).convert('RGB')
display(image.resize((596,437)))
681b0fb0-b91e-11ed-bfe3-dac502259ad0.jpgNew Yorker Cartoon

現(xiàn)在我們有一張輸入圖像了,還需要一個(gè)預(yù)訓(xùn)練過的 BLIP-2 模型和相應(yīng)的預(yù)處理器來處理輸入。你可以在 Hugging Face Hub 上找到所有可用的預(yù)訓(xùn)練 checkpoints 列表。這里,我們將加載一個(gè)使用 Meta AI 的預(yù)訓(xùn)練 OPT 模型的 BLIP-2 checkpoint,該 OPT 模型具有 27 億個(gè)參數(shù)。

fromtransformersimportAutoProcessor,Blip2ForConditionalGeneration
importtorch

processor=AutoProcessor.from_pretrained("Salesforce/blip2-opt-2.7b")
model=Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b",torch_dtype=torch.float16)

請注意,你暫時(shí)還無法使用 Auto API (例如 AutoModelForXXX) 來加載 BLIP-2 模型,這種情況在 Hugging Face 中比較少見。你需要顯式使用 Blip2ForConditionalGeneration 來加載 BLIP-2 模型。雖然自動(dòng)獲取模型還不能做到,但是你可以使用 AutoProcessor 來獲取匹配的處理器類,在本例中為 Blip2Processor。

我們可以使用 GPU 來加快文本生成速度:

device="cuda"iftorch.cuda.is_available()else"cpu"
model.to(device)

圖像字幕生成

我們先看看 BLIP-2 是否可以零樣本地為《紐約客》卡通圖像生成字幕。要為圖像添加字幕,我們不必向模型提供任何文本提示,僅提供預(yù)處理過的輸入圖像。沒有任何文字提示,模型將從 BOS (beginning-of-sequence) 開始生成圖像字幕。

inputs=processor(image,return_tensors="pt")

generated_ids=model.generate(**inputs,max_new_tokens=20)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
"twocartoonmonsterssittingaroundacampfire"

對于未使用《紐約客》風(fēng)格的卡通圖像訓(xùn)練過的模型,這是一個(gè)令人印象深刻的準(zhǔn)確描述!

有提示圖片字幕生成

我們還可以通過提供文本提示來擴(kuò)展圖像字幕生成,模型將在給定圖像的情況下接著提示詞往下補(bǔ)充。

prompt="thisisacartoonof"

inputs=processor(image,text=prompt,return_tensors="pt").to(device,torch.float16)

generated_ids=model.generate(**inputs,max_new_tokens=20)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
"twomonsterssittingaroundacampfire"
prompt="theylookliketheyare"

inputs=processor(image,text=prompt,return_tensors="pt").to(device,torch.float16)

generated_ids=model.generate(**inputs,max_new_tokens=20)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
"havingagoodtime"

視覺問答

用于視覺問答時(shí),提示必須遵循特定格式: "Question: {} Answer:"

prompt="Question:Whatisadinosaurholding?Answer:"

inputs=processor(image,text=prompt,return_tensors="pt").to(device,torch.float16)

generated_ids=model.generate(**inputs,max_new_tokens=10)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
"Atorch"

基于聊天的提示

最后,我們可以通過拼接對話中每輪的問題和回答來創(chuàng)建類似 ChatGPT 的體驗(yàn)。我們用某個(gè)提示 (比如 “恐龍拿著什么?”) 來問模型,模型會(huì)為它生成一個(gè)答案 (如 “火炬”),我們可以把這一問一答拼接到對話中。然后我們再來一輪,這樣就把上下文 (context) 建立起來了。但是,需要確保的是,上下文不能超過 512 個(gè)標(biāo)記,因?yàn)檫@是 BLIP-2 使用的語言模型 (OPT 和 T5) 的上下文長度。

context=[
("Whatisadinosaurholding?","atorch"),
("Wherearethey?","Inthewoods.")
]
question="Whatfor?"
template="Question:{}Answer:{}."

prompt="".join([template.format(context[i][0],context[i][1])foriinrange(len(context))])+"Question:"+question+"Answer:"

print(prompt)
Question:Whatisadinosaurholding?Answer:atorch.Question:Wherearethey?Answer:Inthewoods..Question:Whatfor?Answer:
inputs=processor(image,text=prompt,return_tensors="pt").to(device,torch.float16)

generated_ids=model.generate(**inputs,max_new_tokens=10)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
Tolightafire.

結(jié)論

BLIP-2 是一種零樣本視覺語言模型,可用于各種含圖像和文本提示的圖像到文本任務(wù)。這是一種效果好且效率高的方法,可應(yīng)用于多種場景下的圖像理解,特別是當(dāng)訓(xùn)練樣本稀缺時(shí)。

該模型通過在預(yù)訓(xùn)練模型之間添加 transformer 來彌合視覺和自然語言模態(tài)之間的隔閡。這一新的預(yù)訓(xùn)練范式使它能夠充分享受兩種模態(tài)的各自的進(jìn)展的紅利。

如果您想了解如何針對各種視覺語言任務(wù)微調(diào) BLIP-2 模型,請查看 Salesforce 提供的 LAVIS 庫,它為模型訓(xùn)練提供全面支持。

Salesforce 提供的 LAVIS 代碼倉庫:
https://github.com/salesforce/LAVIS

要查看 BLIP-2 的運(yùn)行情況,可以在 Hugging Face Spaces 上試用其演示。

Hugging Face Spaces 中的 Salesforce BLIP-2:
https://hf.co/spaces/Salesforce/BLIP2

致謝

非常感謝 Salesforce 研究團(tuán)隊(duì)在 BLIP-2 上的工作,感謝 Niels Rogge 將 BLIP-2 添加到 Transformers,感謝 Omar Sanseviero 審閱這篇文章。


最后給大家推薦一下最近小編從最新的斯坦福NLP的公開課都放到了bilibili上了,都已做了中英翻譯,大部分已經(jīng)更新完畢了,給需要的小伙伴~是最新的呦~目錄

  • 詞向量

  • 神經(jīng)分類器

  • 反向傳播和神經(jīng)網(wǎng)絡(luò)

  • 句法結(jié)構(gòu)

  • RNN

  • LSTM

  • 機(jī)器翻譯、Seq2Seq和注意力機(jī)制

  • 自注意力和Transformer

  • Transformers和預(yù)訓(xùn)練

  • 問答

  • 自然語言生成

  • 指代消解

  • T5和大型預(yù)訓(xùn)練模型

  • 待更...

    審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3649

    瀏覽量

    134754
  • 計(jì)算機(jī)視覺
    +關(guān)注

    關(guān)注

    8

    文章

    1698

    瀏覽量

    46031
  • 語言模型
    +關(guān)注

    關(guān)注

    0

    文章

    530

    瀏覽量

    10296
  • 自然語言處理
    +關(guān)注

    關(guān)注

    1

    文章

    619

    瀏覽量

    13581

原文標(biāo)題:使用 BLIP-2 零樣本“圖生文”

文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    低成本低功耗的嵌入式計(jì)算機(jī)視覺平臺(tái)ADZS-BF707-BLIP2

    ADZS-BF707-BLIP2,Blackfin低功耗成像平臺(tái)(BLIP)評估系統(tǒng)是一款低成本,低功耗的嵌入式計(jì)算機(jī)視覺平臺(tái),適用于大量實(shí)時(shí)傳感應(yīng)用。 BLIP利用行業(yè)領(lǐng)先的低功耗Blackfin
    發(fā)表于 03-08 09:24

    基于直推判別字典學(xué)習(xí)的樣本分類方法

    樣本分類的目標(biāo)是對訓(xùn)練階段未出現(xiàn)過的類別的樣本進(jìn)行識別和分類,其主要思路是,借助類別語義信息,將可見類別的知識轉(zhuǎn)移到未見類別中.提出了一種直推式的字典學(xué)習(xí)方法,包含以下兩個(gè)步驟:首先,提出一個(gè)判別
    發(fā)表于 12-25 10:15 ?0次下載
    基于直推判別字典學(xué)習(xí)的<b class='flag-5'>零</b><b class='flag-5'>樣本</b>分類方法

    BLIP2主板支持包

    BLIP2 Board Support Package
    發(fā)表于 03-24 16:01 ?0次下載
    <b class='flag-5'>BLIP2</b>主板支持包

    BLIP2電路板設(shè)計(jì)數(shù)據(jù)庫

    BLIP2 Board Design Database
    發(fā)表于 03-24 16:48 ?2次下載
    <b class='flag-5'>BLIP2</b>電路板設(shè)計(jì)數(shù)據(jù)庫

    BLIP2電路板設(shè)計(jì)數(shù)據(jù)庫

    BLIP2電路板設(shè)計(jì)數(shù)據(jù)庫
    發(fā)表于 06-03 20:32 ?0次下載
    <b class='flag-5'>BLIP2</b>電路板設(shè)計(jì)數(shù)據(jù)庫

    BLIP2主板支持包

    BLIP2主板支持包
    發(fā)表于 06-05 16:45 ?1次下載
    <b class='flag-5'>BLIP2</b>主板支持包

    融合樣本學(xué)習(xí)和小樣本學(xué)習(xí)的弱監(jiān)督學(xué)習(xí)方法綜述

    融合樣本學(xué)習(xí)和小樣本學(xué)習(xí)的弱監(jiān)督學(xué)習(xí)方法綜述 來源:《系統(tǒng)工程與電子技術(shù)》,作者潘崇煜等 摘 要:?深度學(xué)習(xí)模型嚴(yán)重依賴于大量人工標(biāo)注的數(shù)據(jù),使得其在數(shù)據(jù)缺乏的特殊領(lǐng)域內(nèi)應(yīng)用嚴(yán)重受限。面對數(shù)據(jù)缺乏
    發(fā)表于 02-09 11:22 ?2330次閱讀
    融合<b class='flag-5'>零</b><b class='flag-5'>樣本</b>學(xué)習(xí)和小<b class='flag-5'>樣本</b>學(xué)習(xí)的弱監(jiān)督學(xué)習(xí)方法綜述

    歐姆龍NX1P2樣本資料

    歐姆龍NX系列樣本
    發(fā)表于 06-30 14:31 ?0次下載

    歐姆龍NX1樣本資料

    歐姆龍NX1樣本資料
    發(fā)表于 06-30 14:30 ?0次下載

    基于深度學(xué)習(xí)的樣本SAR圖像目標(biāo)識別

    將該框架推廣到廣義樣本學(xué)習(xí),并針對域偏置問題,提出了- -種基于語義知識的域檢測方法。利用域檢測方法可以先將未見類別和已見類別進(jìn)行區(qū)分,然后用兩個(gè)模型分別在兩個(gè)域進(jìn)行分類,從而有效緩解域偏置問題。
    發(fā)表于 12-29 14:27 ?678次閱讀

    形狀感知樣本語義分割

    由于大規(guī)模視覺語言預(yù)訓(xùn)練取得了令人矚目的進(jìn)展,最近的識別模型可以以驚人的高準(zhǔn)確度對任意對象進(jìn)行樣本和開放式分類。
    的頭像 發(fā)表于 04-28 11:26 ?833次閱讀
    形狀感知<b class='flag-5'>零</b><b class='flag-5'>樣本</b>語義分割

    一個(gè)通用的自適應(yīng)prompt方法,突破了樣本學(xué)習(xí)的瓶頸

    為了解決這個(gè)問題,這篇研究提出了一種Universal Self-adaptive Prompting (USP)方法,對LLMs的樣本學(xué)習(xí)進(jìn)行了優(yōu)化,同時(shí)也適用于少樣本學(xué)習(xí)任務(wù)。USP只需要少量
    的頭像 發(fā)表于 06-01 14:48 ?796次閱讀
    一個(gè)通用的自適應(yīng)prompt方法,突破了<b class='flag-5'>零</b><b class='flag-5'>樣本</b>學(xué)習(xí)的瓶頸

    什么是樣本學(xué)習(xí)?為什么要搞樣本學(xué)習(xí)?

    樣本分類的技術(shù)目前正處于高速發(fā)展時(shí)期, 所涉及的具體應(yīng)用已經(jīng)從最初的圖像分類任務(wù)擴(kuò)展到了其他計(jì)算機(jī)視覺任務(wù)乃至自然語言處理等多個(gè)相關(guān)領(lǐng)域。 對此, 本文將其稱為廣義樣本分類。 相應(yīng)
    發(fā)表于 09-22 11:10 ?2232次閱讀
    什么是<b class='flag-5'>零</b><b class='flag-5'>樣本</b>學(xué)習(xí)?為什么要搞<b class='flag-5'>零</b><b class='flag-5'>樣本</b>學(xué)習(xí)?

    跨語言提示:改進(jìn)跨語言樣本思維推理

    進(jìn)一步地,提出了Cross-Lingual Self-consistent Prompting (CLSP),利用不同語言專家的知識和不同語言間更加多樣的思考方式,集成了多個(gè)推理路徑,顯著地提高了self-consistency的跨語言性能。CLSP 都能夠在CLP的基礎(chǔ)上更進(jìn)一步地有效提高
    的頭像 發(fā)表于 11-08 16:59 ?720次閱讀
    跨語言提示:改進(jìn)跨語言<b class='flag-5'>零</b><b class='flag-5'>樣本</b>思維推理

    ADI公司開發(fā)BLACKFIN低功耗成像平臺(tái)(BLIP)

    電子發(fā)燒友網(wǎng)站提供《ADI公司開發(fā)BLACKFIN低功耗成像平臺(tái)(BLIP).pdf》資料免費(fèi)下載
    發(fā)表于 11-28 10:41 ?1次下載
    ADI公司開發(fā)BLACKFIN低功耗成像平臺(tái)(<b class='flag-5'>BLIP</b>)