coverhunter_training_process.md 5.67 KB

CoverHunter 双流微调标准流程

1. 当前架构

当前训练架构已经调整为双流:

  • 流 A:MERT + Melody 分支
    • 代码位置:acr-engine/src/models/ecapa_tdnn.py
    • 逻辑:冻结的 FrozenMERTFeatureExtractor + melody/chroma 融合
    • 默认模型:m-a-p/MERT-v1-95M
    • 说明:当前代码已经支持真实 HuggingFace MERT 权重接入;若环境里缺少 transformers 或首次拉取失败,则无法启用真实 MERT
  • 流 B:ECAPA 分支
    • 逻辑:保留 ECAPA 特征建模路径
  • 双流融合
    • DualStreamFusion
  • 检索头
    • CoverHunterHead
  • 训练目标
    • InfoNCE + AAMSoftmax

2. 当前资源检查结论

Python 解释器

训练入口已固定支持:

/usr/local/miniconda3/bin/python

acr-engine/scripts/run_coverhunter_finetune.py 已支持 --python 参数,默认就是这个解释器。

GPU

当前检测到 GPU:

  • Quadro P1000
  • 总显存:4096 MiB
  • 空闲显存:约 3817 MiB

结论:

  • 可以跑训练
  • 但显存较小,建议:
    • batch_size=2~4
    • segment_dur=5.0 起步
    • 优先做 dry-run、小批量试跑、再正式训练
    • 启用真实 MERT 后不要直接上大 batch

数据

当前仓库中可直接用于冒烟训练的数据:

  • acr-engine/data/synthetic_v2/train.json
  • 音频切片位于 acr-engine/data/synthetic_v2/segments/

这些数据已经包含:

  • 普通切片
  • augmented
  • humming_like
  • confused

适合先做流程验证。

当前环境缺口

/usr/local/miniconda3/bin/python 下当前缺少这些核心包:

  • torch
  • transformers
  • huggingface_hub
  • torchaudio
  • librosa
  • soundfile
  • audiomentations

所以:

  • GPU 与解释器可用
  • 但当前训练环境还不能直接跑
  • 需要先补齐依赖

3. 标准处理流程

Step 1:准备 Python 环境

进入项目后,先确保用的是目标解释器:

/usr/local/miniconda3/bin/python --version

安装依赖:

/usr/local/miniconda3/bin/python -m pip install -r acr-engine/requirements.txt

如需单独补装:

/usr/local/miniconda3/bin/python -m pip install torch torchaudio transformers huggingface_hub librosa soundfile audiomentations

Step 2:准备 MERT 权重缓存

首次启用真实 MERT 时,会从 HuggingFace 拉取:

  • m-a-p/MERT-v1-95M

建议先确认网络可访问 HuggingFace,或提前缓存模型。

如果不希望改默认配置,可以在 configs/default.yamlconfigs/coverhunter_finetune.yaml 中调整:

model:
  mert_model_name: m-a-p/MERT-v1-95M

Step 3:准备噪声数据

为了支持伪造录音增强,建议准备目录,例如:

acr-engine/data/noise/restaurant/
acr-engine/data/noise/street/

里面放公开可用环境音频:

  • 餐厅底噪
  • 街道底噪
  • 室内人声背景

训练时通过:

--noise-root acr-engine/data/noise/restaurant \
--noise-root acr-engine/data/noise/street

传入。

Step 4:先做 dry-run

先验证数据、模型、GPU、增强链路是否都通:

cd /mnt/e/hikoon-ACR/acr-engine && \
/usr/local/miniconda3/bin/python scripts/run_coverhunter_finetune.py \
  --python /usr/local/miniconda3/bin/python \
  --data data/synthetic_v2 \
  --device cuda \
  --segment-strategy hybrid \
  --dry-run

Step 5:小规模试训

建议先缩小 batch/config,确认显存稳定:

cd /mnt/e/hikoon-ACR/acr-engine && \
/usr/local/miniconda3/bin/python train.py \
  --config configs/coverhunter_finetune.yaml \
  --data data/synthetic_v2 \
  --output data/training_runs/coverhunter_trial \
  --device cuda \
  --segment-strategy hybrid \
  --batch-size 2 \
  --epochs 2 \
  --noise-root data/noise/restaurant \
  --noise-root data/noise/street

如果显存稳定,再逐步提高到:

  • batch_size=4
  • 必要时再尝试 batch_size=6

Step 6:正式专题训练

标准命令:

cd /mnt/e/hikoon-ACR/acr-engine && \
/usr/local/miniconda3/bin/python scripts/run_coverhunter_finetune.py \
  --python /usr/local/miniconda3/bin/python \
  --data data/synthetic_v2 \
  --device cuda \
  --segment-strategy hybrid \
  --noise-root data/noise/restaurant \
  --noise-root data/noise/street

Step 7:检查训练产物

每次训练会记录到:

acr-engine/data/training_runs/<run_name>/

标准产物包括:

  • best_model.pt
  • checkpoint_epoch_*.pt
  • song_to_idx.json
  • training_metrics.json
  • training_manifest.json
  • run_request.json
  • run_summary.json
  • stdout.log
  • stderr.log

4. 增强策略说明

当前代码已经覆盖两类伪造策略:

伪造录音

位置:acr-engine/src/utils/augment.py

  • AddGaussianNoise
  • AddBackgroundNoise
  • BandPassFilter
  • Mp3Compression

伪造翻唱

位置:acr-engine/src/utils/augment.py

  • PitchShift
  • TimeStretch
  • Frequency Masking(作用于 mel)

5. 资源适配建议

由于当前 GPU 是 Quadro P1000 4GB,建议按以下梯度推进:

推荐起步配置

  • segment_dur=5.0
  • batch_size=2
  • mixed_precision=true
  • num_workers=0

稳定后可尝试

  • batch_size=4
  • 如 OOM 则回退

当前不建议

  • 直接上 8 秒片段 + batch 16
  • 真实 MERT + 大 batch 同时启用

6. 当前结论

当前状态可以概括为:

  • 架构方向已经调整正确:双流
  • 真实 MERT 接口已接入:是
  • GPU 可以用于训练:是
  • 当前 Python 解释器可用:是,/usr/local/miniconda3/bin/python
  • 当前环境能否立刻开训还不能,因为依赖未装全
  • 现有数据能否支撑一波流程训练可以,先从 synthetic_v2 开始