SkyworkUniPic
综合介绍
SkyworkUniPic 是由天空数码(Skywork AI)开发的一个多模态模型。这个模型的特别之处在于,它使用了一个统一的自回归架构,在同一个模型内部同时实现了三种核心功能:图像理解、文本到图像的生成和图像编辑。作为一个拥有15亿参数的模型,UniPic 能够理解用户上传的图片并用文字描述出来(图生文),也可以根据用户的文字提示创造出新的图像(文生图),还能依据指令修改现有图片的内容。这种“三合一”的设计简化了以往需要多个独立模型才能完成的复杂任务流程。用户只需要下载一套模型权重,就可以通过调用不同的命令脚本来执行这三种不同的视觉任务。该项目基于 MIT 协议开放源代码,方便开发者和研究者在此基础上进行使用和二次开发。
功能列表
- 统一架构:在单个自回归模型中集成了图像理解、生成和编辑功能,无需为不同任务切换不同的模型。
- 文本生成图像 (Text-to-Image):能够根据用户提供的文本描述,生成分辨率为 1024x1024 的高清图像。支持单个提示词生成,也支持从 JSON 文件进行批量生成。
- 图像编辑 (Image Editing):用户可以上传一张现有图片,并提供一句指令,模型会根据指令对图片内容进行修改。例如,将图片中的星星替换为蜡烛。
- 图像理解 (Image-to-Text):能够分析用户提供的图片内容,并生成详细的文字描述,实现“看图说话”的功能。
- 高性能表现:根据项目页面提供的 GenEval 和 DPG-Bench 等多个行业标准测试集的数据,UniPic 在与多种知名扩散模型和自回归模型的对比中,展现了有竞争力的性能,尤其在遵循指令生成复杂场景和属性方面表现突出。
使用帮助
UniPic 的使用流程主要分为环境设置、下载模型和执行任务三个步骤。整个过程都在命令行终端中完成,下面是详细的操作说明。
1. 环境准备
首先,你需要一个能够管理 Python 环境的工具,官方推荐使用 conda
。这可以确保项目所需的依赖包都安装在独立的环境中,避免与系统或其他项目产生冲突。
第一步:创建并激活 conda 虚拟环境打开你的命令行终端,输入以下命令来创建一个名为 unipic
的新环境,并指定使用 Python 3.10 版本。
conda create -n unipic python==3.10.14
环境创建成功后,使用以下命令激活它:
conda activate unipic
激活后,你的终端提示符前面应该会显示 (unipic)
字样,表示你已进入该环境。
第二步:安装依赖在激活 unipic
环境后,进入你下载或克隆的 UniPic 项目文件夹。该文件夹中包含一个 requirements.txt
文件,里面列出了所有必需的 Python 库。使用 pip
命令进行安装:
pip install -r requirements.txt
该命令会自动下载并安装所有依赖项。
2. 下载模型检查点
UniPic 模型的核心文件(即“检查点”或“权重”)存放在 Hugging Face Hub 上。你需要将这些文件下载到本地。
第一步:安装 Hugging Face 命令行工具为了方便地从 Hugging Face 下载模型,建议安装官方提供的 huggingface-cli
工具。
pip install -U "huggingface_hub[cli]"
第二步:下载模型文件使用以下命令将 UniPic 的 1.5B 模型文件下载到本地。--local-dir
参数指定了文件保存的目录名,这里我们设置为 checkpoint
。
huggingface-cli download Skywork/Skywork-UniPic-1.5B --local-dir checkpoint --repo-type model
执行后,模型文件会被下载到项目根目录下的 checkpoint
文件夹中。
3. 功能操作流程
完成以上准备工作后,就可以开始使用 UniPic 的各项功能了。请确保在运行任何脚本之前,你的终端依然处于 unipic
conda 环境下,并且位于项目的根目录。
功能一:文本生成图像 (Text-to-Image)
这个功能可以让你通过一段文字描述来生成一张图片。
操作命令:
export PYTHONPATH=./:$PYTHONPATH
python scripts/text2image.py configs/models/qwen2_5_1_5b_kl16_mar_h.py \
--checkpoint checkpoint/pytorch_model.bin \
--image_size 1024 \
--prompt '一只毛发油亮的金毛犬站在公园草坪上,旁边有一座与真实大小一样的企鹅雕像。' \
--output output.jpg
```**参数说明**:
- `PYTHONPATH=./:$PYTHONPATH`:将当前目录临时添加到 Python 的搜索路径,确保脚本能找到所需的模块。
- `scripts/text2image.py`:执行文生图功能的脚本。
- `configs/models/qwen2_5_1_5b_kl16_mar_h.py`:指定模型的配置文件。
- `--checkpoint`:指定已下载的模型权重文件的路径。
- `--image_size`:设置生成图片的分辨率为 1024x1024。
- `--prompt`:输入你想要生成图像的文字描述。
- `--output`:指定生成图片的文件名和保存路径。
#### 功能二:图像编辑 (Image Editing)
这个功能允许你对一张已有的图片进行修改。
**操作命令**:
```bash
export PYTHONPATH=./:$PYTHONPATH
python scripts/image_edit.py configs/models/qwen2_5_1_5b_kl16_mar_h.py \
--checkpoint checkpoint/pytorch_model.bin \
--image_size 1024 \
--image data/sample.png \
--prompt "把天上的星星换成蜡烛。" \
--output output_edited.jpg
参数说明:
scripts/image_edit.py
:执行图像编辑功能的脚本。--image
:指定需要被编辑的原始图片路径。项目自带了一张位于data/sample.png
的示例图。--prompt
:输入你对图片修改的具体指令。--output
:指定编辑后新图片的保存路径。
功能三:图像理解 (Image-to-Text)
这个功能可以分析一张图片,并用文字告诉你图片的内容。
操作命令:
export PYTHONPATH=./:$PYTHONPATH
python scripts/image2text.py configs/models/qwen2_5_1_5b_kl16_mar_h.py \
--checkpoint checkpoint/pytorch_model.bin \
--image_size 1024 \
--image data/sample.png \
--prompt "详细描述这张图片。"
参数说明:
scripts/image2text.py
:执行图生文功能的脚本。--image
:指定需要被描述的图片路径。--prompt
:提供一个引导性的提示,例如“详细描述这张图片”或“图片里有什么?”。
执行该命令后,模型生成的文字描述会直接输出到终端上。
应用场景
- 内容创作对于需要为文章、博客或社交媒体制作配图的创作者,可以使用 UniPic 的文生图功能,快速将文字创意转化为视觉图像,提升内容的吸引力。
- 设计辅助设计师可以利用图像编辑功能,快速修改设计草图或素材。例如,替换某个物体、改变颜色或调整构图,而无需在复杂的软件中手动操作,大大提高了迭代效率。
- 图像内容分析与归档对于拥有大量图片素材的个人或机构,可以使用 UniPic 的图像理解功能,自动为图片生成文字标签和描述。这有助于建立可搜索的图像数据库,方便后续的内容管理和检索。
- 教育与研究在人工智能领域,研究者和学生可以利用 UniPic 的开源特性,深入了解统一多模态模型的内部工作原理。他们可以在此基础上进行实验、微调或开发新的应用,推动技术的发展。
QA
- UniPic 和其他文生图模型(如 Stable Diffusion)有什么不同?最大的不同在于 UniPic 是一个“统一模型”。除了文生图,它在同一个模型架构内还集成了图像编辑和图像理解(图生文)功能。而像 Stable Diffusion 这类扩散模型主要专注于图像生成。UniPic 采用的是自回归架构,这在技术路线上也与扩散模型有所区别。
- 使用这个模型对硬件有什么要求?项目文档没有明确给出最低硬件要求,但作为一个拥有15亿参数规模的模型,它通常需要一块显存较大的 GPU(例如 NVIDIA RTX 3090 或更高配置)才能流畅运行,尤其是在生成 1024x1024 分辨率的图像时。CPU 推理虽然可能,但速度会非常慢。
- 我可以对自己本地的图片进行编辑吗?可以。在运行图像编辑脚本时,只需要将
--image
参数的值替换为你自己本地图片的路径即可。例如,如果你的图片名为my_photo.png
且放在项目根目录,参数就是--image my_photo.png
。 - 模型支持中文提示词吗?从官方提供的示例来看,该模型主要展示了英文提示词(Prompt)的能力。虽然其基础模型
Qwen
系列对中文有很好的支持,但在 UniPic 项目的示例中并未直接体现。用户可以自行尝试中文提示词,但效果可能需要实际测试才能确定。