OFA是阿里巴巴發(fā)布的多模態(tài)統(tǒng)一預(yù)訓(xùn)練模型,基于官方的開(kāi)源項(xiàng)目,筆者對(duì)OFA在中文任務(wù)上進(jìn)行了更好的適配以及簡(jiǎn)化,并且在中文的Image Caption任務(wù)上進(jìn)行了實(shí)踐驗(yàn)證,取得了非常不錯(cuò)的效果。本文將對(duì)上述工作進(jìn)行分享。
01
模型簡(jiǎn)介
OFA是由阿里達(dá)摩院發(fā)布的多模態(tài)預(yù)訓(xùn)練模型,OFA將各種模態(tài)任務(wù)統(tǒng)一于Seq2Seq框架中。如下圖所示,OFA支持的下游任務(wù)包括但不限于Image Caption、Image Classification、 Image genaration、Language Understanding等等。
02
項(xiàng)目介紹
項(xiàng)目動(dòng)機(jī) & 主要工作
本項(xiàng)目旨在以HuggingFace的transformers框架,實(shí)現(xiàn)中文OFA模型的訓(xùn)練和推理。并且希望將官方開(kāi)源的fairseq版本的中文預(yù)訓(xùn)練權(quán)重,轉(zhuǎn)化為transformers版本,以便用于下游任務(wù)進(jìn)行finetune。
在OFA官方項(xiàng)目中,同時(shí)實(shí)現(xiàn)了fairseq和transformers兩套框架的模型結(jié)構(gòu),并且分別開(kāi)源了中文和英文的模型權(quán)重?;谙铝性颍P者開(kāi)發(fā)了本項(xiàng)目:
由于筆者對(duì)transformers框架更熟悉,所以希望基于transformers框架,使用域內(nèi)中文數(shù)據(jù)對(duì)OFA模型進(jìn)行finetune,但OFA的中文預(yù)訓(xùn)練權(quán)重只有fairseq版本,沒(méi)有transformers版本。
如何將fairseq版本的OFA預(yù)訓(xùn)練權(quán)重轉(zhuǎn)換為transformers版本,從而便于下游任務(wù)進(jìn)行finetune。
官方代碼庫(kù)中,由于需要兼容各種實(shí)驗(yàn)配置,所以代碼也比較復(fù)雜冗余。筆者希望能夠?qū)⒑诵倪壿媱冸x出來(lái),簡(jiǎn)化使用方式。
基于上述動(dòng)機(jī),筆者的主要工作如下:
閱讀分析OFA官方代碼庫(kù),剝離出核心邏輯,包括訓(xùn)練邏輯、model、tokenizer等,以transformers框架進(jìn)行下游任務(wù)的訓(xùn)練和推理,簡(jiǎn)化使用方式。
將官方的fairseq版本的中文預(yù)訓(xùn)練權(quán)重,轉(zhuǎn)化為transformers版本,用于下游任務(wù)進(jìn)行finetune。
基于本項(xiàng)目,使用中文多模態(tài)MUGE數(shù)據(jù)集中的Image Caption數(shù)據(jù)集,以LiT-tuning的方式對(duì)模型進(jìn)行finetune,驗(yàn)證了本項(xiàng)目的有效性。
開(kāi)源五個(gè)transformers版本的中文OFA模型權(quán)重,包括由官方權(quán)重轉(zhuǎn)化而來(lái)的四個(gè)權(quán)重,以及筆者使用MUGE數(shù)據(jù)集finetune得到的權(quán)重。
訓(xùn)練細(xì)節(jié)
筆者使用MUGE數(shù)據(jù)集中的Image Caption數(shù)據(jù),將其中的訓(xùn)練集與驗(yàn)證集進(jìn)行合并,作為本項(xiàng)目的訓(xùn)練集。其中圖片共5.5w張,每張圖片包含10個(gè)caption,最終構(gòu)成55w個(gè)圖文對(duì)訓(xùn)練數(shù)據(jù)。關(guān)于MUGE數(shù)據(jù)集的說(shuō)明詳見(jiàn)官方網(wǎng)站。
caption數(shù)據(jù),jsonl格式:
{"image_id": "007c720f1d8c04104096aeece425b2d5", "text": ["性感名媛蕾絲裙,盡顯優(yōu)雅撩人氣質(zhì)", "衣千億,時(shí)尚氣質(zhì)名媛范", "80后穿唯美蕾絲裙,綻放優(yōu)雅與性感", "修身連衣裙,女人就該如此優(yōu)雅和美麗", "千億包臀連衣裙,顯出曼妙身姿", "衣千億包臀連衣裙,穿的像仙女一樣美", "衣千億連衣裙,令人奪目光彩", "奔四女人穿氣質(zhì)連衣裙,高雅名媛范", "V領(lǐng)包臀連衣裙,青春少女感", "衣千億包臀連衣裙,穿出曼妙身姿提升氣質(zhì)"]} {"image_id": "00809abd7059eeb94888fa48d9b0a9d8", "text": ["藕粉色的顏色搭配柔軟舒適的冰絲面料,滿滿的時(shí)尚感,大領(lǐng)設(shè)計(jì)也超級(jí)好看,露出性感鎖骨線條,搭配寬腰帶設(shè)計(jì),優(yōu)雅溫柔又有氣質(zhì)", "傳承歐洲文化精品女鞋,引領(lǐng)風(fēng)尚潮流設(shè)計(jì)", "歐洲站風(fēng)格女鞋,演繹個(gè)性時(shí)尚裝扮", "高品質(zhì)原創(chuàng)涼鞋,氣質(zhì)與華麗引領(lǐng)春夏", "歐洲風(fēng)格站艾莎女鞋經(jīng)典款式重新演繹打造新一輪原創(chuàng)單品優(yōu)雅鞋型盡顯女人的柔美,十分知性大方。隨意休閑很顯瘦,不僅顯高挑還展現(xiàn)纖細(xì)修長(zhǎng)的腿型,休閑又非常潮流有范。上腳舒適又百搭。", "陽(yáng)春顯高穿搭,氣質(zhì)單鞋不可缺少", "冰絲連衣裙,通勤優(yōu)雅范", "一身粉色穿搭,夢(mèng)幻迷人", "艾莎女性,浪漫摩登,演繹角色轉(zhuǎn)換", "超時(shí)尚夏季涼鞋,一直“走”在時(shí)尚的前沿"]}
圖片數(shù)據(jù),tsv格式(img_id, ' ', img_content)(base64編碼):
007c720f1d8c04104096aeece425b2d5 /9j/4AAQSkZJRgABAgAAAQA... 00809abd7059eeb94888fa48d9b0a9d8 /9j/2wCEAAEBAQEBAQEBAQE...
訓(xùn)練時(shí),筆者使用LiT-tuning(Locked-image Text tuning)策略,也就是將encoder的權(quán)重進(jìn)行凍結(jié),僅對(duì)decoder的權(quán)重進(jìn)行訓(xùn)練。加載ofa-cn-base預(yù)訓(xùn)練權(quán)重,使用55w的中文圖文對(duì), batch size=128,開(kāi)啟混合精度訓(xùn)練,warmup step為3000步,學(xué)習(xí)率為5e-5,使用cosine衰減策略,訓(xùn)練10個(gè)epoch,大約42500個(gè)step,最終訓(xùn)練loss降到0.47左右。
由于encoder與decoder共享詞向量權(quán)重,筆者還分別嘗試了凍結(jié)與不凍結(jié)詞向量?jī)煞N訓(xùn)練方式,兩者的訓(xùn)練loss的變化趨勢(shì)如下圖所示??梢钥吹?,訓(xùn)練時(shí)不凍結(jié)詞向量權(quán)重,模型的收斂速度提升非常顯著, 但相應(yīng)地也需要更多顯存。在訓(xùn)練時(shí)凍結(jié)詞向量權(quán)重,可以節(jié)省顯存并加快訓(xùn)練速度,將freeze_word_embed設(shè)為true即可。
使用方法
模型的使用方法非常簡(jiǎn)單,首先將項(xiàng)目clone到本地機(jī)器上,并且安裝相關(guān)依賴包。
gitclonehttps://github.com/yangjianxin1/OFA-Chinese.git pip install -r requirements.txt
使用如下代碼,即可加載筆者分享的模型權(quán)重(代碼會(huì)將模型權(quán)重自動(dòng)下載到本地),根據(jù)圖片生成對(duì)應(yīng)的文本描述。
from component.ofa.modeling_ofa import OFAModelForCaption from torchvision import transforms from PIL import Image from transformers import BertTokenizerFast model_name_or_path = 'YeungNLP/ofa-cn-base-muge-v2' image_file = './images/test/lipstick.jpg' # 加載預(yù)訓(xùn)練模型權(quán)重 model = OFAModelForCaption.from_pretrained(model_name_or_path) tokenizer = BertTokenizerFast.from_pretrained(model_name_or_path) # 定義圖片預(yù)處理邏輯 mean, std = [0.5, 0.5, 0.5], [0.5, 0.5, 0.5] resolution = 256 patch_resize_transform = transforms.Compose([ lambda image: image.convert("RGB"), transforms.Resize((resolution, resolution), interpolation=Image.BICUBIC), transforms.ToTensor(), transforms.Normalize(mean=mean, std=std) ]) txt = '圖片描述了什么?' inputs = tokenizer([txt], return_tensors="pt").input_ids # 加載圖片,并且預(yù)處理 img = Image.open(image_file) patch_img = patch_resize_transform(img).unsqueeze(0) # 生成caption gen = model.generate(inputs, patch_images=patch_img, num_beams=5, no_repeat_ngram_size=3) print(tokenizer.batch_decode(gen, skip_special_tokens=True))
在項(xiàng)目中,筆者還上傳了模型訓(xùn)練、推理、權(quán)重轉(zhuǎn)化等腳本,更多細(xì)節(jié)可參考項(xiàng)目代碼。
03
效果展示
下列測(cè)試圖片均為從電商網(wǎng)站中隨機(jī)下載的,并且測(cè)試了不同模型權(quán)重的生成效果。
從生成效果來(lái)看,總結(jié)如下:
ofa-cn-base-muge是筆者將由官方fairseq版本的OFA-CN-Base-MUGE權(quán)重轉(zhuǎn)換而來(lái)的,其生成效果非常不錯(cuò)。證明了fairseq權(quán)重轉(zhuǎn)換為transformers權(quán)重的邏輯的有效性。
ofa-cn-base-muge-v2是筆者使用ofa-cn-base進(jìn)行finetune得到的,其效果遠(yuǎn)遠(yuǎn)優(yōu)于ofa-cn-base,并且與ofa-cn-base-muge旗鼓相當(dāng),證明了本項(xiàng)目的訓(xùn)練邏輯的有效性。
04
結(jié)語(yǔ)
在本文中,筆者分享了關(guān)于中文OFA的項(xiàng)目實(shí)踐,實(shí)現(xiàn)了將fairseq版本的OFA權(quán)重轉(zhuǎn)換為transformers權(quán)重,并且基于MUGE數(shù)據(jù)集進(jìn)行了項(xiàng)目驗(yàn)證,在電商的Image Caption任務(wù)上取得了非常不錯(cuò)的效果。
就Image Caption任務(wù)而言,借助OFA模型強(qiáng)大的預(yù)訓(xùn)練能力,如果有足夠豐富且高質(zhì)量的域內(nèi)圖文對(duì)數(shù)據(jù),例如電商領(lǐng)域的<圖片,商品賣點(diǎn)文本>數(shù)據(jù),能夠訓(xùn)練得到一個(gè)高質(zhì)量的賣點(diǎn)生成模型,在實(shí)際的應(yīng)用場(chǎng)景中發(fā)揮作用。
筆者還分享了5個(gè)transformers版本的中文OFA權(quán)重,讀者可以基于該預(yù)訓(xùn)練權(quán)重,在下游的多模態(tài)任務(wù)中進(jìn)行finetune,相信可以取得非常不錯(cuò)的效果。
審核編輯:劉清
-
OFAF
+關(guān)注
關(guān)注
0文章
2瀏覽量
2081
原文標(biāo)題:OFA-Chinese:中文多模態(tài)統(tǒng)一預(yù)訓(xùn)練模型
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
使用基于Transformers的API在CPU上實(shí)現(xiàn)LLM高效推理

Pytorch模型訓(xùn)練實(shí)用PDF教程【中文】
分詞工具Hanlp基于感知機(jī)的中文分詞框架
以Python撰寫(xiě) AI模型框架(Framework)
用tflite接口調(diào)用tensorflow模型進(jìn)行推理
EIQ onnx模型轉(zhuǎn)換為tf-lite失敗怎么解決?
如何提高YOLOv4模型的推理性能?
超大Transformer語(yǔ)言模型的分布式訓(xùn)練框架

探究超大Transformer語(yǔ)言模型的分布式訓(xùn)練框架
三種主流模型部署框架YOLOv8推理演示
深度學(xué)習(xí)框架區(qū)分訓(xùn)練還是推理嗎
視覺(jué)深度學(xué)習(xí)遷移學(xué)習(xí)訓(xùn)練框架Torchvision介紹

主流大模型推理框架盤點(diǎn)解析

評(píng)論