0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

以transformers框架实现中文OFA模型的训练和推理

深度学习自然语言处理 来源:YeungNLP 2023-02-15 17:44 次阅读

OFA是阿里巴巴发布的多模态统一预训练模型,基于官方的开源项目,笔者对OFA在中文任务上进行了更好的适配以及简化,并且在中文的Image Caption任务上进行了实践验证,取得了非常不错的效果。本文将对上述工作进行分享。

01

模型简介

OFA是由阿里达摩院发布的多模态预训练模型,OFA将各种模态任务统一于Seq2Seq框架中。如下图所示,OFA支持的下游任务包括但不限于Image Caption、Image Classification、 Image genaration、Language Understanding等等。

cde33874-ad14-11ed-bfe3-dac502259ad0.png

02

项目介绍

项目动机 & 主要工作

本项目旨在以HuggingFace的transformers框架,实现中文OFA模型的训练和推理。并且希望将官方开源的fairseq版本的中文预训练权重,转化为transformers版本,以便用于下游任务进行finetune。

在OFA官方项目中,同时实现了fairseq和transformers两套框架的模型结构,并且分别开源了中文和英文的模型权重。基于下列原因,笔者开发了本项目:

由于笔者对transformers框架更熟悉,所以希望基于transformers框架,使用域内中文数据对OFA模型进行finetune,但OFA的中文预训练权重只有fairseq版本,没有transformers版本。

如何将fairseq版本的OFA预训练权重转换为transformers版本,从而便于下游任务进行finetune。

官方代码库中,由于需要兼容各种实验配置,所以代码也比较复杂冗余。笔者希望能够将核心逻辑剥离出来,简化使用方式。

基于上述动机,笔者的主要工作如下:

阅读分析OFA官方代码库,剥离出核心逻辑,包括训练逻辑、model、tokenizer等,以transformers框架进行下游任务的训练和推理,简化使用方式。

将官方的fairseq版本的中文预训练权重,转化为transformers版本,用于下游任务进行finetune。

基于本项目,使用中文多模态MUGE数据集中的Image Caption数据集,以LiT-tuning的方式对模型进行finetune,验证了本项目的有效性。

开源五个transformers版本的中文OFA模型权重,包括由官方权重转化而来的四个权重,以及笔者使用MUGE数据集finetune得到的权重。

训练细节

笔者使用MUGE数据集中的Image Caption数据,将其中的训练集与验证集进行合并,作为本项目的训练集。其中图片共5.5w张,每张图片包含10个caption,最终构成55w个图文对训练数据。关于MUGE数据集的说明详见官方网站。

caption数据,jsonl格式:

{"image_id": "007c720f1d8c04104096aeece425b2d5", "text": ["性感名媛蕾丝裙,尽显优雅撩人气质", "衣千亿,时尚气质名媛范", "80后穿唯美蕾丝裙,绽放优雅与性感", "修身连衣裙,女人就该如此优雅和美丽", "千亿包臀连衣裙,显出曼妙身姿", "衣千亿包臀连衣裙,穿的像仙女一样美", "衣千亿连衣裙,令人夺目光彩", "奔四女人穿气质连衣裙,高雅名媛范", "V领包臀连衣裙,青春少女感", "衣千亿包臀连衣裙,穿出曼妙身姿提升气质"]}
{"image_id": "00809abd7059eeb94888fa48d9b0a9d8", "text": ["藕粉色的颜色搭配柔软舒适的冰丝面料,满满的时尚感,大领设计也超级好看,露出性感锁骨线条,搭配宽腰带设计,优雅温柔又有气质", "传承欧洲文化精品女鞋,引领风尚潮流设计", "欧洲站风格女鞋,演绎个性时尚装扮", "高品质原创凉鞋,气质与华丽引领春夏", "欧洲风格站艾莎女鞋经典款式重新演绎打造新一轮原创单品优雅鞋型尽显女人的柔美,十分知性大方。随意休闲很显瘦,不仅显高挑还展现纤细修长的腿型,休闲又非常潮流有范。上脚舒适又百搭。", "阳春显高穿搭,气质单鞋不可缺少", "冰丝连衣裙,通勤优雅范", "一身粉色穿搭,梦幻迷人", "艾莎女性,浪漫摩登,演绎角色转换", "超时尚夏季凉鞋,一直“走”在时尚的前沿"]}

图片数据,tsv格式(img_id, ' ', img_content)(base64编码):

007c720f1d8c04104096aeece425b2d5 /9j/4AAQSkZJRgABAgAAAQA...
00809abd7059eeb94888fa48d9b0a9d8 /9j/2wCEAAEBAQEBAQEBAQE...

训练时,笔者使用LiT-tuning(Locked-image Text tuning)策略,也就是将encoder的权重进行冻结,仅对decoder的权重进行训练。加载ofa-cn-base预训练权重,使用55w的中文图文对, batch size=128,开启混合精度训练,warmup step为3000步,学习率为5e-5,使用cosine衰减策略,训练10个epoch,大约42500个step,最终训练loss降到0.47左右。

由于encoder与decoder共享词向量权重,笔者还分别尝试了冻结与不冻结词向量两种训练方式,两者的训练loss的变化趋势如下图所示。可以看到,训练时不冻结词向量权重,模型的收敛速度提升非常显著, 但相应地也需要更多显存。在训练时冻结词向量权重,可以节省显存并加快训练速度,将freeze_word_embed设为true即可。

ce0f0f26-ad14-11ed-bfe3-dac502259ad0.png

使用方法

模型的使用方法非常简单,首先将项目clone到本地机器上,并且安装相关依赖包。

gitclonehttps://github.com/yangjianxin1/OFA-Chinese.git
pip install -r requirements.txt

使用如下代码,即可加载笔者分享的模型权重(代码会将模型权重自动下载到本地),根据图片生成对应的文本描述。

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'
# 加载预训练模型权重
model = OFAModelForCaption.from_pretrained(model_name_or_path)
tokenizer = BertTokenizerFast.from_pretrained(model_name_or_path)


# 定义图片预处理逻辑
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
# 加载图片,并且预处理
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))

在项目中,笔者还上传了模型训练、推理、权重转化等脚本,更多细节可参考项目代码。

03

效果展示

下列测试图片均为从电商网站中随机下载的,并且测试了不同模型权重的生成效果。

从生成效果来看,总结如下:

ofa-cn-base-muge是笔者将由官方fairseq版本的OFA-CN-Base-MUGE权重转换而来的,其生成效果非常不错。证明了fairseq权重转换为transformers权重的逻辑的有效性。

ofa-cn-base-muge-v2是笔者使用ofa-cn-base进行finetune得到的,其效果远远优于ofa-cn-base,并且与ofa-cn-base-muge旗鼓相当,证明了本项目的训练逻辑的有效性。

04

结语

在本文中,笔者分享了关于中文OFA的项目实践,实现了将fairseq版本的OFA权重转换为transformers权重,并且基于MUGE数据集进行了项目验证,在电商的Image Caption任务上取得了非常不错的效果。

就Image Caption任务而言,借助OFA模型强大的预训练能力,如果有足够丰富且高质量的域内图文对数据,例如电商领域的<图片,商品卖点文本>数据,能够训练得到一个高质量的卖点生成模型,在实际的应用场景中发挥作用。

笔者还分享了5个transformers版本的中文OFA权重,读者可以基于该预训练权重,在下游的多模态任务中进行finetune,相信可以取得非常不错的效果。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OFAF
    +关注

    关注

    0

    文章

    2

    浏览量

    1929

原文标题:OFA-Chinese:中文多模态统一预训练模型

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用基于Transformers的API在CPU上实现LLM高效推理

    英特尔 Extension for Transformers是英特尔推出的一个创新工具包,可基于英特尔 架构平台,尤其是第四代英特尔 至强 可扩展处理器(代号 SapphireRapids,SPR)显著加速基于Transformers的大语言
    的头像 发表于 01-22 11:11 2459次阅读
    使用基于<b class='flag-5'>Transformers</b>的API在CPU上<b class='flag-5'>实现</b>LLM高效<b class='flag-5'>推理</b>

    Pytorch模型训练实用PDF教程【中文

    本教程实际应用、工程开发为目的,着重介绍模型训练过程中遇到的实际问题和方法。在机器学习模型开发中,主要涉及三大部分,分别是数据、模型和损失
    发表于 12-21 09:18

    分词工具Hanlp基于感知机的中文分词框架

    ,构成流水线式的系统。本文先介绍中文分词框架部分内容。中文分词训练只需指定输入语料的路径(单文档时为文件路径,多文档时为文件夹路径,灵活处理),以及
    发表于 04-03 11:28

    Dllite_micro (轻量级的 AI 推理框架

    DLLite-Micro 是一个轻量级的 AI 推理框架,可以为 OpenHarmony OS 的轻量设备和小型设备提供深度模型推理能力DLLite-Micro 向开发者提供清晰、易
    发表于 08-05 11:40

    用tflite接口调用tensorflow模型进行推理

    摘要本文为系列博客tensorflow模型部署系列的一部分,用于实现通用模型的部署。本文主要实现用tflite接口调用tensorflow模型
    发表于 12-22 06:51

    EIQ onnx模型转换为tf-lite失败怎么解决?

    我们正在尝试将 tflite 框架与 npu 一起使用来进行机器学习。这是我们的步骤:1)用pytorch训练一个模型2) onnx格式导出模型
    发表于 03-31 08:03

    如何提高YOLOv4模型推理性能?

    使用 PyTorch 对具有非方形图像的 YOLOv4 模型进行了训练。 将 权重转换为 ONNX 文件,然后转换为中间表示 (IR)。 无法确定如何获得更好的推理性能。
    发表于 08-15 06:58

    HarmonyOS:使用MindSpore Lite引擎进行模型推理

    使用 MindSpore Lite 推理框架时,需要释放已经创建的模型。 // 释放模型 OH_AI_ModelDestroy(&model); 调测验证 编写 CMakeL
    发表于 12-14 11:41

    超大Transformer语言模型的分布式训练框架

    模型的预训练计算。 大模型是大势所趋 近年来,NLP 模型的发展十分迅速,模型的大小每年1-
    的头像 发表于 10-11 16:46 2621次阅读
    超大Transformer语言<b class='flag-5'>模型</b>的分布式<b class='flag-5'>训练</b><b class='flag-5'>框架</b>

    探究超大Transformer语言模型的分布式训练框架

    NVIDIA Megatron 是一个基于 PyTorch 的框架,用于训练基于 Transformer 架构的巨型语言模型。本系列文章将详细介绍Megatron的设计和实践,探索这一框架
    的头像 发表于 10-20 09:25 2382次阅读

    三种主流模型部署框架YOLOv8推理演示

    深度学习模型部署有OpenVINO、ONNXRUNTIME、TensorRT三个主流框架,均支持Python与C++的SDK使用。对YOLOv5~YOLOv8的系列模型,均可以通过C++推理
    的头像 发表于 08-06 11:39 2579次阅读

    深度学习框架区分训练还是推理

    模型,以便将来能够进行准确的预测。推理是指在训练完成后,使用已经训练好的模型进行新的预测。然而,深度学习
    的头像 发表于 08-17 16:03 1314次阅读

    视觉深度学习迁移学习训练框架Torchvision介绍

    Torchvision是基于Pytorch的视觉深度学习迁移学习训练框架,当前支持的图像分类、对象检测、实例分割、语义分割、姿态评估模型的迁移学习训练与评估。支持对数据集的合成、变换、
    的头像 发表于 09-22 09:49 841次阅读
    视觉深度学习迁移学习<b class='flag-5'>训练</b><b class='flag-5'>框架</b>Torchvision介绍

    主流大模型推理框架盘点解析

    vLLM是一个开源的大模型推理加速框架,通过PagedAttention高效地管理attention中缓存的张量,实现了比HuggingFace T
    发表于 10-10 15:09 4921次阅读
    主流大<b class='flag-5'>模型</b><b class='flag-5'>推理</b><b class='flag-5'>框架</b>盘点解析

    摩尔线程和滴普科技完成大模型训练推理适配

    近日,摩尔线程与滴普科技宣布了一项重要合作成果。摩尔线程的夸娥(KUAE)千卡智算集群与滴普科技的企业大模型Deepexi已完成训练推理适配,共同实现了700亿参数LLaMA2大语言
    的头像 发表于 05-30 10:14 483次阅读