소리를 기반으로 내가 처한 상황을 이해하는 모듈을 만들 수 있을까? (1)

글쓴이 Inforience 날짜

클릭 >> Hello, world !! (from ShadowEgo)

내가 활동하는 공간에서 발생하는 소리를 정확히 탐지하고, 더 나아가 그와 관련된 상황까지 판단할 수 있는 지능적인 모듈을 구현할 수 있을까? 이러한 기능이 구현되어 실제 환경에서 활용된다면, 소리를 잘 듣지 못하는 분들이나, 거동이 불편한 분들에게는 큰 도움이 될 수도 있다. 예를 들어, 비상상황이 발생하여 소리가 났을 때, 누군가가 방문했을 때, 전화벨이 울렸을 때에, 소리를 잘 듣지 못하는 분들에게 상황을 알려주거나, 거동이 불편한 분들을 대신하여 스스로 대처하게 할 수도 있다. 사람이 특정 행동을 할 때 나는 소리를 지속적으로 탐지하면 그 사람의 건강상태와 관련된 소중한 정보를 얻을 수도 있다. 그런데, 이러한 기능을 구현하려면, 소리를 탐지하고 판별하는 기능이 우선적으로 필요하다. 더 구체적으로 말하자면, 입력된 소리 데이터에 우리가 탐지하고자 하는 소리가 들어있는지의 여부를 스스로 판단하는 모듈을 구현해야 한다.

이번 포스팅에서는, 다양한 소리가 녹음된 데이터들 중에서 특정 종류의 소리를 찾아내는 모듈을 구현해 본 결과를 소개한다. 첫 포스팅이니만큼, 기본적인 구조의 머신러닝 모델을 쓴 결과를 소개하고, 다음 포스팅부터는 발전된 모델을 적용한 결과를 살펴보기로 한다.

활용 데이터 선정

실험을 진행하려면, 다양한 소리가 녹음된 데이터가 많이 필요하다. 또한 각 데이터에 어떤 소리가 들어있는지 알려져 있어야 한다. 기초적인 수준의 실험을 하면서 실제로 소리를 녹음하며 대용량의 데이터를 직접 모을 수는 없는 노릇이니, 우선 많은 연구자 및 개발자들이 활용하는 공개된 소리 데이터를 찾아서 활용하도록 하였다. [1] [2]

데이터 준비

이번 실험에서는 생활 환경에서 발생할 수 있는 여러 종류의 소리들 ([1][2]에 포함된 41개의 종류들) 중의 일부 – 사람의 기침 소리(콜록), 고양이가 내는 소리(야옹), 개가 내는 소리(멍멍) – 를 탐지 대상 소리로, 그 밖의 다른 소리들을 비탐지 대상 소리로 구분하고, 입력되는 소리들을 탐지 대상 소리와 나머지 소리로 자동 분류하는 기본적인 구조의 CNN(Convolutional Neural Network)기반의 classifier를 만들어 보았다. 비탐지 대상 소리 데이터의 종류가 꽤 많으므로, 본 실험을 위해서는 탐지 대상 소리 데이터의 2배수 만큼의 비탐지 대상 소리 데이터를 여러 종류에 걸쳐 랜덤으로 선정하여 테스트용 데이터셋에 포함시켰다. (단, 이 데이터셋에는 파일에 들어있는 실제 소리와 파일의 분류명이 일치하지 않는 것들이 꽤 포함되어 있음에 유의할 필요가 있다.)

스크린샷 2019-04-07 11.33.28

표 1. 실험에 활용한 데이터셋의 용량

탐지 대상 소리의 샘플은 다음과 같다. (아래의 샘플들은 [1][2]에 공개된 데이터들 중에서 ‘cc0’ 라이센스에 해당하는 것들이다. [5])

소리 1. 개가 내는 소리 샘플

소리 2. 기침 소리 샘플

소리 3. 고양이가 내는 소리 샘플

사운드 데이터를 처리하고 활용하려면, 그 특성을 잘 표현하는 feature를 추출하여야 한다. 이번 실험에서는 mel-spectrogram을 사용하였다.

스크린샷 2019-04-06 17.12.57

그림 1. 개가 내는 소리의 mel-spectrogram

스크린샷 2019-04-06 17.13.49

그림 2. 기침 소리의 mel-spectrogram

스크린샷 2019-04-06 17.14.40.png

그림 3. 고양이가 내는 소리의 mel-spectrogram

CNN(Convolutional Neural Network)

이번 실험에서 활용한 CNN 모델의 구조는 다음과 같다.

스크린샷 2019-04-06 19.16.21.png

결과

스크린샷 2019-04-06 19.20.25.png

그림 4. Epoch 진행에 따른 loss의 변화

그림 4는 100 epoch 만큼 학습하는 동안 나타난 loss값의 변화 추이를 보여준다. 학습이 진행되는 동안 loss값이 지속적으로 줄어드는 패턴을 보인 것으로 보아 전체적으로 무리없이 학습이 진행된 것처럼 보인다.

스크린샷 2019-04-07 11.58.02.png

표 2. 테스트 결과

위의 표는 테스트 데이터셋에 대한 학습 모델의 분류 정확도를 나타낸다. Accuracy는 0.9, F1-score는 0.93, roc_auc 값은 0.87를 기록하였다. 이 정도의 정확도라면, 실제 응용에 적용하기에는 어려울 것이다. 다만, 낯선 데이터에 대해 기본적인 구조의 CNN을 처음 적용해 본 결과치고는 그렇게 비관적이지만은 않다.

데이터에 noise mixing

실제 환경에서라면, 우리가 만든 모듈이 입력받게 될 소리 데이터에는 다양한 생활 noise가 섞여있을 것이다. 예를 들어, 음악이나 TV소리가 섞여있을 수 있고, 문을 여닫는 소리나 사람이 내는 다른 소리들도 포함되어 있을 수 있다. 그렇다면, 우리가 만들 모듈은 noise가 포함된 소리 데이터를 입력받았을 때에도 동일한 기능을 수행할 수 있어야 한다. 우리가 만든 모듈이 생활 noise를 포함한 소리 데이터를 입력받았을 때에는 어떤 결과를 보이는지 실험해 보기 위해, 소리 데이터 내의 랜덤한 타이밍에 랜덤으로 선택된 background noise가 나타나도록 mixing하였다. Background noise는 공개 데이터셋 [3][4]을 활용하였다.

소리 4. 개가 내는 소리 (노이즈 포함) 샘플

소리 5. 기침 소리 (노이즈 포함) 샘플

소리 6. 고양이 소리 (노이즈 포함) 샘플

Noise가 mixing된 소리 데이터에서 추출한 feature는 다음과 같다.

스크린샷 2019-04-06 17.16.28.png

그림 5. 개가 내는 소리 (노이즈 포함)의 mel-spectrogram

스크린샷 2019-04-06 17.17.23.png

그림 6. 기침 소리 (노이즈 포함)의 mel-spectrogram

스크린샷 2019-04-06 17.18.16.png

그림 7. 고양이가 내는 소리 (노이즈 포함)의 mel-spectrogram

그림 5, 그림 6, 그림 7과 그림 1, 그림 2, 그림 3 을 비교해 보면, noise를 포함시킬 경우 mel-spectrogram에 상당한 변화가 나타남을 확인할 수 있다.

스크린샷 2019-04-07 12.06.22

표 3. Noise가 포함된 데이터에 대한 테스트 결과

표 3은 앞서 학습한 모델에 다양한 noise가 섞인 테스트셋을 적용하였을 때의 분류 정확도를 보여준다. Accuracy는 0.74, F1-score는 0.83, roc_auc 값은 0.65을 기록하여, 소리 데이터에 noise가 포함될 경우, 분류 정확도가 전체적으로 많이 낮아졌음을 알 수 있다.

잠정적인 결론

지금까지, 다양한 소리가 녹음된 데이터들의 집합 내에서 우리가 탐지대상으로 선정한 소리가 들어있는 데이터를 찾아내는 모듈을 CNN을 활용하여 구현하고 테스트해 보았다. 비교적 간단한 구조의 CNN을 적용했음에도 불구하고, 테스트 결과는 추가적으로 진행할 연구 결과에 대해 희망을 품게 하였다. 또한 실제 상황에서 나타날 수 있는 noise가 우리가 만든 모듈의 정확도를 떨어뜨린다는 사실도 확인하였다. 실제 환경에서는 다양한 소리가 동시에 나타날 것이므로, noise에 강인한 모듈을 구현해야 할 필요성을 확인한 셈이다.

Future works

추가적인 실험은 다양한 방향으로 진행될 수 있다. 가장 기본적으로는, 사운드 데이터에서 더 많은 특성 정보를 추출하여 활용해 보는 것이다. 또한 다양한 형태의 CNN을 구현하여 활용해 볼 수 있을 것이다. 더 나아가, 데이터에 noise가 포함되어 있어도 제 성능을 발휘할 수 있는 고유의 발전된 모델을 구현, 적용해 볼 필요가 있다. 추가적인 모델 및 실험 결과에 대해서는 다음 편에서부터 차차 소개하도록 한다.

데이터 출처

  • [1] Eduardo Fonseca, Manoj Plakal, Frederic Font, Daniel P. W. Ellis, Xavier Favory, Jordi Pons, Xavier Serra. General-purpose Tagging of Freesound Audio with AudioSet Labels: Task Description, Dataset, and Baseline. In Proceedings of DCASE2018 Workshop, 2018. URL: https://arxiv.org/abs/1807.09902
  • [2] Eduardo Fonseca, Jordi Pons, Xavier Favory, Frederic Font, Dmitry Bogdanov, Andrés Ferraro, Sergio Oramas, Alastair Porter, and Xavier Serra. Freesound datasets: a platform for the creation of open audio datasets. In Proceedings of the 18th International Society for Music Information Retrieval Conference (ISMIR 2017), pp 486-493. Suzhou, China, 2017.
  • [3] http://www.orangefreesounds.com/background-noise-sound-pack/
  • [4] http://www.orangefreesounds.com/
  • [5] https://freesound.org/help/faq/#licenses