acr-architecture.md 2.2 KB

ACR 系统架构图

更新:2026-06-02

一页结论

  • 识别链路已不是单一模型,而是 指纹 + 向量 + melody-aware rerank 的混合结构
  • 数据与服务已经进入工业化演进阶段
  • 当前主短板在:humming_likeconfused 的 hard-case 精度

1. 总体架构图

flowchart LR
    Q[Query Audio] --> P[Preprocess]
    P --> F1[Chromaprint Features]
    P --> F2[128-Mel Features]
    P --> F3[Melody Signature]

    F1 --> M1[Fingerprint Matcher]
    F2 --> M2[ECAPA + BandSplit Embedder]
    F3 --> M3[Melody Similarity]

    C[Catalog References] --> I1[Fingerprint Index]
    C --> I2[Embedding Window Index]
    C --> I3[Reference Melody Cache]

    M1 --> H[Hybrid Fusion]
    M2 --> H
    M3 --> H

    H --> O[Top-K + Reject]

2. 在线/离线分层图

flowchart TD
    A[Offline Pipeline] --> A1[Dataset Prep]
    A --> A2[Training]
    A --> A3[Index Build]
    A --> A4[Benchmark]

    B[Online Service] --> B1[/health]
    B --> B2[/recognize]
    B --> B3[/index/build]

3. 关键模块表

模块 输入 输出 作用
Preprocess wav mel/chroma/f0 统一特征入口
Fingerprint Matcher query audio chroma candidates 快速召回
ECAPA Embedder mel embeddings 语义向量检索
Melody Similarity query/ref melody melody score 哼唱场景补强
Hybrid Fusion multi-scores ranked candidates 综合排序
Service API request JSON result 对外调用

4. 当前设计重点

4.1 为什么是混合结构

纯指纹对哼唱弱,纯 embedding 对局部强匹配和解释性不足,因此使用混合结构更稳妥。

4.2 为什么加入 melody-aware

目前 hard-case 主要在哼唱/近旋律混淆,因此用 melody signature 做辅助排序。

4.3 为什么要 window-level index

整曲平均 embedding 会损失局部片段信息;window-level 更贴近 ACR 场景。


5. 细节附录

代码映射:

  • src/engines/chromaprint_matcher.py
  • src/engines/ecapa_embedder.py
  • src/engines/hybrid_engine.py
  • src/service/app.py

Sources

  • See docs/references-and-sources.md for the current source map.