코딩뚠뚠

[머신러닝 공부] Tiny ML -11 / 음성인식 모델훈련하기 -2 본문

공부/ML&DL

[머신러닝 공부] Tiny ML -11 / 음성인식 모델훈련하기 -2

로디네로 2022. 2. 7. 01:36
반응형

 

 

Chapter11. 음성인식(호출어 감지) 모델 훈련하기

 

"

이번에는 모델의 작동 방식을 알아보자

"

 

 

목차 :

  • 새로운 모델 훈련 -> 이전장
  • 프로젝트에서 모델 사용 -> 이전장
  • 모델 작동 방식
  • 내 데이터로 훈련하기

 

이전 포스팅 링크

 

[머신러닝 공부] Tiny ML -10 / 음성인식 모델훈련하기 -1

Chapter10. 음성인식(호출어 감지) 모델 훈련하기 " 새로운 모델을 만들어보자 " 목차 : 새로운 모델 훈련 프로젝트에서 모델 사용 모델 작동 방식 -> 다음장 내 데이터로 훈련하기 -> 다음장 새로운

dbstndi6316.tistory.com

 

 


 

 

모델 작동 방식 : 

 

이전까지는 모델을 훈련하는 스킬을 배워봤다.

순서가 바뀐것같기도 하지만? 이번엔 모델이 어떻게 예측을 수행하는지 알아보자.

 

> 입력의 시각화

위 Tensorboard화면은 저번장에서 본 것과 같이 Training중 입력 데이터를 나타내준다.

 

입력데이터는 wav 파일인데 어떻게 이미지로 시각화를 할 수있었을까?

 

바로 Feature generation (특징생성⊂전처리) 과정을 통해서이다.

 

 yes, no 음성파일을 스펙트로그램으로 변환하면 어떤 모양이 나올까?

 

간단히 그림으로 나타내면 위 그림과 같은 스펙트로그램이 생성된다.

 

이제 음성을 분류하는 문제가 이미지를 분류하는 문제로 변하게 된다.

 


> Feature Generation의 동작 원리

 

일반적으로 스펙트로그램을 생성하는 방법은 MFCC(Mel-Frequency Cepstral Coefficient)로 실무수준에서 많은 검증이 이루어졌다.

 

Mel-frequency cepstrum - Wikipedia

In sound processing, the mel-frequency cepstrum (MFC) is a representation of the short-term power spectrum of a sound, based on a linear cosine transform of a log power spectrum on a nonlinear mel scale of frequency. Mel-frequency cepstral coefficients (MF

en.wikipedia.org

 

1. wav 파일에 FFT(고속푸리에변환) 연산을 한다.

졸업 이후 오랜만에 푸리에변환을 들어보는데 이런데 쓰는구나 싶다.. 그땐 아무생각 없었다.

연산을 하며 256개의 주파수버킷을 채우고 멜 주파수 스케일에 의해 40개의 버킷으로 다운샘플링한다.

 

 

2. Hann window 필터링을 진행한다.

30ms 구간에 대해 FFT 연산 후 종모양의 Hann window 필터링을 진행해 샘플링에 따른 영향을 줄인다.

 

 

3. 채널별 진폭 정규화 (PCAN)와 auto-gain

Per-Channel Amplitude Normalization 과  auto-gain을 사용하여 노이즈를 제거하고 신호를 증폭시킨다.

 

 

4. 모든 버킷값에 log scale 적용

후속 모델의 특징 처리에 도음을 주기 위해 로그 스케일을 적용하여 큰 주파수가 작은 주파수에 영향을 주지 않도록 함.

 

 

우리가 사용하는 1초의 데이터를 위해서 이 과정은 49회 반복된다.

 

30ms 데이터는 20ms 씩 앞으로 이동하여 너비가40, 높이가49인 2차원 배열이 생성되게 된다.

 


 

>모델 아키텍처

 

책에서 사용한 모델은 models.py에 존재하며 생각보다 매우 간단했다.

 

 

GitHub - tensorflow/tensorflow: An Open Source Machine Learning Framework for Everyone

An Open Source Machine Learning Framework for Everyone - GitHub - tensorflow/tensorflow: An Open Source Machine Learning Framework for Everyone

github.com

 

MFCC로 이미지화 한 음성으로 위의 conv layer 및 fc layer 를 거친다.

 

Convolution layer 의 필터 개수가 여덟개 이기 때문에 이를 통과하면 여덟 개의 출력이 생긴다.

 

이는 이후 FC layer의 입력값이 되고 class 마다 25x20x8 = 4000 개의 가중치를 갖게되어 4x4000으로 표현된다.

 

마지막은 Softmax layer로 각 값의 차이를 효과적으로 증가시킨다. 간단히말하면 각각의 확률을 나타내준다.

 


 

> 모델의 출력 : 

 

최종 결과는 softmax layer의 출력값이며, silence, unknown, yes, no에 대응하는 네 숫자가 된다.

 

그 중 가장 높은 값을 갖는 클래스가 최종 결과로 나타난다.

 

모델은 초당 한 번 실행되는것이 아닌 여러 번 실행되며 결괏값이 도출되기 때문에 그 중 score가 높은 시점을 결정해야한다.

 

코드의 RecognizeCommands 클래스에서는 시간에 따른 평균화 점수를 사용하며, 일정 시간동안 같은 단어에 대해 높은 점수를 얻은 경우에만 인식 결과를 반환한다.

 

더 나은 인식결과를 얻고싶다면 Convolution Network가 아닌 재귀 신경망인 RNN을 사용한다.

 

 

 

반응형