Sonus
오케스트라 음원에서 악기 식별 및 추출
2024.09 - 2024.12
AI Engineer
2 AI Engineer
2024.09 - 2024.12
Overview
2024-02에 수강했던 인공지능 과목이 프로젝트 형식이라서 주제를 정해야 했다. 바닥난 나의 창의력으로는 누구나 할 법한 주제밖에 떠오르지 않았는데, 팀원이 ‘오케스트라에서 음원 추출해보는 건 어때?’라는 제의에 그대로 넘어가 주제로 발탁했다. 뭘 도전하는 걸 좋아하기도 하고, 아무도 안할 것 같기도 하고.. 재밌어보였다.
어떤 프로젝트지?

프로젝트 진행 당시 사용했던 노션. 부활시키고자 했던 흔적이..
정확한 목표는 ‘오케스트라 음원에서 개별 악기 식별 및 추출을 위한 인공지능 모델 개발’이다. 가능하다면 음원 분리/추출까지 하고자 했지만 한 학기만에 끝내야 하고, 이 프로젝트에만 매몰될 수는 없었기에 아무래도 추출까지는 Future Works로 잡았었다. 허나 김윤태 팀원이 어느 정도 완성시켜서 더 큰 점수를 받을 수 있지 않았나 싶다.
Reference
음원에 대한 논문은 꽤 있었고, 그 중에서도 본인이 맡은 식별 파트는 서울시립대학교의 논문을 참고했고, 분리/추출까지 맡은 파트는 퀸 마리 대학교의 논문을 참고했다.
구현 단계
Feature-Based?
아무래도 3학년 때 진행했던 프로젝트였기에, 일단 논문의 논리를 그대로 따라 구현해보는 것 부터 시작했다. 부족한 실력으로 알음알음 알아가며 구현하다 보니, 나름 결과가 나쁘지 않게 나왔고 전처리 방식이 달랐는지는 모르겠지만 오히려 더 성과가 좋았던 부분도 있었다.

그래서 식별 파트에서는 이걸 어떻게 고도화시킬까? 하다가, 당시 On-Device가 유행했던 것과 교수님께서 요즘 트렌드는 무작정 정확도가 높고 무거운 모델보다는, 나름 괜찮은 정확도를 가지면서도 가벼운 모델이 트렌드라고 하셨기에 경량화 부분을 더 중점적으로 보았다.

대표적인 경량화 기법으로는 Pruning과 Quantization이 있다. 두 방법 모두 모델의 계산량을 줄이고 배포 효율을 높이기 위한 접근이지만, 그 작동 원리와 실제 효과는 다르다. Pruning은 중요도가 낮은 가중치나 뉴런을 제거하여 네트워크를 희소화하는 방식이다. 이론적으로는 파라미터 수가 줄어들지만, 실제 연산 구조가 그대로라면 속도 개선이 크지 않다는 한계가 있다. 특히 GPU나 CPU에서는 희소 행렬 연산이 효율적으로 지원되지 않기 때문에, 메모리 접근 패턴이 불규칙해지고 오히려 처리 속도가 저하되기도 한다.
반면 Quantization은 모델의 가중치나 활성값을 부동소수점(FP32) 대신 정수(INT8, INT4 등)로 근사하여 연산 단위 자체를 가볍게 만든다. 이는 연산량과 메모리 대역폭을 동시에 줄이며, 대부분의 하드웨어에서 정수 연산을 직접 가속할 수 있기 때문에 실제 추론 속도 향상으로 이어진다. 또한 최근에는 학습 단계에서 양자화를 고려하는 QAT(Quantization-Aware Training) 기법이 발전하면서 정확도 손실도 최소화되고 있다. 이런 이유로, 실제 서비스나 온디바이스 환경에서는 Pruning보다 Quantization이 더 현실적이고 실효적인 경량화 방법으로 평가된다.
해서 이 프로젝트에도 Quantization를 적용했다. 이 모델은 CNN 아키텍처를 사용했기 때문에, 기본적인 Post-Training Quantization을 사용했다. (CNN이나 Transformer같이 정규화된 구조에서는 성능 저하가 덜하다 한다.) 그랬더니 유의미하게 모델의 크기가 1/12까지 줄어들며 F1-Score가 최대 0.095밖에 떨이지지 않아 유의미한 성과를 냈다.

Note-Based?

그 다음은 악보 기반으로 음원이 들어오면 악기마다의 음표를 추측/추출하여 음원을 분리/추출하는 작업을 수행했는데, 이것도 유의미한 성과를 냈다. 허나 Feature-Based의 코드는 교수님께 오류 없는 검증을 받았지만 해당 코드는 검증을 받지 못해 너무 정확도가 좋아서 살짝 의심스럽긴 하다. 물론 추출 자체가 잘 수행되어 오류는 없는 듯 싶으나, Feature-Based와 달리 음원에 대한 전처리된 데이터가 필요하기에 이걸 자동으로 생성해주는 것을 Future Works로 잡았다.
개선할 점?

사실 작년에 진행했던 프로젝트고, 기말에 발표했었을 당시 교수님께 큰 칭찬을 받아서 더 개선/진화시켜보고자 새로운 팀원을 영입하고 제대로 해보려고 했는데 셋 모두 대학원 지망이기도 하고 너무 바빠져서 지금은 흐지부지되었다. 다시 부활시키고 싶긴 한데,, 조금 아쉬운 점이다.