Home

Awesome

🇨🇳中文 | 🌐English

<p align="center"> <br> <img src="./pics/banner.png" width="700"/> <br> </p> <p align="center"> <img alt="GitHub" src="https://img.shields.io/github/license/airaria/Visual-Chinese-LLaMA-Alpaca.svg?color=red"> <img alt="GitHub top language" src="https://img.shields.io/github/languages/top/airaria/Visual-Chinese-LLaMA-Alpaca"> <img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/airaria/Visual-Chinese-LLaMA-Alpaca"> <a href='https://huggingface.co/ziqingyang/visualcla-7b-v0.1'><img src='https://img.shields.io/badge/🤗 Hugging Face-Model-purple'></a> </p>

Visual-Chinese-LLaMA-AlpacaVisualCLA)是基于中文LLaMA&Alpaca大模型项目开发的多模态中文大模型。VisualCLA在中文LLaMA/Alpaca模型上增加了图像编码等模块,使LLaMA模型可以接收视觉信息。在此基础上,使用了中文图文对数据进行了多模态预训练,对齐图像与文本表示,赋予其基本的多模态理解能力;并使用多模态指令数据集精调,增强其对多模态指令的理解、执行和对话能力。

本项目仍处于开发阶段,目前发布的是供预览的测试版本,模型效果还在优化中。

本项目主要内容:

演示示例 <!-- omit from toc -->

<p align="center"> <br> <img src="./pics/demo.gif" width="800"/> <br> </p> <p align="center">

中文LLaMA-2&Alpaca-2大模型 | 中文LLaMA&Alpaca大模型 | 多模态VLE | 中文MiniRBT | 中文LERT | 中英文PERT | 中文MacBERT | 中文ELECTRA | 中文XLNet | 中文BERT | 知识蒸馏工具TextBrewer | 模型裁剪工具TextPruner

新闻 <!-- omit from toc -->

[2023/07/18] Demo添加了Webcam支持,可以从直接摄像头拍摄照片

内容导引 <!-- omit from toc -->

模型介绍

Visual-Chinese-LLaMA-Alpaca(VisualCLA)是一个支持图像和文本输入的中文多模态模型。VisualCLA在中文Alpaca模型的基础上,添加了图像编码模块,使中文Alpaca模型能理解视觉信息。

<p align="center"> <br> <img src="./pics/architecture.png" width="800"/> <br> </p> <p align="center">

VisualCLA由Vision Encoder、Resampler和LLM三部分组成:

图像经过Vision Encoder编码,通过Resampler映射为固定长度的表示。随后,将图像和文本表示拼接后送入LLM。LLM根据图像和文本指令生成结果。

训练策略

与Chinese-LLaMA-Alpaca类似,VisualCLA采用LoRA对模型进行高效精调。可训练参数包括图像编码器的LoRA参数,LLM的LoRA参数以及Resampler的全部参数。可参考模型结构图中的说明。训练过程分为两个阶段:

VisualCLA-7B-v0.1的训练相关信息总结于下表:

训练阶段多模态预训练多模态指令精调
初始化Chinese-Alpaca-Plus 7B多模态预训练模型
训练任务多模态预训练多模态指令精调
任务类型图像描述(Captioning)视觉问答、视觉推理、开放域问答、OCR等
Prompt模版Alpaca prompt模版
训练集大小(样本数量)23M350K(多模态指令) + 1.3M(纯文本指令)

模型下载

LLaMA模型禁止商用,为了遵循相应的许可,本项目发布增量权重,包括:

用户需要在Chinese-Alpaca-PlusCLIP-ViT的基础上加载或合并模型,以得到完整可用的VisualCLA模型。

模型名依赖的基模型增量权重下载
VisualCLA-7B-v0.1Chinese-Alpaca-Plus 7B (HF格式)<sup></sup> + CLIP-ViT-L/14<sup></sup>[百度网盘]</br>[Google Drive]

†: Chinese-Alpaca-Plus 7B模型的获取与合并方法请参考Chinese-LLaMA-Alpaca模型合并与转换

‡: CLIP-ViT-L/14模型下载链接

Model Hub

也可以在🤗Model Hub下载模型,使用transformers和PEFT调用VisualCLA。以下模型调用名称指的是使用.from_pretrained()中指定的模型名称。使用示例可参见模型使用

模型名模型调用名称链接
VisualCLA-7B-v0.1ziqingyang/visualcla-7b-v0.1Hub地址

压缩包内包含如下文件:

visualcla-7b-v0.1/
  - adapter_config.json      # LoRA配置文件
  - adapter_model.bin        # LoRA权重文件
  - config.json              # VisualCLA配置文件
  - added_tokens.json        # tokenizer配置文件
  - special_tokens_map.json  # tokenizer配置文件
  - tokenizer_config.json    # tokenizer配置文件
  - tokenizer.model          # tokenizer文件
  - preprocessor_config.json # ImageProcessor配置文件

模型使用

Colab笔记本

对于模型的安装、合并、推理和部署等流程,除了下述的步骤说明外,我们还提供了Colab笔记本,用户可方便地直接执行、体验并查看结果:

笔记本名内容链接notebook文件
visualcla_inference.ipynb模型的安装、合并、命令行推理和Gradio demo部署Open In Colabvisualcla_inference.ipynb

安装

将本项目下载至本地,安装模型代码至Python搜索路径

git clone https://github.com/airaria/Visual-Chinese-LLaMA-Alpaca
cd Visual-Chinese-LLaMA-Alpaca
pip install -e .

合并模型(可选,推荐)

用户可以选择将增量权重与基模型合并后保存,使用更方便,加载更迅速。合并后的模型大小约为14G,合并过程约需占用20G内存,请确保机器有足够的硬盘和内存空间。

执行本项目中的scripts/merge_llama_with_vcla_lora.py进行合并:

python scripts/merge_llama_with_visualcla_lora.py \
    --text_model /path/to/chinese/alpaca/plus/7b \
    --vision_model /path/to/clip/vit/14-L \
    --lora_model /path/to/visualcla/lora \
    --output_dir output_dir

参数说明:

传入的模型所在目录也皆可用🤗Model Hub上的模型名代替。

合并后的output_dir目录内容如下:

output_dir/
 - text_encoder/             # LLM的模型权重和配置
 - image_encoer/             # Vision Encoder的模型权重和配置
 - pytorch_model.bin         # Resampler部分的权重
 - config.json               # VisualCLA的配置文件
 - added_tokens.json         # tokenizer配置文件
 - special_token_map.json    # tokenizer配置文件
 - tokenizer_config.json     # tokenizer配置文件
 - tokenizer.model           # tokenizer文件
 - preprocessor_config.json  # ImageProcessor配置文件

可以使用visualcla.get_model_and_tokenizer_and_processor加载,详见下节。

模型加载与推理

接口调用

如果已合并模型

可以使用如下代码在Python程序中调用VisualCLA:

import torch
import visualcla
model, tokenizer, _ = visualcla.get_model_and_tokenizer_and_processor(
      visualcla_model="/path/to/the/merged/visualcla/model",
      torch_dtype=torch.float16,
      load_in_8bit=True
)
model.to(0)
history=[]
visualcla.chat(model=model, image="path/to/image/filename", text="your instruction here", history=history)

如果未合并模型

需要同时加载Chinese-Alpaca-Plus-7B,CLIP-ViT-L/14和VisualCLA LoRA:

import torch
import visualcla
from peft import PeftModel
base_model, tokenizer, _ = visualcla.get_model_and_tokenizer_and_processor(
      text_model="/path/to/chinese/alpaca/plus/7b",  # Path to the Chinese-Alpaca-Plus 7B model
      vision_model="openai/clip-vit-large-patch14",  # We can also use the Model Hub name of the model
      lora_model="/path/to/visualcla/lora",
      torch_dtype=torch.float16
)
base_model.resize_token_embeddings(len(tokenizer))
model = PeftModel.from_pretrained(base_model, "/path/to/visualcla/lora", torch_dtype=torch.float16)
model.to(0)
history = []
visualcla.chat(model=model, image="path/to/image/filename", text="your instruction here",history=history)

推理脚本

在本项目的scripts/inference文件夹下提供了封装更完善的Python推理脚本inference.py

如果已合并模型

python scripts/inference/inference.py \
    --visualcla_model visualcla_model \
    --image_file image_file \
    --load_in_8bit

如果未合并模型

python scripts/inference/inference.py \
    --text_model /path/to/chinese/alpaca/plus/7b \
    --vision_model /path/to/clip/vit/14-L \
    --lora_model /path/to/visualcla/lora \
    --image_file image_file
    # 未合并的模型暂不支持8bit加载

参数说明:

模型部署

基于Gradio的网页demo

先安装依赖包

pip install gradio mdtex2html

启动方式:

python scripts/inference/gradio_demo.py --visualcla_model visualcla_model --load_in_8bit

参数说明:

基于Text-Generation-webUI的模型部署

相比基于gradio_demo.py的部署方式,Text-Generation-webUI支持在多轮对话中使用多张图片。基于Text-Generation-webUI的模型部署的详细步骤请参考这里

效果展示

以下展示的均是v0.1测试版的效果

中文测试集

我们将LLaVA测试集和OwlEval测试集翻译成了中文,数据集下载以及模型在这两个数据集上的结果参见此处

局限性

虽然本项目中的模型具备一定的结合图像的多模态理解和生成能力,但也存在一定局限性,包括但不限于:

引用 <!-- omit from toc -->

如果您觉得本项目对您的研究有所帮助或使用了本项目的代码或数据,请参考引用我们的工作

@article{chinese-llama-alpaca,
      title={Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca}, 
      author={Cui, Yiming and Yang, Ziqing and Yao, Xin},
      journal={arXiv preprint arXiv:2304.08177},
      url={https://arxiv.org/abs/2304.08177},
      year={2023}
}

@misc{visualcla,
  author = {Yang, Ziqing and Pan, Yuchen and Cui, Yiming},
  title = {Visual-Chinese-LLaMA-Alpaca},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/airaria/Visual-Chinese-LLaMA-Alpaca/}},
}

致谢 <!-- omit from toc -->

本项目基于以下开源项目二次开发,在此对相关项目和研究开发人员表示感谢。

免责声明 <!-- omit from toc -->

本项目相关资源仅供学术研究之用,严禁用于商业用途。 使用涉及第三方代码的部分时,请严格遵循相应的开源协议。模型生成的内容受模型计算、随机性和量化精度损失等因素影响,本项目不对其准确性作出保证。对于模型输出的任何内容,本项目不承担任何法律责任,亦不对因使用相关资源和输出结果而可能产生的任何损失承担责任。

本项目由个人及协作者业余时间发起并维护,因此无法保证能及时回复解决相应问题。