1 of 39

데이터분석 캡스톤디자인: 주관적 감상에 따른 음악 분류

2017110261 소프트웨어융합학과 김원경

2 of 39

A

주제 선택 배경

3 of 39

A

“음악마다 다르게 느껴지는 감상”

4 of 39

A

카테고리 정의, 분류

- 밤하늘과 우주 혹은 관련 사물을 떠올리게 하는 곡 =>”CELESTIAL”

- 하늘 위로 나는 것 같은, 천국을 연상케 하는 상승감, 꿈 속으로 빠지는 듯한 몽환적 느낌을 선사하는 곡 => “DREAMY”

- 철학적으로 느껴지는, 인생에 대해 새로운 통찰을 주는 것 같은, 생각 속으로 침잠해 가는 듯한, 질문을 던지는 듯한 곡 => “CONTEMPLATING”

- (주관적으로) hopeful하다 느끼는 곡 => ”HOPEFUL”

- 비장하게 앞으로 나아가는 듯한, 결의를 다지게 하고, 자아를 말하는 것 같은 곡 =>”HEROIC”

- 자연, 평화를 연상케 하는 곡 =>”PEACEFUL”

5 of 39

A

  1. 음악 데이터 전처리
  2. 대표 구간 선택 (주관적으로, 직접 선택)

3. 각 곡마다 빠르기, 박자, 에너지, 음색 등 여러가지 음악적 특징을 추출하여 특징 벡터로 만듦

4. 특징 선택

5. 여러 가지 군집 분석 시행 후 결과 비교

6. 결과 평가

일의 전체 순서

6 of 39

A

1. 음원 파일 디코딩과 전처리

디코딩? 코덱?

” 압축된 파일을 비압축 파형 데이터 형태로 복원해야 한다” -> 어떻게 해야하지? 해야 하는 건 맞나?

Sampling Rate?

=> 초당 샘플의 비율(속도)

44.1 KHz 인 경우, 1초에 Sample 의 수가 약 44100 개가 들어있다.�값이 클수록 음질이 좋다.

bitrate?

=> 1초당 비트 전송 수. 보통 192kbps.

음원들끼리 모두 동일해야 한다. 그렇지 않으면 파형이 서로 다르게 나타나므로 따로 전처리 과정을 거쳐야 한다.

channel?

=> mono OR stereo. => 일괄적으로 mono 처리

“신호가 가지고 있는 정보를 최대한 보존하면서 전체 데이터의 크기를 최소화해야 효율적으로 연산을 할 수 있다.”

7 of 39

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)

8 of 39

A

1. 음원 파일 디코딩과 전처리

고민 2. 파일을 어떤 형식, 방법으로 읽어들일 것인가?

Numpy array? float/double/int 만으로 이루어진 raw data? pysoundfile?

librosa.core.block_read? librosa.load? => 마지막 방법으로 결론(정규화된 numpy array)

고민 3. 곡 분석 전략?

  • karaoke/instrumental 음원을 사용해 백그라운드 음악 중심으로 분석
  • 각 곡의 특징을 잘 나타내는 대표 부분을 직접 골라 분석
  • 곡의 전개를 비교하기 위해 파트별로 쪼개서 파트별로 서로 비교 분석

9 of 39

A

1. 음원 파일 디코딩과 전처리

10 of 39

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

11 of 39

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

12 of 39

A

2. Feature Extraction

13 of 39

A

2. Feature Extraction

14 of 39

A

2. Feature Extraction

2) Magnitude scaling

“공간감(혹은 볼륨, 혹은 규모)”

Mel spectrogram 으로 추출한 이유? -> 이 안에 저 과정이 포함되어 있기 때문. 둘이 유관한 데이터이기 때문이다.

15 of 39

A

2. Feature Extraction

3) Timbral Features

(1) MFCC(Mel-Frequency Cepstral Coefficients)

주파수 중에서도 인간의 가청 범위와 연관된 채널과 가장 비슷한 10개에서 20개 정도의 채널을 뽑아내서 만든 그래프

배음 구조의 차이를 표현하는 숫자라 배음 구조를 알 수 있다. 음정의 차이를 무시하도록 디자인 된 값이다.

오디오 신호의 절대값 스펙트럼을 로그 스케일한 후 FFT bin을 그룹화해 인간의 청각 특성에 맞는 mel-frequency scale => MFCC

16 of 39

A

2. Feature Extraction

(2) spectral centroid

스펙트럼 중심. 소리의 밝기와 관련된 개념이라서 음색을 처리한다

A measure of spectral shape and higher centroid values correspond to “brighter” textures with high frequencies

17 of 39

A

2. Feature Extraction

18 of 39

A

2. Feature Extraction

(3) spectral roll-off

스펙트럼 형태와 낮은 주파수 영역에 신호 에너지가 얼마나 집중되어 있는지 보여줌

19 of 39

A

2. Feature Extraction

(4) Spectral contrast

옥타브 밴드(Octave Band) 기반의 특징. 음색(에너지)의 대비를 표현

20 of 39

A

3. 특징 벡터의 parameter

21 of 39

A

3. 특징 벡터의 parameter

– 본래 계획했던 카테고리는 총 6가지. 그중 2가지는 보컬 없이 백그라운드 부분만 갖고는 도저히 곡의 특징을 대표할 수 없다 판단하여 제외했고, 나머지 한 카테고리는 시간관계상 못함.

- 카테고리별 곡의 수는 원래 훨씬 더 많았다. 하지만 중간에 일반 음원에서 유튜브 inst 영상/음원을 추출한 데이터로 바꾸는 과정에서 음원에 잡음이나 불완전한 부분이 있어 분석에 차질이 생기는 음원을 모두 제외하다보니 데이터의 수가 줄었다.

22 of 39

A

4. Feature Selection

방법 1, ‘선택’: 가장 좋은 특징을 선택하고 나머지를 제거한다.

  1. Filter method: 관련성을 찾는 방법. 중요도에 따라 가중치 부여, 분산 한계점, 설정 상관계수에 따라 정렬

2) Wrapper method: 유용성을 측정한 방법. 머신 러닝 예측 알고리즘을 사용해 좋은 예측을 위한 각 특징의 공헌도를 점수화한다.

- recursive feature elimination(RFE): SVM을 사용하여 재귀적으로 제거하는 방법

  • sequential feature selection(SFS): 그리디 알고리즘으로 빈 subset에서 피처를 하나씩 추가하는 방법으로 이루어진다. 최후에 원하는 피처만 남게 된다.

외 다수

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/

23 of 39

A

4. Feature Selection

24 of 39

A

4. Feature Selection

25 of 39

A

5. Clustering

방법을 선택하게 된 배경?

<대표구간의 음악 특징에 기반한 음악 장르 분류>(2008)

26 of 39

A

5. Clustering

클러스터링을 시행한 방법 3가지

  • Feature Selection에서 최우선순위로 나온 특징 2개 선택 후 pca 거쳐 만든 2차원 벡터
  • pca 거쳐 만든 7차원 벡터 (여기서 클러스터링 진행할 수 있는 최대 차원이 14차원이라 이의 반절에 해당하는 7차원으로 임의 결정)
  • 별도의 원소 개수 지정 없이 그냥 pca 처리한 벡터
  • pca 처리를 하지 않은 raw 벡터

27 of 39

A

5. Clustering

방법 1. K 평균 클러스터링

  • 데이터를 k개의 클러스터로 나눈 뒤 할당된 클러스터의 평균과 포함된 데이터들의 거리 제곱합이 최소가 되게 한다.

28 of 39

A

5. Clustering

3

3

3

2

4

같은 레이블 개수를 세본다. 가장 이상적인 개수는 각각 7:4:3

또한 첫번째 카테고리의 오답이 두번째로, 두번째 카테고리의 오답이 첫번째 결과로 레이블 되어있는 것이 많을수록 좀더 정확한 결과

5

2

2

4

3

1

4

worst

29 of 39

A

5. Clustering

방법 2. 계층 클러스터링(Agglomerative clustering)

- 계층적인 방법으로 비슷한 클러스터를 합침

30 of 39

A

5. Clustering

3

3

3

2

4

5

2

2

4

3

1

4

worst

같은 레이블 개수를 세본다. 가장 이상적인 개수는 각각 7:4:3

또한 첫번째 카테고리의 오답이 두번째로, 두번째 카테고리의 오답이 첫번째 결과로 레이블 되어있는 것이 많을수록 좀더 정확한 결과

31 of 39

A

5. 클러스터링

방법 3. 스펙트럼 클러스터링

- 클러스터를 구성하는 노드의 연결성에 기반하여 연결 그래프를 생성하고 데이터 포인트를 그룹화한다.

32 of 39

x

A

5. Clustering

3

1

5

3

3

3

3

5

2

worst

(K-Means, HCA

방법보다 안좋은 결과)

같은 레이블 개수를 세본다. 가장 이상적인 개수는 각각 7:4:3

또한 첫번째 카테고리의 오답이 두번째로, 두번째 카테고리의 오답이 첫번째 결과로 레이블 되어있는 것이 많을수록 좀더 정확한 결과

33 of 39

A

6. 군집 모델 평가

방법 1. supervised, which uses a ground truth class values for each sample.

  • 지도 방식으로 실제 데이터의 클래스가 존재할 때 사용
  • 이미 알려진 벤치마크 데이터셋을 이용해 실제 데이터의 라벨링(ground truth)과 클러스터링 결과를 비교하는 방식

방법 2. unsupervised, which does not and measures the ‘quality’ of the model itself.

- 비지도 방식으로 모델 자체만 이용하여 평가하는 방식

- 도메인 지식을 사용하거나, 클러스터 내의 분산과 클러스터 간의 거리(SSE;sum of the squared error)등을 고려하여 평가할 수 있음

34 of 39

A

6. 군집 모델 평가

방법 1. Advanced Rand Index

Rand Index는 얼마나 클러스터들이 benchmark 분류들과 유사한지 계산한다. 알고리즘에 의해 만들어진 올바르게 분류된 비율의 측정으로 보기도 한다. 1에 가까울수록 원하는 분류와 유사함을 의미

35 of 39

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)

36 of 39

A

6. 군집 모델 평가

방법 3. Normalized Mutual Information, Adjusted Mutual Information

  • Normalized Mutual Information(NMI)Mutual Information 값이 0과 1의 사이 값이 되도록 upper bound 값을 기준으로 정규화한 지표

  • Adjusted Mutual Information(AMI)클러스터링 수가 많을수록 NMI의 오차가 커지는 점을 보완한 지표.�상호의존도의 기대값을 이용해 각 클러스터에 할당될 확률값(chance)으로 조정한 값.�두 클러스터링 결과가 랜덤한 경우 0에 가깝고, 할당 결과가 동일한 경우 1에 가깝다.

참고자료:https://yjucho1.github.io/clustering/mutual-information/

37 of 39

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

38 of 39

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

39 of 39

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