S1-Omni-Image-Preview / README_zh.md
ScienceOne-AI's picture
README
cd7b3a1 verified

S1-Omni-Image-Preview Logo

S1-Omni-Image: A Unified Multimodal Model for Scientific Image Understanding and Generation

License GitHub Hugging Face ModelScope

English | 简体中文

📖 简介

S1-Omni-Image-Preview 由中国科学院磐石·科学基础大模型(ScienceOne)团队研发,是统一多模态理解和生成的端到端推理模型。通过 “先思考后生成” 的统一范式,模型能够完成以下四类任务:

  • 文本生成(T2T): 基于文本输入生成文本响应
  • 图文理解(TI2T): 理解图像并根据指令生成回答
  • 图像生成(T2I): 根据文本指令要求生成图像
  • 图像编辑(TI2I): 基于文本指令要求编辑图像

本次开源的 S1-Omni-Image-Preview 模型总参数量 ~30B,原生支持文本和图像两种模态的输入和输出,是团队在科学多模态内容理解和科学图像生成任务统一模型架构方面的技术探索。

图像生成方面,尤其是科研配图生成任务场景,模型基于数学、物理、化学、天文、地理、生物等六大学科的大规模学术论文配图数据进行训练优化,涵盖流程图、架构图、原理图等常见科研配图类型,是首个开源的科研配图能力增强的统一多模态理解和生成模型。

📥 模型权重下载

模型权重已在 Hugging face 和 ModelScope 平台开源,欢迎下载使用!

平台 模型地址
Hugging Face S1-Omni-Image-Preview
ModelScope S1-Omni-Image-Preview

🧠 模型架构

S1-Omni-Image-Preview 模型整体架构如图所示,原生支持文本、图像模态内容的输入和输出。

具体地,Text Embedding、Image Embedding 分别将文本和视觉 Tokens 编码为向量表示,Image Encoder (VAE) 将输入图像编码为 Image Latents。模型首先通过自回归生成思考过程,形式为 <think> {Chain of Thought} </think>,然后遵循用户指令针对不同任务生成回答。

对于文本生成和图像理解任务,回答内容以文本形式生成;对于图像生成任务,回答内容为 <image_gen> {Detailed prompt for image generation} </image_gen>;对于图像编辑任务,回答内容为 <image_edit> {Detailed prompt for image edit} </image_edit>。其文本语义关联的 Hidden States 会同时作为条件输入到 Diffusion Transformer 用于图像生成。该策略能够通过多模态大语言模型的思考和逻辑推理能力,丰富图像生成和图像编辑时的细粒度文本语义信息,从而提高图像生成质量。

⚙️ 训练策略

模型采用三阶段训练策略,如图所示。

  • 第一阶段:思考范式训练。基于多模态大语言模型 Qwen3-VL-8B-Instruct 初始化权重,构建带思考过程的四类任务训练数据进行微调,使模型具备先思考后生成,并生成任务感知的 Special Token 能力。
  • 第二阶段:扩散模块训练。冻结多模态大语言模型,基于 Qwen-Image-Edit 模型的 MMDiT 模块初始化 Diffusion Module,通过自建的学术配图生成等多任务数据联合训练,增强模型在图像生成和编辑任务的综合能力。
  • 第三阶段:对齐模块训练。冻结多模态大语言模型和 MMDiT 模块,在两个模块之间添加投影层并训练,将文本生成内容的 Hidden States 与 Diffusion 模块维度对齐。

🎨 案例展示

如图为 S1-Omni-Image-Preview 模型的生成样例,包括中文和英文样例,该图展示了从用户输入自然语言描述到模型思考过程,到最终生成专业科研配图的完整流程。

如图为 S1-Omni-Image-Preview 模型在数学、物理、化学、天文、地理、生物等多个学科生成不同类型学术风格配图的样例。

🚀 快速开始

1. 环境配置

系统要求:

  • Python: 3.10+
  • CUDA: 12.6+ (推荐)
  • GPU: NVIDIA GPU 80GB+ VRAM (推荐 A100/H100)

2. 安装依赖

下载模型权重至本地目录,执行以下命令克隆项目代码、创建虚拟环境并安装依赖。

# 克隆项目仓库
git clone https://github.com/ScienceOne-AI/S1-Omni-Image.git
cd S1-Omni-Image

# 创建虚拟环境(推荐)
conda create -n s1-omni-image-env python=3.10
conda activate s1-omni-image-env

# 安装依赖
pip install -r requirements.txt

完整依赖列表请参考 requirements.txt

3. 启动服务

本项目提供了兼容 OpenAI 接口规范的请求和响应格式,以及一个简易的交互式 web 页面。

启动命令

# Single GPU
CUDA_VISIBLE_DEVICES=0 python server.py --model /path/to/S1-Omni-Image-Preview --port 8000

# Multi GPUs
CUDA_VISIBLE_DEVICES=0,1 python server.py --model /path/to/S1-Omni-Image-Preview --port 8000

服务配置参数:

  • --config: 模型配置文件路径
  • --port: 服务端口(默认 8000)
  • --host: 服务地址(默认 0.0.0.0)

访问页面

服务启动后,在浏览器中访问:

http://localhost:8000

API 调用示例

图像生成任务:

import requests
import base64

url = "http://localhost:8000/v1/chat/completions"
headers = {"Content-Type": "application/json"}

data = {
    "model": "s1-omni-image-preview",
    "messages": [
        {
            "role": "user",
            "content": "生成一张展示DNA双螺旋结构的科学插图"
        }
    ],
    "height": 1024,
    "width": 1024,
    "num_inference_steps": 50
}

response = requests.post(url, headers=headers, json=data)
result = response.json()

content = result["choices"][0]["message"]["content"]

if isinstance(content, str):
    print("Text response:", content)
elif isinstance(content, list):
    for part in content:
        if part["type"] == "text":
            print("Text response:", part["text"])
        elif part["type"] == "image_url":
            # extract base64 data "data:image/png;base64,<actual_base64>"
            image_url = part["image_url"]["url"]
            base64_str = image_url.split(",", 1)[1]
            image_data = base64.b64decode(base64_str)
            output_path = "output.png"
            with open(output_path, "wb") as f:
                f.write(image_data)
            print(f"Image saved: {output_path}")

图像理解任务:

import requests
import base64

url = "http://localhost:8000/v1/chat/completions"
headers = {"Content-Type": "application/json"}

# image -> base64
with open("input.png", "rb") as f:
    image_base64 = base64.b64encode(f.read()).decode("utf-8")

data = {
    "model": "s1-omni-image-preview",
    "messages": [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "请描述这张图片中的内容"},
                {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_base64}"}}
            ]
        }
    ]
}

response = requests.post(url, headers=headers, json=data)
print(response.json()["choices"][0]["message"]["content"])

更多 API 使用示例请参考 docs/API_GUIDE.md

⚠️ 局限性

尽管 S1-Omni-Image-Preview 在统一多模态理解与生成方面取得了有意义的进展,但当前版本仍存在以下局限性,我们将在后续版本中持续改进:

  • 安全对齐:模型可能生成不准确、带有偏见或不当的文本与图像内容。当前版本尚未经过全面的安全对齐训练,在开放场景下使用时建议增加额外的内容审核机制。
  • 通用能力:模型在科研配图生成(如流程图、架构图、原理图等)方面经过针对性优化,但在通用自然图像生成的表现,以及多轮对话的支持可能不及通用模型;模型的图像编辑能力对精细化局部编辑的支持有限。
  • 图像细节:当前版本生成的图像在高分辨率下的文字渲染清晰度、复杂图表中的细粒度元素对齐等方面仍有提升空间,生成图像中的文字偶尔可能出现模糊或错误。

我们欢迎社区用户在使用过程中反馈问题和建议,帮助我们不断完善模型。

📄 许可协议

本项目基于 Apache License 2.0 开源协议发布。

🙏 致谢

S1-Omni-Image-Preview 的研发离不开以下优秀开源项目的支持,在此表示衷心感谢:

  • Transformers:由 Hugging Face 团队开发的先进自然语言处理与多模态模型库,为本项目提供了核心的模型加载、推理和服务部署基础设施。
  • Diffusers:由 Hugging Face 团队开发的扩散模型库,为本项目中 Diffusion Transformer 模块的实现与推理提供了关键支持。
  • Qwen3-VL:由阿里巴巴通义千问团队开发的多模态视觉语言模型,本项目以 Qwen3-VL-8B-Instruct 作为多模态语言模型的初始化权重,其优秀能力为 S1-Omni-Image-Preview 训练任务感知的思考过程奠定了坚实基础。
  • Qwen-Image:由阿里巴巴通义千问团队开发的图像生成模型,本项目在图像生成与编辑模块的设计与训练过程中参考并受益于该项目的技术方案。

📚 引用

如果您在研究中使用了 S1-Omni-Image-Preview,欢迎引用我们的工作:

@software{s1-omni-image-2026,
  title        = {S1-Omni-Image: A Unified Multimodal Model for Scientific Image Understanding and Generation},
  author       = {ScienceOne Team},
  year         = {2026},
  organization = {Institute of Automation, Chinese Academy of Sciences},
  url          = {https://github.com/ScienceOne-AI/S1-Omni-Image}
}