Paper Review - VoxCeleb
이 포스트에서는 2018년 arXiv에 올라온 “VoxCeleb: a large-scale speaker identification dataset” 논문에 대해 살펴보겠습니다.
Key Point
- fully automated pipeline based on computer vision techniques to create the dataset from open-source media(YouTube)
- apply and compare various state of the art speaker identification techniques on VoxCeleb dataset to establish baseline performance
화자 인식(Speaker Recognition)은 특히 노이즈가 많고 제약이 없는 실제 환경에서는 내부적, 외부적 요인들로 인해, 연구 및 개발이 매우 어렵습니다.
- 외부적 요인:
배경음악, 잡담소리, 웃는소리, 반향, 채널, 마이크 효과 등 - 내부적 요인:
나이, 악센트, 감정, 억양, 발언 태도 등의 화자 고유의 효과 등
이러한 화자 인식 기술을 개발하기 위해 오랜 기간동안 사용되었던 기술은 Guassian Mixture Models(GMMs)이나 Joint Factor Analysis(JFA), i-vector 등이 있습니다. 일반적으로 사운드 인식을 위해서는 먼저 row 사운드 데이터를 특정한 표현(representation)으로 바꿔주어야 하는데, 특히 이러한 모델이나 분석 기술을 적용하기 위해서는 low-dimensional 한 표현으로 바꾸어 입력 차원을 크게 줄여야 합니다. 이러한 low-dimensional representation을 위해 대체로 Mel Frequency Cepstrum Coefficients(MFCCs)와 같은 표현을 사용했습니다. MFCCs를 통한 사운드 표현은 노이즈에는 강인할 수 있지만, 짧은 프레임의 spectoral envelope에만 주목할 수 있고, low-dimensional 하게 표현함에 따라 가치있는 정보가 손실될 수 있다는 단점이 있습니다.
최근에는 화자 인식 기술을 다루는 이러한 접근(approach)가 점차 CNN과 같은 딥 러닝 모델을 통한 접근으로 변화하고 있지만, 일반적으로 딥 러닝 모델들은 대규모의 데이터셋이 필요하다는 문제가 있습니다.
이 논문의 주 목적은 MFCCs를 사용하는 GMM이나 JFA, i-vector와 같은 전통적인 hand-crafted feature들을 사용하는 접근 방법에서 딥 러닝 모델들을 사용하는 접근으로 연구의 방향을 전환하고자 하는것으로, 이러한 목적을 달성하기 위해 대규모의 labeling 된 데이터 셋을 생성하고 제공합니다.
How to generate Dataset
논문에서 데이터 셋을 만드는 과정을 간단하게 요약하면 다음과 같습니다.
- YouTube에서 비디오 데이터 수집
- two-stream synchronization CNN을 이용해서 active speaker verification 수행
- CNN 기반의 얼굴 인식 기술을 사용해서 화자 식별
그럼 논문의 내용을 챕터별로 자세하게 살펴봅시다.
Existing Dataset
VoxCeleb 데이터 셋 이전에도 기존에 화자 인식을 위한 데이터 셋이 많이 구축되어있었습니다. 그러나 대부분의 데이터셋은 제한된 환경에서 수집되거나, 노이즈 없이 너무 깔끔한 오디오 환경이라는 점에서 실제 환경으로의 적용이 어렵다는 단점이 있습니다. 또한, 데이터 셋에 대한 labeling을 사람이 직접 했다는 점에서 정확하지 않을 수 있다는 단점도 있습니다.
논문에서 정리한 화자 인식을 위한 데이터 셋들은 다음 표와 같습니다.
Dataset Description
VoxCeleb 데이터 셋은 YouTube에서 추출한 1,251명의 유명인사가 발언한 100,000개 이상의 오디오로 구성되어 있습니다. 데이터 셋의 성비는 균일하게 분포되어 있고, 남성의 비율이 55%입니다. 또한, 데이터 셋에 포함된 화자들은 다양한 분포의 인종, 악센트, 직업, 나이를 가지고 있습니다.
Dataset Collection Pipeline
논문에서 데이터 셋을 생성하는 방법은 다음의 5개 단계로 이루어집니다.
-
Candidate list of POIs 데이터 셋의 생성은 VGG Face dataset에 포함된 사람들의 리스트로 시작합니다. 이 리스트에는 2,622 명의 사람들로 구성되고, 배우부터 운동선수, 기업인까지 다양한 분포를 가지고 있으며 성비도 대략 50%로 규형되게 분포되어있습니다.
-
Downloading videos from YouTube 2번째 단계에서는 앞서 준비한 2,622개의 사람들에 대해서 상위 50개의 비디오를 검색하고 다운로드합니다. 이 때, 각 사람의 이름에 ‘interview’라는 단어를 붙여서 검색했으며, 스포츠나 뮤직비디오등은 제외시켰습니다.
-
Face tracking HOG 기반의 얼굴 인식기를 사용해서 비디오에 포함된 모든 프레임에서 얼굴을 인식합니다. 또한, 각 얼굴 인식에서 regression tree 기반의 접근방식을 이용해서 Facial landmark position 을 감지합니다. 이후, 연속적인 프레임에 대해 colour histogram들을 비교해서 shot boundary를 감지하고, 감지된 각각의 shot 안에서 position-based tracker를 사용해서 감지된 얼글들을 face track으로 그룹화합니다.
-
Active speaker verification 이 단계에서는 입 모양과 목소리에 대해 audio-video 간의 동기(synchronisation)를 감지합니다. 이 작업은 two-stream CNN을 기반으로 오디오 트랙과 입 모양관의 상관관계를 예측하는 SyncNet을 사용해서 수행합니다.
-
Face verification 마지막으로, VGG Face dataset으로 학습시킨 VGG-16 CNN 모델을 이용해서 얼굴을 검증합니다.
논문에서는 데이터 셋의 정확성을 보유하기 위해, 꾀 높은 threshold를 사용해서 보다 정확한 데이터 셋을 확보하고자 했습니다.
CNN Design and Architecture
이 논문에서는 딥 러닝 모델 중 하나인 CNN을 이용해서 화자를 인식하는 baseline 아키텍쳐를 제안했습니다.
- Input features
- 먼저 모든 오디오들은 일관성을 위해 모노(single-channel)에 16kHz로 샘플링한 16-bit stream으로 변환합니다.
- 변환된 stream에 대해 25ms 너비와 10ms step의 harmming window를 사용한 슬라이딩 윈도우를 적용해서 Spectogram을 생성합니다. 이 방식을 사용하면 3초의 음성에 대해 512x300 크기의 Spectogram을 얻을 수 있습니다.
- Spectogram의 모든 frequency bin에 대해 Mean, Variance Normalization 을 수행합니다. 이 작업은 꾀 중요한 작업인데 적용할 경우 정확도 측면에서 10% 향상된 결과를 도출할 수 있습니다.
- salience remove, voice activity detection, removal of unvoiced speech와 같은 추가적인 전처리들은 적용하지 않았습니다.
- Architecture
- 이미지 데이터에 꾀 좋은 성능을 보인 VGG-M CNN 모델을 기반으로 multi-class classification 을 지원하고, 앞서 생성한 Spectogram을 입력으로 적용할 수 있도록 모델을 수정해서 구성합니다.
- 이 때, fully connected layer 중 fc6 layer(9x8)을 9x1의 fc layer(frequency domain 지원)와 1xn의 average pooling layer(3초의 segment를 지원할 경우 n=8이 됩니다.)로 교체합니다. 이 작업은 시간적인 위치에 invariant하게 만들어주면서 최종 출력의 차원을 크게 줄여줄 수 있습니다.
- Identification
- 화자 식별을 위해 일반적인 multi-class classification을 지원하는 1,251-way의 softmax layer를 구성합니다.
- Verification
- 화자 검증을 위해, fc7 layer의 출력인 1024 차원의 feature vector를 추출하여 각 vector간 cosine distance 를 계산해서 비교할 수 있습니다. 하지만, Siamese network를 구성해서 embedding을 학습시키는 것이 더 효율적입니다.
- Testing
- 가변 길이의 오디오들을 다루기 위해, 전통적인 방식들은 오디오를 고정 길이(ex, 3초)의 세크먼트들로 나누고, 각 세그먼트들에 대해 예측을 수행한 후, 전체 예측 확률 값을 평균내어 최종 결정 확률을 만들어냅니다.
- 하지만 이 논문에서는 fc6 layer 이전에 Average Pooling layer를 적용해서 CNN의 가변길이의 입력을 수용할 수 있도록 구성하고, 테스트 오디오에 대해 Average Pooling layer의 크기(n)을 수정해서 one-way로 prediction할 수 있도록 했으며, 이 방법이 정확도가 더 좋다고 합니다.
- Training
- 모델의 과적합을 피하기 위해, 학습 중 모든 학습 샘플 중 임의로 선택된 샘플들을 3초단위로 Cropping해서 사용했습니다.
- 또한, 모델의 학습은 먼저 Classification(Identification)을 위해 1,251-way의 출력 레이어(+softmax)를 연결하고 학습을 먼저 진행합니다.
- 이후, Verification 모델을 위해, 마지막 출력 layer(+ softmax) 제거한 다음, 모든 레이어를 frozen 시킨 다음 Siamese Network를 구성해서 학습시킵니다.
- Siamese Network의 학습에서, 좋은 pair들을 선택하는 것은 매우 중요한 사항입니다. 따라서 샘플들 중 임의로 선택된 절반을 negative example로 사용하고, 나머지 절반은 Hard Negative Mining으로 사용합니다.
이 논문에서 구성한 모델의 구성은 다음 표와 같습니다.
VoxCeleb 데이터 셋을 이용해서 논문에서 구성한 모델을 학습시킨 후 검증한 결과,
Identification 에서 Top-1 정확도가 약 80.5%를 달성했고,
Verification 에서 \(C_{det}^{min}\) 과 EER(%) 는 각각 0.71과 7.8을 달성했습니다.
References
[1] VoxCeleb [site]
[2] VoxCeleb: a large-scale speaker identification dataset [paper]