태그 보관물: UrbanSound8K

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

뉴욕 대학교 MARL(Music and Audio Research Lab)에서 2014 년에 공개한 UrbanSound8K 데이터를 이용하여 텐서플로우를 사용해 사운드를 분류 모델을 만들어 보았습니다. 텐서플로우 코드는 아퀴브 사이드(Aaqib Saeed)의 블로그를 참고하였습니다.

UrbanSound8K 데이터는 모두 10 가지 종류의 소리를 4 초 가량 녹음한 것으로 8 천개가 넘는 wav 파일들 입니다. 소리의 종류는 ‘air_conditioner’, ‘car_horn’, ‘children_playing’, ‘dog_bark’, ‘drilling’, ‘engine_idling’, ‘gun_shot’, ‘jackhammer’, ‘siren’, ‘street_music’ 입니다. 압축을 풀기 전의 데이터 사이즈가 5 GB 가 넘습니다. 이 데이터를 받기 위해서는 깃허브에서 다운로드 주소를 이용해 다운받을 수 있지만 사용 목적에 대해 알려달라고 합니다.

먼저 wav 파일을 이용해서 피처를 뽑아 내야합니다. 아퀴브 사이드가 사용한 방법은 사운드 분석 파이썬 라이브러리인 librosa 를 이용해서 특성을 추출하였습니다. 사용된 특성은 mfcc(Mel-frequency cepstral coefficients), chroma_stft(chromagram from a waveform or power spectrogram), melspectrogram(Mel-scaled power spectrogram), spectral_contrast(spectral contrast), tonnetz(tonal centroid features) 입니다. 이 데이터를 모두 행으로 늘여 놓으면 총 193 개의 입력 데이터가 만들어 집니다.

계속 읽기