Speaker Recognition Contest
개인 목표 : Pytorch와 친해지고 최신 논문들을 구현해 보는데 의의를 두고 참가를 하였다.
대회 목적 : 두개의 음성이 같은 화자인지 아닌지 구분하는 Task
대회 결과 :
본선1에서 13등, 본선2에서 5등으로 통과하여 결승에 진출.
아쉽게도 본선에서 9등으로 마무리 하였다
기간 : 2021.10.03 - 2021.11.31
참가인원 : 2명
과정 : 예선 -> 본선 -> 결승
데이터 타입 : wav(비정형)
하드웨어(클라우드) : Naver Systems, NVIDIA TITAN 32G
배운점 : Pytorch, metric learning, siamese method / 새로운 시스템에 적응하는법
코드
본선 : 5등
처음 음성데이터를 다루어보며 가장 어려웠던 점은 wav파일을 정형으로 바꾸는 전처리 방법에 있었다. wav에서 정형으로 바꾸는 방법으로 사람이 만든 Feature extraction방법과, end-to-end로 처리하는 방법 두가지가 있다. 사람이 만든 Feature Extraction방법으로 푸리에변환, ShortTimeFourier, mel-spectrogram등 매우 많은 방법론이 존재하여 선택에 어려움을 느꼈다. 본선에서는 보편적으로 쓰는 방법인 Mel-spectrogram을 전처리로 사용을 하였다.
처음 생각한 모델은 두 화자의 데이터를 시간축으로 concat을 하고, transformer의 encoder구조로 attention을 해가며 feature를 extraction하는 방법을 생각했지만, 학습이 이루어 지지 않아 다른 방법론을 생각해야 했다. Mel-spectrogram을 이미지로 생각하고 ResNet으로 feature를 추출한뒤 두 화자를 비교해보면 좋지 않을까 라는 생각을 하였다. 나중에 알았지만 이러한 방법을 Siamese Neural Networks라는 방법이었다. 결론적으로 이 모델로 본선에서 5등을 하였다.
어려웠던 점 :
불친절한 NSML document로 네이버 클라우드 NSML에 적응하는데 상당한 시간을 소비하여, 깊이있는 공부를 하지는 못하였다.


Batch Size : 96
Optimizer : RADAM
Activation Function : GELU
Loss : CrossEntropy
BackBone Network : ResNet34
Head : DNN
결승 : 9등
결승전의 데이터 셋은 화자당 라벨이 붙는 데이터 셋으로 본선과는 다르다.
본선 때 사용했던 방법론보다 더 좋은 퍼포먼스를 내기 위해 논문들을 살펴보다가 metric learning이라는 분야를 발견하였다.
Loss function을 공간차원으로 생각 하여 classification하는데 있어 cluster하게 묶이도록 모델을 학습하는 방법론이다.
2005년 논문인 Contrasive Loss부터, Margin Loss, TripletMarginLoss, 2018년 Angular Loss까지 모두 적용해 보았으나 성능향상은 이루어지지 않았다.
Backbone Network를 바꾸면 좋아지지 않을까 하여 아래의 모델들을 시도해 보았다.
ResNet Strikes Back(2021), Thin ResNet, Vision Transformer(2020)
성능향상에는 실패하여 결승 9등으로 아쉽게 마무리하였다.
느낀점 :
목표였던 pytorch와 친해지고, 최신논문들을 적용해 봄으로 소기의 성취를 달성하였다. 비록 경쟁자들이 스타트업 CEO, 현업 AI researcher 4-5명이 팀을 이루었지만, 수상하지 못한 아쉬움이 남는다.
아무리 Fast Learner여도 새로운 도메인의 데이터를 다루는 데 있어 최소한의 시간이 필요하며, 준수한 퍼포먼스까지는 따라갈 수 있을지라도 최고의 성능까지 따라가기 힘들다는 것을 느끼며 도메인의 중요성을 다시 한번 깨닫는 계기가 되었다.
https://github.com/jihoon99/2021_speaker_recognition/tree/main/final
