내가 딥러닝을 제대로 이해하기 시작한게 사실상 올해부터였다. 인공지능을 공부했던건 작년부터였지만 그때는 머신러닝을 이해하는 것도 벅찼고 CNN은 더 벅찼으면 RNN은 사실상 포기였다. 하지만 취업이 바로 안되고(ㅠㅠ) 할 것도 없기에 애매하게 아는 것보단 완벽하게 이해하는게 낫겠다 싶어서 국비 지원으로 인공지능을 다시 배웠다. 6개월 과정에서 나는 SQL, LINUX, HADOOP, R 등 엄청 다양한걸 많이 배웠는데 다 이게 피가되고 살이 되지 않겠나 싶다.

 

암튼 이렇게 구구절절하게 글을 쓰는 이유는 최종 팀프로젝트가 RNN 기반이기 때문이다. 이번에는 책까지 구매해가며 먼저 책을 읽고 수업을 듣고 스터디까지 해서 CNN은 잘 이해했는데 RNN은 그래도 너무 어려운기라! 근데 2번이나 각잡고 배웠는데ㅠㅠ; 이걸 또 포기하기엔 내 자존심이 용납이 안되서 그냥 팀원들한테 욕심으로 RNN과 관련된 프로젝트를 하자고 했고, 다들 OK 해준 덕분에 이 프로젝트를 진행할 수 있었다.

 

나는 일단 일을 벌려야 한다. 욕심이 있으니까 벌려놓으면 그걸 잘하려고 열심히 하기 때문이다. 결과적으로 RNN과 관련된 프로젝트로 일을 벌린건 잘한 일이었다. 사실 지금도 정확히 RNN을 이해했다고 볼 수는 없겠지만 이 프로젝트를 하겠다고 RNN을 다시 공부하고 또 블로그에 글을 정리해가고 팀원들에게 설명을 해주면서 대충 그 흐름은 파악한 것 같다. 그리고 무엇보다 팀프로젝트 결과가 좋다. 넘 행복하다!!!!

 

 

 

 


 

 

 

 

사실 아이디어의 시작은 아주 간단했었다. 거창한 이유로 TTS를 하고 싶었던건 아니고, 매일 9시부터 6시까지 학원에 나가 공부를 했었는데 코로나가 심각해지면서 비대면 수업으로 전환되면서 ZOOM으로 수업을 하게 됬는데 선생님 목소리 데이터가 너무 깨끗한거다! 정말 음질이 너무너무 깨끗했다. 그리고 개인적으로 선생님 목소리도 좋으셔서 음~ 이거 뭔가 데이터가 쓸만할 것 같은걸...? 이라는 생각이 들었었다.

 

그러다 팀 아이디어 회의에서 RNN과 관련된 프로젝트를 하고 싶다는 내 말에 다들 하나 둘씩 아이디어를 냈는데, 선생님의 목소리로 TTS를 만들어보자는 의견이 나왔다. 처음엔 다들 간단하다고 생각했지만 이걸 구현할 수 있는가는 다른 얘기인건 수많은 공대생들은 다 뼈저린 경험으로 알고 있을 것이다. 나는 그 공대생 중에 하나였고, 이걸 과연 우리 수준에서 구현할 수 있는지에 대해 찾아보기 시작했다.

 

그러다 이 동영상을 보게 되었다.

딥러닝을 이용한 아이유 음성 TTS PoC

 

그리고 더보기에 올라온 블로그를 참고하기 시작했다. 이 분은 심지어 라디오 데이터를 사용했는데도 이렇게 잘 나왔는데, 나라고 안될건 없었다. 심지어 데이터 양도 그렇게 많지 않았음에도 충분히 좋은 결과가 나왔었다.

이건.. 이건 할만하다...!!!

 

그렇게 이 프로젝트에서 가장 소중하고 감사한 carpedm20님깃허브를 참고할 수 있게 되었다. 사실 나는 그 전까지만 해도 깃허브를 알기만 했지 도대체 어떻게 쓸 수 있는지를 이해하지 못했는데 이 프로젝트 덕에 깃허브까지 이해를 했다. ㅠㅠ 정말 소중한 프로젝트인걸...?

 

그래서 열심히 전처리하고 데이터 수집하고,,, 했다. 데이터는 준비 됐다. 양질의 4+시간의 데이터를 수집했고 그 과정에서 아주 간단한 파이썬 코드도 구현했다. 엄청 간단하지만 나름 코드 짠 내가 자랑스러웠다ㅋㅋㅋㅋㅋㅋㅋ 그래서 이제 깃허브를 참고해서 학습하기만 하면 됐다! 그랬다!!!!!! 근데 이게 진~짜 오류가 엄청 났다... 엄청난 양의... 모듈들을 다운 받아야했지만... 그게 왜이렇게 오류들이 나는지.. 솔직히 나는 그 빨간 글자들을 보면서 하기 싫었는데 다행히 팀원분 중에 한 분이 엄청엄청 열심히 오류 수정하면서 환경 구성을 해주셔서 아주 잘~! GPU 환경에서 잘 돌아갈 수 있게 되었다.

 

우리가 사용한 CUDA version은 8.0이고 cudnn은 6.0을 사용하였다.

 

암튼 이 주저리 Preview 글에서는 내가 활용했던.. 너무 간단해서 창피하기까지한 파이썬 코드를 같이 첨부하도록 하겠다.

 

전처리과정.ipynb
0.01MB

 

이 코드는 정말 간단하게 총 데이터양이 몇시간인지를 판단해주는 함수 하나랑 csv 파일을 json으로 바꿔주기 위한 전처리 코드들이랑 무음 기준으로 알아서 효과적으로 긴 시간의 음성 데이터를 라벨링하기 쉽게 짤라주는 코드 하나가 있다.

 

손석희 데이터처럼 구글 API를 사용하고 싶었는데, 선생님은 대본 없이 그냥 말하시다보니 구글 API의 불안정함을 잡아줄 수 있는 부분이 없어서 이건 안타깝게도 그냥 다 사람이 했다... 원래 사람이 최고다... 사람은... 갈린만큼 좋은 결과물을 내놓지...

 

그리고 프로젝트 이름이 DJ You인 이유는, 음성 합성에 사용했던 선생님의 성이 유씨인것도 있지만 사람의 음성만 있으면 그 사람의 특징을 살려내면서 음성합성이 가능한 모델이기 때문에 선생님(Yu)은 물론, 당신(You)도 DJ가 될 수 있다는 의미에서 DJ You로 만들었다.

 

암튼! 그렇다는 이야기다. 지금까지의 얘기가 이 프로젝트를 하게 된 이유, 전처리에 대한 주저리 정도라면 앞으로는 실제 사용한 모델인 Multi Speaker Tacotron에 대해 설명하도록 하겠다.

 

 

+ Recent posts