腾讯开源推出了 SEED-Story,这是一种基于SEED-X的多模态大型语言模型,能够生成由丰富且连贯的叙事文本以及在角色和风格上保持一致的图像组成的多模态长篇故事。他们还发布了 StoryStream,这是一个专门为训练和评估多模态故事生成而设计的大规模数据集。
安装使用
依赖项
- Python >= 3.8 (Recommend to use Anaconda)
- [PyTorch >=2.0.1](Recommend to use torch==2.1.2+cu121)(pytorch.org/)
- NVIDIA GPU + CUDA
安装
克隆仓库并安装依赖项
git clone https://github.com/TencentARC/SEED-Story.git
cd SEED-Story
我们使用cuda docker环境来完成基础依赖的安装,可以参考教程
进入容器之后执行
pip3 install -r requirements.txt
数据准备
腾讯开源发布 StoryStream 数据集用于训练和测试多模态故事生成。在StoryStream中下载图像和故事文本文件。
StoryStream 数据集由 3 个子集组成,即好奇的乔治、疯狂兔子入侵和史前时代。我们以乔治子集为例。
jsonl 文件包含所有数据。它的每一行都包含一个由 30 张图像和相应的故事文本组成的故事。“图像”部分是 30 张图像路径的列表。“说明”部分是 30 个相应的故事文本的列表。
为了提高训练效率,您可以像我们一样将故事分成 10 的长度。分块的脚本在./StoryStream/chunk_data.py
中。
模型权重
腾讯开源发布预训练的分词器、预训练的去分词器、预训练的基础模型SEED-X-pretrained、StoryStream 指令调整的 MLLMSEED-Story-George和 StoryStream 调整的去分词器在Detokenizer-GeorgeSEED-Story Hugging Face中。
请下载检查点并将它们保存在./pretrained
文件夹下。
您还需要下载stable-diffusion-xl-base-1.0、Llama-2-7b-hf和Qwen-VL-Chat,并将它们保存在./pretrained
文件夹下。请使用以下脚本来提取 Qwen-VL-Chat 中视觉编码器的权重。
下载完成之后,pretrained文件夹下的路径结构。下载速度如果比较慢,可以参考教程
├── License_Seed-Story.txt
├── Llama-2-7b-hf
│ ├── LICENSE.txt
│ ├── README.md
│ ├── Responsible-Use-Guide.pdf
│ ├── USE_POLICY.md
│ ├── config.json
│ ├── generation_config.json
│ ├── model-00001-of-00002.safetensors
│ ├── model-00002-of-00002.safetensors
│ ├── model.safetensors.index.json
│ ├── pytorch_model-00001-of-00002.bin
│ ├── pytorch_model-00002-of-00002.bin
│ ├── pytorch_model.bin.index.json
│ ├── special_tokens_map.json
│ ├── tokenizer.json
│ ├── tokenizer.model
│ └── tokenizer_config.json
├── Qwen-VL-Chat
│ ├── README.md
│ ├── SimSun.ttf
│ ├── config.json
│ ├── configuration_qwen.py
│ ├── generation_config.json
│ ├── modeling_qwen.py
│ ├── pytorch_model-00001-of-00010.bin
│ ├── pytorch_model-00002-of-00010.bin
│ ├── pytorch_model-00003-of-00010.bin
│ ├── pytorch_model-00004-of-00010.bin
│ ├── pytorch_model-00005-of-00010.bin
│ ├── pytorch_model-00006-of-00010.bin
│ ├── pytorch_model-00007-of-00010.bin
│ ├── pytorch_model-00008-of-00010.bin
│ ├── pytorch_model-00009-of-00010.bin
│ ├── pytorch_model-00010-of-00010.bin
│ ├── pytorch_model.bin.index.json
│ ├── qwen.tiktoken
│ ├── qwen_generation_utils.py
│ ├── tokenization_qwen.py
│ ├── tokenizer_config.json
│ └── visual.py
├── README.md
├── assets
│ ├── dataset.jpg
│ ├── pipeline.jpg
│ ├── teaser.jpg
│ └── thumbnail.jpg
├── cvlm_llama2_tokenizer
│ ├── added_tokens.json
│ ├── special_tokens_map.json
│ ├── tokenizer.model
│ └── tokenizer_config.json
├── detokenizer
│ ├── detokenizer_george_adapted
│ │ └── checkpoint-4000
│ │ └── pytorch_model.bin
│ └── detokenizer_pretrained
│ └── checkpoint-55000
│ └── pytorch_model.bin
├── seed_story
│ └── george_sft
│ └── pytorch_model.bin
├── seedx
│ └── checkpoint-30000
│ └── pytorch_model.bin
├── stable-diffusion-xl-base-1.0
│ ├── 01.png
│ ├── LICENSE.md
│ ├── README.md
│ ├── comparison.png
│ ├── model_index.json
│ ├── pipeline.png
│ ├── scheduler
│ │ └── scheduler_config.json
│ ├── sd_xl_base_1.0.safetensors
│ ├── sd_xl_base_1.0_0.9vae.safetensors
│ ├── sd_xl_offset_example-lora_1.0.safetensors
│ ├── text_encoder
│ │ ├── config.json
│ │ ├── flax_model.msgpack
│ │ ├── model.fp16.safetensors
│ │ ├── model.onnx
│ │ ├── model.safetensors
│ │ ├── openvino_model.bin
│ │ └── openvino_model.xml
│ ├── text_encoder_2
│ │ ├── config.json
│ │ ├── flax_model.msgpack
│ │ ├── model.fp16.safetensors
│ │ ├── model.onnx
│ │ ├── model.onnx_data
│ │ ├── model.safetensors
│ │ ├── openvino_model.bin
│ │ └── openvino_model.xml
│ ├── tokenizer
│ │ ├── merges.txt
│ │ ├── special_tokens_map.json
│ │ ├── tokenizer_config.json
│ │ └── vocab.json
│ ├── tokenizer_2
│ │ ├── merges.txt
│ │ ├── special_tokens_map.json
│ │ ├── tokenizer_config.json
│ │ └── vocab.json
│ ├── unet
│ │ ├── config.json
│ │ ├── diffusion_flax_model.msgpack
│ │ ├── diffusion_pytorch_model.fp16.safetensors
│ │ ├── diffusion_pytorch_model.safetensors
│ │ ├── model.onnx
│ │ ├── model.onnx_data
│ │ ├── openvino_model.bin
│ │ └── openvino_model.xml
│ ├── vae
│ │ ├── config.json
│ │ ├── diffusion_flax_model.msgpack
│ │ ├── diffusion_pytorch_model.fp16.safetensors
│ │ └── diffusion_pytorch_model.safetensors
│ ├── vae_1_0
│ │ ├── config.json
│ │ ├── diffusion_pytorch_model.fp16.safetensors
│ │ └── diffusion_pytorch_model.safetensors
│ ├── vae_decoder
│ │ ├── config.json
│ │ ├── model.onnx
│ │ ├── openvino_model.bin
│ │ └── openvino_model.xml
│ └── vae_encoder
│ ├── config.json
│ ├── model.onnx
│ ├── openvino_model.bin
│ └── openvino_model.xml
└── visual_tokenizer
└── qwen_vit_G.pt
推理使用
python3 src/inference/gen_george.py
python3 src/inference/vis_george_sink.py
运行成功之后生成的文件在 output 路径当中,效果如图