AI 노이즈 제거는 어떻게 작동할까
Voice Denoise는 공개된 음성 향상 모델 DeepFilterNet3를 브라우저에서 실행해 소음을 지웁니다. 목소리는 남기고 소음만 줄이는 일이 어떻게 가능한지, 그리고 이 방식으로 할 수 있는 일과 없는 일을 쉽게 풀었습니다.
소리를 아주 잘게 쪼개기
녹음 파일은 시간에 따라 변하는 하나의 파형입니다. 이 상태로는 목소리와 소음이 한데 섞여 있어 구분하기 어렵습니다. 그래서 먼저 소리를 짧은 조각으로 자르고, 조각마다 어떤 높이(주파수)의 소리가 얼마나 들어 있는지로 바꿉니다.
- 소리를 20밀리초 길이의 조각으로, 10밀리초씩 겹치며 자릅니다. 1초가 100개의 조각이 됩니다.
- 각 조각을 0Hz부터 24,000Hz까지 50Hz 간격의 481개 주파수 성분으로 나눕니다(단시간 푸리에 변환).
이렇게 보면 목소리와 소음의 모양이 다릅니다. 목소리는 기본 음높이와 그 배수(배음)에 해당하는 주파수에 에너지가 줄무늬처럼 모여 있고, 그 모양이 빠르게 바뀝니다. 선풍기나 에어컨 소리는 넓은 주파수에 고르게 퍼져 있고 시간이 지나도 비슷합니다.
예전 방식: 소음의 모양을 빼기
전통적인 잡음 제거는 말이 없는 구간에서 소음의 모양을 재 두었다가, 모든 조각에서 그만큼을 빼는 방식이었습니다(스펙트럼 차감). 소음이 일정할 때는 잘 되지만, 소음이 변하면 따라가지 못합니다. 또 빼는 양이 조금씩 어긋나 ‘뽀글뽀글’, ‘삐리릭’ 하는 잔여음(뮤지컬 노이즈)이 남기 쉽습니다.
DeepFilterNet3: 두 단계로 다듬기
DeepFilterNet3는 깨끗한 말소리에 여러 종류의 소음을 섞은 수많은 예시로 학습한 신경망입니다. 소음의 모양을 미리 재 둘 필요 없이, 조각마다 무엇이 목소리이고 무엇이 소음인지 스스로 판단합니다. 처리는 두 단계로 이루어집니다.
1단계 — 32개 대역의 음량 조절
주파수 전체를 사람 귀의 감각에 맞춰 32개 대역(ERB 대역)으로 묶습니다. 귀는 낮은 소리를 촘촘하게, 높은 소리를 넓게 구분하므로 낮은 쪽 대역은 좁고 높은 쪽 대역은 넓습니다. 신경망은 조각마다 각 대역을 얼마나 남길지 0에서 1 사이의 값으로 정하고, 이 값으로 소음이 많은 대역을 줄입니다. 큰 그림의 소음을 걷어내는 단계입니다.
2단계 — 낮은 대역의 정밀 복원(딥 필터링)
대역 단위로 줄이기만 하면 목소리의 배음 줄무늬 사이에 낀 소음까지는 지우지 못합니다. 그래서 목소리의 핵심 정보가 몰려 있는 0~4.8kHz 구간(주파수 성분 96개)은 따로 다룹니다. 각 성분마다 앞의 두 조각, 지금 조각, 뒤의 두 조각까지 다섯 조각의 값을 섞는 작은 필터를 신경망이 그때그때 만들어, 배음 사이의 소음을 걷어내고 목소리의 세밀한 구조를 되살립니다. 이것이 ‘딥 필터링’이라는 이름의 유래입니다.
신경망은 지금 조각을 판단할 때 20밀리초 뒤의 소리까지 참고합니다. 말이 시작되는 순간을 놓치지 않기 위해서입니다.
브라우저 안에서 돌아가는 이유
DeepFilterNet3는 매개변수가 약 200만 개, 모델 파일이 약 8.6MB인 작은 신경망입니다. 수억 개의 매개변수를 가진 대형 AI 모델과 달리 일반 PC와 휴대폰에서도 충분히 빠르게 돌아갑니다. Voice Denoise는 이 모델을 ONNX Runtime Web으로 브라우저 안(WebAssembly)에서 실행하므로, 음성 파일을 서버로 보낼 필요가 없습니다. 최근 PC 기준으로 20분 녹음을 처리하는 데 30초에서 1분 정도가 걸립니다.
할 수 있는 일과 한계
잘 지우는 소음
- 에어컨, 선풍기, 컴퓨터 팬처럼 계속 나는 소음
- 전기 웅웅거림, 차량·거리 소음, 키보드·생활 소음
- 소음이 변하거나 갑자기 생겨도 조각마다 다시 판단하므로 대체로 따라갑니다.
어려운 경우
- 음악과 다른 사람의 말소리 — 목소리와 성질이 비슷해 목소리로 판단해 남길 수 있습니다.
- 방의 울림(잔향) — 목소리가 벽에 반사된 소리라 목소리와 함께 남기 쉽습니다.
- 찌그러진 소리(클리핑) — 이미 잘려 나간 파형은 되살릴 수 없습니다.
- 없던 소리 — 전화 통화 녹음처럼 처음부터 높은 소리가 잘려 녹음된 파일은, 노이즈를 지워도 높은 소리가 새로 생기지 않습니다.
- 소음보다 훨씬 작은 목소리 — 목소리 일부가 소음으로 판단되어 함께 줄어들 수 있습니다. 이때는 강도를 낮추면 도움이 됩니다.
더 알아보기
DeepFilterNet은 Hendrik Schröter 등이 공개한 오픈소스 음성 향상 모델로, 모델과 코드가 MIT 또는 Apache 2.0 라이선스로 GitHub에 공개되어 있습니다. Voice Denoise는 공식 모델의 학습된 값(가중치)을 그대로 쓰며, 같은 녹음을 공식 구현(PyTorch)으로 처리한 결과와 사실상 같은 결과가 나오는지 확인했습니다.