이 글은 영문 원문을 번역한 것입니다. 내용이 다르면 영문 원문이 기준입니다.

ArtifactNet 연구 · Part 5 · 2/3 · 2026년 5월

실시간을 향하여

증류와 런타임 — 가벼움 ≠ 빠름

Intrect Research 2026-05-28 연구ArtifactNet

ArtifactNet 연구 여정의 Part 5입니다. 2026년 5월에 SOTA 탐지 정확도를 4초 배치 추론에서 스트리밍 방식의 실시간 처리로 옮기려 했던 기록입니다. 모델을 줄였더니 오히려 느려졌고, 런타임을 28가지로 바꿔 보다가 하드웨어 하한선에 부딪혔으며, "실시간 모델"과 "탐지 모델"은 같은 것이 아니라는 값비싼 교훈을 얻었습니다. 정확도 중심 모델을 실시간 제약 안으로 밀어 넣는 엔지니어링을, 성공과 실패를 가리지 않고 담담하게 적었습니다.

TL;DR

현재 모델이 실제로 동작하는 모습을 보고 싶으신가요? 무료 데모로 아무 트랙이나 돌려 보세요 — 아래에서 설명하는 것과 같은 포렌식 파이프라인이며, 계정이 필요 없습니다.


1. 출발점: 왜 "실시간"이 필요했는가

ArtifactNet의 탐지 파이프라인은 본질적으로 오프라인 방식입니다.

audio → STFT → ArtifactUNet (residual extraction) → HPSS → 7-channel forensic features
     → ResidualCNN → per-segment P(AI) → per-track median verdict

한 트랙을 판정하기 위해 4초짜리 청크 일곱 개를 추출해 하나의 배치로 실행합니다. 트랙당 0.58s이면 충분하고, 사용자는 결과만 원하므로 지연 시간은 한 번도 문제가 된 적이 없습니다.

문제는 반대 방향의 쌍둥이 연구에서 시작됐습니다. 같은 잔차 물리를 이용해 AI 오디오의 RVQ 고스팅을 제거하면 품질 복원 도구(de-artifact)가 됩니다. 그리고 우리는 그것을 오디오 플러그인(VST3)으로 만들고 싶었습니다. 플러그인은 호스트가 넘겨주는 256/512샘플 블록을 그 자리에서 즉시 처리해 돌려줘야 합니다. 미래 프레임을 볼 수 없고(인과적), 4초를 기다릴 수도 없습니다.

즉, 같은 ArtifactUNet 백본이 두 세계에서 모두 동작해야 했습니다:

탐지 de-artifact 실시간
처리 단위 4s 청크 배치 수십 ms 블록 스트리밍
미래 프레임 허용(양방향) 금지(인과적)
지연 무관 수백 ms 이내
출력 P(AI) 복원된 파형

5월의 작업은 그 간극을 잇는 엔지니어링이었습니다. 그리고 그 과정에서 "작은 모델이 더 빠르다"는 직관이 세 번 깨졌습니다.


2. 첫 번째 시도 — ArtifactUNetLite, 경량 ≠ 빠름

첫 설계는 ArtifactUNetLite였습니다. 파라미터 1.85M(3.6M Teacher의 절반), 44.1/48/96 kHz를 모델 하나로 처리하는 멀티레이트 아키텍처, 그리고 플러그인용 인과적 스트리밍을 갖췄습니다.

몇 가지 설계 결정은 명확하게 확정했습니다:

단위 테스트 8개가 모두 통과했습니다. 멀티레이트 홉은 44.1/48/96 전반에서 2.90ms로 일관됐고, 잔차+clean은 8.94e-08의 오차로 입력을 복원했으며, 인과성도 유지됐습니다.

그런데 속도를 측정해 보니 충격적이었습니다. Lite는 파라미터를 절반으로 줄였는데도 CPU에서 기존 탐지 UNet보다 2.5× 느렸습니다.

파고들어 보니 원인은 분명했습니다:

  1. hop=128이면 청크당 프레임이 4× 늘어납니다(T=200 대 48). 연산량을 좌우한 것은 파라미터가 아니라 프레임 수였습니다.
  2. 모든 단계의 활성화 텐서가 C×F×T ≈ 1.7M 셀로 거의 일정하게 유지됐습니다. 기존 탐지 UNet은 단계마다 텐서를 절반으로 줄여(798k→98k) 누적 비용을 낮게 유지하지만, Lite는 시간 축 다운샘플링을 금지했기 때문에 큰 T가 끝까지 남았습니다.
  3. 파라미터를 줄이면 가중치 메모리는 아끼지만 FLOPs는 줄지 않습니다. T를 50–100으로 나눠 여러 번 호출해도 개선은 24%에 그쳤습니다(1085ms→824ms).

첫 번째 교훈: 파라미터 수는 속도의 대리 지표가 아닙니다. 실시간 속도는 (a) 큰 홉으로 프레임 수를 줄이고, (b) 디코더로 갈수록 채널을 좁혀 누적 비용을 낮추는 데서 나오는데, Lite는 두 가지를 모두 포기했습니다.

Lite를 버린 것은 아닙니다. 모델 하나로 멀티레이트를 처리하는 점, 룩어헤드가 없는 인과적 스트리밍, 작은 가중치 메모리(모바일·저장 공간에 유리)는 여전히 진짜 가치로 남았습니다. 다만 "RT 가속" 경로로는 다시는 제안하지 않기로 못 박았습니다.


3. ArtifactUNetRT 시리즈 — 짧은 프레임의 인과적 모델이지만, 탐지와는 다른 언어

다음은 진정한 실시간 제거를 위한 ArtifactUNetRT 시리즈였습니다. 4초 청크 대신 짧은 프레임을 스트리밍합니다:

이름 T 프레임 청크 길이 용도
RT8 8 ~93ms 최저 지연 시간
RT16 16 ~186ms 권장 저지연
RT24 24 ~278ms
RT48 48 ~557ms 표준 모드

핵심 기법은 두 가지입니다:

RT 시리즈는 N_FFT=1024(파라미터 117K)를 사용합니다. 지연 시간을 낮추는 데 맞춘 작은 스펙트럼 입력입니다. VST3 실시간 제거에는 훌륭했습니다.

하지만 여기서 함정에 빠졌습니다. "이 빠른 RT 모델을 탐지 파이프라인에도 그대로 쓰면 되지 않을까?" 그래서 그 모델의 잔차를 추출해 기존 탐지 CNN에 통과시켰더니, CNN 호환성이 30%로 무너졌습니다.

원인은 단순하면서도 근본적이었습니다. 탐지 CNN은 N_FFT=2048 스펙트럼 기저에서 학습됐습니다. RT 모델은 N_FFT=1024를 쓰는데, 입력 공간이 완전히 다릅니다. 잔차의 주파수 해상도가 절반이므로 CNN은 한 번도 본 적 없는 분포를 마주하게 됩니다. 입력 공간이 다른 두 모델은 직접 비교조차 할 수 없었습니다.

두 번째 교훈: 실시간을 위해 바꾼 스펙트럼 기저는 다운스트림 모델과 호환되지 않습니다. 속도를 위해 N_FFT를 줄인 것은 제거에서만 통하는 선택이었고, 탐지로 넘어갈 수는 없었습니다.


4. ArtifactUNetFast — Teacher 증류, 드롭인 해답

세 번째 모델이 두 세계를 잇는 다리가 됐습니다. ArtifactUNetFast는 Teacher(3.6M)보다 6.7× 작은 534K 모델이면서 N_FFT=2048을 유지합니다. 같은 스펙트럼 기저를 쓰므로 탐지 파이프라인에 곧바로 들어가고, 인과적 스트리밍도 지원합니다.

항목 사양
파라미터 534K(Teacher보다 6.7× 작음)
아키텍처 CausalDSConv + CausalCLN, 4단계 U-Net, base_channels=24
입력 (B, 2, 1025, T) — cat([H_mag, P_mag]), 단일 순전파(Teacher는 두 번)
출력 (B, 2, 1025, T) — [mask_H, mask_P] ∈ [0, 0.5]²
학습 고정된 Teacher로부터의 지식 증류
손실 1.0 × MSE(mask) + 0.1 × spectral_convergence
데이터 AIME + Jamendo + lo-fi hiphop(파일 12K개, 청크 60K개, SR 풀 44.1/48k)

증류의 핵심은 Teacher의 마스크를 모방하는 것이며, 동시에 입력을 2채널로 묶어 H/P를 한 번의 순전파로 처리합니다(Teacher는 H와 P를 두 번 실행합니다). 최저 손실 0.06645로 수렴한 뒤 10개 트랙에서 Teacher와 비교했습니다:

지표 값
마스크 Pearson H=0.84, P=0.86(강한 상관)
마스크 MAE H=0.080, P=0.073
마스크 분포 Student 0.28 대 Teacher 0.31
스펙트럼 수렴도 0.38(잔차의 성격이 보존됨)

마스크는 Teacher의 것보다 다소 거칠지만 분포와 성격은 보존되어 있어, 잔차 추출은 올바르게 동작합니다.

속도가 핵심 성과였습니다. PyTorch에서는 Teacher와 비슷하지만, ONNX Runtime으로 옮기면 모든 것이 달라집니다:

모델 ORT CPU 4스레드 p50 RTF 총 지연
Teacher(PyTorch, 순전파 2회) ~998ms 0.25 ~4s
Fast(PyTorch, 순전파 1회) ~1066ms 0.27 ~4s
Fast ORT T=16 18.5ms 0.10 204ms ✅
Fast ORT T=24 27.8ms 0.10 306ms

ORT에서는 PyTorch 대비 50× 빨라졌습니다. T16에서 청크(186ms)와 추론(18.5ms)을 더하면 총 지연 시간이 204ms로, 실시간 플러그인의 지연 예산 안에 들어옵니다.

산출물은 세 가지 형태로 내보냈습니다. 원본 ONNX(ORT 런타임용), CausalCLN 수술 버전(Rust/tract 전용 커스텀 연산), onnxsim으로 최적화한 버전입니다. 수술 버전은 ORT에서 세션 생성에 실패하므로(커스텀 연산 미지원) Rust/tract 전용이라는 점에 유의하세요. 이 갈림길이 다음 섹션의 런타임 전쟁으로 이어집니다.


5. 런타임 전쟁 — tract에서 TensorRT까지 샅샅이

모델이 정해지자 질문은 어떤 런타임에서 돌릴 것인가로 바뀌었습니다. de-artifact 실시간 제거(RT48 스테레오)의 지연 시간을 조금이라도 줄이려고, 거의 모든 추론 엔진과 설정을 끝까지 시도했습니다.

CPU 단계별 비교

단계 RTF(스테레오)
tract 순차 실행(시작점) 0.416
tract 병렬 L‖R 0.218
ORT FP32 4‖4 전환 0.031
ORT 설정 튜닝 0.029
CausalCLN→LayerNorm ONNX 수술 0.023
이론상 최소(커스텀 연산 필요) ~0.018

tract에서 ONNX Runtime으로 옮기기만 해도 RTF가 0.416에서 0.031로 개선되어 18× 향상됐습니다(tract의 순차 실행 대 ORT의 MLAS 최적화와 L/R 세션 병렬화). 수술을 거치자 0.023까지 내려갔습니다. 절대적인 CPU 하한선(Ryzen 5800X, AVX2 FP32)은 스테레오 11.9ms, RTF 0.022였습니다.

GPU 단계별 비교

설정 지연(p50) RTF CPU 대비
CPU 스테레오 4‖4T 12.2ms 0.0223 1×
CUDA 순차 L→R 3.9ms 0.0072 3.1×
CUDA Graph FP16 2.52ms 0.0046 4.8×
TRT FP16 순차 1.71ms 0.0031 7.1×
TRT FP16 batch=2 1.44ms 0.0026 8.5×

GPU(RTX 3060)의 최종 하한선은 TensorRT FP16 batch=2, 1.44ms(RTF 0.0026)였습니다. 스테레오 L+R을 한 번의 순전파의 배치 차원에 묶는 방식이 멀티 스트림보다 항상 빨랐습니다(TRT의 배치 융합이 SM 자원을 최적으로 배분하기 때문입니다). LayerNorm을 FP16으로 강제해(FP32 폴백 비활성화) 5%를 더 얻었습니다.

대안들의 무덤(솔직하게)

빨라 보였지만 실패했거나 오히려 성능이 떨어진 경로들:

ORT SessionBuilder 옵션 28개를 모두 소진한 뒤, 우리는 11.5–12.3ms가 이 하드웨어의 절대 최소치라고 결론 내렸습니다. 이보다 더 줄이려면 모델 재학습(축소)이나 새 하드웨어가 필요합니다. 이것은 패배가 아니라 경계를 확정한 것입니다. 가능한 범위를 알면 그 위에서 무엇을 포기할지 판단할 수 있습니다.


6. CausalCLN → LayerNorm 수술 — 같은 수치, 더 빠르게

런타임 단계 전반에 걸쳐 거듭 등장한 CausalCLN→LayerNorm 수술에 대해 짚어 둡니다. 가장 작으면서도 가장 깔끔한 최적화였습니다.

학습 시점의 CausalChannelLayerNorm은 프레임마다 (C,F) 통계를 계산하는 커스텀 연산입니다. 인과성은 보장하지만 추론 그래프에서는 표준 ONNX 연산으로 깔끔하게 대응되지 않습니다. 그래서 그래프를 직접 수술해 수치적으로 동등한 표준 LayerNorm + transpose 패턴으로 바꿨습니다.

핵심은 출력은 비트 단위로 동일한 채 런타임만 빨라진다는 점입니다. ORT가 표준 LayerNorm 패턴을 융합 커널로 인식하기 때문입니다. ORT 1.24.x에서 다시 검증한 결과, 수술로 실측 +3.69ms의 이득을 얻었습니다. 프로파일에서는 LayerNorm이 전체의 20.1%, 수술로 생긴 Transpose가 16.8%를 차지했지만, 그래도 순이득이었습니다.

흥미로운 반례가 하나 있습니다. 같은 LayerNorm을 Rust 커스텀 연산으로 직접 구현했더니 오히려 모노가 1.3ms 느려졌습니다. T=48의 작은 루프에서는 ORT의 MLAS 융합 구현이 루프로 전치하는 Rust 구현보다 빨랐습니다. "손으로 짠 커널이 항상 더 빠르다"는 것도 틀린 직관이었습니다.


7. 탐지 파이프라인의 해답 — Teacher ONNX

실시간 제거가 RT/Fast로 갈라지는 동안, 탐지 파이프라인 자체도 ORT로 옮길 수 있는지 확인했습니다. 답은 Teacher를 ONNX로 직접 내보내는 것이었습니다.

항목 결과
ORT 4스레드 모노 275.8ms(<500ms 목표 달성)
CNN 판정 일치율 100% (9/9)
수치 오차 최대 2.56e-06
파라미터 3.6M
ONNX 노드 76(단순한 UNet 구조)

N_FFT=2048을 유지한 덕분에 탐지 CNN과 판정이 100% 일치했습니다(수치 오차 2.56e-06). 이것이 RT 모델과의 결정적인 차이입니다:

모델 ORT 속도 CNN 호환성 용도
RT(N_FFT=1024, 117K) 스테레오 12.3ms 30% VST3 전용
Teacher(N_FFT=2048, 3.6M) 모노 275.8ms 100% 탐지 파이프라인

탐지의 해답은 작은 RT 모델이 아니라 큰 Teacher입니다. 기준은 속도가 아니라 호환성이었습니다.


8. 가장 값비싼 교훈 — "실시간 모델"은 "탐지 모델"이 아니다

이 글의 핵심입니다. 5월 내내 빠른 모델을 탐지 파이프라인에 그대로 쓰고 싶은 유혹이 끈질기게 이어졌습니다. 세 번 실패했고, 매번 이유가 달랐습니다.

(1) ArtifactUNetRT — 스펙트럼 기저 불일치. N_FFT=1024라서 CNN 호환성이 30%였습니다. (§3)

(2) ArtifactUNetLite — 파라미터 역전. 1.85M인데도 CPU에서 탐지 UNet보다 2.5× 느렸습니다. (§2)

(3) ArtifactUNetFast — 두 겹의 함정.

Fast는 N_FFT=2048을 유지하므로 RT의 호환성 문제가 전혀 없습니다. 그러면 자연스럽게 이런 질문이 떠오릅니다. "Fast를 기반으로 탐지 CNN을 재학습하면 어떨까?" 잔차를 비교해 보니 두 가지가 드러났습니다:

UNet 경로 TPR(AI) FPR(실제)
codec4(현재 프로덕션) 98.0% 0.0%
phase2(Fast의 Teacher) 100.0% 55.0%
Fast(드롭인) 98.0% 52.5%

올바른 순서는 분명했습니다. Fast로 탐지하려면 먼저 코덱을 인식하는 Teacher(codec4)로 재증류한 다음 그 위에 CNN을 쌓아야 합니다. 또한 실시간 스트리밍이 목표가 아니라면 탐지에는 인과 제약이 필요 없으므로, 양방향 경량 Student가 정확도와 효율 양쪽에서 이깁니다.

세 번째이자 가장 큰 교훈: 실시간 제약(인과성, 짧은 홉, 작은 N_FFT, 2채널 융합)은 탐지 정확도 및 속도와 정면으로 충돌합니다. 백본 하나로 두 세계를 감당하려는 야심은 매번 다른 대가를 치르게 했습니다. 결론은 역할을 나누는 것이었습니다. 제거에는 Fast/RT, 탐지에는 Teacher/codec4를 씁니다.


9. 덧붙이는 이야기 — 적대적 회피와 경량 SOTA 비교

두 가지 점검으로 한 달을 마무리했습니다.

적대적 회피 테스트. de-artifact의 목적은 오디오 품질 개선이지 탐지 회피가 아닙니다. 그래도 사전 점검 차원에서, 우리의 억제 도구가 회피에 악용될 수 있는지 스스로 확인했습니다. 원본과 억제 강도 α=0.5/1/2/4에서의 출력을 탐지 파이프라인에 통과시켜 P(AI)의 변화를 측정했습니다. (탐지 견고성은 이후 Part에서 다룹니다.)

경량 SOTA 비교. 같은 시기에 작은 부분 집합(SONICS 가짜 150 + 실제 150)에서 외부 기준선(MERT 기반 2단계 모델, 174M 파라미터)과 맞붙어 봤습니다. 4.2M 파라미터의 ArtifactNet이 TPR 100%, FPR 10.7%, F1 0.949로 앞섰고, 174M 모델(F1 0.929)을 이겼으며, 트랙당 0.58s 대 2.62s로 4.5× 더 빨랐습니다. 부분 집합의 규모를 감안하면 중요한 것은 절대 수치가 아니라 40× 파라미터 격차에도 앞선 우위입니다. 작은 모델이 실시간으로 가는 출발점이라는 이 시리즈의 전제를 다시 확인한 셈입니다.


10. 교훈과 다음 계획

파라미터 수는 속도가 아닙니다. 두 번의 역전, 즉 Lite(2.5×)와 Fast(3.44×)는 같은 사실을 가리켰습니다. 실시간 속도는 홉 크기, 채널 테이퍼링, 활성화 텐서 크기, 커널 실행 횟수에서 나옵니다. 모델을 줄이기 전에 실제로 무엇이 느린지 프로파일링하세요.

실시간 최적화는 다운스트림 호환성을 깨뜨립니다. N_FFT 축소(RT)와 인과성/2채널 융합(Fast)은 모두 다운스트림 탐지 CNN과 충돌했습니다. 하나의 백본을 여러 용도로 재사용하려면 먼저 어떤 축은 공유하고 어떤 축은 갈라놓을지 정해야 합니다. 우리는 스펙트럼 기저(N_FFT=2048)는 공유하고, 인과성과 채널 융합은 갈라놓았습니다.

런타임을 끝까지 시도하는 것은 패배가 아니라 경계 설정입니다. tract→ORT→TVM→OpenVINO→TensorRT를 차례로 돌려 하드웨어 하한선(CPU 11.9ms, GPU 1.44ms)을 확정한 덕분에, 그 하한선 위에서 무엇을 포기하고 무엇을 재학습할지 합리적으로 정할 수 있었습니다.

다음 Part에서는 이렇게 다듬은 SOTA를 들고 나가 남은 약점을 공략합니다. 그러다 오히려 우리 자신의 평가 방법론을 의심하게 됩니다.


ArtifactNet 연구팀 · 2026년 5월

← Part 4: 벤치마크 포화의 함정 전체 글 Part 6: SOTA 그 너머 →

내 트랙에 탐지기를 직접 써 보세요

어떤 파일이든 업로드하세요 — 이 시리즈에서 설명한 것과 같은 포렌식 파이프라인입니다.