coverhunter_finetune_topic.md
12.2 KB
CoverHunter 双流微调专题方案
1. 专题目标
本专题目标是围绕当前仓库,建立一套可持续扩展的 CoverHunter 双流微调方案,用于音乐翻唱识别、哼唱检索、录音片段检索和抗噪 ACR 检索。
专题的核心方向不是一次性跑通训练,而是建立一条可反复扩展的训练专题链路:
- 明确现有音源与数据资产
- 定义双流训练架构
- 设计分阶段训练计划
- 形成标准训练流程
- 规范训练产物与权重使用方式
- 为后续补充更多 music 语料预留稳定入口
2. 当前已有音源与数据资产
2.1 当前仓库内可直接使用的数据
当前可直接用于训练与冒烟验证的数据位于:
acr-engine/data/synthetic_v2/
其中包含:
train.jsontest.jsonsegments/*.wav
2.2 当前训练集统计
基于 acr-engine/data/synthetic_v2/train.json 的统计结果:
- 样本总数:96
-
song_id数量:16 - 类型分布:
-
reference: 16 -
clean: 32 -
augmented: 16 -
humming_like: 16 -
confused: 16
-
2.3 当前音源的含义
按现有数据结构,可以理解为每首歌目前至少对应以下几类样本:
-
reference
- 作为标准原曲/参考版本
- 用于建立稳定的正样本锚点
-
clean
- 较干净的切片
- 代表相对理想的检索输入
-
augmented
- 已经经过部分增强的样本
- 用于初步提升泛化能力
-
humming_like
- 偏哼唱/偏旋律化表达的近似样本
- 用于强化“忽略音色、聚焦旋律”能力
-
confused
- 易混淆样本
- 用于构建难负样本与边界学习能力
2.4 当前音源的局限性
当前 synthetic_v2 更适合做:
- 训练链路验证
- 双流结构验证
- 小规模参数/损失/显存调优
- 产物定义与使用方式验证
当前它还不适合直接视为最终生产训练集,原因包括:
- 歌曲数较少(16 首)
- 类型覆盖有限
- 录音噪声场景仍偏少
- 真实翻唱的多样性不足
- 真实设备采集差异不足
所以本专题应采用 分阶段训练策略。
3. 当前双流训练架构
3.1 架构定义
当前已按双流结构实现:
流 A:MERT + Melody 分支
位置:
acr-engine/src/models/ecapa_tdnn.py
职责:
- 建模高层语义与旋律表达
- 提高跨音色、跨设备、跨唱法的语义对齐能力
当前组成:
FrozenMERTFeatureExtractor-
melody/chroma特征投影与融合
默认模型配置:
model:
mert_model_name: m-a-p/MERT-v1-95M
流 B:ECAPA 分支
职责:
- 强化局部声学结构与 timbre/韵律相关判别信息
- 作为与 MERT 分支互补的检索支路
双流融合
DualStreamFusion
作用:
- 将语义旋律流与 ECAPA 流融合到统一时序空间
检索头
CoverHunterHead
作用:
- 将融合后的时序特征进一步编码
- 输出最终 embedding 用于对比训练和检索
训练目标
InfoNCEAAMSoftmax
4. 训练专题的总体思路
本专题不建议“一步到位”直接上大规模真实全量训练,而建议按三个阶段推进。
阶段 A:链路验证阶段
目标:
- 验证模型结构、数据流、增强链路、权重产物、运行日志是否闭环
训练数据:
acr-engine/data/synthetic_v2
产出:
- 跑通训练
- 确认显存
- 确认增强是否有效
- 确认权重可以导出并复用
阶段 B:专题微调阶段
目标:
- 在当前专题下引入更多音乐语料
- 逐步扩充:原曲、翻唱、录音、哼唱、噪声注入样本
- 建立更稳定的双流 CoverHunter embedding
训练数据规划:
- 原曲标准音源
- 真实或半真实翻唱音源
- 设备录音音源
- 环境噪声音源
- 难负样本音源
阶段 C:检索权重沉淀阶段
目标:
- 固化最优权重
- 建立 reference embedding 索引流程
- 形成线上/离线检索用权重标准
5. 训练数据计划
后续你提到会补充更多 music 语料,因此建议数据建设按下面结构统一。
5.1 推荐数据结构
建议每首歌围绕 song_id 组织为:
referencecleancoverrecordingenvironmenthumming_likeconfused
5.2 推荐含义
reference
- 标准原曲版本
- 用于构建基准 embedding 和 reference index
clean
- 质量较好的切片/相对干净音频
- 用于稳定正样本训练
cover
- 真实翻唱版本
- 用于训练旋律一致、音色不同的对齐能力
recording
- 手机/麦克风录制版本
- 用于训练设备失真和场景采集鲁棒性
environment
- 注入环境噪声或真实环境录音
- 用于训练抗噪能力
humming_like
- 哼唱、跟唱、弱伴奏旋律版本
- 用于训练旋律驱动检索能力
confused
- 容易相似但不属于同一首歌的样本
- 用于强化难负样本学习
5.3 当前专题的样本补充建议
优先补充顺序建议为:
- 更多 reference / clean 原曲
- 更多 recording / environment 样本
- 更多真实 cover 样本
- 更多 confused 难负样本
- 更多 humming_like 样本
原因:
- 当前抗噪与设备泛化是近期最容易拉开效果差异的方向
- cover / humming 的价值很高,但数据准备成本更高
6. 数据增强计划
当前代码已实现两大类增强,用于“伪造录音”和“伪造翻唱”。
位置:
acr-engine/src/utils/augment.py
6.1 伪造录音增强
包括:
AddGaussianNoiseAddBackgroundNoiseBandPassFilterMp3Compression
作用:
- 模拟餐厅底噪、街道底噪
- 模拟廉价设备频响缺失
- 模拟压缩带来的失真
- 提高抗噪与抗设备变化能力
6.2 伪造翻唱增强
包括:
PitchShiftTimeStretchFrequency Masking
作用:
- 模拟升降调翻唱
- 模拟节奏变化
- 逼迫模型降低音色依赖,关注旋律主线
6.3 当前专题下的增强原则
-
reference不建议过强增强 -
clean可做轻增强 -
recording / environment可做强增强 -
humming_like / confused应提高采样权重
7. 训练流程
7.1 环境准备
解释器:
/usr/local/miniconda3/bin/python
安装依赖:
/usr/local/miniconda3/bin/python -m pip install -r acr-engine/requirements.txt
当前依赖至少需要:
torchtorchaudiotransformershuggingface_hublibrosasoundfileaudiomentations
7.2 4GB GPU 专用配置
当前 GPU 为:
Quadro P1000- 4GB 显存
因此我已经新增专用配置:
acr-engine/configs/coverhunter_finetune_4gb.yaml
特点:
- 更小
batch_size - 更短片段
- 更小通道数
- 更浅层数
- 更适合当前显存资源
7.3 首次验证流程
先 dry-run:
cd /mnt/e/hikoon-ACR/acr-engine && \
/usr/local/miniconda3/bin/python scripts/run_coverhunter_finetune.py \
--python /usr/local/miniconda3/bin/python \
--config configs/coverhunter_finetune_4gb.yaml \
--data data/synthetic_v2 \
--device cuda \
--segment-strategy hybrid \
--dry-run
7.4 小规模试训
cd /mnt/e/hikoon-ACR/acr-engine && \
/usr/local/miniconda3/bin/python train.py \
--config configs/coverhunter_finetune_4gb.yaml \
--data data/synthetic_v2 \
--output data/training_runs/coverhunter_4gb_trial \
--device cuda \
--segment-strategy hybrid \
--batch-size 2 \
--epochs 2
7.5 专题正式训练
cd /mnt/e/hikoon-ACR/acr-engine && \
/usr/local/miniconda3/bin/python scripts/run_coverhunter_finetune.py \
--python /usr/local/miniconda3/bin/python \
--config configs/coverhunter_finetune_4gb.yaml \
--data data/synthetic_v2 \
--device cuda \
--segment-strategy hybrid \
--noise-root data/noise/restaurant \
--noise-root data/noise/street
7.6 后续扩容训练
当你补充新的 music 语料后,建议:
- 先保持
song_id + type + audio_path + duration元数据结构一致 - 新语料先做小批量接入
- 先跑 2 epoch 验证
- 再逐步扩大训练轮次
8. 训练过程会产生什么产物
每次训练会生成目录:
acr-engine/data/training_runs/<run_name>/
标准产物包括:
best_model.ptcheckpoint_epoch_*.ptsong_to_idx.jsontraining_metrics.jsontraining_manifest.jsonrun_request.jsonrun_summary.jsonstdout.logstderr.log
8.1 各产物的用途
best_model.pt
- 当前训练过程中最优权重
- 后续检索、建库、推理优先使用它
checkpoint_epoch_*.pt
- 周期性保存点
- 用于中断恢复、回溯比较
song_to_idx.json
- 训练类别到
song_id的映射 - 用于解释训练分类头与标签对应关系
training_metrics.json
- 记录最后一次训练指标
- 用于专题对比不同配置
training_manifest.json
- 记录本次训练的配置、输入、产物路径
- 适合作为专题可追溯记录
run_request.json / run_summary.json
- 记录本次运行命令、解释器、配置与运行结果
- 便于回放与专题管理
9. 预期权重怎么使用
这是专题里非常关键的一部分。
9.1 训练权重的核心用途
训练出来的 best_model.pt 不是只为了看 loss,而是为了后续两类使用:
- 离线建库
- 在线查询 embedding 提取
9.2 离线建库
目标:
- 使用参考音源(reference)切片提取 embedding
- 建立 reference 向量索引
预期流程:
- 读取
reference音源 - 切片
- 用双流模型提 embedding
- 存成 embedding matrix
- 后续接 Faiss / pgvector / Milvus
9.3 在线查询
目标:
- 输入录音、翻唱、哼唱片段
- 提取 embedding
- 与 reference index 做相似度检索
预期方式:
- 加载
best_model.pt - 对查询音频切片
- 提取 embedding
- 与 reference embedding 做 ANN 检索
- 结合 vote / rerank 输出最终结果
9.4 推荐使用策略
最佳权重
生产或专题评估优先使用:
best_model.pt
恢复训练
继续训练优先使用:
checkpoint_epoch_*.pt
对比实验
建议每个专题 run 保留完整目录,不覆盖历史 run。
10. 预计怎么推进专题训练
第 1 步:先跑通当前 synthetic_v2
目标:
- 验证链路
- 验证显存
- 验证双流结构
- 验证 MERT 接口
第 2 步:补录音噪声语料
优先补充:
- 餐厅
- 街道
- 室内人声背景
- 手机录制样本
目标:
- 提升抗噪与设备鲁棒性
第 3 步:补真实翻唱/旋律相近样本
目标:
- 强化旋律对齐
- 降低音色依赖
第 4 步:补难负样本
目标:
- 降低误识别
- 提高边界判别能力
第 5 步:固化最优专题权重
目标:
- 形成一个可用于离线建库与线上检索的标准权重版本
11. 当前专题的资源结论
可以做的事
- 继续完善训练链路
- 用
synthetic_v2做小规模训练 - 做双流模型结构验证
- 做 4GB GPU 轻量试训
- 规范化训练产物与权重使用方式
当前暂时受限的事
- 由于环境缺依赖,还不能直接启动真实训练
- 由于 GPU 只有 4GB,真实 MERT + ECAPA 双流正式训练需要保守配置
- 当前真实音乐语料仍不足,暂时更适合专题验证,不适合最终权重定版
12. 本专题当前落地文件
配置
acr-engine/configs/coverhunter_finetune.yamlacr-engine/configs/coverhunter_finetune_4gb.yamlacr-engine/configs/default.yaml
模型与训练
acr-engine/src/models/ecapa_tdnn.pyacr-engine/src/models/losses.pyacr-engine/src/data/dataset.pyacr-engine/src/utils/augment.pyacr-engine/train.pyacr-engine/scripts/run_coverhunter_finetune.py
文档
docs/coverhunter_training_process.mddocs/coverhunter_finetune_topic.md
13. 当前专题结论
当前已经具备:
- 双流 CoverHunter 微调架构
- 4GB GPU 专用轻量配置
- 训练流程脚本
- 训练产物记录机制
- 专题级训练文档
当前下一步最实际的动作是:
- 在
/usr/local/miniconda3/bin/python下补齐依赖 - 用
coverhunter_finetune_4gb.yaml跑 dry-run - 用
synthetic_v2做 2 epoch 小规模试训 - 再逐步接入更多 music 语料