개요
학교에서 프로젝트로 주제 선정을 음악과 관련하여 진행하고자 결정하고 2 개월이나 지났다. 슬슬 마무리 보고서 및 발표를 준비하는 겸 정리하기 위해 글을 작성한다.
목표로 했던 기능은 사용자 음색기반 노래추천, 사용자 음역대기반 노래 추천이었고, 애플리케이션 개발에는 성공했으나 목표로 하였던 기능 중 음색기반 노래추천은 실패하였다.
데이터 문제
가장 큰 원인은 역시 데이터였다고 생각한다.
음악 데이터를 mp3로 소지하고 있어야 해당 음악에서 특징을 뽑아낼 수 있었던 우리는 여기저기 데이터를 찾아봤지만 mp3 자체를 제공하는 데이터는 확인하지 못하였다.
결론적으로 python으로 youtube 링크 입력시 mp3 파일을 다운받는 라이브러리를 사용하였고, 3분짜리 노래 기준 10초 이내로 다운이 가능했다.
사용했던 라이브러리는 yt_dlp로 해당 youtbe 영상에 대한 여러 정보를 가져올 수 있는 유용한 툴이었지만 딱 하나의 문제가 있었으니..
바로 대기업이라면 갖춰야할 보안 대책..? 이었다
데이터 수집간의 문제 IP block
초기 데이터 수집은 나의 윈도우 데스크탑으로 진행되었다. 대부분의 개인 pc들은 따로 고정 ip를 사용하지 않기 때문에 ip가 동적으로 변화한다.( 정확히는 고정 ip를 wifi제공하는 회사인 skt나 kt에 의뢰할 수 있는데 고정 ip면 인터넷 속도가 더 빠른 것으로 알고 있다)
그래서 초기에는 yt_dlp가 문제 없다고 판단하였으나
여러 음성 처리 라이브러리들을 설치하며 윈도우로는 제약이 심하다 느껴 AWS EC2서버를 열어 ip 고정 할당 후 유튜브를 다운로드 하다보니 약 3000개의 요청이 발생하면 유튜브측에서 해당 ip에게 빈 데이터를 보냄을 알 수 있었다.
정확히는 원인을 파악할 수 없었고, ip만 변경하면 문제가 해결되는 것을 보니 해당 이유이지 않을까 하는 예측이다.
왜 윈도우로 안하고 서버에서 돌렸을까?
파이썬 음성 라이브러리는 아주 오래전 개발된 ffmpeg 기반으로 구성된다.
간단히 말하자면 윈도우는 파이썬 라이브러리 설치 이전에 ffmpeg를 다운받아야 하는것이다.
(음성처리 관련하여 어지간한 기능은 파이썬 라이브러리인 librosa에서 지원하더라)
이게 이유는 잘 모르겠지만 윈도우 10에서는 가능한데, 윈도우 11에서는 설치가 안되는 것을 볼 수 있었다. 거의 하루종일 투자해서 포기한 사항인데 나름 stackoverflow같은 사이트 다 뒤져봤으나 원인을 알 수 없어 포기하였다.
근데 분명 윈도우10에는 잘 깔았는데, 같은 방식으로 다른 노트북에 시도하면 안된다거나 하는… 실험용으로 지우고 다시 깔려고 하니 그때는 또 안되는 등… 다들 개발하는 친구들이다 보니 각자 설정해둔 내용들이 충돌을 일으키지 않았나 하는 생각이 든다.
내 컴퓨터 문제인가 해서 윈도우 레지스트리를 수정하는 방법도 시도했는데 그 결과 데스크톱이 이상해진 상태지만 게임은 잘되니 롤은 즐기는중 ㅎ
아무튼 위와 같은 문제로
EC2 ubuntu20.04 에서 돌렸고, 어 말하다 보니까 생각났는데 virtualbox로 로컬로 os 열어서 거기다가 돌렸으면 되는거 아냐? 나 바본가 라는 생각이 든다. 이따 해봐야지
아무튼 x 2 노래 다운과 이를 처리하는 과정이 굉장히 오래걸렸었기에 데이터 수집에 굉장히 오랜 시간과 노력이 들어갔다.
그렇게 얻은 mp3파일 → spleeter 모델 사용(보컬과 배경음을 분리해주는 pretrained model) → 보컬 데이터 기반 mfcc 특징벡터 추출 → 최대 db 기반 공백제거 → 음성 외의 hz 제거 → 최종 처리 후 mfcc 특징벡터 추출
의 순서로 시도해보고, 추출한 mfcc값을 기준으로 군집화를 시도해서 이게 뭐지라는 결과를 얻었다. (군집화는 정확도라던가 결과값을 정확히 얻기가 어렵긴함)
예를 들자면 장범준씨의 데이터가 여러개 있기에 군집화시 장범준씨 노래끼리 모여야하는데 그렇지 않았던 것.
그래서 시각화를 해봤는데 대충 아래 이미지 느낌이었다.(걍 한 덩어리로 생겼지 분류가 하나도 안되었었음)
음색분석의 결론
사실 음색 분류 모델링에 굉장히 아쉬운 점이라면 mfcc값만 사용했다는 것이다.
mfcc란 음성 데이터를 사람의 청각 구조를 반영하여 음성 정보를 추출하는 것으로 피처가 되는 값을 우리가 알 순 없지만 음성 데이터의 특징을 뽑아내는 것이다.
음악 데이터를 한번 다운받고 원하는 값을 처리함에 있어 오랜 시간이 걸리기 때문에 초기 설계시에 다운받은 음원 기준으로 여러 값들을 한번에 뽑았어야 했는데, mfcc만 뽑아보고 모델이 망하니 다시 시도하기가 굉장히 꺼려졌었다.
또한 우리는 모델과 주파수 및 공백을 직접 처리하는 방식으로 보컬 음성만 뽑아보려 시도했지만 해당 과정에서 많은 노이즈, 데이터 퀄리티 저하 등 사람이 듣기에는 어 이거 장범준씨 목소리 같은 것 같기도 한데? 하는 정도로는 들리지만 결론적으로 데이터가 훼손되었던 것이 문제의 원인 중 하나일 것이라고 결론을 내렸다.
충분히 분석한 후에 데이터를 수집하여야 했다는 아쉬움을 느끼는 프로젝트였다.
그럼에도 프로젝트에 AI 모델 하나는 포함하고 싶다는 생각에 원본 음악만 다운받아 아래 값들을 추출하여 음악의 분류라도 시도해보자는 모델링을 진행중이다.
mfcc : 음악 특징벡터
Tempo(BPM): 음악의 리듬을 나타내는 특징으로, 음악의 속도와 박자를 나타냅니다. Tempo 정보는 음악의 형태와 장르를 결정하는 데 중요한 역할을 합니다. Zero Crossing Rate: 음파의 주기성을 나타내는 특징으로, 음악의 에너지와 텍스처를 특징화할 수 있습니다. Harmonic and Percussive Components: 음악에서 화음과 박자를 분리하는 과정으로, 음악의 구조를 파악하는 데 도움이 됩니다. Spectral Centroid: 주파수 스펙트럼의 중심을 나타내는 특징으로, 음악의 음색과 밝기를 특징화할 수 있습니다. Spectral Rolloff: 주파수 스펙트럼의 상위 일정 비율의 에너지를 나타내는 특징으로, 음악의 음색과 에너지 분포를 나타낼 수 있습니다. Chroma Frequencies: 음악에서 음계의 상대적인 높낮이를 나타내는 특징으로, 음악의 음색과 음악적 특성을 특징화할 수 있습니다.
결론 : 망했다 망했숴
음색, 음역대 기반 추천 처음 아이디어를 듣고 군침을 흘렸었지만… 세상에 이런 앱이 없는데는 이유가 있던 것이랄까
결론적으로는 깨끗한 데이터가 있다면( 노래에 대해 배경음과, 보컬로 나뉘어진 깨끗한 데이터) 실현 가능한 프로젝트였다는 생각은 들지만 그걸 어디서 가져오나 싶긴하다.
하다못해 가수별로 노래 데이터를 쭉 가지고만 있어도, 음색을 뽑아내는 관련 논문이 있던데 그걸 구현해볼 수 있었다면 하는 생각도 든다.
세상은 데이터가 지배할거야…
뭘 만들려 해도 항상 데이터가 문제야…
나도 데이터에 손을 담궈야 하나 하는 생각이 드는 프로젝트였다.
'회고록' 카테고리의 다른 글
Neurosense 8개월간 회고록 (2) | 2024.09.06 |
---|---|
Neurosense 인턴 회고록 (3) | 2024.03.08 |
StandUpSeoul 프로젝트 (1) | 2023.07.04 |
국비지원 Playdata Encore후기 (0) | 2023.07.03 |
Django와 Spotify로 노래 추천 웹 개발 - 2 (0) | 2023.07.03 |