Skip to content

research(mir): STFT vs CQT 구조 세그멘테이션 비열등성 검증 #1225

Description

@seonghobae

문제

#1223은 chroma_cqtchroma_stft가 synthetic/mock 조건에서 빨라질 가능성만 보였고, 실제 디코딩 음원에서 구조 경계·기능 라벨·반복 그룹 품질이 보존되는지는 검증하지 않았습니다. BandScope의 structure analysis는 rehearsal buyer truth이므로 계산시간만으로 production representation을 바꾸지 않습니다.

검증 질문은 chroma_stft가 현재 chroma_cqt 대비 사전 정의된 구조 품질 비열등성 기준을 만족하면서 같은 실제 음원·runtime·execution host에서 재현 가능한 latency 개선을 제공하는가입니다.

Production acceptance

  • synthetic waveform이 아니라 rights-cleared real decoded music corpus를 사용하고 license/provenance/audio SHA-256/annotation SHA-256을 고정합니다.
  • 동일 admitted finite PCM과 exact runtime/host identity에서 baseline/candidate를 paired 측정합니다.
  • duplicate audio_sha256은 독립 관측치처럼 세지 않습니다.
  • schema v1에는 dropout/exclusion 허용치가 없으므로 실패 track은 PASS를 막습니다.
  • claim boundary, noninferiority margin, latency threshold, aggregation, paired uncertainty, resample count/seed는 candidate 결과를 보기 전에 고정합니다.
  • production switch는 complete registered experiment PASS 뒤 별도 PR에서 수행합니다.

구현 상태 — Draft #1228

Current exact head는 e99ccecc20a72d9531d77be5b854ae6090500aff, base는 protected develop@314ddeae7b775a4957594b599358c8255617eb2e입니다. PR은 Draft/Open/mergeable이고 protected base 대비 ahead 200 / behind 0입니다. Production structure extraction default는 여전히 chroma_feature="cqt"입니다.

Functional-label ACC는 pinned MIREX-2025 reproduction b9fa0b0...::calculate_accuracy의 200 ms grid를 사용합니다. Exact mir_eval==0.8.2 research overlay와 detection/deviation/pairwise arguments, runtime-lock digest가 scientific identity에 결합되어 있습니다.

aggregate_structure_noninferiority.pymacro-track-v1 / paired-track-bootstrap-v1을 소유합니다. Registered track pair를 sampling unit으로 하며 equal-track macro aggregation, PCG64 paired bootstrap, NumPy linear 0.025/0.975 percentile interval을 고정합니다. Stored aggregate/CI는 complete track receipt로부터 canonical recomputation한 값과 exact-match해야 합니다.

isolated-single-shot-v1은 macOS/Windows에서 각 track·lane을 fresh subprocess에서 20회 single-shot 측정하고 same-process warm-up은 0회입니다. Trial 순서는 CQT→STFT / STFT→CQT로 교대합니다. Latency는 repository segmenter만 time.perf_counter_ns()로 측정하고 NumPy linear p50/p95를 구성합니다. Peak RSS는 worker lifetime maximum이며 macOS ru_maxrss, Windows PeakWorkingSetSize를 사용합니다.

Canonical execution host / experiment runner

Fresh review에서 registration.runtime.host_profile이 단순 non-empty text였고 실제 performance execution host와 비교되지 않는 gap을 확인했습니다. p95 latency ratio가 decision criterion인 만큼 host는 설명용 라벨이 아니라 scientific condition입니다.

Draft #1228은 이제 structure-performance-host-v1:<sha256>을 canonical execution prerequisite로 사용합니다. Payload에는 platform, OS release/version, architecture, hardware model, CPU model, logical CPU count만 포함하고 hostname/account/serial/MAC/IP/path는 제외합니다. macOS는 fixed sysctl selectors, Windows는 fixed machine-level registry values를 읽습니다. 실제 captured profile hash가 registration과 다르면 corpus admission 전에 fail closed합니다.

RED 7a90b922c0f64090f1ac2717e9afc0369503bd58 → GREEN 70b86022323728c6b3f85d5f14468423ebf15478으로 host binding과 canonical runner를 추가했고, RED f1a6971ff7f60af993c05455e40ccc6d57ab593e → GREEN a31bebd79d88b940c9f96517d02f7c0364fac485 / 7b07c00d9ee8c7ddbb24f3a65bd62aa1e22c05c4로 free-form host label을 canonical execution에서 거부하도록 고정했습니다. 7d3c28d55af1b1ba08afc9ed2a6df85274a7d6f7에 execution/host TRACEABILITY를 추가했고 e99ccecc20a72d9531d77be5b854ae6090500aff에서 신규 runner를 repository 100-column Python lint boundary에 맞췄습니다.

run_structure_noninferiority_experiment.py는 기존 owner를 조합합니다: registration validation → exact host gate → corpus admission → canonical CQT/STFT quality/performance consumer → admission/evidence identity cross-check → schema-v1 track receipts → canonical aggregation/bootstrap → result admission → atomic path-free execution envelope. MIR/admission/aggregation 로직을 복제하지 않습니다.

아직 닫히지 않은 scientific decision

Implementation 측에서는 metric/runtime identity, timing/RSS producer, track/aggregate receipt binding, exact execution-host gate, canonical end-to-end run path가 닫혔습니다. Production acceptance 전에 다음을 candidate 결과를 보지 않은 상태에서 승인·동결해야 합니다.

  • rights-cleared real corpus membership과 대표성
  • production noninferiority margins와 maximum candidate latency ratio
  • 실제 bootstrap resample count와 random seed
  • 선택한 macOS/Windows structure-performance-host-v1 payload/content address와 population/runtime claim boundary
  • 해당 corpus 규모와 paired-inference plan의 충분성

Host content address는 CPU frequency/thermal state/power policy/scheduler contention/page-cache state를 완전히 고정한다고 주장하지 않습니다. 이런 host-wide variance는 scientific review와 claim boundary에 남습니다.

이 선택을 동결한 뒤 complete admitted corpus를 canonical runner로 한 번 실행합니다. 통과하더라도 production default 변경은 별도 PR입니다. Current exact head의 terminal protected checks와 independent non-author approval도 별도 merge gate입니다.

참고 기준

  • Raffel, C., McFee, B., Humphrey, E. J., Salamon, J., Nieto, O., Liang, D., & Ellis, D. P. W. (2014). mir_eval: A transparent implementation of common MIR metrics. ISMIR.
  • Hall, P. (1988). Theoretical comparison of bootstrap confidence intervals. The Annals of Statistics, 16(3), 927–953. https://doi.org/10.1214/aos/1176350933
  • MIREX 2025 Music Structure Analysis / ismir-mirex/mirex-evaluation@b9fa0b0b32e2145af31f35830f78fc9d09a4301b.
  • Python 3.14 time.perf_counter_ns(); NumPy quantile(method="linear").
  • Apple sysctl, getrusage(2); Microsoft processor registry guidance and PROCESS_MEMORY_COUNTERS.PeakWorkingSetSize.

Related: #1223, #1228

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions