Wednesday, June 14, 2017

음성/음악신호+머신러닝 초심자를 위한 가이드 [4편]

음성/음악신호+머신러닝 초심자를 위한 가이드 전체 게시물은 여기를 클릭하세요.

데이터 수집

이번엔 데이터 수집을 주제로 글을 쓰겠습니다.

기존 데이터셋 사용

음악 데이터 셋은 http://www.audiocontentanalysis.org/data-sets/ 여기에 잘 정리되어있습니다.
오디오 관련 데이터셋은 좀 더 중구난방인데, 
- Urbansound8K by Justin Salamon
- AudioSet by Google, 2017 (유튜브 주소만 제공하고 직접 크롤링해야함. 어떻게? Fuel, YouTube-dl)
- DCASE audio detection by Queen Mary University of London
- Bird Audio Detection by Queen Mary University of London

이 정도가 생각나네요.

데이터 수집

살다보면 힘들고 험한 길을 가야할 때가 있죠.
freesound에서 직접 크롤링해서 뭔가 할 수 있지 않을까? 하는 희망을 한번쯤은 품어볼 필요가 있습니다.
아래 코드를 참고하세요. 주소는 여기





데이터 정리

데이터를 모으는게 다가 아니죠. 일단, 키워드로 검색을 했으니 특정 소리가 들어있는 음악 파일을 잔뜩 받았다고 해봅시다. 뭘 해야할까요?


  • Normalisation
import numpy as np
import librosa

x = librosa.core('event1.mp3', sr=None, mono=True)
x = x / np.max(np.abs(x))

  • Trimming
앞뒤에 조용한 구간이 있다면 싹둑 잘라주는편이 좋겠죠. 이건 어느정도 대애충 감으로 하는게 편할것같네요. 저라면, hann window같은걸 씌우고, 각 윈도에서 평균 에너지를 구해서 (np.mean(np.abs(windowed_source_x) ** 2)), 그 윈도 별 평균 에너지를 기준으로,아무런 음향 이벤트가 안일어나는 첫 N개의 윈도와 마지막 M개의 윈도를 날리겠습니다.

  • Augmentation
데이터가 부족하면 뻥튀기를 하고싶겠죠? 방법은 여러가지가 있습니다. 적당한 구간에서 pitch shift / time expanding을 하시면 무난할테고, 다른 잡음을 적당히 섞어주는것도 좋겠죠 (x = x + gain * noise). 이 정도만 해도 벌써 10배이상 데이터가 늘어날 것 같네요. 


  • 주의사항
음원이 매우 길다거나해서 여러 개의 학습 데이터 샘플로 쪼개서 쓰는 경우에, 같은 음원에서 나온 샘플 여러개가 training/validation/test 셋에서 섞이지 않도록 주의합시다.


이상입니다.

Monday, June 5, 2017

WWDC 2017 - Apple Music, MusicKit API

Apple Music 관련 몇 가지 뉴스가 나왔네요.
  • 애플 뮤직이 런칭한게 약 2년 전입니다. 2015년 6월 30일에 서비스를 시작했군요. 1년 반이 2016년 12월에 유료 구독이 2천만명을 넘었다고 기사가 나왔었고 오늘은 2천 7백만명이 넘었다고 발표했습니다. 업계 1위인 Spotify가 5천만명을 발표했죠. 둘 다 여전히 성장을 하고 있습니다. 
    • 참고로 Spotify는 아직까지 적자 기업이지만 음악 비즈니스 전체의 파이가 커지고 있는 것 등을 감안하면 미래가 그렇게 어둡지는 않아보입니다. 
    • 역시 사견입니다. Spotify는 광고 기반 무료 감상때문에 적자인건데, 이게 음악 시장 전체를 악화시킨다고 생각합니다.
  • MusicKit 이라는 새 API를 발표했군요. iOS 11의 신기능입니다. 이걸 쓰면 애플 뮤직 유저의 각종 정보 - 라이브러리, 개인화 추천 등에 접근이 가능하다고 하네요. 애플 뮤직은 안드로이드에서도 있으니 안드로이드용 API도 나오면 좋을텐데 딱히 언급은 없었습니다.
  • 역시 Spotify포함 기존 서비스에 많이 있는거죠. 소셜 기능을 추가했네요. '친구' 맺은 사람이 뭐 듣는지 나오고 그런거라고 하네요. 자세한 언급은 없었지만 연락처에 있는 목록 / 페북 친구 등등으로 연계해서 나올거같습니다.

국내 스트리밍 서비스도 재미있는 API를 많이 열면 좋겠습니다만, 경제적인 유인이 적으니까 안하는것이겠죠. 연구자, 종사자 및 음악을 좋아하는 사람으로서 매우 아쉬운 면입니다.

Friday, June 2, 2017

블로그를 하십시오.

독자가 컴공 대학원생이라고 가정하고 글을 쓰겠습니다. 아닌분들이 더 많겠죠? 본인의 상황에 맞는 조언인지 생각해보면서 읽으시면 되겠습니다.

블로그를 운영하면 생각보다 많은 사람들이 와서 봅니다.
그리고 연구는, 더군다나 취직은, '장사'의 속성을 지니고 있습니다.
아시다시피 그리고 컴공 분야 종사자들은 컴퓨터를 엄청 오래 합니다.

블로그에 논문을 설명해놓으면, 더 많은 사람들이 효율적으로 당신의 연구를 이해하게 됩니다. 그럼 더 많이 읽고 더 많이 인용하겠죠.
블로그의 좋은 글을 보면서 당신이 누군지 알게되고, 당신의 연구와 논문에 관심을 갖고 더 신뢰하게 됩니다.
블로그를 보면 독자는 당신의 연구 분야와 능력을 알게 되고, 더 낮은 기회비용으로 당신을 고용하려고 하겠죠.

모두 실제로 제게 일어난 일입니다. 저는 국문 블로그(여기), 영문 블로그, 깃헙 저장소 등으로 열심히 '영업'을 합니다. 지금보다 훨씬 영업할 껀덕지가 없을때부터 그랬습니다. 이건 제가 박사과정 시작하고 갔던 첫 번째 학회에서 (현재 DeepMind에서 일하는, AlphaGo와 Wavenet 논문의 저자) Sander Dieleman이 조언해준 덕분입니다. Sander도 Spotify x Convnet 게시물이 엄청난 인기를 끌어서 유명해졌고 그 결과로 딥마인드에서 면접 오퍼를 받았습니다. 저는 그런 스타급 연구자가 아니지만 현재 일하고있는 스타트업(버즈뮤직)에서도 제 블로그를 보고 연락을 줬고, 자문역으로 일하기 시작한 제이마플도 마찬가지입니다. 멜론에서도 연락이 왔었군요. 제가 런던에 있으니 더 용이한 것도 있겠지만 Mixcloud나 Kantar Media에서도 비슷한 연락을 받았습니다.

아마 제가 블로그/깃헙을 안했다면 아무 일도 일어나지 않았을 것입니다. 여러분, 블로그를 하세요. 엄청난 도움이 됩니다. 남들도 하루종일 웹서핑 하거든요.