赞
踩
VisualGLM 是一个依赖于具体语言模型的多模态模型,而CogVLM则是一个更广阔的系列,不仅有基于GLM的双语模型,也有基于Llama2系列的英文模型。这次开源的 17B 模型就是基于Vicuna-7B 的英文模型。
多模态模型CogVLM-17B(开源):
Github:https://github.com/THUDM/CogVLM
Huggingface:https://huggingface.co/THUDM/CogVLM
魔搭社区:https://www.modelscope.cn/models/ZhipuAI/CogVLM
Paper:https://github.com/THUDM/CogVLM/blob/main/assets/cogvlm-paper.pdf
开源的对应模型:
模型名称 | 输入分辨率 | 介绍 | Huggingface model | SAT model |
---|---|---|---|---|
cogvlm-chat-v1.1 | 490 | 支持同时进行多轮聊天和视觉问答,支持自由的提示词。 | link | link |
cogvlm-base-224 | 224 | 文本-图像预训练后的原始检查点。 | link | link |
cogvlm-base-490 | 490 | 通过从 cogvlm-base-224 进行位置编码插值,将分辨率提升到490。 | link | link |
cogvlm-grounding-generalist | 490 | 此检查点支持不同的视觉定位任务,例如REC,定位字幕等。 | link | link |
# CUDA >= 11.8
pip install -r requirements.txt
python -m spacy download en_core_web_sm
所有的推理代码都位于 basic_demo/
目录下。请在进行进一步操作之前,先切换到这个目录。
注:这里的SAT是指使用了SwissArmyTransformer
库。
通过以下方式运行CLI演示:
# CogAgent
python cli_demo_sat.py --from_pretrained cogagent-chat --version chat --bf16 --stream_chat
python cli_demo_sat.py --from_pretrained cogagent-vqa --version chat_old --bf16 --stream_chat
# CogVLM
python cli_demo_sat.py --from_pretrained cogvlm-chat --version chat_old --bf16 --stream_chat
python cli_demo_sat.py --from_pretrained cogvlm-grounding-generalist --version base --bf16 --stream_chat
该程序将自动下载卫星模型并在命令行中进行交互。您可以通过输入指令并按回车来生成回复。输入clear
以清除对话历史,输入stop
以停止程序。
我们也支持模型并行推理,该推理将模型分割到多个(2/4/8)GPU上。使用 --nproc-per-node=[n]
控制使用的GPU数量。
torchrun --standalone --nnodes=1 --nproc-per-node=2 cli_demo_sat.py --from_pretrained cogagent-chat --version chat --bf16
如果你想手动下载权重,你可以用模型路径替换 --from_pretrained
后的路径。
我们的模型支持SAT的4位量化和8位量化。你可以将 --bf16
更改为 --fp16
, 或 --fp16 --quant 4
, 或 --fp16 --quant 8
.
例如
python cli_demo_sat.py --from_pretrained cogagent-chat --fp16 --quant 8 --stream_chat
python cli_demo_sat.py --from_pretrained cogvlm-chat-v1.1 --fp16 --quant 4 --stream_chat
# In SAT version,--quant should be used with --fp16
该程序提供以下超参数来控制生成过程:
usage: cli_demo_sat.py [-h] [--max_length MAX_LENGTH] [--top_p TOP_P] [--top_k TOP_K] [--temperature TEMPERATURE]
optional arguments:
-h, --help show this help message and exit
--max_length MAX_LENGTH
max length of the total sequence
--top_p TOP_P top p for nucleus sampling
--top_k TOP_K top k for top k sampling
--temperature TEMPERATURE
temperature for sampling
点击 这里 查看不同模型与 --version
参数之间的对应关系的对应关系。
通过以下方式运行CLI演示:
# CogAgent
python cli_demo_hf.py --from_pretrained THUDM/cogagent-chat-hf --bf16
python cli_demo_hf.py --from_pretrained THUDM/cogagent-vqa-hf --bf16
# CogVLM
python cli_demo_hf.py --from_pretrained THUDM/cogvlm-chat-hf --bf16
python cli_demo_hf.py --from_pretrained THUDM/cogvlm-grounding-generalist --bf16
如果你想手动下载权重,你可以将 --from_pretrained
后的路径替换为模型路径。
你可以将 --bf16
更改为 --fp16
, 或者 --quant 4
。例如,我们的模型支持Huggingface的4-bit quantization:
python cli_demo_hf.py --from_pretrained THUDM/cogvlm-chat-hf --quant 4
我们还提供了一个基于Gradio的本地网络演示。首先,通过运行 pip install gradio
来安装Gradio。然后下载并进入这个仓库,运行 web_demo.py
。
python web_demo.py --from_pretrained cogagent-chat --version chat --bf16
python web_demo.py --from_pretrained cogagent-vqa --version chat_old --bf16
python web_demo.py --from_pretrained cogvlm-chat-v1.1 --version chat_old --bf16
python web_demo.py --from_pretrained cogvlm-grounding-generalist --version base --bf16
思想:视觉优先
之前的多模态模型:通常都是将图像特征直接对齐到文本特征的输入空间去,并且图像特征的编码器通常规模较小,这种情况下图像可以看成是文本的“附庸”,效果自然有限。
模型共包含四个基本组件:ViT 编码器,MLP 适配器,预训练大语言模型(GPT-style)和视觉专家模块。
训练方式:
class CogVLMModel(LLaMAModel): def __init__(self, args, transformer=None, parallel_output=True, **kwargs): super().__init__(args, transformer=transformer, parallel_output=parallel_output, **kwargs) self.image_length = args.image_length self.add_mixin("eva", ImageMixin(args)) self.del_mixin("mlp") self.add_mixin("mlp", LlamaVisionExpertFCMixin(args.hidden_size, args.inner_hidden_size, args.num_layers, 32)) self.del_mixin("rotary") self.add_mixin("rotary", LlamaVisionExpertAttnMixin(args.hidden_size, args.num_attention_heads, args.num_layers, 32)) @classmethod def add_model_specific_args(cls, parser): group = parser.add_argument_group('CogVLM', 'CogVLM Configurations') group.add_argument('--image_length', type=int, default=256) group.add_argument('--eva_args', type=json.loads, default={}) return super().add_model_specific_args(parser) def forward(self, input_ids, vision_expert_mask, image_embed_mask, **kwargs): if input_ids.shape[1] > 1: return super().forward(input_ids=input_ids, vision_expert_mask=vision_expert_mask, image_embed_mask=image_embed_mask, **kwargs) return super().forward(input_ids=input_ids, **kwargs) class FineTuneTrainCogVLMModel(CogVLMModel): def __init__(self, args, transformer=None, parallel_output=True, **kw_args): super().__init__(args, transformer=transformer, parallel_output=parallel_output, **kw_args) self.args = args # If you want to use model parallel with a mp_size=1 checkpoint, and meanwhile you also want to use lora, # you have to add_mixin after loading model checkpoint. @classmethod def add_model_specific_args(cls, parser): group = parser.add_argument_group('CogVLM-finetune', 'CogVLM finetune Configurations') group.add_argument('--pre_seq_len', type=int, default=8) group.add_argument('--lora_rank', type=int, default=10) group.add_argument('--use_ptuning', action="store_true") group.add_argument('--use_lora', action="store_true") group.add_argument('--use_qlora', action="store_true") group.add_argument('--layer_range', nargs='+', type=int, default=None) return super().add_model_specific_args(parser)
CogVLM 可以在不牺牲任何 NLP 任务性能的情况下,实现视觉语言特征的深度融合。训练的 CogVLM-17B 是目前多模态权威学术榜单上综合成绩第一的模型,在14个数据集上取得了state-of-the-art或者第二名的成绩。这些基准大致分为三类(共 14 个),包括图像字幕(Image Captioning)、视觉问答(Visual QA)、视觉定位(Visual Grounding)。
CogVLM-SFT-311K:CogVLM SFT 中的双语视觉指令数据集
链接: CogVLM-SFT-311K
CogVLM-SFT-311K 是在训练 CogVLM v1.0 最初版本时使用的主要对齐语料库。此数据集的构建过程如下:
数据集共有三个文件夹,分别对应混合 minigpt4-3500 与llava混合的一部分数据集,llava 单论对话和多轮对话数据集。其布局如下:
.CogVLM-SFT-311K
├── llava_details-minigpt4_3500_formate
├── llava_instruction_multi_conversations_formate
└── llava_instruction_single_conversation_formate
在开源的数据中,数据集按照以下格式分布
.llava_details-minigpt4_3500_formate
├── images
│ └── 00000001.jpg
└── labels
└── 00000001.json
其中,images存储图像数据,而labels存储这张图像对应的描述或对话。
图像描述 Caption 格式:
{
"captions": [
{
"role": "caption",
"content": "这张照片展示了一男一女,他们都穿着红嘿色衣服,坐在桌子旁,在参加活动时面带微笑。这对情侣正在一起摆姿势,背景中还有其他人。在整个场景中可以看到另外几个人,一些人坐在附近的桌子旁,另一些人坐得离这对夫妇更近。各种餐桌设置,如酒杯和杯子,被放置在桌子上。排在最前面的男子打着领带。"
}
]
}
图像对话 Json 格式:
{
"conversations": [
{
"role": "user",
"content": "在尝试保持这个浴室有序时可能会遇到哪些挑战?",
},
{
"role": "assistant",
"content": "在尝试保持这空间和各种物品的存在,例如杯子和手机占用了可用的空间。在图像中,浴室柜台上只有一个水槽可用,这导致多个用户可能必须共享空间放置自己的物品。这可能导致杂乱和混乱外的储物解决方案,如架子、橱柜或墙壁挂架,以保持浴室有序并最小化柜台上的杂乱。"
},
]
}
(1)环境准备和数据处理
# 启动docker环境
docker run -i -t --gpus "device=all" --shm-size="10gb" -v /zhipu-data/official_pretrains/sat_home/:/.sat_models -v ./checkpoints/:/checkpoints/ -v ./examples/:/test/ cogvlm_cuda:v2.0 "/usr/bin/bash"
示例数据:
project dir
... ...
---- scripts
---- examples
-- example_inputs.jsonl
-- 1.png
-- 2.jpeg
-- 3.jpg
-- 4.jpg
-- 5.jpg
-- 6.jpg
example_inputs.jsonl
image键值为项目路径:
{"id":1, "prompt": "Describe this image", "text": "answer", "image": "examples/1.png"}
{"id":2, "prompt": "what did Musk talk about?", "text": "answer", "image": "examples/2.jpeg"}
处理数据的脚本split_dataset.py
文件:
import os import shutil def find_all_files(path, suffix=".jpg"): target_files = [] for cur_dir, _, files in os.walk(path, followlinks=True): for f in files: if f.endswith(suffix): target_files.append(os.path.join(cur_dir, f)) print(f'find {len(target_files)} files...') return target_files all_files = find_all_files('archive') os.makedirs("archive_split", exist_ok=True) os.makedirs("archive_split/train", exist_ok=True) os.makedirs("archive_split/valid", exist_ok=True) os.makedirs("archive_split/test", exist_ok=True) import random random.seed(2023) random.shuffle(all_files) train = all_files[:8000] valid = all_files[8000:8000+500] test = all_files[8000+500:8000+500+1500] print("building train") for file in train: shutil.move(file, os.path.join("archive_split/train", file.split("/")[-1])) print("building valid") for file in valid: shutil.move(file, os.path.join("archive_split/valid", file.split("/")[-1])) print("building test") for file in test: shutil.move(file, os.path.join("archive_split/test", file.split("/")[-1])) print("done")
(2)模型训练
bash scripts/finetune_official.sh 8 1 /.sat_models cogvlm-base-490 base 2088 10 /test 40 20 20 "/checkpoints" 8 expert
注意对应的参数:
(3)模型推理
参数说明:
–from_pretrained:ckpt路径
–version:版本,与训练时版本对应
–english:输入/输出时为英文
–bf16/fp16:与训练时对应
–no_prompt:是否不要prompt
/usr/bin/python3 cli_demo.py --from_pretrained cogvlm-base-224_path --version base --english --bf16 --no_prompt
/usr/bin/python3 cli_demo.py --from_pretrained cogvlm-base-490_path --version base --english --bf16
/usr/bin/python3 cli_demo.py --from_pretrained cogvlm-chat_path --version chat --english --bf16
/usr/bin/python3 cli_demo.py --from_pretrained cogvlm-grounding-generalist_path --version base --english --bf16
这些任务主要是基于图像理解和语言生成的任务:
这些任务在图像-语言建模的下游应用中扮演重要角色,需要模型理解深层的视觉语义信息。其中,视觉定位任务比较独特,需要确保文本描述与图像区域之间的对齐匹配。
选择适合的模型:由于模型功能的差异,不同的模型版本可能会有不同的文本处理器 --version
,这意味着使用的提示格式会有所不同。
model name | –version |
---|---|
cogagent-chat | chat |
cogagent-vqa | chat_old |
cogvlm-chat | chat_old |
cogvlm-chat-v1.1 | chat_old |
cogvlm-grounding-generalist | base |
cogvlm-base-224 | base |
cogvlm-base-490 | base |
链接:https://github.com/THUDM/CogView
论文:https://cdn.openai.com/papers/dall-e-3.pdf
论文:https://arxiv.org/pdf/2304.08485.pdf
论文:https://arxiv.org/pdf/2304.10592.pdf
论文链接:https://arxiv.org/abs/2205.15868
代码链接:https://github.com/THUDM/CogVideo
模型训练方法:
多帧率分层训练方法:
丹青模型基于原生中文语料数据及网易自有高质量图片数据训练,与其他文生图模型相比,丹青模型的差异化优势在于对中文的理解能力更强,对中华传统美食、成语、俗语、诗句的理解和生成更为准确。比如,丹青模型生成的图片中,鱼香肉丝没有鱼,红烧狮子头没有狮子。基于对中文场景的理解,丹青模型生成的图片更具东方美学,能生成“飞流直下三千尺”的水墨画,也能生成符合东方审美的古典美人。
链接:https://github.com/InternLM/InternLM
以不到1/3的参数量超越视觉模型标杆谷歌ViT-22B,在MMBench等评测上比肩GPT-4V和GeminiPro
链接:https://github.com/InternLM/InternLM-XComposer
能力全面升级,支持个性化高质量图文创作,图文理解和创作能力领先开源社区
首个医疗多模态基础模型群,参数规模扩展至200亿,涵盖10余种医疗数据模态,赋能合作医疗机构助力智慧医疗应用场景建设
首个支持分钟级视频故事生成的开源文生视频大模型,在多镜头一致性上表现出色.
通过SparseCtrl支持对视频动效生成更灵活的控制,被用于制作《枕着光的她》中的AI视频,登上2024年yscw舞台
三部分组成:预训练的大语言模型 Vicuna[39],预训练的视觉编码器以及一个单一的线性投影层。
[1] https://github.com/THUDM/CogVLM
[2] CogVLM:智谱AI 新一代多模态大模型
[3] CogView:通过Transformer掌握文本到图像的生成
[4] 清华联合BAAI提出第一个开源预训练文本视频生成模型CogVideo
[5] OpenAI最新的文本生成图像大模型DALL·E3
[6] (2023,DALL-E3,两步微调,标题重建)通过更好的标题改进图像生成
[7] AI作画如此简单(7):解读 CogView
[8] cogvlm微调数据:https://huggingface.co/datasets/THUDM/CogVLM-SFT-311K
[9] https://huggingface.co/THUDM/CogView2
[10] Zhu, D., Chen, J., Shen, X., Li, X., & Elhoseiny, M. (2023). MiniGPT-4: Enhancing Vision-Language Understanding with Advanced Large Language Models. arXiv preprint arXiv:2304.10592.
[11] Liu, H., Li, C., Wu, Q., & Lee, Y. J. (2023). Visual Instruction Tuning. arXiv:2304.08485.
[12] 大规模语言模型:从理论到实践.张奇、桂韬、郑锐、黄萱菁
[13] SwissArmyTransformer瑞士军刀工具箱使用手册
[14] https://github.com/gscr10/SwissArmyTransformer/tree/main/SwissArmyTransformer
[15] 原创AI:上海AI实验室近期科研成果速览
[16] https://github.com/InternLM/InternLM-XComposer
[17] 多模态大模型进展:https://mm-llms.github.io/posts/getting-started/
[18] 【vlm多模态大模型】minigpt-4详细解析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。