R&E 연구노트 ⑦ 파이프라인과 실시간의 벽
연구노트 시리즈.
전체 파이프라인 설계
화자 분리 모델 하나로 끝이 아니었다. 카메라·마이크 입력부터 최종 텍스트까지 이어지는 파이프라인 전체를 설계해야 했다. 단계별로 필요한 요소를 정리하면 이렇다.
- 비디오·오디오 지연 보정. 카메라와 마이크는 미세하게 어긋나 들어온다. 입 모양과 소리를 맞추려면 시간차를 보정해야 한다. (SyncNet)
- 입 모양 ROI(Region of Interest) 추출. 얼굴에서 입 영역만 잘라낸다. 더 정확하게는 RetinaFace, 더 가볍게는 MediaPipe Face.
- 오디오 전처리. 파형을 그대로 쓰기보다 STFT(단시간 푸리에 변환)로 시간-주파수 표현(스펙트로그램)으로 바꿔 모델에 넣는다.
- 특징 추출기(인코더). 비주얼 인코더는 입 모양만 입력하는 경량 CNN 또는 AV-HuBERT(LRS2, LRS3 같은 립리딩 데이터셋으로 학습). 오디오 인코더는 주파수 영역의 U-Net·BLSTM 또는 시간 영역의 Conv-TasNet·TCN.
- 마스킹(화자 분리). 섞인 오디오에서 주문자 성분만 남기는 마스크를 씌운다. Looking-to-Listen(U-Net 화자 분리), VisualVoice(음색 추정).
- 텍스트 변환(ASR). 마스킹한 스펙트로그램을 ISTFT로 파형으로 복원한 뒤 OpenAI Whisper로 텍스트로 변환한다.
- 데이터셋. 학습·검증에는 AVSpeech를 사용.
이렇게 잡음 섞인 영상에서 주문자 목소리만 추려 주문 텍스트로 잇는 그림이 완성됐다.
코딩, 그리고 모델 선택
실제 코딩 단계로 들어갔다. 두 후보 중 VisualVoice는 리눅스 환경에서 원활히 동작했기에 우선 Looking-to-Listen으로 진행했다. GitHub에서 모델을 내려받아 작동 메커니즘을 파악하고 코드를 확인·수정하며 우리 시나리오에 맞춰 보려 했다.
실시간의 벽
코드를 들여다볼수록 근본적인 변수가 드러났다. Looking-to-Listen과 VisualVoice는 모두 유튜브 영상 링크로 이미 생성된 영상을 받아 시각 처리와 오디오 추출을 수행한다. 녹화가 끝난 영상을 통째로 입력받아 후처리하는 구조였다. 주어진 영상을 처리하는 건 가능하지만 실시간으로 처리하는 모델은 없었다.
키오스크 주문은 본질적으로 실시간이다. 손님이 말하는 즉시 알아들어야 하고, 녹화하고 업로드해서 분리하고 인식하기를 기다릴 수는 없다. 좋은 모델을 찾았지만 그 모델이 전제하는 사용 방식이 우리 문제와 어긋나 있었다.
현실적인 방향 전환
이 벽 앞에서 결정을 내렸다. 여러 명이 동시에 말해도 주문자만 분리하는 이상적인 방식은 1년 차에 실시간으로 구현하기 어렵다. 그렇다면 잡음 환경에서도 견고하게 동작하는 실시간 음성 인식(STT)에 먼저 집중하기로 했다.
시각 기반 화자 분리는 잠시 접어 두고, 검증된 Whisper 기반 실시간 STT 파이프라인을 직접 구성하는 쪽으로 방향을 틀었다. 단일 화자 환경에서는 충분히 정확하고 빠른 주문 처리가 가능했다. 다중 화자 동시 발화 분리는 다음 해의 숙제로 넘겼다.