jymsuper / SpeakerRecognition_tutorial

Simple d-vector based Speaker Recognition (verification and identification) using Pytorch
MIT License
210 stars 46 forks source link

1,2달 전에 질문 올렸던 프로젝트 진행자입니다. #10

Closed lee0520-art closed 3 years ago

lee0520-art commented 3 years ago

image image image 현재 저는 화자 등록과 인식 기능을 분리하여 실시간으로 작동되는 화자인식 프로그램을 만들었는데, 조용하고 좋은 마이크로 했을때는 인식률이 나쁘지 않은데 예기치 않은 변수가 존재하며 인식률에 의문이 생기기 시작했습니다. 그래서 여쭤보고 싶은게 cnn기반인 Resnet모델을 바꿔보면 더 나은 결과를 볼수 있지 않을까 하는생각입니다. 그래서 현재는 'Resnet18'인 기본 모델로 작동되는것 같은데 혹시 여기 사진에 올려져 있는것처럼 34,50,102,152 이렇게 있는걸 확인했는데 어떻게 바꾸는지 혹시 알수 있을까요?

jymsuper commented 3 years ago

안녕하세요. model/model.py의 background_resnet 클래스가 있는데, 여기서 backbone='resnet34'로 바꿔보시겠어요?

lee0520-art commented 3 years ago

예 resnet34는 resnet18과 같은 구조를 가지고 있어서 바로 되더라구요, 근데 결과적으로 보면 일치율이 크게 상승하지도 않더라고요. 혹시 50이나 101로 바꿀수 잇는 방법이 잇을까요?

jymsuper commented 3 years ago

제 경험상 layer 개수를 34에서 더 늘린다해서 성능이 크게 변하진 않았습니다. 34 layer를 이용하는 것만으로도 충분하다 생각되고, 훈련 데이터량이 부족하다면 layer를 증가시켰을 때 성능이 오히려 떨어질 수도 있을 것입니다. 따라서 다른 쪽에서 문제가 있을 것 같은데... 당장은 다음과 같은 방법들을 시도해 볼 수 있을 것 같습니다.

  1. 훈련 데이터량 증강 (사실 이게 제일 근본적인 해결책이긴 할 것 입니다. clean한 환경에서 수집한 데이터로 훈련을 하고, 잡음 및 반향이 심한 환경에서 테스트를 한다면 성능이 확연히 떨어질 것이므로... 어떤 훈련 데이터를 사용하는지가 상당히 중요할 것 같습니다.)
  2. configure.py의 NUM_WIN_SIZE를 100이 아닌 200~300 정도의 값으로 늘려보기 (훈련 시 모델 입력으로 몇 frame의 feature를 이용할지 정해주는 것인데, 이 수가 커질수록 대체적으로 성능이 좋아집니다. 다만 GPU memory가 부족해질 수 있습니다.)
  3. Fbank feature의 dimension을 40에서 64로 올려보기
lee0520-art commented 3 years ago

덕분에 두개의 값(Fbank feature, NUM_WIN_SIZE) 을 조정해보니 성능이 월등히 좋아진걸 확인할수 있었습니다. 말씀하신 훈련 데이터량 증가 관련해서 여쭤보고 싶은것이 현재240명에서 340명까지 늘리긴 했는데 더 늘리고 싶어서그러는데 이때까지 한사람당 100개의 음성을 이용해서 트레인 데이터를 만들었는데, 제가 최근에 얻은 데이터 셋이 한사람당 100개가 아니고 뒤죽박죽으로섞여서 낱개로 되있는것을 찾았습니다. 이런경우 데이터셋을 추가하는것이 불가능한가요? 아니면 그전과 동일하게 다른사람이더라도 100개씩 묶어서 해볼까요? 동일한 사람이 표시가 안되어있는상태로 섞여있어서 방법을 찾고있습니다.감사합니다.

jymsuper commented 3 years ago

사람마다 음원 파일의 개수가 다르다는 말인가요? 극단적으로 작거나 큰 경우가 아니라면, 추가하여도 상관 없을 것 같습니다. 물론 파일 개수가 고르게 분포한다면 좋겠지만, 크게 다르지만 않으면 상관없을 것 같습니다.

lee0520-art commented 3 years ago

제가 헷갈리게 말씀 드렸네요, 정확히 같은 화자인지 아닌지 모르게 뒤섞여 있어서 각각의 화자의 파일 개수가 몇개인지 파악이 안되는 상태라서, 그 전에는 각각 화자 1명에 파일이 100개 있었는데 섞여있는 상태라서 그냥 화자 1명이라고 가정하고 그 하나의 파일에 여러사람의 데이터를 그냥 100개씩 넣으면 안되겠죠?

jymsuper commented 3 years ago

직접 한번 테스트해보셔도 되겠지만... 막연히 드는 생각으로는 안좋을 것 같네요. 여러 화자로부터 발성된 음성을 100개씩 쪼개서 화자1, 화자2라고 정의한다면, 결국 화자1과 화자2에는 동일한 화자로부터 발성된 음성들이 존재할테니 훈련에 방해가 될 수 있을 것 같습니다