Paper Review - DEEP METRIC LEARNING USING TRIPLET NETWORK
이 포스트에서는 2015년 CVPR에 실린 “Deep metric leraning using Triplet network” 논문에 대해 살펴보겠습니다.
Key Point
introduce triplet network
apply triplet network to 4 dataset(Cifar10, MNIST, SVHN, STL10)
2D visualization of features(embedding)
comparison with performance of the siamese network
propose future work on unsupervised learning
introduce triplet network
이 논문에서는 이전에 다뤘던 “Learning Fine-grained Image Similarity with Deep Ranking” 논문에서
사용했던 triplet network 를 4가지 데이터셋에 적용해서 classification 성능을 확인하고, 기존의 Siamese Network와 비교하고 있습니다.
먼저 Triplet Network가 무엇이였는지 다시한번 상기해봅시다. 자세한 내용은 [Paper Review - Deep Ranking] 포스트를 참고하세요.
Triplet은 기준이 되는 데이터인 anchor example(query image[1]), anchor example와 유사한(ex, 동일 카테고리)데이터인 positive example,
그리고 유사하지 않은(ex, 다른 카테고리) 데이터인 negative example의 3개 데이터로 구성됩니다.
Triplet의 두 쌍(anchor-positive), (anchor-negative)간의 대해 유사성을 비교하는 함수는 다음과 같이 정의됩니다.
\[D(f(p_i), f(p_i^+)) < D(f(p_i), f(p_i^-)) \\
\forall p_i,p_i^+, p_i^- \enspace such \enspace that \enspace r(p_i, p_i^+) > r(p_i, p_i^-)\]
여기서 \(D(f(p_i), f(p_i^+))\) 는 anchor example과 positive example간의 유사성을 의미하며, 다음 수식과 같이 L2 distance로 정의할 수 있습니다.
\[D(f(p_i), f(p_i^+)) = ||f(p_i)-f(p_i^+)||_2\]
두 쌍의 유사성을 비교하기 위해서 Triplet은 다음과 같이 2가지의 L2 distance들을 출력해야 합니다.
이렇게 출력된 2쌍의 L2 distance에 대한 loss function을 사용해서 TripleNet Network를 학습시킵니다.
이 논문에서는 다음과 같이, 간단한 MSE를 loss 함수로 사용했습니다.
\[Loss(d_+, d_-) = ||(d_+, d_- -1)||^2_2\]
이 논문에서는 위의 metric으로 학습한 4개 layer로 구성된 Triplet Network를 각각 4개의 데이터셋(Cifar10, MNIST, SVHN, STL10)으로 학습한 후,
Siamese Network와 다른 Classification Network들과 비교 분석을 수행합니다.
Future work
이 논문에서는 다음과 같이 Triplet Network의 접근 방식으로 unsupervised learning 문제를 해결할 수 있는 방법에 대한 향후 연구 방향을 제시했습니다.
Using spatial information (공간적 정보 사용)
동일 이미지 내에서 추출한 patch와, 다른 이미지에서 추출한 patch를 triplet으로 구성해서 unsupervised setting으로 모델 학습
Using temporal information (시간적 정보 사용)
동영상과 같은 시간정보가 포함된 데이터에서, 특정 시간 범위 내의 샘플과 범위 밖의 샘플을 triplet으로 구성해서 unsupervised setting으로 모델 학습
How to implement TRIPLET NETWORK?
// 향후 구현 예정 //
Results
// 향후 구현 예정 //
References
[1] DEEP METRIC LEARNING USING TRIPLET NETWORK, 2015 [paper]
이미지 분류(Image Classification)와 유사 이미지 순위(Similar Image Ranking) 문제의 차이
이미지 분류에서는 “검은색 자동차”, “흰색 자동차”, “짙은 회색 자동차”는 모두 “자동차”라는 하나의 카테고리로 분류되지만,
유사 이미지에 대해 순위를 매기는 문제에서는 동일 카테고리내에서 “검은색 자동차”를 기준으로 순위를 매긴다면, “흰색 자동차”보다는 “짙은 회색” 자동차의 순위가 높게 매겨져야 합니다.
즉, 이미지 순위 문제에서는 이미지에 대한 시멘틱 유사성 뿐만 아니라 시각적 유사성도 함께 고려해야 합니다. 또한, 이미지를 특정 카테고리로 분류하는 것이 아니라 각 이미지 샘플들간의 유사성을 직접적으로 비교할 수 있는 방법이 필요합니다.
Image Similarity Model
먼저 앞서 이미지 분류와 유사 이미지 순위 문제의 차이에서 소개된 바와 같이, 이미지 순위 문제를 해결하기 위해서는 각 이미지를 특정 카테고리로 분류하는 것이 아니라, 각 이미지간의 유사성을 직접적으로 비교할 수 있는 metric이 필요합니다.
이 논문에서는 먼저 이미지간의 유사성을 비교하기 위해 triplet 이라 불리는 집합을 사용합니다. triplet 은 query image, positive image, negative image으로 구성되며, 이 때, positive image 는 negative image보다 query image와 유사성이 높도록 구성합니다.
이렇게 구성된 triplet을 이용해서 각 이미지 간의 유사성을 비교하기 위해 다음과 같은 squared Euclidean distance를 정의합니다.
\[D(f(P), f(Q)) = ||f(P)-f(Q)||^2_2\]
여기서 \(f\) 는 입력 이미지를 Euclidean 공간으로 맵핑하는 이미지 임베딩 함수를 의미하며, CNN과 같은 모델이 적용될 수 있습니다. 또한 \(P\)와 \(Q\)는 각각 서로 다른 이미지를 의미합니다.
이제 이와 같이 정의된 거리 함수를 이용해서 query image와 positive image, query image와 negative image간의 유사성에 대한 수식을 정의해봅시다.
\[D(f(p_i), f(p_i^+)) < D(f(p_i), f(p_i^-)) \\
\forall p_i,p_i^+, p_i^- \enspace such \enspace that \enspace r(p_i, p_i^+) > r(p_i, p_i^-)\]
여기서 \(p_i\) 는 query image, \(p_i^+\)는 positive image 그리고 \(p_i^-\) 는 negative image를 의미합니다.
당연히 이 triplet에서, query image와 positive image 사이의 거리는 query image와 negative image 사이의 거리보다 짧아져야, 상호간의 유사성이 일치할 것입니다.
여기서 \(g\)는 두 이미지 페어간의 거리에 대한 차이를 regularize 하기 위한 gap parameter 입니다. 쉽게 말하자면 두 거리간에 약간의 마진을 더 둬서 유사 샘플간에는 더 가깝고, 비-유사 샘플간에는 좀 더 멀리 임베딩시키기 위한 파라미터입니다.
이 hinge loss를 살펴보면, query image와 positive image간의 거리가 query image와 negative 이미지보다 커지면, loss 가 증가하게 되며, 반대는 loss가 감소하게 될 것입니다.
여기서 \(\lambda\)는 일반화 성능을 향상시키기 위한 regularization 파라미터이고, \(W\) 는 임베딩 함수 \(f(.)\)의 파라미터를 의미합니다. 논문에서는 \(\lambda = 0.001\)로 설정했습니다.
— 수식 이해가 좀 어렵네요… ??? —
만약 위 함수의 \(\xi_i\)를 \(\xi_i = max\{0, g + D(f(p_i), f(p_i^+)) - D(f(p_i), f(p_i^-))\}\)와 같이 수정하면, 제약없는 optimization 함수로 변경할 수 있습니다(?)
이제, 앞서 정의한 hinge loss 함수와 objective 함수를 이용해서 학습(최적화)시키기 위한 모델을 정의해봅시다.
Network Architecture
이 논문에서는 다음 그림과 같이 triplet에 포함된 3개의 이미지를 3개의 동일한 deep neural network \(f(.)\)로 전달합니다.
이 그림에서 표현된 deep neural network들인 Q, P, N은 각각 query image, positive image, negative image 를 입력으로 사용해서, Euclidean 공간으로 임베딩하며, 3개의 Q, P, N 네트워크들은 서로 파라미터 값들을 동일 값으로 공유합니다.
또한, 여기서 Ranking Layer는 앞서 정의한 hinge loss를 계산하는 layer로, 별도의 파라미터는 없습니다. Triplet Sampling Layer 는 이미지 샘플들로부터 Triplet 집합을 생성하기 위한 layer로, 뒤에서 자세하게 살펴봅시다.
각각의 Q, P, N 딥러닝 네트워크들은 다음 그림과 같이 multiscale deep neural network architecture로 구성되어 있습니다.
이 임베딩을 위한 딥 네트워크는 ConvNet과 상대적으로 얉은 2개의 CNN으로 총 3개의 파트로 구성되어있습니다. 여기서 ConvNet은 2012년 ImageNet 대회인 ILSVRC 2012에서 우숭한 AlexNet 모델을 그대로 사용합니다.
딥 네트워크를 위와 같이 multiscale로 구성한 이유는 semantic similarity와 visual similarity를 모두 고려하기 위해서입니다.
Image Classification 문제에서 매우 효과적인 성능을 보였던 ConvNet(AlexNet)을 이용해서 semantic(category-level) similarity를 고려하고, 나머지 2개의 얉은 CNN을 이용해서 visual similarity를 고려할 수 있습니다.
Optimization
모델의 학습은 momentum algorithm 을 이용해서 최적화시켰고, 과적합을 피하기 위해서, 모든 fully connected layer에 대해 0.6% 확률로 dropout을 적용했습니다. 또한, Random pixel shift를 사용해서 데이터 확장(data augmentation)을 적용했습니다.
Triplet Sampling
딥러닝에서는 다양하고 많은 대규모의 데이터를 이용하는 것이 과적합을 피하기에 좋다는 것은 당연한 사실입니다. 그러나, 수집 및 정제한 대규모의 데이터셋에 대해 triplet을 구성할 경우 데이터는 무려 \(x^3\) 형태로 많아지게 되며,
이와같이 많아진 데이터는 학습 속도를 느리게 만들수 밖에 없습니다.
예를들어 ILSVRC 2012의 ImageNet 데이터 셋은 약 \(1.2 \times 10^7\)(12,000,000)개의 이미지로 구성되어 있는데, 이 이미지들에 대해서 triplet을 생성하게 되면, 생성 가능한 triplet의 개수는 \((1.2 \times 10^7)^3 = 1.728 \times 10^{21}\)개가 됩니다.
이렇게 과다하게 많은 데이터는 현실적으로 모델을 학습시키기 어렵게 만든다는 단점이 있습니다. 따라서 이 논문에서는 online triplet sampling 알고리즘을 제안해서 약 \(2 \times 1.2 \times 10^7\)(24,000,000)개 최적의 triplet을 샘플링했습니다.
그럼 이 논문에서 제안한 좋은 triplet을 샘플링하는 방법에 대해 살펴봅시다.
먼저 query iamge에 대해 좋은 potivie image와 negative image를 구분하기 위해, 다음 수식과 같은 total relevance score를 고려해야합니다.
\[r_i = \sum_{j:c_j=c_i,j \neq i} r_{i,j}\]
여기서 \(p_i\) 는 이미지 카테고리 \(c_i\)에 대응하는 이미지를 의미합니다. 따라서, 동일 카테고리 범주 내에서 각 이미지에 대한 전체 이미지의 총 유사도 점수(total relevance score)를 먼저 구합니다.
이후 이 총 유사도 점수 \(r_i\) 가 가장 높은 이미지 \(p_i\)를 query image로 선택합니다.
이후 선택한 query image \(p_i\)에 대응하는 positive image \(p_i^+\)를 샘플링해야합니다.
positive image는 query image \(p_i\) 와 동일한 카테고리 내에서 샘플링합니다.
그런데, 유사 이미지 순위 문제에서는 동일 카테고리 내에 존재하는 이미지라고 하더라도 서로간의 유사도가 다르다는 것, 즉 visual similarity를 고려해야 된다는 것을 앞서 살펴봤었습니다.
따라서, 다음 수식과 같이 먼저 query image와 동일한 카테고리 내에서 이미지들을 샘플링한 후, query image에 대해서 샘플링 된 positive image들의 유사도(relevance score)를 구할 필요가 있습니다.
아래 수식에서 \(T_p\)는 임계값 파라미터입니다.
위 수식을 이용해서 positive image들의 유사도 확률 \(P(p_i^+)\)를 구하고, 구해진 유사도 확률이 가장 높은 positive image을 선택합니다.
이제 마지막으로 남은 negative image를 샘플링해야 합니다. negative image는 두 가지 type으로 정의합니다.
out-of-class negative samples:
이 type은 query image의 카테고리와 다른 카테고리에서 negative image를 샘플링하는 것으로, 다른 카테고리 이미지들 중에서 균일하게(랜덤으로) 샘플링합니다.
in-class negative samples:
이 type은 query image와 동일한 카테고리 내에서 negative image를 샘플링하는 것으로, (query image - positive image)간의 유사도보다 낮은 이미지를 샘플링해야 합니다. in-class negative sample은 positive image를 샘플링하기 위해 위 수식에서 정의했던 유사도 확률을 이용합니다.
이 때, 동일 triplet내에서 positive image와 in-class negative samples 로 구해진 negative image를 구별하기 위해 다음 수식과 같이 마진(margin)을 두어 샘플링합니다.
사실 위 조건들을 만족하는 triplet을 샘플링하는 것도 연산량 측면에서 쉬운 일이 아닙니다.
위의 샘플링 알고리즘은 모든 이미지 pair 들에 대해서 유사도를 계산하고 비교해서 샘플링해야 하기 때문에, 모든 이미지 데이터를 메모리에 올려서 random access를 해야 하기 때문에 컴퓨팅 리소스 측면에서도 효과적이지 못합니다.
따라서, 이 논문에서는 buffer를 도입한 효과적인 online triplet sampling 알고리즘을 제안합니다.
버퍼 생성 및 버퍼 채우기
이 알고리즘에서는 먼저 위 그림과 같이 이미지 카테고리의 총 개수만큼 고정된 길이의 버퍼를 생성합니다.
이 버퍼는 각 카테고리(\(j\))별로 이미지 \(p_j'\)와 해당 이미지에 대한 key \(k_j'\) 의 두 쌍의 요소들로 구성되어 있습니다.
하나의 새로운 이미지 \(p_j\) 가 들어오면, 먼저 이미지에 대한 키값인 \(k_j\)를 구합니다.
\(j\) 에 해당하는 버퍼가 모두 차있는지 아닌지 비교한 후, 모두 차있지 않으면 해당 버퍼에 이미지 \(p_j\)와 키 \(k_j\)를 추가합니다.
만약 해당 이미지의 카테고리 \(j\)에 해당하는 버퍼가 모두 차 있는 경우, 위 그림에서 표시되어있는 것과 같이 ①해당 버퍼의 요소들 중 가장 작은 키 값 \(k_j'\) 를 찾습니다.
이후 ② 버퍼에서 찾아낸 키 값 \(k_j'\)과 새로운 이미지에 대한 키 값 \(k_j\)를 비교합니다.
만약 \(k_j > k_j'\)일 경우, 버퍼에 포함되어있는 이미지 \(p_j'\) 를 새로운 이미지 \(p_j\)로 교체합니다. 만약 반대일 경우에는 새로운 이미지를 버리고, 새로 버퍼에 입력될 다른 새로운 이미지를 찾습니다.
버퍼에서 triplet 구성하기
이제, 구성한 버퍼로부터 유효한 triplet을 만족하는 query image, positive image, negative image를 찾아야합니다.
먼저 ①특정 카테고리 \(c_j\)에 해당하는 버퍼에 포함된 모든 이미지에서 랜덤으로(균일하게) 하나의 이미지를 찾아서 ** query image **을 샘플링합니다.
② ** positive image **의 경우, query image 와 유사하게, query image와 동일한 카테고리의 버퍼에서 랜덤으로 샘플링하는데, 샘플링된 이미지는 \(min(1, r_{i,i+}/r_{i+})\)를 만족해야 합니다.
③ ** negative image **의 경우, 앞서 살펴본 바와 같이 in-class negative image와 out-of-class negative image의 2가지 타입이 존재합니다.
먼저 in-class negative image의 경우, query image와 positive image를 샘플링할 때와 유사하게, 해당 카테고리의 버퍼로부터 랜덤으리 이미지를 샘플링하는데, 이 단계에서 샘플링된 샘플 이미지는 \(r_{i,i+}-r_{i,i-} \leq T_r\) 을 만족해야 합니다.
다른 하나인 out-of-class negative의 경우는 심플하게, query image와 다른 카테고리의 버퍼에서 랜덤하게 하나의 이미지를 샘플링하면 됩니다.
How to implement Deep Ranking Model?
// 향후 구현 예정 //
Results
// 향후 구현 예정 //
References
[1] Learning Fine-grained Image Similarity with Deep Ranking, 2014 [paper]
이 포스트에서는 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을 달성했습니다.
이 포스트에서는 Sound Recognition과 관련된 여러 분야와 기술들을 정리할 예정입니다.
음성 인식(Speech Recognition)
화자 인식(Speaker Recognition)
화자 인식 기술은 일반적으로 화자 식별(Speaker Identification)과 화자 검증(Speaker Verification) 으로 나눠집니다. 화자 인식을 통한 보안 시스템은 이 두가지 기술이 모두 포함되어 구현됩니다.
화자 식별(Speaker Identification) :
주어진 발언(utterance)으로부터 해당하는 화자(인물)을 찾아내는 기술
화자 검증(Speaker Verification) :
주어진 발언(utterance)이 시스템에 등록된 사용자들의 목소리 중에 있는지 아닌지 검증하는 기술
또한 화자 인식은 제한된 환경(특정 문장의 사용)에서의 인식이냐 아니냐에 따라서 문장독립(text-independent)과 문장종속(text-dependent)로 구분될 수 있습니다.
문장독립(text-independent) :
화자 인식을 위해 발언하는 문장의 형식이나 종류에 제한이 없는 방식
문장종속(text-dependent) :
화자 인식을 위해 사용자가 특정 문장의 형식이나 종류로 발언해야 하는 방식
당연하게도, 문장독립방식의 화자인식 기술의 연구가 더 어려운 기술입니다.
문장종속 방식의 경우 주어진 문장이라는 제한 환경이 있으므로, 사전에 화자 인식을 위한 기술 개발에서 고려해야할 사항을 제한할 수 있기 때문입니다.