Framework and Tool/audio recognition

Philips Robust Hashing

ocwokocw 2023. 8. 19. 23:51

- 출처: 논문 "A Highly Robust Audio Fingerprinting System", 저자: "Jaap Haitsma", "Ton Kalker"

- 목적

음원인식을 하는 방법에는 여러가지가 있다. 그중에서 가장 대표적인 것이 peak 기반으로 검출하는 방식(shazam)과 frequency band로 나누어 energy band의 차이를 vector화 하여 검출하는 방식(philips)이 있다. 그중 philips 방식이 어떤 방법으로 음원을 인식하는지 알아본다.


- Sub-fingerprint 와 Fingerprint block

모든 음원 인식 방법이 그런것은 아니지만 fingerprint 추출 알고리즘은 대게 아래 과정을 거친다.

  • 음원 신호를 frame들로 분할한다.
  • frame에 대한 feature를 계산한다. 바람직한 feature라면 품질이 저하된 신호에 대해서도 불변의 특징을 지닌다. 사용되는 방법에는Fourier coefficients, MFCC(Mel Frequency Cepstral Coefficients), spectral flatness, sharpness, Linear Predictive Coding (LPC) coefficients 등이 있다.
  • 이런 feature들을 Hidden Markov Models나 quantization 등과 같은 분류 알고리즘을 사용하여 더 간결하게 표현한다.

위의 과정을 거치면 모든 frame 들이 간결한 형태로 표현되는데 이를 sub-fingerprint 라고 한다. fingerprint를 구하는 전반적인 절차는 결국 audio stream을 sub-fingerprint stream 으로 변환하는것이다.

 

하지만 sub-fingerprint 하나로는 어떤 음원을 사용했다라고 판단할 수는 없다. 따라서 어떤 음원을 사용했다라고 판단하기 위해 sub-fingerprint 일정 개수가 모인 단위를 묶어서 판단하는데 이를 fingerprint block 이라고 한다. PRH 에서는 256개의 sub-fingerprint를 모아 3초 가량을 fingerprint block 단위로 정의했다.


- How to

추상적인 과정을 이해했으니 자세한 과정을 알아보자.

  • 우선 전처리를 수행해준다. 음원 인식은 대부분 재생을 위한 고품질을 요구하지 않기 때문에 전처리를 해준다. 2000Hz 이하의 주파수 영역만 취하므로 음원을 mono 채널의 5000Hz sample rate로 down-sample 한다. (왜 5000Hz sample rate를 적용해야 하는지 궁금하다면 "나이퀴스트 이론"을 확인해본다.) down-mix된 음원에 대해 FFT 적용시 window 2048을 적용한다.
  • 음원 신호를 중첩된 frame 으로 분할한다. frame 은 0.37 초의 길이를 가지며, Hanning window가 적용되고, 31/32의 중첩 factor를 적용한다. 이를 적용하면 11.6ms 마다 sub-fingerprint를 추출하게 된다. 이렇게 되면 최악의 경우 DB에 저장된 fingerprint와 query의 fingerprint가 5.8ms의 격차가 생긴다. 중첩을 많이 하는 이유는 이런 경우에도 DB와 query의 sub-fingerprint를 유사하게 만들기 위함이다. 이렇게 높은 중첩도 덕분에 sub-fingerprint가 높은 유사성을 지니면서 시간에 따라 천천히 변하게 된다.
  • 인간이 느끼는 음원의 가장 중요한 특징은 frequency 영역에 있다. Fourier 변환은 frame 경계에서 위상에 민감하고, 인간의 청각은 상대적으로 위상에 민감하지 않기 때문에 PSD spectrum 으로 절대값만 유지한다. 만약 위상의 정보를 취하지 않는 다른 spectrum이 더 적절하다고 판단된다면 해당 spectrum을 사용하면 된다.
  • 모든 frame에 대해 32-bit sub-fingerprint를 추출하기 위해 33개의 중첩되지 않는 frequency band를 사용한다. frequency band의 범위는 300Hz ~ 2000Hz 이며, log scale이 적용된다. 인간의 청각은 정확한 frequency 민감도가 아닌 log를 적용한 민감도(ex - Bark scale)에 더 가깝기 때문이다.
  • PRH에서는 실험결과 enery 차이를 이용한 방법이 여러 종류의 처리에 대해서 견고하다고 제안하고 있다. Fingerprint를 구하는 식은 E(n,m)을 frame n에서 energy band를 m이라 정의하고, F(n,m)을 frame n에서 sub-fingerprint의 m 번째 bit 라고할 때, 아래와 같이 정의한다.
    • F(n,m) = 만약 E(n,m) - E(n,m+1) - (E(n-1,m) - E(n-1,m+1)) > 0 이면 1, 아니면 0

- False positive

DB의 fingerprint block과 query의 fingerprint block의 hamming 거리가 특정 임계값 T 이하라면 이를 "유사하다"라고 할 수 있다.

임계값 T는 false positive를 직접적으로 결정한다. T가 작아질수록 이 비율도 작아진다(실제로는 다른 음원인데 같은 음원이라고 판단하는 오탐 비율이 낮아진다). 하지만 T값을 너무 작게 설정하면 false negative 에 부정적인 영향을 준다.(실제로는 같은 음원인데 이를 탐지 하지 못하는 경우가 생긴다.)

 

PRH 논문에서는 실험결과 T값을 0.35로 제시하고 있다. 이를 bit수로 계산해보면, fingerprint block은 256개의 sub-fingerprint 이므로 8192(32 * 256)bit 에서 서로 다른 bit 수가 2867개 이하여야 "유사한 음원"이라고 할 수 있다.


- DB Search

설정하는 parameter 에 따라 다르지만 논문에서는 평균 길이 5분의 음원 10,000곡을 fingerprinting 하는 경우 sub-fingerprint가 2.5억개 발생한다고 언급하고 있다.

 

모든 경우의 수를 탐지하면 이상적인 시간내에 검색을 완료할 수 없기 때문에 일부만 탐지한다. 이를 위해 하나의 가정을 하고 있는데 유사한 오디오라면 1 fingerprint block, 즉 256 sub-fingerprint 중 1개는 정확하게 matching 된다고 가정한다. 논문에서 이런 가정에 기반할 수 있는 이유는 통계적으로 256 sub-fingerprint중 17개는 error bit가 없기 때문이다.

 

DB에 10,000곡이 쌓여있을 경우 1 query(fingerprint block)당 fingerprint block 평균 비교 횟수를 계산해보자. 우선 sub-fingerprint 당 음원과 음원의 위치를 가리키는 평균 개수는 250,000,000 / 2^32 = 0.058 이 된다. 모든 sub-fingerprint에 균등 분포되어있다고 가정하면 quey당 sub-fingerprint 평균 비교 횟수는 256*0.058 = 15가 된다. 하지만 실제로 균등하게 분포되어 있지 않으므로 factor 20을 적용하여 300번의 비교를 한다고 가정하고 있다.

 

여기서 "sub-fingerprint들중 최소 하나의 sub-fingerprint는 error bit 가 없다"는 가정을 신뢰할 수 있는가라는 문제가 생긴다. 신호가 약간 훼손된 경우 이 가정이 유효하지만 심하게 훼손되면 유효하지 않을 수 있다. 만약 hamming distance 1 까지 허용하면 fingerprint 비교 연산은 33배가 된다.(bit를 하나씩 뒤집으면서 query를 하므로) 하지만 모바일 환경의 경우 sub-fingerprint당 최소 error bit 가 3인 상황이 발생할 수 있기 때문에 이를 대처하려면 5489배나 증가한다. 따라서 random 하게 bit를 뒤집는 방식이 아닌 유력한 후보자만 지정하여 query 해야 한다.

 

sub-fingerprint는 에너지의 차를 비교하고 임계값을 적용하여 얻어진다. 에너지의 차가 임계값에 매우 근접하면 해당 bit는 신뢰할 수 없는 부정확한 bit라고 생각할 수 있다. 만약 그 반대라면 비교적 정확한 bit라고 고려한다. 이런 신뢰도를 기반으로 bit에 1(가장 신뢰할 수 없는 bit)~32(가장 신뢰할 수 있는 bit)까지 ranking을 메기고, 가장 신뢰할 수 없는 bit 3개를 뒤집어서 유력한 후보자들을 생성한다.