Urban Sound Classification Update

(업데이트)아래 훈련 세트와 테스트 세트를 사용하여 간단한 모델을 만들어 보았습니다. 훈련 데이터에서 62.8%(주피터 노트북 참고), 테스트 세트에서 56.5%(주피터 노트북 참고) 정확도를 얻었습니다. 나중에라도 구글 클라우드를 쓸 기회가 있으면 파라미터 탐색 범위를 늘려서 한번 시도해 보겠습니다. ^^

(업데이트)이 글에서 작업한 훈련 세트와 테스트 세트의 분류가 잘못되었습니다. 테스트 세트와 훈련 세트가 같은 소리의 샘플을 가지고 있습니다(문제점을 찾아주신 최근우님께 감사드립니다). 예를 들면 한 강아지로 부터 몇 개의 소리가 녹음되어 있습니다. 이런 경우에 이 소리가 훈련 세트와 테스트 세트로 나뉘어져 들어가면 정확한 추정이 되지 못합니다. 새로운 데이터는 완전히 새로운 강아지의 목소리일 것이기 때문입니다. 이와 비슷한 경우의 예로는 의료 영상 같은 분야입니다. 한 환자의 영상이 테스트 세트에 섞여 들어가면 과도하게 낙관적인 추정을 얻게됩니다. UrbanSound8K의 사운드 추출 데이터를 레이블이 섞어지 않도록 scikit-learn의 GroupShuffleSplit를 사용하여 훈련 세트와 테스트 세트로 나누어 깃허브에 올려 놓았습니다. 이 데이터셋으로 도전해 보도록 하겠습니다. 🙂

UrbanSound8K 데이터를 이용해 10가지의 소리를 분류하는 Urban Sound Classification의 코드를 텐서플로우 1.1 버전에 맞추어 업데이트했습니다. 이전과 달라진 점은 레이어의 노드를 증가시켰고, 텐서플로우의 매트릭스 연산자를 사용하지 않고 조금 더 상위 API인 dense, softmax_cross_entropy_with_logits 등을 사용한 것과 기본적인 경사 하강법 말고 0.0001의 학습속도로 Adam 옵티마이저를 사용한 점 등입니다. 여러번 하이퍼파라미터 튜닝을 하기 위해 특성 데이터를 훈련용과 테스트용으로 나누어 놓고 작업을 시작했습니다.

urban_sound_train

훈련은 Urban Sound Classification-Train.ipynb 파일에, 테스트는 Urban Sound Classification-Test.ipynb 에 있습니다. 학습 결과는 훈련 데이터에서 92.6%, 테스트 데이터에서 92.8% 입니다. 결과를 보아서는 확실히 언더피팅 상태로 보입니다. 훈련 데이터에서 조금 더 성능을 끌어올릴 여지가 있을 것 같지만 다른 일들 때문에 여기서 일단 멈추었습니다. 나누어진 훈련 데이터와 학습된 파라미터는 깃허브에서 볼 수 있습니다.

Urban Sound Classification Update”에 대한 6개의 생각

  1. keunwoochoi

    혹시 주어진 스플릿이아니라 랜덤으로 따로 돌리셨나요? Urbansound8K는 같은 파일을 여러개로 나누어놓았는데 90%가 넘는 정확도라면 트레이닝/테스트셋에 같은 파일이 섞인것이 아닌가 합니다.
    외부데이터 없이 Data augmentation을 한 경우에 컨브넷의 SoTA가 70+%입니다. 오디오 피쳐를 쓴 경우에도 60-70%로 많이 보고되었구요.

    Liked by 1명

    응답
  2. 김호경

    유익한 강의 잘 보았습니다 🙂

    질문이 하나 있는데요.
    테스트셋 트레인셋 구분 시에 scikit-learn의 GroupShuffleSplit의 split메소드를 사용하신 것 같은데요.
    여기서 그룹 옵션으로 freesoundID를 주셨던데, 이를 통해서 같은 그룹ID을 갖는 경우 트레인셋, 테스트셋으로 서로 섞이지 않는다는 말씀이신거죠?

    다른 uransound 소스를 보면 트레인셋과 테스트셋을 폴더(fold1/fold2)로 구분하여 사용하는데요.
    결과가 보통 accuracy가 70%이상 넘어가지는 않거든요.

    최종 결과를 보면 accuracy가 90%를 넘긴 것 같아서, 의문이 있어 질문 남깁니다.
    folder로 구분해서 시험했을 경우도 같은 결과가 나오는 지 궁금하네요.

    좋아요

    응답
    1. 로드홈 글의 글쓴이

      네 데이터셋을 나누것은 말씀하신 바가 맞습니다. 하지만 90%는 잘못된 데이터셋으로 만든 결과입니다. 그룹셔플로 나눈 데이터셋으로는 아직 시도를 못해보고 있습니다. ㅜㅜ

      좋아요

      응답
  3. 김수빈

    안녕하세요. 비슷한 코드로 소리분류 딥러닝 코드를 짜고 있는데 정확도가 너무 낮게 나옵니다.
    학습할때의 정확도는 90퍼센트 정도로 나오는데, 실제로 소리를 들려주고 그 소리를 분류할때의 정확도가 너무 낮습니다.
    혹시 개선할 수 있는 방안이 있을까요?

    좋아요

    응답
    1. 박해선 글의 글쓴이

      안녕하세요. 훈련 세트와 테스트 세트, 또 실전 샘플에서 정확도가 차이나는 이유는 여러가지가 있습니다. 작업마다 다양한 상황이 있기 때문에 단순하게 답변드릴 수 없네요. 여러 머신러닝 도서를 참고하시고 주변에서 도움이 될 수 있는 사람을 찾아 보는 것이 좋을 것 같습니다. 🙂

      좋아요

      응답

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.