ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

读懂MiniMind-O数据格式:Mimi 8层codebook如何存储与重建语音

读懂MiniMind-O数据格式:Mimi 8层codebook如何存储与重建语音 读懂MiniMind-O数据格式Mimi 8层codebook如何存储与重建语音【免费下载链接】minimind-o️ A 0.1B Omni model trained from scratch, capable of listening, speaking, and seeing!项目地址: https://gitcode.com/gh_mirrors/mi/minimind-oMiniMind-O 是一个约 0.1B 参数的开源端到端 Omni 模型单一权重同时支持文本、语音、图像三模态输入与文本、流式语音输出。本文带你读懂它的语音数据格式所有语音在训练数据里都被 Mimi 编码器压缩成8 层 codebook 的整数序列8 层 × 12.5 Hz × 24 kHz而不是存成原始波形。搞懂这套语音存成整数、解码回波形的链路你就掌握了 MiniMind-O 数据与训练的一半。 上图展示了 MiniMind-O 的整体 IO 形态Audio Input 最终要变成 Streaming Speech 输出中间全靠 8 层 Mimi codes 传递。Mimi 8层codebook语音的数字压缩包传统 TTS 数据存波形动辄几 MB 一条MiniMind-O 的做法是把语音先过一遍Mimi 神经音频编解码器Mimi/Moshi 生态冻结使用约 96M 参数权重见model/mimi/压缩成整数码流参数值含义codebook 层数8 层L0~L7每帧语音拆成 8 个整数逐层细化声学细节每层词表大小2048每个 code 是 0~2047 的整数帧率12.5 Hz每 80 ms 一帧2 秒语音 25 帧解码输出24 kHz 波形8 路 code 对齐后送入 Mimi 解码器还原波形可以把它理解为语音版的 BPE第 0 层 code 承载最粗的语义/韵律骨架后面 7 层逐层补充音色、细节。正因为只有 8 路整数序列MiniMind-O 才能把语音当作 token 直接塞进 Transformer 训练而不需要级联独立 TTS。配置层面音频词表共2112 2048 个 Mimi code 64 个特殊 token其中关键的三个定义在 model/model_omni.pyaudio_pad_token2049|音频|序列中的占位符audio_stop_token2050告诉模型这层说完了audio_spk_token2051说话人音色条件占位符Parquet训练数据一条样本长什么样训练数据是Parquet 表格如sft_t2a_mini.parquet、sft_a2a_mini.parquet每条样本的列结构与读取逻辑在 dataset/omni_dataset.py列名内容与 codebook 的关系conversations对话文本JSON 字符串Thinker 侧的文本序列answer_audios每轮回复语音的Mimi codes⭐ 核心列一维整数列表每 8 个连续数字 1 帧question_audios提问语音原始字节A2A 场景运行时重采样到 16 kHz 过 SenseVoice 编码ref_audios参考音色的 Mimi codes音色克隆条件同样按 8 个一组平铺spk_emb192 维说话人向量CAM 提取的音色 embedding注意一个关键细节code 在 parquet 里是帧优先平铺的一维列表即[帧0的8个code, 帧1的8个code, ...]。数据加载时按 8 个一组拆回 8 层代码在 dataset/omni_dataset.pyaudio_codes_8layers [[] for _ in range(8)] for i in range(0, len(tokens) - 7, 8): for j in range(8): audio_codes_8layers[j].append(tokens[i j]) # 第 j 层追加第 i/8 帧的 code for layer in audio_codes_8layers: layer.append(self.audio_stop_token) # 每层末尾补 stop 标记也就是说2 秒的语音在表格里只是约200 个整数一行数据不到 2 KB——这就是全语音数据统一转成 Mimi codes 存储带来的空间优势full 数据集约 1600 小时语音因此可以放进几份 parquet 文件。8路code如何进入模型9路输入与MTP延迟对齐训练时样本会被拼成一个9 路张量前 8 路是音频 code 序列最后 1 路是文本 tokendataset/omni_dataset.py。8 层 code 不是同一时刻同时出现的而是按MTPMulti-Token Prediction延迟调度阶梯式展开——第 L 层比第 0 层晚 L 个位置开始整体形成斜向排布填充逻辑见 dataset/omni_dataset.py第i层的目标 code 从assistant_start i 1位置开始写入只覆盖最后一个 assistant 轮次之前的轮次全部置-100不参与 loss。配合 trainer/train_sft_omni.py 中的音频损失8 层各自算 CrossEntropy其中stop token 的 loss 被放大 10 倍1 stop_mask * 9确保模型学会准时闭嘴。生成侧对应同样的调度model/model_omni.py 中只有当 8 层都对齐延迟 7 步后才产出一个完整的 8 码帧一旦某层采到 2048的特殊码就记为停止。从codes回到波形Mimi解码器重建24kHz语音推理时Talker 逐帧产出的 8 码帧最终交给 Mimi 解码器还原波形完整流程在 eval_omni.py收集所有长度恰为 8 的帧转成(8, T)张量torch.where(codes 2049, 0, codes)——把 pad/stop 等特殊码归零model.mimi_model.decode(filtered)输出24 kHz波形写 wav 后转 mp3。解码器是transformers的MimiModeleval_omni.py 加载model/mimi/支持增量解码所以语音可以边生成边播放实现流式输出与实时打断。下面的 A2A 样例就是这条语音进 → codes → 语音出链路的重建结果音色克隆ref_codes与spk_emb的双重注入想换音色MiniMind-O 不需要改权重而是把参考音频的 codes 和说话人向量直接塞进序列dataset/omni_dataset.pyref_codes参考音色的 8 层 Mimi codesref_audios列右对齐贴在回复起点前相当于把目标音色的开头当上下文喂给 Talkerspk_emb192 维 CAM embedding 填到audio_spk_token占位处提供稳定说话人约束50% 概率丢弃 ref_codes让模型两条路都学会。内置音色条件存放在 model/speaker/voices.pt5 个与 model/speaker/voices_unseen.pt7 个训练未见音色每份包含ref_codesspk_emb推理时直接加载替换即可换声线。快速上手三步验证你读懂了看数据结构dataset/omni_dataset.py的__main__块可直接打印一条 parquet 样本的列名与首轮 code 长度dataset/omni_dataset.py跑文本问答python eval_omni.py --mode 0观察生成的 audio frames 数量跑音色克隆python eval_omni.py --mode 3对比不同ref_codes下同一句回答的音色差异。常见问题Q为什么是 8 层而不是 1 层 codebook单层 code 压缩率不够音色与音质细节会丢失多层残差量化让第 0 层管说什么、怎么停顿高层管听起来像谁、多自然Talker 用 8 个轻量 adapter 共享主体预测这 8 路model/model_omni.py。Qcode 和文本 token 在同一个序列里会冲突吗不会。文本走 Thinker 词表code 走独立的 2112 音频词表两者只是位置对齐Thinker 与 Talker 通过中间层 hidden bridge 通信语音条件以 8 路 code 流形式注入 Talker。Q12.5 Hz 帧率意味着什么每秒 12.5 帧、每帧 8 个 code即 100 次 code 决策/秒——远慢于 24 kHz 采样率让 0.1B 的 Talker 也能负担自回归生成。小结MiniMind-O 的训练数据是 Parquet 表格语音统一存成Mimi 8 层 codebook 的整数序列帧优先平铺每帧 8 个 code加载时按 8 个一组拆层8 路 code 与 1 路文本拼成 9 路张量按 MTP 延迟阶梯对齐后参与训练推理时 Talker 逐帧产出 8 码帧Mimi 解码器增量还原24 kHz流式波形音色由ref_codes spk_emb上下文注入。读懂这套格式你已具备修改数据、复现训练乃至替换 codec 的全部基础建议配合 trainer/train.sh 把 mini 数据集完整跑一遍。【免费下载链接】minimind-o️ A 0.1B Omni model trained from scratch, capable of listening, speaking, and seeing!项目地址: https://gitcode.com/gh_mirrors/mi/minimind-o创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表