일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 컴퓨팅사고
- TensorFlow Lite
- 삼성역량테스트
- 포스코 AI교육
- 코테
- DP
- MCU 딥러닝
- sort
- 알고리즘
- 자료구조
- tinyml
- 초소형머신러닝
- 포스코 ai 교육
- dfs
- 삼성코테
- dfs문제
- 코테 문제
- 삼성역테
- 영상처리
- 포스코 교육
- 딥러닝
- 다이나믹프로그래밍
- 임베디드 딥러닝
- 삼성코딩테스트
- tflite
- BFS
- DP문제
- 코딩테스트
- 그리디
- bfs문제
- Today
- Total
코딩뚠뚠
[머신러닝 공부] Tiny ML -11 / 음성인식 모델훈련하기 -2 본문
Chapter11. 음성인식(호출어 감지) 모델 훈련하기
"
이번에는 모델의 작동 방식을 알아보자
"
목차 :
- 새로운 모델 훈련 -> 이전장
- 프로젝트에서 모델 사용 -> 이전장
- 모델 작동 방식
- 내 데이터로 훈련하기
이전 포스팅 링크
모델 작동 방식 :
이전까지는 모델을 훈련하는 스킬을 배워봤다.
순서가 바뀐것같기도 하지만? 이번엔 모델이 어떻게 예측을 수행하는지 알아보자.
> 입력의 시각화
위 Tensorboard화면은 저번장에서 본 것과 같이 Training중 입력 데이터를 나타내준다.
입력데이터는 wav 파일인데 어떻게 이미지로 시각화를 할 수있었을까?
바로 Feature generation (특징생성⊂전처리) 과정을 통해서이다.
yes, no 음성파일을 스펙트로그램으로 변환하면 어떤 모양이 나올까?
간단히 그림으로 나타내면 위 그림과 같은 스펙트로그램이 생성된다.
이제 음성을 분류하는 문제가 이미지를 분류하는 문제로 변하게 된다.
> Feature Generation의 동작 원리
일반적으로 스펙트로그램을 생성하는 방법은 MFCC(Mel-Frequency Cepstral Coefficient)로 실무수준에서 많은 검증이 이루어졌다.
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에 존재하며 생각보다 매우 간단했다.
Convolution layer 의 필터 개수가 여덟개 이기 때문에 이를 통과하면 여덟 개의 출력이 생긴다.
이는 이후 FC layer의 입력값이 되고 class 마다 25x20x8 = 4000 개의 가중치를 갖게되어 4x4000으로 표현된다.
마지막은 Softmax layer로 각 값의 차이를 효과적으로 증가시킨다. 간단히말하면 각각의 확률을 나타내준다.
> 모델의 출력 :
최종 결과는 softmax layer의 출력값이며, silence, unknown, yes, no에 대응하는 네 숫자가 된다.
그 중 가장 높은 값을 갖는 클래스가 최종 결과로 나타난다.
모델은 초당 한 번 실행되는것이 아닌 여러 번 실행되며 결괏값이 도출되기 때문에 그 중 score가 높은 시점을 결정해야한다.
코드의 RecognizeCommands 클래스에서는 시간에 따른 평균화 점수를 사용하며, 일정 시간동안 같은 단어에 대해 높은 점수를 얻은 경우에만 인식 결과를 반환한다.
더 나은 인식결과를 얻고싶다면 Convolution Network가 아닌 재귀 신경망인 RNN을 사용한다.
끝
'공부 > ML&DL' 카테고리의 다른 글
[머신러닝 공부] Tiny ML -13 / 인체감지 어플리케이션-1 (0) | 2022.02.17 |
---|---|
[머신러닝 공부] Tiny ML -12 / 음성인식 모델훈련하기 -3 (0) | 2022.02.13 |
[머신러닝 공부] Tiny ML -10 / 음성인식 모델훈련하기 -1 (0) | 2022.02.02 |
[머신러닝 공부] Tiny ML -9 / 음성인식 어플리케이션-2 (0) | 2022.01.31 |
[머신러닝 공부] Tiny ML -8 / 음성인식 어플리케이션-1 (0) | 2022.01.13 |