Kaldi OnlineNnet2FeaturePipeline 및 GOP 확률 추출 과정 분석

Source

  • Field Notes/ReturnZero/Daily Notes/Day 273. 2022-03-30.md

Summary

이 노트는 휴가 중 Kaldi ASR 파이프라인의 Feature Pipeline 구조를 분석하며 막힌 지점을 점검한 기록이다. MFCC, Pitch, iVector를 결합한 OnlineNnet2FeaturePipeline의 동작 원리(CMVN, GetFrame, IvectorFeature 등)를 확인하고, Step 2~5(데이터 준비, MFCC/CMVN 추출, iVector 추출, TDNN 확률 계산)에서 생성되는 파일들과 Kaldi 스크립트와의 관계를 매핑했다. 특히 DecodableNnetSimple 클래스를 통해 iVector와 Feature Matrix를 입력받아 GOP 확률(probs)을 산출하는 C++ 코드 흐름을 추적했으나, 디코딩 과정의 명확성 부족으로 인해 최종 구현 방향에 대해 혼란을 겪고 있음을 나타낸다.

Key Points

  • OnlineNnet2FeaturePipeline은 MFCC, Pitch, iVector 차원을 결합하며, CMVN 상태와 프레임별 피처 벡터를 관리한다.
  • GOP 확률 추출을 위한 전처리 파이프라인은 Step 2(메타데이터), Step 3(MFCC/CMVN), Step 4(iVector), Step 5(TDNN 확률 계산)로 구분된다.
  • C++ 레벨에서 DecodableNnetSimple::nnet_computer는 iVector와 Feature Matrix를 인자로 받아 Nnet 출력을 계산하며, GetOutputForFrame()을 통해 최종 probs를 얻는다.
  • 저자는 iVector의 Online 인터페이스 처리 방법과 디코딩 단계의 필요 여부에 대해 명확한 결론을 내리지 못한 상태이다.