[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2695":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},2695,"minimind-o","jingyaogong\u002Fminimind-o","jingyaogong","🎙️ 「大模型」从0训练0.1B能听能说能看的全模态Omni模型！A 0.1B Omni model trained from scratch, capable of listening, speaking, and seeing!","https:\u002F\u002Fjingyaogong.github.io\u002Fminimind-o",null,"Python",1813,211,14,3,0,53,151,771,159,19.98,"Apache License 2.0",false,"master",true,[27,28,29],"artificial-intelligence","chatgpt","omni","2026-06-12 02:00:43","\u003Cdiv align=\"center\">\n\n![logo](.\u002Fimages\u002Flogo.png)\n\n\u003C\u002Fdiv>\n\n\n\u003Cdiv align=\"center\">\n\n![visitors](https:\u002F\u002Fvisitor-badge.laobi.icu\u002Fbadge?page_id=jingyaogong\u002Fminimind-o)\n[![GitHub Repo stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fjingyaogong\u002Fminimind-o?style=social)](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-o\u002Fstargazers)\n[![GitHub Code License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fjingyaogong\u002Fminimind-o?v=1)](LICENSE)\n[![GitHub last commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fjingyaogong\u002Fminimind-o)](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-o\u002Fcommits\u002Fmaster)\n[![GitHub pull request](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-blue)](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-o\u002Fpulls)\n[![Collection](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F🤗-MiniMind--O%20%20Collection-blue)](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002Fjingyaogong\u002Fminimind-o)\n[![Technical Report](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTechnical%20Report-arXiv-red)](http:\u002F\u002Farxiv.org\u002Fabs\u002F2605.03937)\n\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ch3>\"大道至简\"\u003C\u002Fh3>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n\n中文 | [English](.\u002FREADME_en.md)\n\n\u003C\u002Fdiv>\n\n* 此开源项目旨在从 0 完整实现一个小规模的端到端 Omni 模型，单一权重同时支持文 \u002F 音 \u002F 图三模态输入与文本 \u002F 流式语音输出。\n* 其中 `minimind-3o` 仅 ~0.1B，普通个人 GPU 即可完成训练、CPU即可快速推理，是当前公开模型中规模最小的完整 Omni 实现（或之一）。\n* 开源 mini 与 full 两套训练数据：mini 单卡 3090 上约 2 小时跑通完整链路，便于入门；full 与发布权重对应。\n* 开源 Omni 模型的完整代码与技术报告，覆盖 Thinker–Talker 双路径、流式语音生成、实时打断、近似双工交互、音色克隆与电话模式 WebUI。\n* 所有核心算法代码均从 0 使用 PyTorch 原生实现，不依赖三方框架提供的高层抽象。\n* MiniMind-O 进一步延续了 [MiniMind](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind)（语言）与 [MiniMind-V](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-v)（视觉多模态）的设计范式。\n\n> 注：\"约 2 小时\" 指 mini 数据集在单张 NVIDIA RTX 3090 上跑完 SFT 的实测耗时。\n\n---\n\n\u003Cdiv align=\"center\">\n\n[📄 MiniMind-O Technical Report](http:\u002F\u002Farxiv.org\u002Fabs\u002F2605.03937)\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F10cbcc5f-4e70-45cf-bdc5-d6361e40bb86\n\n[🔗 在线体验 (Gradio)](https:\u002F\u002Fmodelscope.cn\u002Fstudios\u002Fgongjy\u002FMiniMind-O) &nbsp;|&nbsp; [🔗 视频介绍](https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1V1RsBcEMX)\n\n\n\u003C\u002Fdiv>\n\n---\n\n# 📌 项目介绍\n\n继 [MiniMind](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind)（LLM）和 [MiniMind-V](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-v)（VLM）之后，MiniMind-O 是这个系列的第三站。所谓 Omni，就是让一个模型同时具备听、看、说的多模态交互能力：接收文本、语音和视觉信号，输出文本与流式语音。\n\n或许 GPT-4o 让人第一次感受到足够自然的流式语音交互形态，随后 Mini-Omni2、Moshi、GLM-4-Voice、Qwen3-Omni 等开源工作陆续出现。但如果目标不是直接调用这些参数庞大的现成权重，而是从 0 读懂、训练、改动一个完整 Omni 模型，开源社区仍然急缺足够轻量、链路完整的起点。要把语音真正纳入 Omni 模型，一种做法是把 ASR、LLM、TTS 串成级联链路：语音先转文字，LLM 处理后再合成语音。这条路工程上直接，但中间多了一次文本转写，延迟、语气和情绪信息都会受到影响。\n\nMiniMind-O 尝试补上已知的空位：让语音和文本在 hidden state 层面直接连通，在主 backbone 仅 0.1B 的规模下保留端到端 Omni 链路。Talker 侧采用 MTP（Multi-Token Prediction）一次预测多层 Mimi codes，再配合 VAD 支持实时打断与近似双工交互，这是足够实用的工程路线之一。本项目的代码、模型权重、训练数据和技术报告全部完整开源，单张 RTX 3090 上约 2 小时即可跑通 mini 数据集训练。目标依旧：让每个人都能从第一行代码读起，自己动手，从 0 训练一个能听、能看、能思考、能说的模型：\n\n![](images\u002Fomni_io_flow.png)\n\n😊 一起感受创造的乐趣吧！\n\n---\n\n#### 🎉 项目包含以下内容\n\n- 提供完整的 MiniMind-O 结构代码：Thinker、独立 Talker、audio \u002F vision projector、Mimi codebook 接口以及 MTP audio head。\n- 提供 SFT 全链路训练流程，覆盖 T2A、I2T、A2A 三类数据，支持全参数训练、音频投影层训练、视觉投影层训练与 DDP 多卡训练。\n- 提供 mini 与 full 两套训练数据：mini 便于快速入门，单卡 3090 上约 2 小时可跑通；full 与发布权重对应，覆盖中文语音与图像任务。\n- 提供多种内置音色、unseen 音色与任意参考音频的音色克隆能力，便于复现音色控制实验。\n- 提供完整的推理与 Demo 工具，支持 CLI 推理、Web UI、流式播放、barge-in 打断和电话模式。\n- 关键模块均从 0 用 PyTorch 原生实现，不依赖三方高层封装；同时兼容 `transformers` Tokenizer 与原生权重格式。\n- 配套技术报告覆盖架构、训练曲线、CER \u002F WER 评估、音色克隆相似度与跨模型对比，链接见顶部 Tech Report 区。\n\n#### 🎉 已发布模型列表\n\n| 模型 | 参数（主干） | Release |\n|---|---|---|\n| minimind-3o | ~0.1B | 2026.05.05 |\n| minimind-3o-moe | ~0.3B-A0.1B | 2026.05.05 |\n\n---\n\n#### 👉 更新日志\n\n\u003Cdetails close>\n\u003Csummary> \u003Cb>🔥 2026-05-05\u003C\u002Fb> \u003C\u002Fsummary>\n\n- MiniMind-O 首次开源，发布 `minimind-3o`（115M）与 `minimind-3o-moe`（312M-A115M）\n- Thinker–Talker 双路径架构，Talker 采用 MTP 预测多层 Mimi codes，支持 24 kHz 流式语音生成与 barge-in 打断\n- 音频编解码器采用 Mimi（8 层 codebook，12.5 Hz，24 kHz），Talker 在 codebook 接口上使用共享主体与轻量 adapter\n- 语音 \u002F 视觉特征分别由冻结的 SenseVoice-Small 与 SigLIP2 编码，再通过两层 MLP projector 注入 MiniMind 隐空间\n- 同步发布 mini 与 full 两套训练数据，mini 单卡 3090 ~2h 即可跑通整条 Thinker–Talker 链路\n- 内置 5 个 voice prompt + 7 个 unseen voice prompt，提供音色克隆与电话模式 WebUI\n\n\u003C\u002Fdetails>\n\n\n# 📌 快速开始\n\n\u003Cdetails style=\"color:rgb(128,128,128)\">\n\u003Csummary>分享本人的软硬件配置（仅供参考）\u003C\u002Fsummary>\n\n* CPU: Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz\n* RAM: 128 GB\n* GPU: NVIDIA GeForce RTX 3090(24GB) * 8\n* Ubuntu==20.04\n* CUDA==12.2\n* Python==3.10\n* [requirements.txt](.\u002Frequirements.txt)\n\n\u003C\u002Fdetails>\n\n## 第0步（必须）\n\n### 1' 环境准备\n\n```bash\n# 克隆仓库代码\ngit clone --depth 1 https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-o\n# 安装必要依赖\npip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n### 2' 下载资源\n\n```bash\n# 下载 SenseVoice-Small 语音编码器到 .\u002Fmodel\u002FSenseVoiceSmall\nmodelscope download --model gongjy\u002FSenseVoiceSmall --local_dir .\u002Fmodel\u002FSenseVoiceSmall\n# 下载 SigLIP2 视觉编码器到 .\u002Fmodel\u002Fsiglip2-base-p32-256-ve\nmodelscope download --model gongjy\u002Fsiglip2-base-p32-256-ve --local_dir .\u002Fmodel\u002Fsiglip2-base-p32-256-ve\n# 下载 Mimi 音频编解码器到 .\u002Fmodel\u002Fmimi\nmodelscope download --model gongjy\u002Fmimi --local_dir .\u002Fmodel\u002Fmimi\n# 下载 CAMPPlus 说话人编码器到 .\u002Fmodel\u002Fcampplus\nmodelscope download --model gongjy\u002Fcampplus --local_dir .\u002Fmodel\u002Fcampplus\n# 下载 MiniMind 语言模型权重到 .\u002Fout 目录下（作为训练 Omni 的基座语言模型）\nmodelscope download --model gongjy\u002Fminimind-3o-pytorch llm_768.pth --local_dir .\u002Fout\n```\n\n注：也可从 [ModelScope Collection](https:\u002F\u002Fmodelscope.cn\u002Fcollections\u002Fgongjy\u002FMiniMind-O) 或 [HuggingFace Collection](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002Fjingyaogong\u002Fminimind-o) 选择对应内容 `git clone`（需LFS）下载，此处不再赘述。\n\n完成后，结构应如下：\n\n```text\nminimind-o\u002F\n├── model\u002F\n│   ├── SenseVoiceSmall\u002F\n│   ├── siglip2-base-p32-256-ve\u002F\n│   ├── mimi\u002F\n│   ├── campplus\u002F\n│   └── ...\n├── out\u002F\n│   └── llm_768.pth\n└── ...\n```\n\n## Ⅰ 🚀 模型推理\n\n### 1' 下载发布权重\n\n```bash\n# 下载发布权重到 .\u002Fout 目录下\nmodelscope download --model gongjy\u002Fminimind-3o-pytorch --local_dir .\u002Fout\n```\n\n### 2' 命令行问答\n\n```bash\npython eval_omni.py --load_from model --weight sft_omni\n```\n\n如果使用 transformers 格式模型，可先下载模型目录：\n\n```bash\ngit clone https:\u002F\u002Fhuggingface.co\u002Fjingyaogong\u002Fminimind-3o\npython eval_omni.py --load_from minimind-3o\n```\n\n### 3' 启动 WebUI（可选）\n\n```bash\n# ⚠️ 须先将 transformers 格式模型文件夹复制到 .\u002Fscripts\u002F 目录下，web_demo_omni 脚本会自动扫描该目录下包含权重文件的子文件夹，如不存在则报错\ncp -r minimind-3o .\u002Fscripts\u002Fminimind-3o\ncd scripts && python web_demo_omni.py\n```\n\n## Ⅱ 🛠️ 模型训练\n\n\u003Cdetails style=\"color:rgb(128,128,128)\">\n\u003Csummary>注：提前测试Torch是否可用cuda\u003C\u002Fsummary>\n\n```python\nimport torch\nprint(torch.cuda.is_available())\n```\n\n如果不可用，请自行去[torch_stable](https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Ftorch_stable.html)下载whl文件安装。\n\n\u003C\u002Fdetails>\n\n### 1' 下载数据\n\n快速开始时，推荐从[数据集链接](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fjingyaogong\u002Fminimind-o_dataset)只下载 `_mini` 数据集，并放到 `.\u002Fdataset` 下。\n\n### 2' 开始训练\n\n推荐 mini 训练管线如下，默认在 `trainer\u002F` 目录下执行，可直接 `cd trainer && bash train.sh`：\n\n```bash\nCUDA_VISIBLE_DEVICES=0 torchrun --master_port 29560 --nproc_per_node 1 train_sft_omni.py --learning_rate 5e-4 --data_path ..\u002Fdataset\u002Fsft_t2a_mini.parquet --epochs 1 --batch_size 40 --use_compile 1 --from_weight llm --save_weight sft_zero --max_seq_len 512 --use_wandb --use_moe 0\nCUDA_VISIBLE_DEVICES=0 torchrun --master_port 29560 --nproc_per_node 1 train_sft_omni.py --learning_rate 5e-4 --data_path ..\u002Fdataset\u002Fsft_a2a_mini.parquet --epochs 1 --batch_size 40 --use_compile 0 --from_weight sft_zero --save_weight sft_zero --max_seq_len 640 --mode audio_proj --use_wandb --use_moe 0\nCUDA_VISIBLE_DEVICES=0 torchrun --master_port 29560 --nproc_per_node 1 train_sft_omni.py --learning_rate 2e-5 --data_path ..\u002Fdataset\u002Fsft_a2a_mini.parquet --epochs 1 --batch_size 16 --use_compile 0 --from_weight sft_zero --save_weight sft_zero --max_seq_len 768 --use_wandb --use_moe 0\n```\n\n### 3' 测试已训练模型（可选）\n\n确保需要测试的模型 `*.pth` 文件已保存于 `.\u002Fout\u002F` 目录下。\n\n```bash\npython eval_omni.py --weight sft_omni\n```\n\n# 📌 模型细节\n\nMiniMind-O 的基座语言模型来自孪生项目 [MiniMind](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind)，LLM 的结构与训练细节可移步该项目查阅。即使不了解 LLM 细节，也可直接参照上方\"快速开始\"流程训练一个 MiniMind-O。\n\n## Ⅰ 架构总览\n\n![](.\u002Fimages\u002Farchitecture.jpg)\n\nMiniMind-O 的主体由 Thinker 和 Talker 两条路径组成。Thinker 负责理解文本、语音和图像输入，并生成语义层面的文本回复；Talker 则在 Thinker 给出的语义条件上，通过 MTP 同步预测多层 Mimi audio codes，最后由音频解码器还原成流式语音。这样做的目的不是把 ASR、LLM、TTS 简单串起来，而是在一个统一序列里同时保留文本推理、语音输出和流式交互能力。\n\n文本输入直接进入语言主干；语音和图像分别经过 Audio Encoder 与 Vision Encoder 提取特征，再映射到 MiniMind 的隐空间中。音色信息由 Speaker Encoder 或参考音频 codes 提供，推理时可以配合 VAD 实现边听边答、实时打断和近似双工交互。更细的 projector 结构、序列排布和训练目标在后文展开，代码层面的实现细节可直接参考 `model\u002Fmodel_omni.py` 与[技术报告](http:\u002F\u002Farxiv.org\u002Fabs\u002F2605.03937)。\n\n![](.\u002Fimages\u002Finput_token_layout.jpg)\n\n图中展示了文本 token、语音特征、图像特征和音色条件在输入序列中的布局方式。\n\n## Ⅱ Thinker 侧多模态理解\n\nThinker 负责统一接收文本、语音和图像信息，并生成语义层面的文本回复。文本 token 直接进入语言主干，语音和图像特征则通过对应 projector 注入到占位符位置，使不同模态最终落到同一条序列中建模。\n\n## Ⅲ 中间层 Bridge\n\nThinker 向 Talker 传递的表征取自中间层，而不是 embedding 层或最后一层。embedding 层语义信息不足，最后一层又更贴近 next-token prediction 目标；中间层通常已经融合了上下文和跨模态信息，同时还没有被 LM head 过度塑形，更适合作为语音生成的条件。默认 `bridge_layer = num_hidden_layers \u002F\u002F 2 - 1`，不同规模下也可以通过配置调整。\n\n## Ⅳ Talker 侧语音生成\n\nTalker 负责把 Thinker 给出的语义状态转成 8 层 Mimi codebook 序列。这里采用 MTP 形式同时预测多个 audio codebook，而不是把每层 codebook 拆成独立的长链路；为了控制 0.1B 模型中的额外参数量，音频 embedding 和输出 head 采用共享主体加轻量 codebook adapter 的形式。这样既保留不同 codebook 的分布差异，也避免为每一层 codebook 复制一整套参数。\n\n## Ⅴ 序列格式与流式解码\n\n![](.\u002Fimages\u002Fsequence_format.jpg)\n\nMiniMind-O 将文本 token 与 8 路 audio-code stream 放在同一个训练样本中：Thinker 负责文本序列，Talker 负责音频 code 序列，语音、图像和音色条件都通过占位符或 reference codes 注入。回复开始之后才计算目标文本和目标音频的损失，因此 reference 与 conditioning 区域只提供条件，不作为重构目标。\n\n流式生成时，模型一边产生文本 token，一边通过 MTP 和延迟调度补齐 8 层 Mimi codes。Mimi 解码器可以增量恢复 24 kHz 波形，因此语音播放不必等待完整回答结束。\n\n## Ⅵ 音色控制\n\n音色控制采用 in-context voice cloning 的方式完成：参考音频先被编码成 voice prompt，作为上下文条件喂给 Talker，而不是通过微调权重或改写文本 prompt 来指定音色。模型也可以同时使用 speaker embedding 提供更稳定的说话人约束；推理时更换音色只需要替换这些条件信息，Thinker prompt 与 Talker 权重保持不变。\n\n默认 release 带有 5 个内置 voice prompt（dylan、eric、serena、uncle_fu、vivian），另保留 7 个 unseen prompt 用于评估（arthur、chelsie、cherry、ethan、jennifer、momo、moon）。\n\n## Ⅶ 模块与参数规模\n\nMiniMind-O 所说的 0.1B，指 Thinker、Talker 和两路 projector 组成的可训练主体；落到具体发布版本上，`minimind-3o` 约 113M，`minimind-3o-moe` 约 315M。Audio Encoder、Vision Encoder 和 Speech Codec 属于冻结的外部旁路模型，负责特征提取或音频编解码，合计约 425M 参数，不计入 active MiniMind-O 参数。\n\n下表按发布模型统计主要模块参数，Trainable 参数按 PyTorch 模块统计，tied embedding 去重计入。\n\n| 统计口径 | minimind-3o | minimind-3o-moe |\n|---|---:|---:|\n| 可训练主体 | 113.13M | 314.89M |\n| 冻结外部模块 | 424.70M | 424.70M |\n| 运行时总加载 | 537.83M | 739.59M |\n\n| 模块 | 具体实现 | 关键配置 | 状态 \u002F 参数 (~3o \u002F ~3o-moe) |\n|---|---|---|---|\n| Thinker | MiniMind Transformer | 8 layers, hidden 768 | trainable, 63.91M \u002F 198.42M |\n| Talker | 独立 MiniMind blocks | 4 layers, 8 codebook heads | trainable, 47.05M \u002F 114.30M |\n| Audio projector | `MMAudioProjector` | 512 → 768 | trainable, 0.99M |\n| Vision projector | `MMVisionProjector` | 768 → 768 | trainable, 1.18M |\n| Audio encoder | SenseVoice-Small | 16 kHz speech features | frozen, 234.00M |\n| Vision encoder | SigLIP2 base-p32-256 | 256×256 image, 64 tokens | frozen, 94.55M |\n| Speech codec | Mimi | 8 codebooks, 12.5 Hz, 24 kHz | frozen, 96.15M |\n| Speaker condition | CAM++ embedding | 192-d speaker vector | precomputed |\n\n# 📌 实验\n\n## Ⅰ 数据集\n\n数据集下载：[ModelScope](https:\u002F\u002Fwww.modelscope.cn\u002Fdatasets\u002Fgongjy\u002Fminimind-o_dataset) | [HuggingFace](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fjingyaogong\u002Fminimind-o_dataset)\n\n所有语音数据都统一转成 Mimi codes 存储，8 层 codebook，帧率 12.5 Hz；图像统一 resize 到 256×256，由 SigLIP2 P32 编码为 64 个 patch token。训练数据主要来自公开 omni \u002F speech instruction 数据，包括 [VoiceAssistant-400K](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fgpt-omni\u002FVoiceAssistant-400K)、[UltraChat-300K-SLAM-Omni](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fworstchan\u002FUltraChat-300K-SLAM-Omni) 等；同时基于 Qwen3-TTS 进行了大量多说话人音频合成，并用 CAM++ 提取 speaker embedding 作为音色条件。I2T 数据与 [MiniMind-V](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-v) 使用的视觉指令数据来源一致，原始组成和引用可参考该项目说明。\n\n仓库提供 **mini** 与 **full** 两套训练数据。mini 从 full 中按\"英文 + 无视觉\"筛出，配 `train_sft_omni.py` 的默认 `--data_path` 即可使用；它的目标是用较低成本跑通 Thinker–Talker、Mimi 编解码、序列布局和音色注入链路，而不是复现发布模型的中文语音能力。中文 Talker 要同时处理更复杂的字音映射、韵律停顿和多说话人稳定性，明显比英文更难，不能依赖单卡 3090 约 2 小时的 mini 训练完成。\n\nfull 数据集与发布的 `minimind-3o` \u002F `minimind-3o-moe` 权重对应，覆盖中英文 T2A \u002F A2A 与图像 I2T。规模与中英文比例见下表，是论文中 CER \u002F 音色相似度等指标的实际训练源。\n\n其中 T2A 表示 Text-to-Audio，A2A 表示 Audio-to-Audio，I2T 表示 Image-to-Text。\n\n| 数据集 | 子集 | 输入语音 | 输出语音 | 备注 |\n|---|---|---|---|---|\n| `sft_t2a_mini` | 英文 T2A | — | 约 470.14 h | mini 入门用 |\n| `sft_a2a_mini` | 英文 A2A | 约 74.64 h | 约 56.60 h | mini 入门用 |\n| `sft_t2a` | 中英 T2A | — | 约 1636.01 h | full 训练 |\n| `sft_a2a` | 中英 A2A | 约 1711.97 h | 约 423.40 h | full 训练 |\n| `sft_i2t` | 图像 I2T | — | — | full 训练 |\n\n`sft_t2a` 中中文、英文、混合样本占比分别为 45.7%、46.5%、7.8%；`sft_a2a` 中三者分别为 70.8%、21.2%、8.0%。这个分布会直接反映到行为上：短中文和短英文回答通常较稳定，较长英文语音更容易出现读音漂移和漏词。mini 子集只保留英文，因此即便参数量和数据量都收得很紧，单语种内部的 CER 表现仍能维持在可用范围。\n\n## Ⅱ 训练\n\n训练入口是 `train_sft_omni.py`，推荐流程可直接参考 `trainer\u002Ftrain.sh`。当前 full 训练不拆复杂的多阶段预训练，而是按数据流逐步接入能力：\n\n![](.\u002Fimages\u002Ftraining_pipeline.jpg)\n\n- `sft_t2a`：先对齐文本到语音输出，让 Talker 学会在 Thinker 语义条件下生成 Mimi codes；\n- `sft_a2a`：再接入语音输入，使模型从 speech instruction 进入同一套 Thinker–Talker 回复链路；\n- `sft_i2t`：最后对齐视觉路径，其中 `vision_proj` 模式只更新视觉投影层，避免图像数据过度改写语言和语音能力。\n\n训练模式里，`all` 会更新 MiniMind \u002F Talker \u002F projector，`audio_proj` 和 `vision_proj` 只用于单独对齐对应投影层；SenseVoice-Small、SigLIP2 和 Mimi 始终冻结。Dense 与 MoE 版本沿用同一套数据顺序。mini 命令只用于快速跑通链路，默认单卡 3090 约 2 小时完成；发布权重对应 full 数据训练。\n\n下面给出 full 训练过程中的 T2A 与 A2A loss 曲线（仅供参考）：\n\n![](.\u002Fimages\u002Ft2a_training_curves.jpg)\n\n> `sft_t2a`：文本到语音输出链路\n\n![](.\u002Fimages\u002Fa2a_training_curves.jpg)\n\n> `sft_a2a`：接入语音输入后的 loss\n\nT2A 曲线已去掉早期不兼容权重 resume 造成的异常尖峰；MoE 总参数更多但 active 参数与 dense 接近，更适合作为容量分配实验参考。\n\n## Ⅲ 模型权重\n\n| 模型格式 | ModelScope | HuggingFace |\n|---|---|---|\n| PyTorch (`*.pth`) | [minimind-3o-pytorch](https:\u002F\u002Fwww.modelscope.cn\u002Fmodels\u002Fgongjy\u002Fminimind-3o-pytorch) | [minimind-3o-pytorch](https:\u002F\u002Fhuggingface.co\u002Fjingyaogong\u002Fminimind-3o-pytorch) |\n| Transformers | [minimind-o collection](https:\u002F\u002Fmodelscope.cn\u002Fcollections\u002Fgongjy\u002FMiniMind-O) | [minimind-o collection](https:\u002F\u002Fhuggingface.co\u002Fcollections\u002Fjingyaogong\u002Fminimind-o) |\n\n> Transformers 版本包含 `minimind-3o` 与 `minimind-3o-moe`，适合直接用于 `eval_omni.py` 和 WebUI 推理；原生 PyTorch 权重主要用于训练、复现实验和继续微调。\n\n# 📌 评估\n\nOmni 模型目前可能还没有统一的评估口径，不同工作的 LLM 主干、音频合成器和系统目标都不一样：有的看重 LLM 本身的知识和推理，会报告 MMLU、HumanEval 等指标；有的看重流式速度和音质，有的强调语音一致性指标，也有的更关注自然交互或更大范围的 Omni 生成。这些工作大都基于 SOTA 开源 LLM 续训，而 MiniMind 的 0.06B 主干在复杂知识问答、数学推理、代码生成或开放式长回答上显然不可能形成竞争力，Talker 的自然度、韵律和稳定性也弱于成规模的系统。\n\n所以这里无法追求综合榜单，而是落实到几项更可复现的局部评估和 use cases：Talker hidden size 消融、音色克隆相似度、相同问题和相同 ASR 流程下的 CER \u002F WER 对比，以及 A2A、I2A 和实时交互样例。CER \u002F WER 主要用来观察文本一致性，音质、自然度和人类偏好则留给定性样例和实际试听判断。\n\n## Ⅰ Talker Hidden Size 消融\n\n如果只看语音生成，Talker 做到 1024 \u002F 2048 维、或者继续加深层数一定会更稳。但 MiniMind-O 要把完整 Omni 链路压在 0.1B 左右，不能把大部分参数都交给声学端。Thinker \u002F Talker 解耦后，语言理解和跨模态融合主要由 Thinker 承担，Talker 只在语义条件上渲染 Mimi codes，这让小 Talker 成为可能。这里的渲染不是只预测语义 token 再交给外部声学生成器，而是由 Talker 直接生成可解码的 Mimi acoustic codes；真正的瓶颈也就在输出端：Talker 面对的是 8 层 Mimi codebook，而不是单一路径的 next-token prediction。\n\n384 维最诱人，dense 版本可以压到 88M 左右；512 维也更轻。但表中结果说明，小并不自动等于划算：短句还能维持，中长句更容易出现漏词、重复和发音漂移。768 维最后留下来，是因为它和 MiniMind 主干维度一致，可以用 Thinker 后 4 层初始化；参数仍在 0.1B 左右，训练成本没有明显增加，一致性却稳定得多。\n\n| Variant | Talker hidden | Params | Avg CER ↓ | Short ↓ | Mid \u002F Long ↓ |\n|---|---|---|---|---|---|\n| Dense | 768 | 115.29M | **0.0897** | 0.1528 | 0.0874 \u002F 0.0675 |\n| Dense | 512 | 96.13M | 0.1745 | 0.2709 | 0.2455 \u002F 0.0976 |\n| Dense | 384 | 88.72M | 0.2767 | 0.3904 | 0.1865 \u002F 0.4046 |\n| MoE | 768 | 317.05M-A115.33M | **0.0900** | 0.2075 | 0.0533 \u002F 0.0271 |\n| MoE | 512 | 261.32M-A96.17M | 0.1265 | 0.0711 | 0.1490 \u002F 0.1464 |\n| MoE | 384 | 240.04M-A88.75M | 0.3280 | 0.3757 | 0.2777 \u002F 0.4313 |\n\nDense 和 MoE 的 CER 不宜直接横向比较：同一问题下，两个 Thinker 生成的内容和长度可能不同，Talker 面对的合成难度也不同。更有意义的是看同一架构内部的趋势，768 都明显优于 512 和 384。\n\n## Ⅱ 音色克隆相似度\n\n音色克隆是当前版本里比较 Beta 的能力。没说错的话，多数开源 Omni 模型只支持固定输出音色，而 minimind-3o 尝试把多音色生成塞到同一套 Talker 里完成。这个目标比“能说话”更难，因为模型不仅要把内容说对，还要在生成 Mimi codes 时保留说话人的音色线索。\n\n目前效果还谈不上高保真克隆，同一个参考音色在不同问题上并不总能保持一致，长句里也容易被发音和节奏问题带偏。但基本的男女声差异、语调倾向和一部分韵律特征是能区分出来的。\n下面的 CAM++ speaker embedding 余弦相似度只作为自动化参考：Seen 组来自 `voices.pt` 中 5 个内置音色，Unseen 组来自 `voices_unseen.pt` 中 7 个训练时未见过的音色；每个音色使用同一组文本问题，只替换音色条件。\n\n逐音色细分如下：\n\n| Split | Speaker | Dense ↑ | MoE ↑ |\n|---|---|---|---|\n| Seen | dylan | 0.6997 | 0.6837 |\n| Seen | eric | 0.5289 | 0.4232 |\n| Seen | serena | 0.7092 | 0.7041 |\n| Seen | uncle_fu | 0.7241 | 0.7337 |\n| Seen | vivian | 0.5744 | 0.5888 |\n| Unseen | arthur | 0.7171 | 0.6750 |\n| Unseen | chelsie | 0.6437 | 0.6240 |\n| Unseen | cherry | 0.5689 | 0.5678 |\n| Unseen | ethan | 0.4783 | 0.4847 |\n| Unseen | jennifer | 0.4749 | 0.4003 |\n| Unseen | momo | 0.6470 | 0.5720 |\n| Unseen | moon | 0.4282 | 0.6673 |\n\n总体上，minimind-3o 与 minimind-3o-moe 的平均结果接近，也都略高于早期 baseline；这说明音色保持不主要由 inactive expert 容量决定，更直接的影响来自 reference 片段质量、CAM++ embedding 的可分性，以及 Talker 生成音频本身是否稳定。单个音色里，uncle_fu、serena、arthur 这类声音更容易保持住，至少一个版本能超过 0.70；eric、moon 等 outlier 则更容易受生成质量影响。换句话说，这个能力已经能区分一部分音色特征，但距离“给一段参考音频就稳定复刻”的产品级体验还有距离。\n\n### 音色克隆消融实验（音频播放）\n\n为了让试听更直观，这里固定 seed=42、temperature=0.7，对每个音色展示 1 个生成样例，唯一变化的是参考音频 codes 和 speaker embedding。作为对照，下面先给出不施加任何参考音色条件时的 default 输出（朗读文本对所有样例一致）：\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fb31fd8f2-e3af-4fed-ba19-65424b59bec6\n\n#### Seen 音色\nSeen 表示训练数据中出现过的音色，用来观察模型对熟悉说话人的保持情况。\n\n\u003Ctable>\n\u003Ctr>\u003Cth width=\"100\">说话人\u003C\u002Fth>\u003Cth width=\"380\">参考音色\u003C\u002Fth>\u003Cth width=\"380\">输出结果\u003C\u002Fth>\u003Cth width=\"80\">平均\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>dylan\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F070ea3ab-0e8e-4aa0-84b5-af8d3c4e2725\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Feb2da7ed-173c-47e9-9431-7bdb5a9b7385\n\n\u003C\u002Ftd>\u003Ctd>0.6712\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>eric\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc74aa5dc-1edd-44c1-9546-6e57194c2f60\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ff3fa8906-4e14-4610-a9d9-c16c915ca1b3\n\n\u003C\u002Ftd>\u003Ctd>0.4430\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>serena\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F0eeeac87-fa70-4025-b66e-1f0197f2b434\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc5901dca-4b2a-47f5-9b30-c89de54f908e\n\n\u003C\u002Ftd>\u003Ctd>0.6600\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>uncle_fu\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ffdd1bb28-6648-44bf-8bcb-4509e709e347\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F95b480f1-f015-4712-8d7c-17db465f6584\n\n\u003C\u002Ftd>\u003Ctd>0.6632\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>vivian\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ff64731c4-67a3-4e18-b7d7-61bf44ef4bdd\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F3f1cc9bb-16d2-4ce0-a473-40676cf4523e\n\n\u003C\u002Ftd>\u003Ctd>0.5320\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n#### Unseen 音色\nUnseen 表示训练时没有见过的音色，用来观察模型能否把新的参考音色0样本直接迁移到生成语音里。\n\n\u003Ctable>\n\u003Ctr>\u003Cth width=\"100\">说话人\u003C\u002Fth>\u003Cth width=\"380\">参考音色\u003C\u002Fth>\u003Cth width=\"380\">输出结果\u003C\u002Fth>\u003Cth width=\"80\">平均\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>arthur\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F3430ecdb-6de8-4fb0-a6a7-ad82bdce01a1\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fe598dbc2-ba28-4c38-b52d-6fa6c2349a5b\n\n\u003C\u002Ftd>\u003Ctd>0.6479\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>chelsie\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ff9166af6-3a98-42f3-9cf8-ad105eea87d6\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Feccca693-4708-409a-88f7-85eb25f66fe6\n\n\u003C\u002Ftd>\u003Ctd>0.5975\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>cherry\u003C\u002Ftd>\u003Ctd>\n\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fe69b9cac-e12f-43ae-a9dc-7e1618ef3a43\n\n\n\u003C\u002Ftd>\u003Ctd>\n\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fbb41cdef-cc92-48fa-a508-76a75d391565\n\n\n\u003C\u002Ftd>\u003Ctd>0.5418\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>ethan\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F9c992505-2046-483e-a7cf-50ec18a5e329\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F98013c5e-f5b5-4e1a-bc0e-a0f0be5d3240\n\n\u003C\u002Ftd>\u003Ctd>0.4323\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>jennifer\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F924b035d-5c7c-45a5-a8f8-5dbdc18f71db\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F853d1370-0065-4567-9a71-dc88a6a34d56\n\n\u003C\u002Ftd>\u003Ctd>0.4052\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>momo\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F7e97f524-da6d-4a2f-9095-e7f99262f4a5\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F4c193c8f-8750-4424-acba-2bd13089a634\n\n\u003C\u002Ftd>\u003Ctd>0.5968\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>moon\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F527df88a-adc0-48d3-9a6a-827ca1ba7fb0\n\n\u003C\u002Ftd>\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F3f533e26-1ad8-4ab3-baf1-21267734d3ee\n\n\u003C\u002Ftd>\u003Ctd>0.5874\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Ⅲ 跨模型英文 T2A 对比\n\n这里选了 20 个英文问题，并统一加上 `Answer briefly in one short sentence` 约束。这样做不是为了考察开放式英文能力，而是尽量把回答长度压到同一范围内；三套模型生成音频后，再统一用 Qwen3-ASR 转写，并与目标文本计算 CER \u002F WER，用来比较 Talker 的文本一致性。\n\n| 长度桶 | [Mini-Omni](https:\u002F\u002Fhuggingface.co\u002Fgpt-omni\u002Fmini-omni) CER\u002FWER | [Mini-Omni2](https:\u002F\u002Fhuggingface.co\u002Fgpt-omni\u002Fmini-omni2) CER\u002FWER | minimind-3o CER\u002FWER |\n|---|---|---|---|\n| short (≤15w) | 0.0195 \u002F 0.0384 (n=8) | 0.0503 \u002F 0.0584 (n=14) | 0.0531 \u002F 0.0417 (n=8) |\n| mid (16–30w) | 0.0038 \u002F 0.0052 (n=12) | 0.0062 \u002F 0.0076 (n=6) | 0.1327 \u002F 0.1420 (n=11) |\n| long (31–60w) | — | — | 0.0431 \u002F 0.0508 (n=1) |\n\n≤15 词的短回复里，minimind-3o 已经接近 Mini-Omni2；真正拉开差距的是 16–30 词段。这个长度已经不是简单短语，Talker 需要在一个完整短句里同时维持发音、节奏和词面一致性，也是当前 0.1B Talker 最容易暴露不稳定性的区间。\n\n## Ⅳ 跨模型视觉语言对比\n\n[Mini-Omni](https:\u002F\u002Fhuggingface.co\u002Fgpt-omni\u002Fmini-omni) 不支持 VL 路径，因此这里只比较 [Mini-Omni2](https:\u002F\u002Fhuggingface.co\u002Fgpt-omni\u002Fmini-omni2)（0.5B）和 minimind-3o（0.1B）。9 张合成图像上，两个模型分别生成英文回答，再统一转写并计算 CER \u002F WER，作为视觉到语音链路的一致性参考。\n\n| Model | Params | Avg CER ↓ | Avg WER ↓ |\n|---|---|---|---|\n| [Mini-Omni2](https:\u002F\u002Fhuggingface.co\u002Fgpt-omni\u002Fmini-omni2) | 0.5B | 0.7609 | 0.9756 |\n| minimind-3o | 0.1B | 0.8241 | 1.0293 |\n\n这个数值不能当作开放式图像描述的绝对正确率。视觉描述存在大量等价表达，同义改写和描述顺序都会影响 CER \u002F WER，数值整体偏高是预期现象。在同一自动流程下，minimind-3o 落后于 Mini-Omni2，但仍处在同一数量级，同时参数约为后者的 1\u002F5。\n\n## Ⅴ 样例\n\n![](.\u002Fimages\u002Fqual_a2a.jpg)\n\n语音到语音样例直接以真实语音作为输入，由 Thinker 组织语义，再由 Talker 渲染成语音。短回答仍然是当前更稳的区间，中文解释型问题通常能生成较连贯的回答，英文的发音和节奏相对更稳定。\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fc85809b2-4787-4656-9c7e-55b693798494\n\n\u003C\u002Ftd>\n\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F354a5eec-c147-4d18-8c7a-942bd2a0b4b0\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n![](.\u002Fimages\u002Fimage2audio_qualitative.jpg)\n\n图像问答样例把视觉编码、文本生成和语音渲染串在同一条链路里。当前模型通常能抓住主体物体和大致场景，但细粒度空间关系、数量和属性仍容易出错，因此更适合作为小模型 omni pipeline 的可复现基线。\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F244e08b0-5b12-449e-a7a2-2a2139c5d62d\n\n\u003C\u002Ftd>\n\u003Ctd>\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F3e8d0a76-282d-4a9d-9726-a954cf80198a\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Ⅵ 实时交互\n\n![](.\u002Fimages\u002Frealtime_interaction.jpg)\n\n最后是实时交互界面。用户停止说话后，Thinker 先完成语义侧的 prefill，Talker 随后开始逐步产生音频 code，Mimi decoder 则边接收 code 边写出 24 kHz 波形。Barge-in 的例子展示了另一条更接近真实对话的路径：当用户在模型说话过程中再次开口，系统会中断当前生成，重新进入 prefill–reply 流程。这里的中断检测仍然只是简单 VAD 阈值，还谈不上语义级打断；但从工程闭环看，系统已经能从 speaking 状态退回 listening 状态，并处理下一轮输入。\n\n### 🧩 未来值得改进的方面\n\n当前模型和大规模 Omni 系统在各方面仍有差距，这一点不需要回避。长语音自然度、复杂视觉推理、开放式英文中长回答和音色稳定性，都还不是它擅长的区间。视觉路径更接近紧凑的 vision-to-speech 链路，MoE 版本也更像一次容量分配实验，而不是同算力最优解。\n\n这些限制也给出了后续方向：更长的 ICL 上下文、更细的 prosody 监督、更强的视觉编码器、更稳定的音色条件，以及对 Bridge layer 和 MTP codebook interface 的系统扫描，都值得继续做。\n\n话说回来，MiniMind-O 的价值也正在这里。它把一个完整 Omni 闭环压到 0.1B 量级，并把代码、权重和主要训练数据放在同一个可检查对象里；这意味着它不只是一个 demo，而是一个足够小、足够透明、可以从头复现和继续改造的基线。对于想理解 Thinker–Talker 解耦、MTP codebook interface、in-context voice cloning 和 middle hidden bridge 这些细节的人来说，它提供的是一套可以真正动手验证的设计经验。\n\n# 📌 致谢\n\n> [!TIP]\n> 如果您觉得 `MiniMind-O` 对您有所帮助，可以在 GitHub 上加一个⭐\u003Cbr\u002F>\n> 水平有限难免存在未知的纰漏，欢迎所有人在 Issues 交流指正或提交 PR 改进项目\u003Cbr\u002F>\n> 您的支持就是持续改进项目的动力，谢谢！\n\n## 🤝贡献者\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-o\u002Fgraphs\u002Fcontributors\">\n  \u003Cimg width=\"200\" src=\"https:\u002F\u002Fcontrib.rocks\u002Fimage?repo=jingyaogong\u002Fminimind-o\" \u002F>\n\u003C\u002Fa>\n\n## 😊鸣谢\n\n- [MiniMind](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind) \u002F [MiniMind-V](https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-v)（基座、数据）\n- [Qwen2.5-Omni \u002F Qwen3-Omni](https:\u002F\u002Fgithub.com\u002FQwenLM\u002FQwen2.5-Omni)（灵感、数据）\n- [Mini-Omni \u002F Mini-Omni2](https:\u002F\u002Fgithub.com\u002Fgpt-omni\u002Fmini-omni)（灵感、数据）\n- [SLAM-Omni](https:\u002F\u002Faclanthology.org\u002F2025.findings-acl.115\u002F)（数据）\n- [SenseVoice](https:\u002F\u002Farxiv.org\u002Fabs\u002F2407.04051)（组件）\n- [Mimi \u002F Moshi](https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.00037)（组件）\n- [vLLM-Omni](https:\u002F\u002Fgithub.com\u002Fvllm-project\u002Fvllm-omni)（推理、合成数据）\n- 其他参考的开源项目与论文（在技术报告中详细列出）\n\n## 🫶支持者\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-o\u002Fstargazers\">\n    \u003Cpicture>\n      \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fbytecrank.com\u002Fnastyox\u002Freporoster\u002Fphp\u002FstargazersSVG.php?user=jingyaogong&repo=minimind-o&theme=dark\"\u002F>\n      \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fbytecrank.com\u002Fnastyox\u002Freporoster\u002Fphp\u002FstargazersSVG.php?user=jingyaogong&repo=minimind-o\"\u002F>\n      \u003Cimg alt=\"github contribution grid snake animation\" src=\"https:\u002F\u002Fbytecrank.com\u002Fnastyox\u002Freporoster\u002Fphp\u002FstargazersSVG.php?user=jingyaogong&repo=minimind-o&theme=dark\"\u002F>\n    \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-o\u002Fnetwork\u002Fmembers\">\n    \u003Cpicture>\n      \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fbytecrank.com\u002Fnastyox\u002Freporoster\u002Fphp\u002FforkersSVG.php?user=jingyaogong&repo=minimind-o&theme=dark\"\u002F>\n      \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fbytecrank.com\u002Fnastyox\u002Freporoster\u002Fphp\u002FforkersSVG.php?user=jingyaogong&repo=minimind-o\"\u002F>\n      \u003Cimg alt=\"github contribution grid snake animation\" src=\"https:\u002F\u002Fbytecrank.com\u002Fnastyox\u002Freporoster\u002Fphp\u002FforkersSVG.php?user=jingyaogong&repo=minimind-o&theme=dark\"\u002F>\n    \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n\u003Cpicture>\n  \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=jingyaogong\u002Fminimind-o&type=Date&theme=dark\"\u002F>\n  \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=jingyaogong\u002Fminimind-o&type=Date\"\u002F>\n  \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=jingyaogong\u002Fminimind-o&type=Date&theme=dark\"\u002F>\n\u003C\u002Fpicture>\n\n# 🎓 引用\n\n如果您觉得 MiniMind-O 对您的研究或工作有所帮助，请引用：\n\n```bibtex\n% 引用 MiniMind-O 技术报告：用于讨论模型架构、训练方法与实验结论。\n@article{minimind-o-report,\n    title   = {MiniMind-O Technical Report: An Open Small-Scale Speech-Native Omni Model}, \n    author  = {Jingyao Gong},\n    journal = {arXiv preprint arXiv:2605.03937},\n    year    = {2026}\n}\n\n% 引用 MiniMind-O GitHub 仓库：用于指代开源代码与发布权重。\n@misc{minimind-o,\n    title  = {MiniMind-O: Train a Tiny Omni Model from Scratch},\n    author = {Jingyao Gong},\n    year   = {2026},\n    url    = {https:\u002F\u002Fgithub.com\u002Fjingyaogong\u002Fminimind-o},\n    note   = {GitHub repository, accessed 2026}\n}\n```\n\n# 📜 许可协议\n\n本仓库遵循 [Apache-2.0 License](LICENSE) 开源协议。\n","MiniMind-O 是一个从零训练的0.1B全模态Omni模型，能够处理文本、语音和图像输入，并输出文本和流式语音。其核心功能包括多模态输入支持、实时打断与近似双工交互能力以及音色克隆等。项目采用PyTorch原生实现所有算法，不依赖第三方框架的高层抽象，使得在普通个人GPU上即可完成训练，在CPU上也能快速推理。MiniMind-O适合用于需要轻量级多模态AI解决方案的研究者和个人开发者，特别是那些希望从头开始理解和构建自己的全模态模型的人士。此外，项目提供了完整的代码、技术报告及两套训练数据集，便于初学者快速入门。",2,"2026-06-11 02:50:56","CREATED_QUERY"]