
[](https://github.com/jingyaogong/minimind-o/stargazers)
[](LICENSE)
[](https://github.com/jingyaogong/minimind-o/commits/master)
[](https://github.com/jingyaogong/minimind-o/pulls)
[](https://huggingface.co/collections/jingyaogong/minimind-o)
[](http://arxiv.org/abs/2605.03937)
[📄 MiniMind-O Technical Report](http://arxiv.org/abs/2605.03937)
https://github.com/user-attachments/assets/10cbcc5f-4e70-45cf-bdc5-d6361e40bb86
[🔗 在线体验 (Gradio)](https://modelscope.cn/studios/gongjy/MiniMind-O) | [🔗 视频介绍](https://www.bilibili.com/video/BV1V1RsBcEMX)
---
# 📌 项目介绍
继 [MiniMind](https://github.com/jingyaogong/minimind)(LLM)和 [MiniMind-V](https://github.com/jingyaogong/minimind-v)(VLM)之后,MiniMind-O 是这个系列的第三站。所谓 Omni,就是让一个模型同时具备听、看、说的多模态交互能力:接收文本、语音和视觉信号,输出文本与流式语音。
或许 GPT-4o 让人第一次感受到足够自然的流式语音交互形态,随后 Mini-Omni2、Moshi、GLM-4-Voice、Qwen3-Omni 等开源工作陆续出现。但如果目标不是直接调用这些参数庞大的现成权重,而是从 0 读懂、训练、改动一个完整 Omni 模型,开源社区仍然急缺足够轻量、链路完整的起点。要把语音真正纳入 Omni 模型,一种做法是把 ASR、LLM、TTS 串成级联链路:语音先转文字,LLM 处理后再合成语音。这条路工程上直接,但中间多了一次文本转写,延迟、语气和情绪信息都会受到影响。
MiniMind-O 尝试补上已知的空位:让语音和文本在 hidden state 层面直接连通,在主 backbone 仅 0.1B 的规模下保留端到端 Omni 链路。Talker 侧采用 MTP(Multi-Token Prediction)一次预测多层 Mimi codes,再配合 VAD 支持实时打断与近似双工交互,这是足够实用的工程路线之一。本项目的代码、模型权重、训练数据和技术报告全部完整开源,单张 RTX 3090 上约 2 小时即可跑通 mini 数据集训练。目标依旧:让每个人都能从第一行代码读起,自己动手,从 0 训练一个能听、能看、能思考、能说的模型:

😊 一起感受创造的乐趣吧!
---
#### 🎉 项目包含以下内容
- 提供完整的 MiniMind-O 结构代码:Thinker、独立 Talker、audio / vision projector、Mimi codebook 接口以及 MTP audio head。
- 提供 SFT 全链路训练流程,覆盖 T2A、I2T、A2A 三类数据,支持全参数训练、音频投影层训练、视觉投影层训练与 DDP 多卡训练。
- 提供 mini 与 full 两套训练数据:mini 便于快速入门,单卡 3090 上约 2 小时可跑通;full 与发布权重对应,覆盖中文语音与图像任务。
- 提供多种内置音色、unseen 音色与任意参考音频的音色克隆能力,便于复现音色控制实验。
- 提供完整的推理与 Demo 工具,支持 CLI 推理、Web UI、流式播放、barge-in 打断和电话模式。
- 关键模块均从 0 用 PyTorch 原生实现,不依赖三方高层封装;同时兼容 `transformers` Tokenizer 与原生权重格式。
- 配套技术报告覆盖架构、训练曲线、CER / WER 评估、音色克隆相似度与跨模型对比,链接见顶部 Tech Report 区。
#### 🎉 已发布模型列表
| 模型 | 参数(主干) | Release |
|---|---|---|
| minimind-3o | ~0.1B | 2026.05.05 |
| minimind-3o-moe | ~0.3B-A0.1B | 2026.05.05 |
---
#### 👉 更新日志
| 说话人 | 参考音色 | 输出结果 | 平均 |
| dylan |
https://github.com/user-attachments/assets/070ea3ab-0e8e-4aa0-84b5-af8d3c4e2725
|
https://github.com/user-attachments/assets/eb2da7ed-173c-47e9-9431-7bdb5a9b7385
| 0.6712 |
| eric |
https://github.com/user-attachments/assets/c74aa5dc-1edd-44c1-9546-6e57194c2f60
|
https://github.com/user-attachments/assets/f3fa8906-4e14-4610-a9d9-c16c915ca1b3
| 0.4430 |
| serena |
https://github.com/user-attachments/assets/0eeeac87-fa70-4025-b66e-1f0197f2b434
|
https://github.com/user-attachments/assets/c5901dca-4b2a-47f5-9b30-c89de54f908e
| 0.6600 |
| uncle_fu |
https://github.com/user-attachments/assets/fdd1bb28-6648-44bf-8bcb-4509e709e347
|
https://github.com/user-attachments/assets/95b480f1-f015-4712-8d7c-17db465f6584
| 0.6632 |
| vivian |
https://github.com/user-attachments/assets/f64731c4-67a3-4e18-b7d7-61bf44ef4bdd
|
https://github.com/user-attachments/assets/3f1cc9bb-16d2-4ce0-a473-40676cf4523e
| 0.5320 |
#### Unseen 音色
Unseen 表示训练时没有见过的音色,用来观察模型能否把新的参考音色0样本直接迁移到生成语音里。
| 说话人 | 参考音色 | 输出结果 | 平均 |
| arthur |
https://github.com/user-attachments/assets/3430ecdb-6de8-4fb0-a6a7-ad82bdce01a1
|
https://github.com/user-attachments/assets/e598dbc2-ba28-4c38-b52d-6fa6c2349a5b
| 0.6479 |
| chelsie |
https://github.com/user-attachments/assets/f9166af6-3a98-42f3-9cf8-ad105eea87d6
|
https://github.com/user-attachments/assets/eccca693-4708-409a-88f7-85eb25f66fe6
| 0.5975 |
| cherry |
https://github.com/user-attachments/assets/e69b9cac-e12f-43ae-a9dc-7e1618ef3a43
|
https://github.com/user-attachments/assets/bb41cdef-cc92-48fa-a508-76a75d391565
| 0.5418 |
| ethan |
https://github.com/user-attachments/assets/9c992505-2046-483e-a7cf-50ec18a5e329
|
https://github.com/user-attachments/assets/98013c5e-f5b5-4e1a-bc0e-a0f0be5d3240
| 0.4323 |
| jennifer |
https://github.com/user-attachments/assets/924b035d-5c7c-45a5-a8f8-5dbdc18f71db
|
https://github.com/user-attachments/assets/853d1370-0065-4567-9a71-dc88a6a34d56
| 0.4052 |
| momo |
https://github.com/user-attachments/assets/7e97f524-da6d-4a2f-9095-e7f99262f4a5
|
https://github.com/user-attachments/assets/4c193c8f-8750-4424-acba-2bd13089a634
| 0.5968 |
| moon |
https://github.com/user-attachments/assets/527df88a-adc0-48d3-9a6a-827ca1ba7fb0
|
https://github.com/user-attachments/assets/3f533e26-1ad8-4ab3-baf1-21267734d3ee
| 0.5874 |
## Ⅲ 跨模型英文 T2A 对比
这里选了 20 个英文问题,并统一加上 `Answer briefly in one short sentence` 约束。这样做不是为了考察开放式英文能力,而是尽量把回答长度压到同一范围内;三套模型生成音频后,再统一用 Qwen3-ASR 转写,并与目标文本计算 CER / WER,用来比较 Talker 的文本一致性。
| 长度桶 | [Mini-Omni](https://huggingface.co/gpt-omni/mini-omni) CER/WER | [Mini-Omni2](https://huggingface.co/gpt-omni/mini-omni2) CER/WER | minimind-3o CER/WER |
|---|---|---|---|
| short (≤15w) | 0.0195 / 0.0384 (n=8) | 0.0503 / 0.0584 (n=14) | 0.0531 / 0.0417 (n=8) |
| mid (16–30w) | 0.0038 / 0.0052 (n=12) | 0.0062 / 0.0076 (n=6) | 0.1327 / 0.1420 (n=11) |
| long (31–60w) | — | — | 0.0431 / 0.0508 (n=1) |
≤15 词的短回复里,minimind-3o 已经接近 Mini-Omni2;真正拉开差距的是 16–30 词段。这个长度已经不是简单短语,Talker 需要在一个完整短句里同时维持发音、节奏和词面一致性,也是当前 0.1B Talker 最容易暴露不稳定性的区间。
## Ⅳ 跨模型视觉语言对比
[Mini-Omni](https://huggingface.co/gpt-omni/mini-omni) 不支持 VL 路径,因此这里只比较 [Mini-Omni2](https://huggingface.co/gpt-omni/mini-omni2)(0.5B)和 minimind-3o(0.1B)。9 张合成图像上,两个模型分别生成英文回答,再统一转写并计算 CER / WER,作为视觉到语音链路的一致性参考。
| Model | Params | Avg CER ↓ | Avg WER ↓ |
|---|---|---|---|
| [Mini-Omni2](https://huggingface.co/gpt-omni/mini-omni2) | 0.5B | 0.7609 | 0.9756 |
| minimind-3o | 0.1B | 0.8241 | 1.0293 |
这个数值不能当作开放式图像描述的绝对正确率。视觉描述存在大量等价表达,同义改写和描述顺序都会影响 CER / WER,数值整体偏高是预期现象。在同一自动流程下,minimind-3o 落后于 Mini-Omni2,但仍处在同一数量级,同时参数约为后者的 1/5。
## Ⅴ 样例

语音到语音样例直接以真实语音作为输入,由 Thinker 组织语义,再由 Talker 渲染成语音。短回答仍然是当前更稳的区间,中文解释型问题通常能生成较连贯的回答,英文的发音和节奏相对更稳定。