본문 바로가기

연구실 공부

[논문] Voxceleb: Large-scale Speaker Verification in Wild

728x90

https://www.sciencedirect.com/science/article/pii/S0885230819302712

 

Voxceleb: Large-scale speaker verification in the wild

The objective of this work is speaker recognition under noisy and unconstrained conditions. We make two key contributions. First, we introduce a very …

www.sciencedirect.com

해당 논문을 보고 작성했습니다.

 

Abstract

해당 논문은 noisy하고 unconstrained condition에서 speaker recognition을 수행하는 것을 목표로 합니다. 저자들은 2가지 key contribution이 있습니다.

첫째, fully automated pipeline을 사용하여 open source media로부터 얻어지는 엄청 큰 대규모 audio-visual dataset을 소개합니다. 대부분의 기존 speaker identification dataset은 상당히 제약된 condition에서 얻어지는 sample이며, 보통 manual annotation이 필요하기 때문에 size 제약도 있습니다. 그래서 저자들은 open-source media로부터 computer vision 기술을 이용해 dataset을 만드는 pipeline을 제안합니다.

둘째, 다양한 condition에서 voice로부터 효율적으로 identity를 인식할 수 있는 다양한 aggregation method와 training loss function을 가진 CNN architecture를 개발했습니다. 이전의 연구들에 비해 큰 폭으로 향상된 결과를 보입니다.

 

Introduction

noisy하고 unconstrained condition에서의 speaker recognition은 매우 어려운 task입니다. 'real-world' condition에서 높은 speaker recognition을 이루기엔, 다양한 요인들(배경 잡담 및 음악, 웃음, 채널 및 마이크로폰, 억양, 감정 등)로 인해 문제가 있습니다.

CNN은 음성 인식, 컴퓨터 비전 및 관련 분야에서 real-world의 noisy dataset을 다루는 능력으로 인해 상당한 개선을 가져왔지만, 대규모 train dataset이 있어야 좋은 성능을 보입니다.

하지만, unconstrained speech sample로 이루어진 공개된 대규모 dataset은 부족합니다. 그래서 저자들은 대규모 real world condition dataset을 생성할 수 있는 자동화되고 확장 가능한 pipeline을 제안합니다. 저자들은 7000명 이상의 speaker와 100만개 이상의 utterance를 포함하는 dataset인 VoxCeleb2를 제시합니다.

그리고 저자들은 VGGVox라는 CNN기반의 speaker verification system을 제안합니다. 이는 voice spectrogram을 compact embedding space로 mapping하도록 학습됩니다. cosine distance를 이용해 두 speaker의 유사도를 측정합니다. 저자들은 기존 연구들과 다른 형태의 loss function을 이용해 model을 학습하며, VoxCeleb1 speaker verification task에서 가장 뛰어난 성능을 보여줍니다.

 

Related works

Traditional methods

과거, speaker identification에서 GMM을 주로 사용했었습니다. 그 후 JFA가 등장했는데, 이는 speaker와 channel subspace를 별도로 modeling하는 방식입니다. 그 후 speker와 channel space를 1개의 space로 표현하는 i-vector가 등장했습니다. 이러한 방식들은 input audio의 저차원 표현(MFCCs)에 의존하는 방식입니다. 그러나 MFCC의 성능은 real world noise에서 급격하게 하락할 뿐만 아니라, short frame의 spectrum에만 초점을 맞추기 때문에 speaker를 구분할 수 있는 feature가 부족하다는 단점이 존재합니다.

 

Deep Neural Network

그래서 DNN을 이용한 feature extractor가 성공적으로 사용되었습니다. classifier와 extractor가 서로 독립적으로 학습되고 나중에 결합하는 경우가 존재했는데, 이는 end-to-end method가 아니므로 추가적인 작업이 필요했습니다. 하지만 CNN은 raw spectrogram을 바로 사용할 수 있고 end-to-end 형태로 학습될 수 있어 사용되기 시작했습니다.

사용된 주 DNN architecture는 주로 time, frequency domain 2D CNN이거나 time domain 1D CNN입니다. 몇몇 연구들은 LSTM based front-end architecture를 사용하기도 합니다.

feature extractor로부터 얻어지는 output은 input utterance의 길이에 따라 정해지는 가변 길이의 feature vector입니다. average pooling layer는 frame level feature vector를 집계하여 고정된 길이의 utterance level embedding을 얻는데 사용됩니다. 다른 연구에서는 평균뿐만 아니라 표준편차를 사용하는 방법도 도입했는데, 이를 statistical pooling이라고 합니다. 이후에 frame마다 weight를 할당해 더 구별력 있도록 하는 attentive statistics pooling도 등장했습니다.

 

The VoxCeleb dataset

VoxCeleb1부터 보겠습니다. VoxCeleb1은 1251명의 셀럽으로부터 얻어진 100000개의 utterance를 가지고 있습니다. VoxVeleb2는 6000명의 셀럽으로부터 얻어진 백만개 이상의 utterance를 포함하고 있으며, 이 data들은 youtube에 업로드된 video로부터 얻어집니다. 그리고 두 dataset은 성별 균형도 잡혀있습니다. 그리고 speaker는 다양한 인종, 억양, 직업, 연령을 아우릅니다. dataset에 포함된 video들은 다양한 도전적인 시각적 및 청각적 condition에서 촬영되었습니다. 

 

위 table은 dataset에 존재하는 speaker와 utterance 수를 나타냅니다.

 

위 그림은 VoxCeleb2를 이루고 있는 utterance의 길이, 성별, 국적을 보여줍니다.

VoxCeleb1/2 모두 development, test set을 가지고 있으며 speaker는 겹치지 않습니다. VoxCeleb2의 development set은 VoxCeleb1 또는 SITW dataset과 중복되는 speaker가 없습니다. 저자들은 VoxCeleb1을 이용한 많은 test benchmark를 만들었기 때문에, VoxCeleb2의 development set만 사용하여 model을 학습하는 데 사용했다고 합니다.

 

그래서 각 dataset에 대해 중복되는 speaker가 있는 지를 나타내면 위와 같습니다.

 

Dataset collection pipeline

이제 Youtube video로부터 large speaker recognition dataset을 얻어내는 과정을 보겠습니다.

 

두 stream 동기화 CNN을 사용하고 CNN 기반 facial recognition을 사용하여 speaker의 identity를 확인합니다. VoxCeleb1을 구할 때 사용했던 model보다 더 최신의 model을 사용하여 VoxCeleb2를 구했다고 합니다. detail들은 아래서 확인하겠습니다.

 

Candidate list of speakers

VoxCeleb1. VGGFace1 dataset에 나타나는 사람들의 목록에서 candidate를 시작합니다. VGGFace1 dataset은 가장 많이 검색된 이름들과 인터넷 영화 DB의 교차점을 기반으로 합니다. 이 list에는 배우, 스포츠 선수, 기업가 등이 포함된 2622개의 identity가 있으며 대략 절반은 남성이고 나머지 절반은 여성입니다.

VoxCeleb2. VGGFace2 dataset을 기반으로 합니다. VGGFace2는 더 큰 인종 다양성을 가집니다. 배우, 스포츠 선수, 정치인 등이 포함된 9000개 이상의 identity가 있습니다. VGGFace1과 VGGFace2 사이에 중복되는 identity가 일부 있으며, 이들은 VoxCeleb2의 development set에서 제외되었습니다. 그렇기에 VoxCeleb2에서 train된 model이 VoxCeleb1을 이용해 test될 수 있습니다.

 

Active speaker verification

여기서는 video에서 입 모양의 움직임과 음성 사이의 audio-video 동기화를 결정하여 어떤 얼굴이 화자인지를 결정합니다. 이는 'SyncNet'을 통해 이뤄지며, 이는 audio와 입 모양의 상관관계를 추정하는 두 stream CNN을 사용하는 방식입니다. VoxCeleb2에서는 SyncNet model이 'multi-view variant'에 의해 대체되었으며, 말하고 있는 얼굴이 정면을 보고 있지 않아도 감지할 수 있게 되었습니다. 이 방법은 더빙이나 voice-over가 포함된 video는 거부할 수 있습니다.

 

Duplicate removal

중복된 video가 다른 URL로 올라간 경우들이 있습니다. 그래서 feature extractor를 이용해 video의 speech segment를 1024차원 vector로 표현합니다. 두 speech segment의 유클리드 거리가 가깝다면 동일한 segment로 간주하고 하나를 제거합니다.


더 자세한 내용은 해당 논문을 참고하시면 됩니다.

 

VGGVox

이제 VGGVox라 불리는 neural network embedding system에 대해 알아보겠습니다. hand-crafted features를 요구하는 technique 대신 speaker recognition task를 end-to-end 방식으로 학습할 수 있는 CNN architecture로 대체하는 것이 목표입니다. 전처리가 필요없는, raw audio segment로부터 추출되는 short term spectrogram에 대해 train되며, features는 utterance level speaker embedding을 얻기 위해 aggregate됩니다. 전체 model은 end-to-end로 학습됩니다.

저자들은 2D CNN을 feature extractor로 사용하며 2D spectrogram을 single channel image로 다룹니다. 같은 convolution이 모든 지점에서 사용되는 방식으로 spectrogram을 다루는 것은 자연스럽지 않긴 합니다. 왜냐하면 visual image는 객체가 어떤 location에서 나타날 수 있는 것과 달리, 패턴은 시간 축의 어떤 지점에서든 나타날 수 있지만 frequency에 대해서는 독립적이기를 기대하지 않기 때문입니다. 하지만 deep network는 frequency specific filter를 학습할 수도 있습니다. 예를 들어, 일부 filter는 low frequency 영역에서만 특정 pattern에 반응할 수 있으며, fully connected layer의 위치에 따라 달라집니다.  따라서, 2D CNN이 spectrogram에 1개의 filter를 사용하더라도, model은 filter를 low/high frequency group으로 나눌 수 있습니다.

 

Input features

저자들의 deep CNN architecture의 input으로 short term spectrogram을 사용합니다. 평균과 분산 normalization은 모든 spectrum의 모든 frequency bin(연속적인 frequency 범위를 작은 구간으로 나누어 각 구간의 energy를 측정하는데, 이때 각각의 작은 구간을 bin이라 한다)에 적용됩니다. speech specific 전처리는 사용되지 않습니다.

 

Trunk architecture

 

VGG와 ResNet style CNN architecture를 실험했습니다. VGG-M은 이미지 분류에서의 효율성과 성능이 좋은 VGG-M CNN의 수정 버전을 기반으로 합니다. 이는 aggregation layer가 추가된 버전입니다. ResNet은 standard multi-layer CNN과 유사하지만, channel output에 대한 identity mapping에 residual을 더하는 추가 skip connection이 있는 것이 특징입니다. 저자들은 3가지 ResNet(34, 50, thin-resnet with contains fewer parameter)를 가지고 실험했습니다. 디테일한 구조는 아래와 같습니다.

 

Aggregation strategies

각 audio input에 대해, CNN architecture에 의해 생성된 feature는 시간에 걸쳐 집계되어 고정된 길이의 단일 representation을 생성합니다. 저자들은 2가지 aggregation 전략을 실험했습니다. 간단한 average pooling과 NetVLAD alyer를 기반으로 하는 trainable aggregation layer입니다.

 

    - Average pooling aggregation

original VGG-M의 fully connected fc6 layer는 2개의 layer로 대체됩니다. fully connected layer of 9x1과 시간 축을 따라 global average pooling하는 aggregation layer입니다. 이와 같이 대체했을 때, network가 시간에 대해 invariant되지만 frequency에 대해서는 variant하게 됩니다. 이는 speech를 다룰 때 적합한 형태입니다. 또한 output 차원을 기존 fully connected layer의 output 차원과 동일하게 유지하도록 도와주며, network parameter도 줄일 수 있습니다. 이를 통해 overfitting을 피할 수 있습니다.

 

    - NetVLAD aggregation

CNN architecture는 spectrogram을 frame-level로 mapping합니다. Thin-ResNet을 사용한다면, 32차원의 feature를 output합니다. NetVLAD layer는 KxD 크기의 단일 matrix V를 생성합니다. K는 cluster의 수를 나타내고, D는 각 cluster의 차원을 의미합니다. matrix V는 다음 식을 통해 구해집니다.

 

여기서 w_k와 b_k, c_k는 학습가능한 parameter이며 k∈{1, ... , K}입니다. 위 식에서 첫 항은 input vector x_i에 대한 cluster k의 soft assignment weight에 해당합니다. 두번째 항은 vector와 cluster 중심 간의 residual을 계산합니다. V의 각 row는, 즉 각 cluster의 residual은 L2 norm 됩니다. 최종 output은 이 vector를 flatten하여 얻어지는 long vector입니다. 즉, row vector를 concat하는 형태입니다. 계산 및 메모리 요구사항을 낮게 유지하기 위해, 차원 축소는 출력 차원을 512로 하는 FC layer를 통해 이뤄집니다.

저자들은 또한 "GhostVLAD" layer도 실험했습니다. 여기서 일부 cluster는 최종 concat에 포함되지 않습니다. 그 cluster들은 결국 final representation에 영향을 주지 못하게 됩니다. 이러한 것들을 ghost cluster라고 합니다. frame level feature를 aggregating하는 동안, noisy하고 적절하지 않은 speech segment는 ghost cluster로 만들어 weight를 낮게 설정하면 해당 cluster의 기여도는 효과적으로 감소됩니다. 

 

Experiments

이제 speaker verification 실험을 하기 위해, loss function, baseline, implementation detail에 대해 알아보겠습니다. 저자들은 구분하기 쉬운 pair와 어려운 pair에 대해 test를 진행합니다. 같은 국적의 같은 성별인 speaker pair가 어려운 pair가 되겠습니다.

 

Evaluation splits and metrics

 

test set은 위와 같습니다.

먼저 OriginalVoxCeleb1 test set을 보겠습니다. VoxCeleb1의 original verification test set은 40명의 speaker로 구성됩니다.

Extended VoxCeleb1-E test set을 보겠습니다. 전체 dataset을 사용합니다. orginal VoxCeleb1의 경우 제한된 수의 speaker로 이루어지기 때문에, model의 performance가 일반화되지 않은 결과일 수 있습니다. 그래서 저자들은 더 많은 양의 test set을 사용합니다. 이 test set은 VoxCeleb1 dataset에서 random하게 sample된 1251명의 speaker로 이루어진 581480개의 무작위 쌍입니다.

Hard VoxCeleb1-H test set을 보겠습니다. 동일한 국적 및 성별을 가진 data입니다. 전체 VoxCeleb1 dataset에서 552536 쌍의 동일한 국가와 성별인 pair를 sample하여 구해집니다. 적어도 5명의 개인들이 포함된 18개의 국적-성별 조합이 존재하며 'USA-Male'이 가장 흔합니다.

저자들은 model을 EER와 minDCF로 평가합니다. 

 

Training loss

저자들은 여러 개의 training loss를 실험합니다.

먼저 Softmax + Contrastive loss입니다. 저자들은 contrastive loss를 paired embedding에 사용합니다. 이를 통해 positive pair의 embedding 간의 거리를 최소화하고 negative pair의 거리가 margin parameter α보다 작은 경우에 penalty를 부과합니다. contrastive loss와 같은 쌍을 이루는 loss는 train하기 어렵습니다. 그래서 train 초기에 optimal이 아닌 local minimum에 빠지는 걸 피하기 위해, 두 단계로 나누어 진행합니다. 먼저, softmax loss를 사용하여 identification을 위한 pretraining을 합니다. 그다음 constrastive loss를 사용하여 fine tuning을 합니다.

그다음 Additive Margin Softmax입니다. 저자들은 학습할 때 standard softmax loss를 대신해 additive margin softmax(AM-softmax) classification loss를 실험합니다. 이 loss는 verification performance를 향상시키기 위해 angular space에서 margin을 적용하는 방식입니다. 해당 loss를 사용하면 contrastive loss를 적용할 필요가 없습니다. loss는 다음과 같습니다.

 

L_i는 sample을 올바른 class로 할당하는 cost를 의미하고, θ_y = arccos(wTx)는 sample feature x와 decision hyperplane w 사이의 각도를 의미합니다. 여기서 두 vector는 L2 normalization 되어 있습니다. 해당 loss의 goal은 cosθ_y - m을 가능한 크게 만들어 해당 각도를 최소화하는 것입니다. 이때 m을 angular margin이라 합니다. hyper parameter s는 softmax loss의 temperature를 조절하는 역할을 하여, 클래스 내 분산을 더욱 축소시키는 잘 분리된 sample에 더 높은 기울기를 생성합니다. 저자들은 m = 0.4, s = 30으로 초기값을 설정했습니다.

이번엔 Relation Loss입니다. 저자들의 또 다른 기여로, 저자들은 scoring mechanism으로써 새로운 relation module을 도입합니다. contrastive loss function과 유사하지만, euclidean distance를 사용하지 않고 간단한 binary classifier를 사용합니다. 그림으로 표현하면 아래와 같습니다.

 

siamese network는 두 개의 branch가 동일한 network와 parameter를 공유하는 구조로 구성됩니다. 이는 standard softmax를 기반으로 하는 speaker classification을 위해 사전 학습되었으며, 작은 relation module은 두 개의 voice sample이 동일한 speaker에서 왔는지 아닌지를 구분하도록 학습됩니다. 분리된 NetVLAD/GhostVLAD aggregator는 classification 및 relation network path를 위해 통합됩니다. feature extractor의 대부분이 고정되어 있기 때문에, relation module은 매우 적은 양의 연산만 필요로 합니다. 추론 중에는, voice pair에 대한 output score는 feature embedding 사이의 average cosine similarity와 relation module로 구해지는 classification score로 계산됩니다.

 

Implementation details and training

training 과정동안, 저자들은 각 utterance에서 random하게 segment를 sample합니다. VGG 기반 model의 경우, 1024 FFT를 사용하여 3초 길이의 segment로부터 512x300 크기의 spectrogram을 얻고, thin-resnet model의 경우, 512 FFT를 사용하여 257x250 크기(frequency x temporal)의 spectrogram을 얻습니다. model은 2.5초 간격에 해당하는 고정된 길이의 audio의 spectrogram을 이용하여 train됩니다. 모든 audio는 일관성을 위해 16kHz sampling rate로 단일 채널, 16bit stream으로 변환됩니다. spectrogram은 25ms 너비 및 10ms step의 hamming window를 사용하는 sliding window 방식으로 생성됩니다. spectrogram은 single time step의 모든 frequency component의 평균을 빼고 표준편차로 나누어 졍규화됩니다. VAD나 automatic silence removal는 사용되지 않습니다. 저자들은 adam optimizer를 사용하며, 초기 learning rate는 0001입니다. learning rate는 수렴할 때까지 36 epoch마다 1/10배 됩니다.

 

pre-training for contrastive loss

network의 weight를 초기화하기 위해 softmax를 이용한 pretrain을 진행합니다. cross entropy loss는 contrastive loss에 비해 더 안정적인 수렴을 하는데, 이는 softmax train이 contrastive loss를 사용할 때 pair의 난이도에 영향을 받지 않기 때문일 수 있습니다. 식별 성능을 평가하기 위해, 저자들은 각 speaker의 single video로부터 얻어지는 모든 speech segment로 구성된 validation test를 진행합니다.

identification task에 pre-train된 model을 가져와, classification layer를 512차원 output을 내는 fully connected layer로 대체합니다. 이 model은 그 후 contrastive loss로 train됩니다.

 

Mining hard examples

contrastive loss를 통해 embedding을 학습하는 데 관련된 주요 문제 중 하나로, dataset이 커질수록 가능한 pair 수가 제곱으로 증가한다는 것입니다. 이러한 상황에서, network가 easy example을 정확하게 mapping하도록 빠르게 학습하고, 그다음 성능을 향상시키기 위해 어려운 sample들을 필요로 합니다. 그래서 저자들은 online(batch 내에서)에서 hard negative pair를 얻는 방식보다 offline에서 hard negative를 선택하여 pair을 구성하는 방식을 사용합니다. 저자들은 hard positive는 따로 얻지 않는데, 어떤 random한 sample에서 false negative pair보다 false positive pair를 더 자주 발생할 가능성이 높기 때문입니다. 왜냐하면 dataset을 구성할 때 face verification을 했는데, 이때 labeling 오류가 발생할 수 있기 때문입니다.

relation module을 학습하는 동안, 비슷한 method가 적용됩니다. 저자들은 전체 VoxCeleb2에 있는 모든 voice sample로부터 feature embedding을 미리 계산합니다. negative pair뿐만 아니라 hard positive and negative pair도 구해놓습니다. 

결국 easy pair로 먼저 network를 contrastive loss로 학습합니다. 그 다음 VoxCeleb2에서 미리 구해놓은 hard negative pair을 이용해 학습을 더 진행합니다.

 

Results

 

실험 결과는 위와 같습니다. data의 종류, loss의 종류, model의 종류, aggregation의 종류에 따른 EER 수치들을 정리했습니다. 확실히 training set을 VoxCeleb2와 같이 더 많은 양의 data를 사용했을 때 성능이 향상되는 것을 볼 수 있습니다. VGG-M model이 더 고차원의 embedding을 사용하지만, ResNet-50이 더 좋은 성능을 보이는 것을 알 수 있습니다. Thin-ResNet을 standard softmax loss와 NetVLAD로 train한 결과, 이전 model(4.19%)에 비해 더 성능이 좋은 것을 볼 수 있습니다(3.57%). Thin-Resnet이 Resnet-50보다 얕고 parameter 수가 적음에도 불구하고, NetVLAD aggregation layer의 이점을 더욱 잘 보여줍니다. softmax를 AM-softmax로 교체하여 추가적 성능 향상을 이루어냈으며(3.32%), 불필요한 정보를 aggregation에서 제외하는 GhostVLAD layer도 성능 향상에 약간 기여합니다(3.22%).

Hard test set에서도 저자들이 제안한 model이 더 우수한 성능을 보입니다.

 

VoxCeleb1 test set에서 TDNN과 x-vector를 기반으로 하는 가장 우수환 결과들과 비교를 한 결과입니다. VoxCeleb2에서만 train 함에도 불구하고, 저자들의 Thin-Resnet-34는 VoxCeleb1&2에서 학습된 x-vector를 기반으로 하는 model과 비교할만한 성능을 보입니다.

저자들은 공정성을 위해 relation module을 VoxCeleb2로만 train한 결과가 위와 같습니다. 저자들의 Thin-Resnet을 GhostVLAD layer와 relation module로 학습한 결과가, VoxCeleb1 dataset에서 가장 좋은 것을 볼 수 있습니다.

 

Conclusion

저자들은 speaker recognition dataset을 automatic하게 만들어내는 방식을 소개하며, VoxCeleb2를 생성했습니다. 또한 speaker verification task에 사용할 수 있는 새로운 archiecture와 train method를 소개했습니다. 다른 model들에 비해 VoxCeleb1 data에서 가장 뛰어난 성능을 보이는 것을 알 수 있었습니다.

저자들의 method는 spectrogram에 2D CNN을 적용하는 것을 기반으로 하지만, frequency를 input channel로 하는 1D time convolution과 같이 더 효율적인 방안을 연구할 것이라고 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90