데이터분석 캡스톤디자인: 주관적 감상에 따른 음악 분류
2017110261 소프트웨어융합학과 김원경
A
주제 선택 배경
A
“음악마다 다르게 느껴지는 감상”
A
카테고리 정의, 분류
- 밤하늘과 우주 혹은 관련 사물을 떠올리게 하는 곡 =>”CELESTIAL”
- 하늘 위로 나는 것 같은, 천국을 연상케 하는 상승감, 꿈 속으로 빠지는 듯한 몽환적 느낌을 선사하는 곡 => “DREAMY”
- 철학적으로 느껴지는, 인생에 대해 새로운 통찰을 주는 것 같은, 생각 속으로 침잠해 가는 듯한, 질문을 던지는 듯한 곡 => “CONTEMPLATING”
- (주관적으로) hopeful하다 느끼는 곡 => ”HOPEFUL”
- 비장하게 앞으로 나아가는 듯한, 결의를 다지게 하고, 자아를 말하는 것 같은 곡 =>”HEROIC”
- 자연, 평화를 연상케 하는 곡 =>”PEACEFUL”
A
3. 각 곡마다 빠르기, 박자, 에너지, 음색 등 여러가지 음악적 특징을 추출하여 특징 벡터로 만듦
4. 특징 선택
5. 여러 가지 군집 분석 시행 후 결과 비교
6. 결과 평가
일의 전체 순서
A
1. 음원 파일 디코딩과 전처리
디코딩? 코덱?
” 압축된 파일을 비압축 파형 데이터 형태로 복원해야 한다” -> 어떻게 해야하지? 해야 하는 건 맞나?
Sampling Rate?
=> 초당 샘플의 비율(속도)
44.1 KHz 인 경우, 1초에 Sample 의 수가 약 44100 개가 들어있다.�값이 클수록 음질이 좋다.
bitrate?
=> 1초당 비트 전송 수. 보통 192kbps.
음원들끼리 모두 동일해야 한다. 그렇지 않으면 파형이 서로 다르게 나타나므로 따로 전처리 과정을 거쳐야 한다.
channel?
=> mono OR stereo. => 일괄적으로 mono 처리
“신호가 가지고 있는 정보를 최대한 보존하면서 전체 데이터의 크기를 최소화해야 효율적으로 연산을 할 수 있다.”
A
1. 음원 파일 디코딩과 전처리
고민 1. 디코딩이 무엇이고 왜, 어떻게 해야하는가?
오디오 디코딩? -> 압축된 파일을 비압축 파형 데이터 형태로 만드는 것. 특정 코덱으로 압축을 해제하는 과정
*코덱? -> mp3, wav 등의 파일 형식이자 인/디코딩 방식을 일컫는다
왜 해야하지? -> Mp3 형태는 라이브러리에서 지원하는 형식도 아닐 뿐더러 분석하기에 적합한 데이터 형식도 아니다.
디코딩으로 산출되어야 할 결과물은 순수 파동으로 이루어진 데이터이고, 이에 대해 고속 푸리에 변환(FFT)을 거쳐야 하는 것이다.
방법? -> 1) 소프트웨어 사용 2) MacOS 패키지 관리자 homebrew를 통해 설치한 ffmpeg 사용 3) c++ code 사용
위 방법을 통해 그냥 바로 wav로 변환하면 되는 것인가? 아님 중간에 진정한 디코딩 과정을 거친 후 나온 산출물을 따로 wav(int16), numpy array(int16/float32/etc) 등으로 변환해야 하는 것인가? -> 어디선 그냥 바로 변환하라 하고, 어디선 그렇게 하지 말라 하여 혼란
해결: 셋다 아니고 파이썬 라이브러리를 이용하고, 라이브러리 덕에 mp3에서 바로 wav로 변환
Soundfile 을 이용하려다 구간을 정수 단위로만 선택할 수 있다는 흠 때문에 친구가 알려준 pydub란 라이브러리 이용
*참고 자료
https://keunwoochoi.blogspot.com/2019/06/blog-post.html
https://it.donga.com/18897/
<음악 특징점 간의 유사도 측정을 이용한 동일 음원 인식 방법> (2008)
A
1. 음원 파일 디코딩과 전처리
고민 2. 파일을 어떤 형식, 방법으로 읽어들일 것인가?
Numpy array? float/double/int 만으로 이루어진 raw data? pysoundfile?
librosa.core.block_read? librosa.load? => 마지막 방법으로 결론(정규화된 numpy array)
고민 3. 곡 분석 전략?
A
1. 음원 파일 디코딩과 전처리
A
2. Feature Extraction
음악 7대 구성 요소: 리듬, 빠르기, 가락, 화성, 형식, 셈여림, 음색
- MFCC
- spectral centroid
- spectral roll-off
- zero-crossing rate
- Spectral contrast
Novelty Functions
-> Onset Detection
-> Fourier Tempogram
- Mel-Spectrogram
- Magnitude Scaling
- Chord Estimation
A
2. Feature Extraction
1) Tempo
(1) Onset Detection
음(note)이 갑자기 변하는 지점(sudden changes)을 onset이라 하며, Novelty Function을 이용해 추출한다.
(2) Fourier Tempogram
A tempogram is a time-tempo representation that encodes the local tempo of a music signal over time.
The Fourier Tempogram is basically the magnitude spectrogram of the novelty function.
https://s3-us-west-2.amazonaws.com/musicinformationretrieval.com/slides/mueller_beat_tracking.pdf
A
2. Feature Extraction
A
2. Feature Extraction
A
2. Feature Extraction
2) Magnitude scaling
“공간감(혹은 볼륨, 혹은 규모)”
Mel spectrogram 으로 추출한 이유? -> 이 안에 저 과정이 포함되어 있기 때문. 둘이 유관한 데이터이기 때문이다.
A
2. Feature Extraction
3) Timbral Features
(1) MFCC(Mel-Frequency Cepstral Coefficients)
주파수 중에서도 인간의 가청 범위와 연관된 채널과 가장 비슷한 10개에서 20개 정도의 채널을 뽑아내서 만든 그래프
배음 구조의 차이를 표현하는 숫자라 배음 구조를 알 수 있다. 음정의 차이를 무시하도록 디자인 된 값이다.
오디오 신호의 절대값 스펙트럼을 로그 스케일한 후 FFT bin을 그룹화해 인간의 청각 특성에 맞는 mel-frequency scale => MFCC
A
2. Feature Extraction
(2) spectral centroid
스펙트럼 중심. 소리의 밝기와 관련된 개념이라서 음색을 처리한다
A measure of spectral shape and higher centroid values correspond to “brighter” textures with high frequencies
A
2. Feature Extraction
A
2. Feature Extraction
(3) spectral roll-off
스펙트럼 형태와 낮은 주파수 영역에 신호 에너지가 얼마나 집중되어 있는지 보여줌
A
2. Feature Extraction
(4) Spectral contrast
옥타브 밴드(Octave Band) 기반의 특징. 음색(에너지)의 대비를 표현
A
3. 특징 벡터의 parameter
Mel-spectrogram
mfcc
Tempo
spectral centroid
spectral contrast
A
3. 특징 벡터의 parameter
– 본래 계획했던 카테고리는 총 6가지. 그중 2가지는 보컬 없이 백그라운드 부분만 갖고는 도저히 곡의 특징을 대표할 수 없다 판단하여 제외했고, 나머지 한 카테고리는 시간관계상 못함.
- 카테고리별 곡의 수는 원래 훨씬 더 많았다. 하지만 중간에 일반 음원에서 유튜브 inst 영상/음원을 추출한 데이터로 바꾸는 과정에서 음원에 잡음이나 불완전한 부분이 있어 분석에 차질이 생기는 음원을 모두 제외하다보니 데이터의 수가 줄었다.
A
4. Feature Selection
방법 1, ‘선택’: 가장 좋은 특징을 선택하고 나머지를 제거한다.
2) Wrapper method: 유용성을 측정한 방법. 머신 러닝 예측 알고리즘을 사용해 좋은 예측을 위한 각 특징의 공헌도를 점수화한다.
- recursive feature elimination(RFE): SVM을 사용하여 재귀적으로 제거하는 방법
외 다수
3) Embedded Method : 유용성을 측정하지만 내장 metric을 사용하는 방법. 모델의 정확도에 기여하는 피처를 학습한 뒤, 좀 더 적은 계수를 가지는 회귀식을 찾는 방향으로 제약조건을 주어 이를 제어한다.
방법 2. ‘변환’: 서로 관련 있는 특징들끼리 하나로 묶는다.
1) PCA: 새로운 특징 벡터를 파악하고, 데이터 분산을 최대화하고, 원래 데이터를 새로운 공간에 투사하여 벡터 차원 축소�각 주요 성분의 중요도 순위를 매길 때 사용하는 scikit-learn의 explained_variable 속성을 활용한다.
참고자료: https://subinium.github.io/feature-selection
https://rasbt.github.io/mlxtend/user_guide/feature_selection/SequentialFeatureSelector/
A
4. Feature Selection
A
4. Feature Selection
A
5. Clustering
방법을 선택하게 된 배경?
<대표구간의 음악 특징에 기반한 음악 장르 분류>(2008)
A
5. Clustering
클러스터링을 시행한 방법 3가지
A
5. Clustering
방법 1. K 평균 클러스터링
A
5. Clustering
3
3
3
2
4
같은 레이블 개수를 세본다. 가장 이상적인 개수는 각각 7:4:3
또한 첫번째 카테고리의 오답이 두번째로, 두번째 카테고리의 오답이 첫번째 결과로 레이블 되어있는 것이 많을수록 좀더 정확한 결과
5
2
2
4
3
1
4
worst
A
5. Clustering
방법 2. 계층 클러스터링(Agglomerative clustering)
- 계층적인 방법으로 비슷한 클러스터를 합침
A
5. Clustering
3
3
3
2
4
5
2
2
4
3
1
4
worst
같은 레이블 개수를 세본다. 가장 이상적인 개수는 각각 7:4:3
또한 첫번째 카테고리의 오답이 두번째로, 두번째 카테고리의 오답이 첫번째 결과로 레이블 되어있는 것이 많을수록 좀더 정확한 결과
A
5. 클러스터링
방법 3. 스펙트럼 클러스터링
- 클러스터를 구성하는 노드의 연결성에 기반하여 연결 그래프를 생성하고 데이터 포인트를 그룹화한다.
x
A
5. Clustering
3
1
5
3
3
3
3
5
2
worst
(K-Means, HCA
방법보다 안좋은 결과)
같은 레이블 개수를 세본다. 가장 이상적인 개수는 각각 7:4:3
또한 첫번째 카테고리의 오답이 두번째로, 두번째 카테고리의 오답이 첫번째 결과로 레이블 되어있는 것이 많을수록 좀더 정확한 결과
A
6. 군집 모델 평가
방법 1. supervised, which uses a ground truth class values for each sample.
방법 2. unsupervised, which does not and measures the ‘quality’ of the model itself.
- 비지도 방식으로 모델 자체만 이용하여 평가하는 방식
- 도메인 지식을 사용하거나, 클러스터 내의 분산과 클러스터 간의 거리(SSE;sum of the squared error)등을 고려하여 평가할 수 있음
A
6. 군집 모델 평가
방법 1. Advanced Rand Index
Rand Index는 얼마나 클러스터들이 benchmark 분류들과 유사한지 계산한다. 알고리즘에 의해 만들어진 올바르게 분류된 비율의 측정으로 보기도 한다. 1에 가까울수록 원하는 분류와 유사함을 의미
A
6. 군집 모델 평가
방법 2. Fowlkes-Mallows Score
클러스터링 알고리즘과 benchmark classifications에 의해 반환된 클러스터들 사이 유사성을 계산한다. 높은 값일수록 클러스터들과 유사도가 높음을 의미.
- 참고자료: https://gentlej90.tistory.com/64
*정밀도와 재현율
둘다 관련도(Relevance)의 측정 기준 및 지식을 토대로 하고 있으며, 정밀도는 검색된 결과들 중 관련 있는 것으로 분류된 결과물의 비율이고, 재현율은 관련 있는 것으로 분류된 항목들 중 실제 검색된 항목들의 비율 (https://ko.wikipedia.org/wiki/%EC%A0%95%EB%B0%80%EB%8F%84%EC%99%80_%EC%9E%AC%ED%98%84%EC%9C%A8)
A
6. 군집 모델 평가
방법 3. Normalized Mutual Information, Adjusted Mutual Information
참고자료:https://yjucho1.github.io/clustering/mutual-information/
A
6. 군집 모델 평가
K-means | 2차원 | RFE 7차원 | SFS 7차원 | Full(14차원) |
ARI | -0.0076473830386165126 | 0.05000230953361609 | -0.0012908896152050444 | 0.02050219701984198 |
Fowlkes-Mallows Score | 0.3757242654698549 | 0.41940316901612396 | 0.3941157446386223 | 0.4283619796887308 |
NMI | 0.02564954250508809 | 0.08571599883071765 | 0.056272859256343455 | 0.10058441140393669 |
AMI | 0.012051564721533414 | 0.07254415753892929 | 0.04272467357518572 | 0.08697173564893197 |
A
6. 군집 모델 평가
HCA | 2차원 | RFE 7차원 | SFS 7차원 | Full(14차원) |
ARI | -0.012881398249870148 | 0.05000230953361609 | -0.011975476832455659 | 0.03928102573197978 |
Fowlkes-Mallows Score | 0.4163992773456182 | 0.41940316901612396 | 0.44974607571096864 | 0.39302182366595323 |
NMI | 0.019637303616251874 | 0.08571599883071765 | 0.04689472344154583 | 0.0712703963554734 |
AMI | 0.004403161915686465 | 0.07254415753892929 | 0.030736215745078215 | 0.05857343467659337 |
A
6. 군집 모델 평가
Spectral | 2차원 | RFE 7차원 | SFS 7차원 | Full(14차원) |
ARI | -0.00021887572535816632 | 0.021266440542055842 | 0.014605971372133845 | 0.03949716164132407 |
Fowlkes-Mallows Score | 0.3708990317733316 | 0.47660401835723554 | 0.36956537261855776 | 0.43081647243836785 |
NMI | 0.02788558572917302 | 0.0682793255202041 | 0.0433607854567842 | 0.07190172862132017 |
AMI | 0.014553854259150633 | 0.052869278981733527 | 0.030468834486886046 | 0.058273711530848774 |