自从3月份OpenAI发布具有识图能力的多模态大模型GPT-4,大模型的能力便不再局限于文本输入-文本输出的形式,人们可以上传视觉图片来与大模型进行聊天和交互。遗憾的是,时至今日绝大部分用户也都还没有拿到GPT-4输入图片的权限,无法体验到结合视觉和语言两大模态的大模型的卓越能力,而且GPT-4也没有叙述或者开源GPT模型多模态预训练的方案。与工业界不同的是,学术界和开源界则充分探索了视觉预训练模型(比如ViT, Vision Transformer)与大语言模型 (LLM,Large Language Model) 结合,从而让目前的LLM获得输入图片、认识图片的能力。其中的代表工作包括国外团队开源的Mini-GPT4[1],LLaVA[2]等,国内团队开源的VisuaGLM[3],mPLUG-Owl[4]等工作。大部分的开源方案参考了BLIP2的训练方案[5],选择冻结LLM部分的参数训练或者采用Lora等parameter-efficient的微调训练方式。
特点 1
结合视觉和语言两大模态的卓越能力
IDEA研究院封神榜团队在5月17日发布“姜子牙通用大模型v1”之后,本周将开启发布姜子牙通用模型的垂直能力,而此次Ziya-BLIP2-14B-Visual-v1多模态大模型(以下简称Ziya-Visual模型)将是这个开源垂直能力系列的第一个。和Ziya大模型一样,Ziya-Visual模型具备中英双语能力,特别是中文能力较为突出。和所有基于BLIP2的方案类似,我们简单高效的扩展了LLM的识图能力。该模型对比VisualGLM、mPLUG-Owl模型,在视觉问答(VQA)评价和GPT-4打分评价[2]中,展现了一些优势。
Ziya-Visual模型开源地址:https://huggingface.co/IDEA-CCNL/Ziya-BLIP2-14B-Visual-v1
Demo体验地址:https://huggingface.co/spaces/IDEA-CCNL/Ziya-BLIP2-14B-Visual-v1-Demo
Ziya开源模型:https://huggingface.co/IDEA-CCNL/Ziya-LLaMA-13B-v1
封神榜项目主页:https://github.com/IDEA-CCNL/Fengshenbang-LM
特点 2
高质量数据集基础上训练模型
一
训练数据
在中文视觉问答模型训练上,最大的问题就是数据量少,数据质量差。首先,封神榜团队在开源数据的基础上清洗、积累了一部分高质量数据;其次,我们通过翻译api得到了一部分英-中双语数据集,我们发现虽然翻译数据集会有“翻译腔”等问题,但是借助Ziya-v1的双语能力,最终的语言输出是能够缓解这一问题的;最后,团队结合BLIP,Grounded SAM[6]等先进视觉技术,抽取图像描述的粗粒度信息和图像中物体、方位等细粒度信息,转化为语言描述形式,构造了一部分高质量数据。最终,Ziya-Visual构造了约2千万的优质数据进行训练。和Mini-GPT4、LLaVA一样,Ziya-Visual-v1主要是一个以数据为中心的工作,因此数据的数量和质量非常重要。
二
模型训练
为了更好的结合视觉预训练模型和LLM的能力,和Mini-GPT4和LLaVA工作一样,Ziya-Visual-v1的训练遵循了BLIP2提出的经典网络结构和两阶段训练的范式。而且我们在实验过程中发现,是否训练Vision Encoder的参数对于最终的生成效果影响很小。因此,在整体模型上,视觉处理部分我们继承了BLIP2的ViT + QFormer参数,LLM部分继承了Ziya-v1的权重,这两个部分权重都是冻结不参与训练的。我们主要训练的部分是视觉映射层(Projection Layer)。第一阶段,我们使用图像Caption数据训练映射层,使Vision Encder抽取出来的图像特征能够和LLM中的文本特征空间进行对齐;第二阶段,我们使用图像问答数据集,进一步微调Ziya-Visual的视觉-语言能力。
模型训练完成之后,图像首先通过Vision Encoder做一次图像特征的抽取;再通过映射层,图像特征就转化为LLM能够理解的特殊token;结合人类输入的问题,LLM就能够回答和图像相关的各种问题了。而且,由于Ziya-v1本身就具备非常出色的推理能力和创作能力,Ziya-Visual继承了这些能力,能够很好地回答用户的各种问题或者针对用户的需求进行想象、创作,在下文中我们也想展示一些这样的例子。
Ziya-Visual-v1模型结构
首先是VQA效果上的评价,可以看到Ziya-Visual模型在GQA的中文和英文测试集上大部分指标均高于VisualGLM,而在BLUE-4上分数较低,这表明Ziya-Visual在大多数开放域的多模态问答上生成的答案更为泛化和准确,但在一些发散性的问题上生成答案具有自主性。对于mPLUG-Owl模型,英文采用了 mPLUG-Owl 7B Instruction tuning (LoRA) 版本,中文则采用了多语言的mPLUG-Owl 7B (Multilingual) Instruction tuning (LoRA) 版本。因此在英文测评分数上高于双语版本的Ziya-Visual,另一方面,由于Ziya-Visual采用的LLaMA具备更优秀的多语言理解和生成能力,并且在Ziya-Visual二阶段训练时也通过翻译工具引入了多语言多模态训练语料,因此在中文数据的测评结果上更有优势。
GQA评价
其次我们使用LLaVA的做法利用GPT-4打分评价,该方法利用coco数据集中的caption和物体检测框信息输入给GPT-4;然后将Ziya-Visual和VisualGLM的图像问答的回答再输入到GPT-4,要求GPT-4从回答的有用性、相关性、准确性、细节程度进行评分(1-10分);LLaVA中将对话任务划分为conv(简单对话),detail(细节对话)和complex(复杂推理),all是三种对话任务的综合平均分。最终评价结果如下,可以看到在简单对话和细节对话中,Ziya-Viusual优于VisualGLM,在复杂推理中略输于VisualGLM,最终总体平均结果优于VisualGLM。在对比mPLUG-Owl中我们得到的结论是类似的,Ziya-Visual总体平均结果优于mPLUG-Owl。
GPT-4评价
通过case分析,我们发现Ziya-Visual倾向于提供简短准确的回答,而VisualGLM的回答更为丰富和发散,这可能可以解释为什么在简单对话和细节对话中,Ziya-Visual优于VisualGLM,但是复杂推理略输的原因。虽然没有经过细致的消融实验,但是我们倾向于这主要是图像问答训练数据不同引起的差异,而不是所使用LLM的差异。
以一个测试集中的例子进行分析:在下面这张图中,问题是“图片中两个手提箱的颜色是什么?”,两个模型的回答分别是:
● Ziya-Visual: 图像中的两个手提箱颜色不同。一个是棕色的,另一个是黑色的。
● VisualGLM: 图片中的两个手提箱是黑色和棕色的。它们有一个白色标签,表明它们是古董或复古物品。这些箱子可能是古董行李箱、旅行箱或古董家具的一部分。它们的设计和装饰可能表明它们在历史时期被用于各种目的。
GPT-4给出评分是Ziya-Visual 9分,VisualGLM 7分,GPT-4给出的理由是:
Ziya-Visual的回答简洁明了,直接回答了问题,给出了两个手提箱的颜色是黑色和棕色。VisualGLM的回答虽然也提到了手提箱的颜色,但是包含了一些不必要的信息,如白色标签和古董行李箱的用途等。虽然这些信息可能有趣,但它们并没有直接回答问题。因此,助手1的回答更有用、相关和准确。
coco测试集中的例子
Ziya-Visual
模型使用教程
目前模型和demo已经在huggingface上开源,可以很方便地通过代码或者gradio webui调用Ziya-Visual模型。使用过程有问题,请通过huggingface上提issue与我们交流。
代码调用
首先加载Ziya-Visual模型:需要注意的是Visual-Ziya的模型仓库只包含视觉模型部分的参数,Ziya LLM部分的参数通过扫描下方二维码获得:
https://huggingface.co/IDEA-CCNL/Ziya-LLaMA-13B-v1。
得到这两部分的模型参数后,我们加载模型:
from transformers import LlamaForCausalLM, LlamaTokenizer, BlipImageProcessor
from modeling_ziya_blip2 import ZiyaBLIP2ForConditionalGeneration
from PIL import Image
# model path of IDEA-CCNL/Ziya-LLaMA-13B-v1
LM_MODEL_PATH="local path of model Ziya-LLaMA-13B-v1"
lm_model = LlamaForCausalLM.from_pretrained(LM_MODEL_PATH)
tokenizer = LlamaTokenizer.from_pretrained(LM_MODEL_PATH)
# visual model
OPENAI_CLIP_MEAN = [0.48145466, 0.4578275, 0.40821073]
OPENAI_CLIP_STD = [0.26862954, 0.26130258, 0.27577711]
# demo.py is in the project path, so we can use local path ".". Otherwise you should use "IDEA-CCNL/Ziya-BLIP2-14B-Visual-v1"
model = ZiyaBLIP2ForConditionalGeneration.from_pretrained(".", language_model=lm_model)
image_size = model.config.vision_config.image_size
image_processor = BlipImageProcessor(
size={"height": image_size, "width": image_size},
image_mean=OPENAI_CLIP_MEAN,
image_std=OPENAI_CLIP_STD,
)
model.cuda() # if you use on cpu, comment this line
模型加载完毕后,我们就可以愉快地使用Ziya-Visual模型了:
generate_config = {
"max_new_tokens": 128,
"top_p": 0.1,
"temperature": 0.7
}
output = model.chat(
tokenizer=tokenizer,
pixel_values=image_processor(Image.open("wzry.jpg"), return_tensors="pt").pixel_values.to(model.device),
query="这是什么游戏",
previous_querys=[],
previous_outputs=[],
**generate_config,
)
print(output)
# 这是一款名为《王者荣耀》的多人在线竞技游戏。在游戏中,玩家扮演不同的角色,并与其他玩家进行战斗。游戏中的人物和环境都是虚拟的,但它们看起来非常逼真。玩家需要使用各种技能和策略来击败对手,并获得胜利。
二
Demo部署
我们已经在huggingface上部署了Ziya-Visual的Demo,用户可以直接通过git clone获得demo的代码:
git clone https://huggingface.co/spaces/IDEA-CCNL/Ziya-BLIP2-14B-Visual-v1-Demo
然后类似代码调用里的情况,注意将launch.py里面的LM_MODEL_PATH替换为自己本地目录下的Ziya-v1模型,之后就可以启动demo了:
python launch.py
最后通过浏览器访问Ziya-Visual Webui Demo:
Ziya-Visual Webui Demo例子
Ziya-Visual
能力展示
下面让我们来看一下Ziya-Visual的一些例子,直观感受下Ziya-Visual的视觉-问答能力。
这个例子展示了模型的识图能力、知识能力和创作能力。首先第一个问题中,模型识别出了图片中是电影《泰坦尼克号》的场景,并给出电影导演、发布时间、奖项成就等信息;第二个问题,模型根据用户的需求创作了一首现代爱情诗。
这个例子展示了Ziya-Visual传统中国文化的识别和理解能力,模型识别出了中国画中的信息,在得到提示《清明上河图》之后给出了也给出画家张择端和北宋的历史背景。
如果输入多张图片进行问答呢?
Ziya-Visual也是胜任的,在这个例子中,Ziya-Visual展现了强大的多图和多轮交互能力,根据用户给的三张图片,叙述了一个女士在城市夜景中邂逅一对母子猫咪,并与之交谈、分别的小故事。
更多有用、有意思的图像问答体验,等待你的开启~
封神榜团队现开放大模型交流群,有兴趣的同学可以添加:fengshenbang-lm 进群,欢迎分享你的Ziya-Visual二创内容。
未来属于多模态
GPT-4的到来预示着大模型未来将快速向多模态发展。依托于姜子牙通用大模型v-1通用能力,Ziya-Visual也展现了优秀的视觉-语言问答效果, 希望它的开源可以助力多模态大模型的技术发展。当然,目前Ziya-Visual也存在一些问题,比如对回答的幻觉现象比较严重、对图片细节缺乏理解等。封神榜团队会持续不断优化Ziya-Visual,构建高质量的图像问答数据集,利用先进的视觉模型和语言模型,进一步提升视觉-语言模型的实用性,也欢迎大家的持续关注和反馈,帮助我们快速成长。
参考链接
[1]https://arxiv.org/abs/2304.10592
[2]https://arxiv.org/abs/2304.08485
[3]https://github.com/THUDM/VisualGLM-6B
[4]https://arxiv.org/abs/2304.14178
[5]https://arxiv.org/abs/2301.12597
[6]https://github.com/IDEA-Research/Grounded-Segment-Anything
本文转载自社区供稿内容,不代表官方立场。了解更多,请关注微信公众号“模思空间”。
https://huggingface.link/tougao
本文分享自微信公众号 - Hugging Face(gh_504339124f0f)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。