관리 메뉴

솜씨좋은장씨

한국인공지능아카데미 인공지능 실용교육 오디오처리편 후기! 본문

일상/교육

한국인공지능아카데미 인공지능 실용교육 오디오처리편 후기!

솜씨좋은장씨 2020. 2. 21. 23:51
728x90
반응형

지난 한국인공지능 아카데미 실용교육 BERT 편을 마치고

격주에 음성관련 교육을 진행한다고 하여 꼭 신청해서 들어야겠다는 생각을 하던 차에

블로그에 남겨둔 BERT편 후기와 음성파일을 Python을 활용해서 변환하고 tacotron을 활용하여 음성 합성을 해보았던 글들을 보시고

강의도 듣고 멘토활동도 할 수 있게 좋은 기회를 주셔서 일주일 동안 정말 의미있는 시간을 보낼 수 있었습니다.

 

일주일동안 진행되는 이 교육은

오디오를 MFCC형태로 변환하고 그것을 딥러닝을 활용하여 분류해보는 과정으로 진행이 되었습니다.

 

BERT때는 1~2일차까지 강사님께서 수업을 진행하시고 나머지 기간에는 팀을 구성하여 팀원들끼리 프로젝트를 진행하는 방식으로 했지만

이번 강의는 워낙 어려운 주제이다 보니 강사님께서 직접 처음부터 끝까지 계시면서 진행해주셨습니다.

 

강의는 박성관 강사님께서 진행해주셨습니다.

 

교육 1일차

오랜만에 많은 눈이 내렸던 첫날!

오늘도 역시 서울 창업허브 9층 세미나실에서 교육이 진행되었습니다.

걱정 반 설렘 반으로 9층으로 이동하였습니다.

 

강사님과 인사를 나누고 첫날 강의가 시작되었습니다.

 

첫날의 강의 내용은

우리가 흔히 알고 있는 음성인식과 개발자들이 생각하는 음성인식은 어떻게 다른지

음성인식을 활용한 사례로 강사님께서 직접 ETRI의 음성인식 API를 활용하여 만들었던 안드로이드 어플리케이션을 소개해주시고

음성인식의 기본이 되는 HTK Toolkit은 어떤 것인지 간단하게 소개와 시연을 통해 보여준 뒤

음성을 MFCC로 바꾸는 과정에 대해서 빠르게 한번 설명해주셨습니다.

 

이해가 어려운 내용들이 중간중간 있었지만 정말 내용 하나하나 질문에 대한 답변 하나하나에 세부적으로 설명해주시고 좋았습니다.

 

교육 2일차

2일차에는 지난 시간에 배운

Pre-Emphasis -> Framing -> Window -> Fourier-Transform and Power Spectrum

-> Mel Filter Bank -> Mel-frequency Cepstral Coefficients (MFCCs)

MFCC를 만드는 과정에 대해서 이론 내용을 빠르게 복습했습니다.

그리고 개개인이 직접 파이썬 코드를 통해 코딩을 해보면서 고민해볼 수 있는 시간을 주셨습니다.

 

MFCC(Mel-Frequency Cepstral Coefficient) 이해하기

이 글은 음성/음악 등 오디오 신호 처리 분야에서 널리 쓰이는 특징값(Feature) 중 하나인 MFCC(Mel-Frequency Cepstral Coefficient)에 대해 정리한 글입니다. 알고리즘 구현보다는 MFCC의 전반적인 이해와 실제..

brightwon.tistory.com

 

Speech Processing for Machine Learning: Filter banks, Mel-Frequency Cepstral Coefficients (MFCCs) and What’s In-Between

Understanding and computing filter banks and MFCCs and a discussion on why are filter banks becoming increasingly popular.

haythamfayek.com

저도 이 부분은 처음 해보는 것이라 구글링을 통해 위의 글들을 보면서 공부하고 실습을 해보았습니다.

 

mfcc실습day2.ipynb

Colaboratory notebook

drive.google.com

마지막으로 강사님의 코드에 대한 설명으로 2일차를 마쳤습니다.

 

교육 3일차

교육 3일차에는 UrbanSound8K라는 데이터셋을 활용하여 오디오를 분류해보는 실습을 해보았습니다.

 

UrbanSound8K

This dataset contains 8732 labeled sound excerpts (<=4s) of urban sounds from 10 classes: air_conditioner, car_horn, children_playing, dog_bark, drilling, enginge_idling, gun_shot, jackhammer,...

urbansounddataset.weebly.com

이 데이터 셋은 도시에서 들을 수 있는 소음 데이터를 각각의 소음에 대한 라벨을 붙여 제공하는 데이터 셋입니다.

 

각각의 라벨은 다음과 같습니다.

 

0 = air_conditioner
1 = car_horn
2 = children_playing
3 = dog_bark
4 = drilling
5 = engine_idling
6 = gun_shot
7 = jackhammer
8 = siren
9 = street_music

 

총 10개의 종류로 구성되어있는 이 데이터셋을 가지고 각자 분류를 하는 코드를 구성해보는 시간을 가졌습니다.

강사님께서는 각각의 데이터에서 3.5초까지의 데이터만 잘라서 들어볼 수 있는 방법을 알려주셨고

그 다음부터는 각자 2일차까지 공부했던 내용을 바탕으로

개개인이 어떻게 오디오 파일을 전처리해서 분류모델에 넣고 학습시켜 분류를 해볼지 고민해보는 시간을 가졌습니다.

 

전 모든 파일을 MFCC로 변환하여 그 변환된 데이터를 가지고 LSTM이나 CNN 모델을 활용하여 분류를 해보아야겠다라고

생각했고 오디오 파일을 MFCC로 변환하는 과정을 실행하였는데

약 4시간의 시간이 걸렸지만 어디선가 잘못 구했는지 약 30%의 정확도를 보였습니다.

 

마지막으로 xeno-canto홈페이지에서 새소리 오디오 파일을 쉽게 크롤링을 통해 다운로드 받을 수 있게 코드를 제공해주고

각자 개인의 구글드라이브 또는 컴퓨터에 다운로드를 받아오는 것을 과제로 내주셨습니다.

 

고민하면서는 아래의 링크를 참조해보았습니다.

 

Sound Classification using Deep Learning

I recently completed Udacity’s Machine Learning Engineer Nanodegree Capstone Project, titled “Classifying Urban Sounds using Deep…

medium.com

 

교육 4일차

4일차에는 3일차에 개개인에게 고민해보라고 했던 UrbanSound8K 오디오 데이터 분류의 강사님 답안을 공개해주셨습니다.

강사님은 mfcc까지 변환하는 

Pre-Emphasis -> Framing -> Window -> Fourier-Transform and Power Spectrum

-> Mel Filter Bank -> Mel-frequency Cepstral Coefficients (MFCCs) 과정에서

Fourier-Transform까지 변환한 데이터를 가지고 분류 모델에 넣어 학습시켜 분류를 하셨습니다.

이렇게 하니 mfcc까지 변환하려고 기다렸던 시간보다 훨씬 빠르게 데이터 전처리가 가능했습니다.

 

Fourier-Transform까지 진행하면 본인이 하려는 목적에 따라서 이 단계까지 가공한 데이터를 사용해도 되고

그이후의 단계인 MFCC까지 변환해서 사용해도 된다고 하였습니다.

 

이렇게 변환한 데이터를 가지고 LSTM 모델을 활용해 학습하고 테스트 데이터로 평가해보니

72.73%의 정확도를 볼 수 있었습니다.

 

강사님은 여기서 끝나지 않고 framing 하고 window를 적용할때 겹치지 않게 설정하면 어떻게 나오는지도 확인해보라고 하여

해보니 30%대의 정확도를 확인할 수 있었습니다.

 

남은 시간에는 다운받아온 xeno-canto 데이터셋을 가지고 분류를 해보는 시간을 가졌습니다.

 

xeno-canto :: Sharing bird sounds from around the world

Pair of Secretarybirds courting. © Niall Perrins What is xeno-canto? xeno-canto is a website dedicated to sharing bird sounds from all over the world. Whether you are a research scientist, a birder, or simply curious about a sound that you heard out your k

www.xeno-canto.org

앞서 UrbanSound8K의 데이터는 어느정도 학습데이터로 만들기 편하게 한번 처리가 된 데이터였지만

이 xeno-canto 데이터 셋은 조류학자들이 그들이 그저 그들의 연구목적으로만 녹음한 데이터이기 때문에

1초짜리 파일부터 1시간이 넘는 파일까지 다양한 파일들이 존재한다고 했습니다.

 

이번에도 각자 이 데이터를 가지고 어떻게 학습에 사용할 데이터로 만들고 학습시킬 지 고민하는 시간을 가져보고 4일차를 마무리 했습니다.

 

교육 5일차

마지막날인 5일차는 4일차에 고민했던 방법을 직접 실습해보고 각자 시도해보았던 방법을 발표하는 시간을 가졌습니다.

 

저는 먼저 모든 데이터의 길이가 다 다르다는 것을 생각해보고 

 

각 데이터에서 30초 이상의 길이를 가진 데이터만 뽑고

 

그 데이터들에서 30초의 데이터만 활용해 mfcc를 만들어 그 데이터를 가지고 분류 작업을 해보아야겠다 생각했습니다.

 

여기서 30초의 데이터만 활용해 mfcc를 만드는 과정만 약 4시간의 시간이 소요되었습니다.

 

기다리는 와중에 강사님께서 librosa 라이브러리를 통해 좀 더 쉽게 구현한 강사님 방식의 코드를 공개해주셨고

 

한의사 분께서 하고싶으시던 본인 데이터를 가진 음성 파일 분류를 같이 해보았습니다.

 

Flac, mp3, wav, m4a 와 같이 다양한 포맷의 데이터 였지만 librosa 라이브러리가 load 시 잘 커버해주어 문제 없이 해결할 수 있었습니다.

 

같이 완성하고 감사해하시는 모습에 뿌듯했습니다.

 

타코트론때도 데이터를 가공하는데 한참 걸렸던 것이 생각났습니다.

 

이렇게 만들어진 데이터를 LSTM모델을 활용하여 분류해보니 정확도는!

오랜 시간이 걸린 것에 비해 결과가 좋지 않아 조금 아쉬웠습니다.

 

다른 분들의 발표를 보니

attention 모델에 spectrogram과 MFCC 데이터를 가지고 학습시킨 방법이 87.2 % 의 결과가 나왔다고 하였습니다.

 

자연어처리 모델의 성능 향상을 위해서 노력했던 것처럼

시간을 가지고 한 번 나중에 여러 전처리방법과 모델을 사용해서 87.2 % 보다 좋은 결과를 내보아야겠다 생각해보았습니다.

 

교육 후기 

오디오처리라는 내용이 처음에는 그저 음성 파일의 포맷을 변경하거나 

bitrate 수정 등과 같은 작업이 다 인줄 알았는데 그것이 아니었고

음성 데이터를 머신러닝/딥러닝에 적용시키기 위해서 학습데이터를 만들때

MFCC라는 것으로 변환 후 그것을 이미지처럼 생각하고 사용을 한다는 것도 정말 신기했습니다.

초반에는 푸리에 변환, 베이지안 추론과 같은 수학적 내용들이 많이 등장해

이해에 어려움이 있었지만 강사님의 반복적인 설명으로 어느정도 이해할 수 있었습니다.

정말 세부적인 이론 내용부터 자세하게 설명해주시고

실제 데이터를 가지고 실습을 할 수 있도록 열심히 준비해주시고

모르는 내용에 대해서 질문 시에 정말 열정적으로 답변해주신 강사님 정말 감사드립니다.

 

여기서 배웠던 내용은 다시 복습하면서 블로그에 하나하나 기록해두려합니다.

 

마지막날 아침과 치킨을 준비해주시고 멘토활동의 기회를 주신 분들께도 정말 감사드립니다.

Comments