当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

news2025/8/13 13:16:54

导读

用户生成内容(User Generated Content,UGC)是互联网上多模态内容的重要组成部分,UGC数据级的不断增长促进了各大多模态内容平台的繁荣。在海量多模态数据和深度学习大模型的加持下,AI生成内容(AI Generated Content,AIGC)呈现出爆发性增长趋势。其中,文图生成(Text-to-image Generation)任务是流行的跨模态生成任务,旨在生成与给定文本对应的图像。典型的文图模型例如OpenAI开发的DALL-E和DALL-E2。近期,业界也训练出了更大、更新的文图生成模型,例如Google提出的Parti和Imagen,基于扩散模型的Stable Diffusion等。

然而,上述模型一般不能用于处理中文的需求,而且上述模型的参数量庞大,很难被开源社区的广大用户直接用来Fine-tune和推理。此外,文图生成模型的训练过程对于知识的理解比较缺乏,容易生成反常识内容。本次,EasyNLP开源框架在先前推出的基于Transformer的文图生成模型(看这里)基础上,进一步推出了融合丰富知识图谱知识的文图生成模型ARTIST,能在知识图谱的指引上,生成更加符合常识的图片。我们在中文文图生成评测基准MUGE上评测了ARTIST的生成效果,其生成效果名列榜单第一。我们也向开源社区免费开放了知识增强的中文文图生成模型的Checkpoint,以及相应Fine-tune和推理接口。用户可以在我们开放的Checkpoint基础上进行少量领域相关的微调,在不消耗大量计算资源的情况下,就能一键进行各种艺术创作。

EasyNLP(https://github.com/alibaba/EasyNLP)是阿⾥云机器学习PAI 团队基于 PyTorch 开发的易⽤且丰富的中⽂NLP算法框架,⽀持常⽤的中⽂预训练模型和⼤模型落地技术,并且提供了从训练到部署的⼀站式 NLP 开发体验。EasyNLP 提供了简洁的接⼝供⽤户开发 NLP 模型,包括NLP应⽤ AppZoo 和预训练 ModelZoo,同时提供技术帮助⽤户⾼效的落地超⼤预训练模型到业务。由于跨模态理解需求的不断增加,EasyNLP也⽀持各种跨模态模型,特别是中⽂领域的跨模态模型,推向开源社区,希望能够服务更多的 NLP 和多模态算法开发者和研 究者,也希望和社区⼀起推动 NLP /多模态技术的发展和模型落地。

本⽂简要介绍ARTIST的技术解读,以及如何在EasyNLP框架中使⽤ARTIST模型。

ARTIST模型详解

ARTIST模型的构建基于Transformer模型 ,将文图生成任务分为两个阶段进行,第一阶段是通过VQGAN模型对图像进行矢量量化,即对于输入的图像,通过编码器将图像编码为定长的离散序列,解码阶段是以离散序列作为输入,输出重构图。第二阶段是将文本序列和编码后的图像序列作为输入,利用GPT模型学习以文本序列为条件的图像序列生成。为了增强模型先验,我们设计了一个Word Lattice Fusion Layer,将知识图谱中的的实体知识引入模型,辅助图像中对应实体的生成,从而使得生成的图像的实体信息更加精准。下图是ARTIST模型的系统框图,以下从文图生成总体流程和知识注入两方面介绍本方案。

第一阶段:基于VQGAN的图像矢量量化

在VQGAN的训练阶段,我们利用数据中的图片,以图像重构为任务目标,训练一个图像词典的codebook,其中,这一codebook保存每个image token的向量表示。实际操作中,对于一张图片,通过CNN Encoder编码后得到中间特征向量,再对特征向量中的每个编码位置寻找codebook中距离最近的表示,从而将图像转换成由codebook中的imaga token表示的离散序列。第二阶段中,GPT模型会以文本为条件生成图像序列,该序列输入到VQGAN Decoder,从而重构出一张图像。

第二阶段:以文本序列为输入利用GPT生成图像序列

为了将知识图谱中的知识融入到文图生成模型中,我们首先通过TransE对中文知识图谱CN-DBpedia进行了训练,得到了知识图谱中的实体表示。在GPT模型训练阶段,对于文本输入,首先识别出所有的实体,然后将已经训练好的实体表示和token embedding进行结合,增强实体表示。但是,由于每个文本token可能属于多个实体,如果将多个实体的表示全都引入模型,可能会造成知识噪声问题。所以我们设计了实体表示交互模块,通过计算每个实体表示和token embedding的交互,为所有实体表示加权,有选择地进行知识注入。特别地,我们计算每个实体表征对对于当前token embedding的重要性,通过内积进行衡量,然后将实体表示的加权平均值注入到当前token embedding中,计算过程如下:

得到知识注入的token embedding后,我们通过构建具有layer norm的self-attention网络,构建基于Transformer的GPT模型,过程如下:

在GPT模型的训练阶段,将文本序列和图像序列拼接作为输入,假设文本序列为w, 生成图像的imaga token表示的离散序列概率如下所示:

最后,模型通过最大化图像部分的负对数似然来训练,得到模型参数的值。

ARTIST模型效果

标准数据集评测结果

我们在多个中文数据集上评估了ARTIST模型的效果,这些数据集的统计数据如下所示:

在Baseline方面,我们考虑两种情况:zero-shot learning和标准fine-tuning。我们将40亿参数的中文CogView模型作为zero-shot learner,我们也考虑两个模型规模和ARTIST模型规模相当的模型,分别为开源的DALL-E模型和OFA模型。实验数据如下所示:

从上可以看出,我们的模型在参数量很小的情况(202M)下也能获得较好的图文生成效果。为了衡量注入知识的有效性,我们进一步进行了相关评测,将知识模块移除,实验效果如下:

上述结果可以清楚地看出知识注入的作用。

案例分析

为了更加直接地比较不同场景下,ARTIST和baseline模型生成图像质量对比,我们展示了电商商品场景和自然风光场景下各个模型生成图像的效果,如下图:

电商场景效果对比

自然风光场景效果对比

上图可以看出ARTIST生成图像质量的优越性。我们进一步比较我们先前公开的模型(看这里)和具有丰富知识的ARTIST模型的效果。在第一个示例“手工古风复原款发钗汉服配饰宫廷发簪珍珠头饰发冠”中,原始生成的结果主要突出了珍珠发冠这个物体。在ARTIST模型中,“古风”等词的知识注入过程使得模型生成结果会更偏向于古代中国的珍珠发簪。

第二个示例为“一颗绿色的花椰菜在生长”。由于模型在训练时对“花椰菜”物体样式掌握不够,当不包含知识注入模块时,模型根据“绿色”和“菜”的提示生成了有大片绿叶的单株植物。在ARTIST模型中,生成的物体更接近于形如花椰菜的椭圆形的植物。

ARTIST模型在MUGE榜单的评测结果

MUGE(Multimodal Understanding and Generation Evaluation,链接)是业界首个大规模中文多模态评测基准,其中包括基于文本的图像生成任务。我们使用本次推出的ARTIST模型在中文MUGE评测榜单上验证了前述文图生成模型的效果。从下图可见,ARTIST模型生成的图像在FID指标(Frechet Inception Distance,值越低表示生成图像质量越好)上超越了榜单上的其他结果。

ARTIST模型的实现

在EasyNLP框架中,我们在模型层构建了ARTIST模型的Backbone,其主要是GPT,输入分别是token id和包含的实体的embedding,输出是图片各个patch对应的离散序列。其核⼼代码如下所示:

# in easynlp/appzoo/text2image_generation/model.py

# init
self.transformer = GPT_knowl(self.config)

# forward
x = inputs['image']
c = inputs['text']
words_emb = inputs['words_emb']

x = x.permute(0, 3, 1, 2).to(memory_format=torch.contiguous_format)
# one step to produce the logits
_, z_indices = self.encode_to_z(x) 
c_indices = c

cz_indices = torch.cat((c_indices, a_indices), dim=1)

# make the prediction
logits, _ = self.transformer(cz_indices[:, :-1], words_emb, flag=True)
# cut off conditioning outputs - output i corresponds to p(z_i | z_{<i}, c)
logits = logits[:, c_indices.shape[1]-1:]

在数据预处理过程中,我们需要获得当前样本的输入文本和实体embedding,从而计算得到words_emb:

# in easynlp/appzoo/text2image_generation/data.py

# preprocess word_matrix
words_mat = np.zeros([self.entity_num, self.text_len], dtype=np.int)
if len(lex_id) > 0:
    ents = lex_id.split(' ')[:self.entity_num]
    pos_s = [int(x) for x in pos_s.split(' ')]
    pos_e = [int(x) for x in pos_e.split(' ')]
    ent_pos_s = pos_s[token_len:token_len+self.entity_num]
    ent_pos_e = pos_e[token_len:token_len+self.entity_num]

    for i, ent in enumerate(ents):
        words_mat[i, ent_pos_s[i]:ent_pos_e[i]+1] = ent
encoding['words_mat'] = words_mat

# in batch_fn
words_mat = torch.LongTensor([example['words_mat'] for example in batch])
words_emb = self.embed(words_mat)

ARTIST模型使⽤教程

以下我们简要介绍如何在EasyNLP框架使⽤ARTIST模型。

安装EasyNLP

⽤户可以直接参考GitHub(https://github.com/alibaba/EasyNLP)上的说明安装EasyNLP算法框架。

数据准备

  1. 准备自己的数据,将image编码为base64形式:ARTIST在具体领域应用需要finetune, 需要用户准备下游任务的训练与验证数据,为tsv文件。这⼀⽂件包含以制表符\t分隔的三列(idx, text, imgbase64),第一列是文本编号,第二列是文本,第三列是对应图片的base64编码。样例如下:
64b4109e34a0c3e7310588c00fc9e157    韩国可爱日系袜子女中筒袜春秋薄款纯棉学院风街头卡通兔子长袜潮  iVBORw0KGgoAAAAN...MAAAAASUVORK5CYII=

下列⽂件已经完成预处理,可⽤于训练和测试:

https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/T2I_train.tsv
https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/T2I_val.tsv
https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/T2I_test.tsv

2.将输入数据与lattice、entity位置信息拼接到一起:输出格式为以制表符\t分隔的几列(idx, text, lex_ids, pos_s, pos_e, seq_len, [Optional] imgbase64)

# 下载entity to entity_id映射表
wget wget -P ./tmp https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/entity2id.txt

python examples/text2image_generation/preprocess_data_knowl.py \
    --input_file ./tmp/T2I_train.tsv \
    --entity_map_file ./tmp/entity2id.txt \
    --output_file ./tmp/T2I_knowl_train.tsv

python examples/text2image_generation/preprocess_data_knowl.py \
    --input_file ./tmp/T2I_val.tsv \
    --entity_map_file ./tmp/entity2id.txt \
    --output_file ./tmp/T2I_knowl_val.tsv

python examples/text2image_generation/preprocess_data_knowl.py \
    --input_file ./tmp/T2I_test.tsv \
    --entity_map_file ./tmp/entity2id.txt \
    --output_file ./tmp/T2I_knowl_test.tsv

ARTIST文图生成微调和预测示例

在文图生成任务中,我们对ARTIST进行微调,之后用于微调后对模型进行预测。相关示例代码如下:

# 下载entity_id与entity_vector的映射表
wget -P ./tmp https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/artist_text2image/entity2vec.pt

# finetune
python -m torch.distributed.launch $DISTRIBUTED_ARGS examples/text2image_generation/main_knowl.py \
    --mode=train \
    --worker_gpu=1 \
    --tables=./tmp/T2I_knowl_train.tsv,./tmp/T2I_knowl_val.tsv \
    --input_schema=idx:str:1,text:str:1,lex_id:str:1,pos_s:str:1,pos_e:str:1,token_len:str:1,imgbase64:str:1,  \
    --first_sequence=text \
    --second_sequence=imgbase64 \
    --checkpoint_dir=./tmp/artist_model_finetune \
    --learning_rate=4e-5 \
    --epoch_num=2 \
    --random_seed=42 \
    --logging_steps=100 \
    --save_checkpoint_steps=200 \
    --sequence_length=288 \
    --micro_batch_size=8 \
    --app_name=text2image_generation \
    --user_defined_parameters='
        pretrain_model_name_or_path=alibaba-pai/pai-artist-knowl-base-zh
        entity_emb_path=./tmp/entity2vec.pt
        size=256
        text_len=32
        img_len=256
        img_vocab_size=16384
      ' 

# predict
python -m torch.distributed.launch $DISTRIBUTED_ARGS examples/text2image_generation/main_knowl.py \
    --mode=predict \
    --worker_gpu=1 \
    --tables=./tmp/T2I_knowl_test.tsv \
    --input_schema=idx:str:1,text:str:1,lex_id:str:1,pos_s:str:1,pos_e:str:1,token_len:str:1, \
    --first_sequence=text \
    --outputs=./tmp/T2I_outputs_knowl.tsv \
    --output_schema=idx,text,gen_imgbase64 \
    --checkpoint_dir=./tmp/artist_model_finetune \
    --sequence_length=288 \
    --micro_batch_size=8 \
    --app_name=text2image_generation \
    --user_defined_parameters='
        entity_emb_path=./tmp/entity2vec.pt
        size=256
        text_len=32
        img_len=256
        img_vocab_size=16384
        max_generated_num=4
      '

在阿里云机器学习平台PAI上使用Transformer实现文图生成

PAI-DSW(Data Science Workshop)是阿里云机器学习平台PAI开发的云上IDE,面向不同水平的开发者,提供了交互式的编程环境(文档)。在DSW Gallery中,提供了各种Notebook示例,方便用户轻松上手DSW,搭建各种机器学习应用。我们也在DSW Gallery中上架了使用Transformer模型进行中文文图生成的Sample Notebook(见下图),欢迎大家体验!

未来展望

在这一期的工作中,我们在EasyNLP框架中扩展了基于Transformer的中文文图生成功能,同时开放了模型的Checkpoint,方便开源社区用户在资源有限情况下进行少量领域相关的微调,进行各种艺术创作。在未来,我们计划在EasyNLP框架中推出更多相关模型,敬请期待。我们也将在EasyNLP框架中集成更多SOTA模型(特别是中文模型),来支持各种NLP和多模态任务。此外,阿里云机器学习PAI团队也在持续推进中文多模态模型的自研工作,欢迎用户持续关注我们,也欢迎加入我们的开源社区,共建中文NLP和多模态算法库!

Github地址:https://github.com/alibaba/EasyNLP

Reference

  1. Chengyu Wang, Minghui Qiu, Taolin Zhang, Tingting Liu, Lei Li, Jianing Wang, Ming Wang, Jun Huang, Wei Lin. EasyNLP: A Comprehensive and Easy-to-use Toolkit for Natural Language Processing. EMNLP 2022
  2. Tingting Liu*, Chengyu Wang*, Xiangru Zhu, Lei Li, Minghui Qiu, Ming Gao, Yanghua Xiao, Jun Huang. ARTIST: A Transformer-based Chinese Text-to-Image Synthesizer Digesting Linguistic and World Knowledge. EMNLP 2022
  3. Aditya Ramesh, Mikhail Pavlov, Gabriel Goh, Scott Gray, Chelsea Voss, Alec Radford, Mark Chen, Ilya Sutskever. Zero-Shot Text-to-Image Generation. ICML 2021: 8821-8831

原文链接

本文为阿里云原创内容,未经允许不得转载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(七)文件——PHP

文章目录第七章 文件1 文件包含**1.1 include()函数****1.2 require()函数**2 文件的读取和写入**2.1 文件模式****2.2 文件读取****2.3 文件写入**3 文件上传3.1 创建表单3.2 创建脚本3.3 实例第七章 文件 1 文件包含 您可以在服务器执行PHP文件之前将其内容包含到另一个PHP…

支付宝"手机网站支付"主域名申请了,二级域名还要申请吗

微信商城小程序里可以用支付宝付款吗&#xff1f;当然可以了&#xff0c;不过需要去支付宝官方网站去申请一个接口&#xff0c;注意选对产品&#xff0c;支付宝提供了很多种接口&#xff0c;微信里要用到的支付宝付款属于“手机网站支付”这个产品&#xff0c;重要的事情说三遍…

一文讲解,Linux内核——内存管理(建议收藏)

一.内存的基础知识&#xff1a; 1.写程序到程序运行的过程&#xff1a; &#xff08;1&#xff09;编译&#xff1a;由编译程序将用户代码编译成若干个目标模块&#xff08;把高级语言翻译成机器语言&#xff09; &#xff08;2&#xff09;链接&#xff1a;由链接程序将编译…

头歌平台-MongoDB 之滴滴、摩拜都在用的索引

第1关&#xff1a;了解并创建一个简单索引 > use test switched to db test > db.student.insert([{_id:1,name:"王小明",age:15,score:90},{_id:2,name:"周晓晓",age:18,score:86},{_id:3,name:"王敏",age:20,score:96},{_id:4,name:&qu…

kudu集群数据节点(tserver)扩容(缩容)

背景&#xff1a; 4个数据节点有数据倾斜&#xff0c;rebalance后依旧如此&#xff0c;检查分片数量和分布情况也是均衡的。最后发现相同的分片在其中一个节点存储消耗的磁盘资源比其他节点要大很多&#xff0c;导致了这个节点磁盘消耗较快。于是决定更换节点的磁盘 操作计划如…

【freeRTOS】操作系统之一-任务调度

一. 任务调度 ​ FreeRTOS操作系统支持三种调度方式&#xff1a;抢占式调度&#xff0c;时间片调度和合作式调度。实际应用主要是抢占式调度和时间片调度&#xff0c;合作式调度用到的很少。 挂起/阻塞/就绪/运行 三种基本状态 进程在运行中不断地改变其运行状态。通常&…

智能网联汽车网络安全攻击与防御技术概述

作者 | 王博文 上海控安可信软件创新研究院研究员 来源 | 鉴源实验室 01 引言 在汽车电动化、网联化、智能化和共享化等新四化的发展趋势下&#xff0c;智能网联汽车&#xff08;Intelligent Connected Vehicles&#xff0c;ICVs&#xff09;已经是新时代的必然产物。在智能网…

【学习笔记】浅谈闵可夫斯基和

学这东西主要是 这道题 要用 233 定义&#xff1a;给定两个凸包AAA,BBB&#xff0c;定义C{ab∣a∈A,b∈B}C\{ab|a\in A,b\in B\}C{ab∣a∈A,b∈B} &#xff0c;其中aaa,bbb均为坐标。 不好意思图是嫖的 首先我们感性认识一下。可以直接将一个凸包的顶点换成另一个凸包&#x…

实现登陆模块时Cookie,Session,Token的理解

目录引言一、简化版登陆&#xff08;不保存登录状态&#xff09;二、Session 登陆三、CookieSession 实现登录四、Token登陆引言 先思考问题&#xff1a; 1、如何实现登陆&#xff1f; &#xff08;1&#xff09;表单输入账号密码 &#xff08;2&#xff09;后台数据库验证 …

治愈系书单|林曦《只生欢喜不生愁》

《只生欢喜不生愁》是水墨画家林曦的艺术生活随笔集&#xff0c;谈艺术之道&#xff0c;论无用之美。      全书按主题分为六辑&#xff1a;“艺可通道”“观照世间”“得自在禅”“心安之所”“写给时间”“赤子之心”&#xff0c;文字轻盈、意境优雅。林曦以手艺人之道&a…

Java#13(String Builder介绍及其常用办法)

目录 一.String Builder 1.理解:可以将String Builder当作一个容器,创建之后的内容是可以变的 2.作用:可以提高字符串的操作效率 二. StringBuilder中的常用方法 1.public StringBuilder append (任意类型) 添加数据&#xff0c;并返回对象本身 2.public StringBuild…

Keysight是德科技e5063A网络分析仪-安泰测试

Keysight E5063A ENA 是一款经济适用的台式矢量网络分析仪&#xff0c;可用于测试简单的无源元器件&#xff0c;例如频率最高达到 18 GHz 的天线、滤波器、电缆或连接器。 作为业界闻名的 ENA 系列中的一员&#xff0c;它传承了一致的测量框架&#xff0c;以便提高效率和生产率…

大学生静态HTML鲜花网页设计作品 DIV布局网上鲜花介绍网页模板代码 DW花店网站制作成品 web网页制作与实现

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

RabbitMQ初步到精通-第二章-RabbitMQ介绍

第二章 RabbitMQ介绍 1、RabbitMQ简介 RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。RabbitMQ最初起源于金融系统&#xff0c;用于在分布式系统中存储转发消息&#xff0c;在易用性、扩展性、高可用性等方面表现不俗。 rabbit- 兔子&#xff0c;兔子的特点是什么? 轻…

图解https读书笔记

7.确保Web安全的HTTPS 7.2 HTTP 加密 认证 完整性保护 HTTPS https http ssL(Secure socket layer)client: 使用servcer端的publickey对消息加密-----》server&#xff1a;收到消息&#xff0c;用privatekey进行解密参考&#xff1a;彻底搞懂HTTPS的加密原理_峰子2012的博…

VS+QT错误集合

主要是使用VSQT时遇到等一些问题&#xff0c;现在使用等是VS2015&#xff08;专业版&#xff09; QT5.13.1 这章主要解决遇到的无法解析等外部符号这类问题 1、LNK2001 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl Process::metaObject…

【分析笔记】Linux 4.9 backlight 子系统分析

相关信息 内核版本&#xff1a;Linux version 4.9.56 驱动文件&#xff1a;lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上&#xff0c;面对应用层提供统一的设备节点入口同级&#xff0c;面对驱动层提供设备驱动加载卸载通知事件&#xff0c;以及背光…

闲人闲谈PS之三十二——业务工程预算和PS成本计划

惯例闲话&#xff1a;年底&#xff0c;又要开始忙了&#xff0c;今年这一年&#xff0c;收获还不错&#xff0c;至少规划了第三年实现的目标——工程行业彩虹图&#xff0c;在今年居然奇迹般的实现了&#xff0c;看样子闲人还是保守了。还是应验了那句话&#xff0c;只要标准化…

React插槽

在开发中&#xff0c;我们抽取了一个组件&#xff0c;但是为了让这个组件具备更强的通用性&#xff0c;我们不能将组件中的内容限制为固定的div、span等等这些元素。我们应该让使用者可以决定某一块区域到底存放什么内容。这里可以使用插槽。 而在React中&#xff0c;我们可以通…

Spring Cloud Circuit Breaker 使用示例

Spring Cloud Circuit Breaker 使用示例 作者&#xff1a; Grey 原文地址&#xff1a; 博客园&#xff1a;Spring Cloud Circuit Breaker 使用示例 CSDN&#xff1a;Spring Cloud Circuit Breaker 使用示例 说明 Spring Cloud Circuit breaker提供了一个跨越不同断路器实现…