1. 수업 개요: 키워드 스포팅과 TinyML
이번 수업은 키워드 스포팅(Keyword Spotting, KWS)과 오디오 처리에 대해 다뤘다. KWS는 TinyML의 가장 성공적인 사례 중 하나다.
수업에서는 "Hey Siri", "Alexa" 같은 호출어를 감지하는 원리부터 시작해, 오디오를 디지털로 변환하는 과정, 그리고 메모리가 제한된 임베디드 시스템에서 어떻게 음성 인식을 구현하는지까지 다뤘다.
특히 중요한 것은 "KWS는 일반 음성 인식과 다르게, 특정 키워드만 감지하면 되므로 훨씬 가볍고 저전력으로 동작할 수 있다"는 점이었다. 이는 IoT 센서나 웨어러블 기기에 최적화된 기술이다.
2. 키워드 스포팅(KWS)의 정의 및 프로세스
KWS의 정의는 다음과 같다. 키워드 스포팅은 연속적인 오디오 스트림 내에서 사전에 정의된 특정 단어나 구절을 감지하는 음성 인식의 한 분야다.
KWS 프로세스는 오디오에서 행동까지 다음과 같은 단계로 이루어진다:
- 오디오 입력: 연속적인 음성 스트림을 마이크로 수집한다. 마이크는 항상 켜져 있어야 하므로 저전력 설계가 중요하다.
- 특성 추출: raw 오디오를 스펙트로그램(Spectrogram)이나 MFCC와 같은 디지털 특성으로 변환한다. 이 과정에서 오디오의 핵심 정보만 추출한다.
- KWS 모델: 특정 키워드(예: "Hey Siri", "Alexa")로 학습된 가벼운 TinyML 신경망 모델이 특성을 분석한다.
- 감지 로직: 모델이 출력한 확률이 임계값(Threshold)을 넘는지 확인한다. 임계값이 너무 낮으면 오인식이 많고, 너무 높으면 키워드를 놓칠 수 있다.
- 결과 처리: 일치하면 동작 트리거(기기 깨우기, 명령 실행), 일치하지 않으면 무시(대기 상태 유지)한다.
KWS는 전체 음성을 인식하는 것이 아니라, 특정 키워드만 찾으면 되므로 계산량이 훨씬 적다. 이 덕분에 배터리로 수개월간 동작하는 기기에서도 사용할 수 있다.
3. KWS vs 일반 음성 인식(ASR)
KWS와 일반 음성 인식(ASR, Automatic Speech Recognition)의 차이를 명확히 이해했다.
KWS (Keyword Spotting):
- TinyML의 가장 성공적인 사례 중 하나
- 저전력으로 기기에서 연속적으로 작동
- 특정 키워드만 감지하므로 모델이 매우 가볍다
- 메모리 사용량이 수십 KB 수준
- 예: "OK Google", "Hey Siri" 같은 호출어 감지
일반 ASR (Automatic Speech Recognition):
- 여전히 크고 전력 소모가 많은 모델이 필요
- 모든 단어를 인식해야 하므로 모델이 크다
- 스마트폰의 오프라인 받아쓰기처럼 모바일/에지 기기에서 실행 가능하지만, 전력 소비가 크다
- 메모리 사용량이 수백 MB~수 GB 수준
KWS는 기기를 깨우는 역할만 하고, 실제 음성 인식은 깨어난 후에 처리한다. 이렇게 단계를 나누면 전력 소비를 크게 줄일 수 있다.
4. 디지털 오디오의 기초
오디오 파일은 음성이나 음악 같은 음향 파동을 이진수(0, 1) 시리즈로 기록한 디지털 기록이다. 아날로그 신호를 디지털로 변환하는 과정을 이해하는 것이 중요하다.
주요 포맷:
- WAV: PCM 데이터를 통해 매끄러운 신호를 계단식 디지털 형식으로 변환한다. WAV는 압축하지 않아서 품질이 좋지만 용량이 크다.
- MP3: 손실 압축 포맷으로, 인간의 귀가 잘 듣지 못하는 소리(심리음향학)를 제거하여 용량을 절약한다. MP3는 용량을 줄이기 위해 일부 정보를 버리지만, 사람이 듣기에는 큰 차이가 없다.
KWS에서는 WAV 포맷을 주로 사용한다. 압축 과정에서 정보가 손실되면 키워드 감지 정확도가 떨어질 수 있기 때문이다.
5. 하드웨어 제약 및 메모리 사용량
임베디드 시스템에서 KWS를 구현할 때는 여러 제약 조건을 고려해야 한다. "이 제약들을 이해하는 것이 TinyML의 핵심"이였다.
주요 과제:
- 지연 시간: 실시간 응답이 필요하다. 키워드를 말한 후 1초 이내에 반응해야 사용자 경험이 좋다.
- 대역폭: 데이터 전송을 최소화해야 한다. 네트워크 없이 동작해야 하므로 모든 처리를 기기에서 해야 한다.
- 정확도: 오인식을 최소화해야 한다.
- 개인화: 배경 소음 차단이 필요하다.
- 보안 및 프라이버시: 음성 데이터를 외부로 전송하지 않아야 한다.
- 배터리: 코인 셀 배터리로 수개월간 동작해야 한다.
- 메모리 제한: 수십 KB 수준의 메모리만 사용할 수 있다.
메모리 사용 예시 (총 128KB 기준):
- 오디오 버퍼: 약 64KB (가장 큰 비중) - 실시간 오디오 데이터를 저장
- 작업 메모리(Working Memory): 약 8KB - 중간 계산 결과 저장
- 모델: 약 24KB - 학습된 신경망 가중치
- TFLite Micro: 약 16KB - TensorFlow Lite 런타임
- 애플리케이션 코드: 약 16KB - 실제 프로그램 코드
"이렇게 제한된 메모리에서 동작하려면 최적화가 필수적"이였다. 특히 양자화(Quantization)를 사용하여 연산과 메모리를 절약해야 한다. 양자화는 32비트 부동소수점을 8비트 정수로 변환하여 메모리와 계산량을 1/4로 줄인다.
6. 샘플링 및 데이터셋
오디오를 디지털로 변환할 때 샘플링 레이트가 매우 중요하다.
샘플링 이론:
- 일반적인 신호 기록은 44.1kHz로 이루어진다 (CD 품질)
- KWS 표준: 16kHz 샘플링 레이트, 16비트 깊이(Bit Depth)
- 16kHz면 음성 인식에 충분하다. 인간의 음성은 대부분 8kHz 이하의 주파수를 사용하기 때문이다.
나이퀴스트-샤논 정리: 샘플링 주파수(fs)는 신호의 최고 주파수 성분(B)의 2배보다 커야 한다 (fs > 2B). 이 정리를 위반하면 원본 신호를 복원할 수 없다.
Speech Commands 데이터셋:
"KWS 모델을 학습하기 위한 표준 데이터셋"이였다. 특징:
- 문장이 아닌 개별 단어로 녹음되었다
- 단어당 1,000~4,000개의 예시
- 2,500명 이상의 자원봉사자 참여
- 25개의 IoT 키워드와 발음이 유사한 10개의 "알 수 없는 단어"(예: "three" vs "tree")를 포함
알 수 없는 단어를 포함하는 이유는 오인식을 줄이기 위해서다. 비슷한 소리라도 키워드가 아니면 무시해야 한다.
7. 특성 추출 기술: Spectrogram vs MFCC
오디오를 머신러닝 모델에 입력하기 위해서는 raw 오디오를 특성 벡터로 변환해야 한다. 특성 추출 방법에 따라 모델 성능이 크게 달라진다.
스펙트로그램 (Spectrogram):
시간에 따른 주파수 변화를 이미지처럼 표현한다. 스펙트로그램은 2D 이미지처럼 보인다.
- CNN은 이를 이미지로 취급하여 선(edges)과 모양(shapes)을 찾는 데 최적화되어 있다
- 스펙트로그램을 사용하면 CNN 모델을 사용할 수 있어서 정확도가 높다
- 하지만 데이터 차원이 크고 메모리 사용량이 많다
MFCC (Mel Frequency Cepstral Coefficients):
인간의 청각 시스템(Mel Scale)을 모방하여 저주파수에는 더 많은 데이터를, 고주파수에는 적은 데이터를 할당한다. MFCC는 인간이 소리를 인식하는 방식과 유사하다.
MFCC 프로세스:
- raw 오디오 → 프리엠퍼시스 및 프레이밍
- FFT 및 파워 스펙트럼 계산
- 멜 필터뱅크 적용
- 로그 취하기
- DCT(이산 코사인 변환) 및 리프터링
- MFCC 특성 벡터 생성 (약 13개의 계수)
장점:
- 데이터 차원이 낮다 (약 13개의 계수)
- 특성이 독립적이어서 작은 모델(DNN/LSTM)에 적합하다
- 메모리 사용량이 적다
단점:
- DCT 단계가 주파수의 공간적 관계를 파괴하여 CNN이 모양을 찾는 것을 어렵게 만든다
- MFCC는 작은 모델에 적합하지만, CNN보다는 정확도가 낮을 수 있다
상황에 따라 적절한 방법을 선택해야 한다. 메모리가 충분하면 스펙트로그램+CNN, 메모리가 제한적이면 MFCC+DNN을 사용한다.
8. 실습: 오디오 녹음 및 분석
실습에서는 Raspberry Pi Zero W2와 INMP441 마이크를 사용하여 오디오를 녹음하고 분석했다.
INMP441 마이크로 오디오 녹음:
INMP441은 I2S 인터페이스를 사용하는 디지털 마이크다. Raspberry Pi의 I2S 핀에 연결하여 오디오를 녹음했다. I2S는 오디오 전용 통신 프로토콜로, 고품질 오디오 전송에 적합하다.
Python의 pyaudio 라이브러리를 사용하여 44.1kHz 샘플링 레이트로 5초간 녹음했다. 'r' 키를 누르면 녹음을 시작하고, 'q' 키를 누르면 종료하는 인터페이스를 구현했다.
오디오 필터링:
녹음한 오디오에 여러 필터를 적용하여 비교했다:
- Low-pass 필터: 1kHz 이하 주파수만 통과. 배경 소음을 제거하는 데 유용하다.
- Band-pass 필터: 300~5000Hz 주파수만 통과. 음성 인식에 적합한 주파수 대역만 추출한다.
- High-pass 필터: 80Hz 이상 주파수만 통과. 저주파 노이즈를 제거한다.
각 필터를 적용한 결과를 WAV 파일로 저장하여 비교했다. 필터 선택에 따라 키워드 감지 성능이 크게 달라진다.
스펙트로그램 분석:
librosa 라이브러리를 사용하여 오디오 파일의 스펙트로그램을 시각화했다. 시간에 따른 주파수 변화를 이미지로 표현하여 오디오의 특성을 분석했다. 스펙트로그램을 보면 어떤 주파수 성분이 강한지, 시간에 따라 어떻게 변하는지 알 수 있다.
FFT(Fast Fourier Transform)를 사용하여 주파수 도메인으로 변환하고, 파워 스펙트럼을 계산했다. 이를 통해 오디오의 주파수 특성을 정량적으로 분석할 수 있었다.
MFCC 계수 추출:
librosa의 mfcc 함수를 사용하여 13개의 MFCC 계수를 추출했다. "MFCC는 음성 인식의 표준 특성"이였다. 추출한 MFCC를 시각화하여 시간에 따른 변화를 확인했다.
실습을 통해 오디오가 어떻게 디지털 데이터로 변환되고, 어떤 특성이 추출되는지 직접 확인할 수 있었다. 특히 스펙트로그램과 MFCC의 차이를 시각적으로 비교하면서, 각각의 장단점을 구체적으로 이해할 수 있었다.
이 과정을 이해해야 KWS 모델을 제대로 설계할 수 있다. 오디오 특성 추출은 KWS의 첫 단계이자 가장 중요한 단계다.
9. 정리
이번 수업을 통해 키워드 스포팅(KWS)과 오디오 처리의 전반적인 흐름을 배울 수 있었다.
수업의 핵심 내용을 정리하면:
- KWS는 TinyML의 성공 사례: 특정 키워드만 감지하므로 가볍고 저전력으로 동작할 수 있다.
- 하드웨어 제약 이해: 메모리, 전력, 지연 시간 등 여러 제약을 고려해야 한다.
- 샘플링 이론: 나이퀴스트-샤논 정리를 이해하면 적절한 샘플링 레이트를 선택할 수 있다.
- 특성 추출 방법: 스펙트로그램은 CNN에 적합하고, MFCC는 작은 모델에 적합하다.
- 메모리 최적화: 양자화를 통해 메모리와 계산량을 크게 줄일 수 있다.
특히 KWS는 전체 음성을 인식하는 것이 아니라, 특정 키워드만 찾으면 되므로 계산량이 훨씬 적다는 점이 인상 깊었다. 이 덕분에 배터리로 수개월간 동작하는 기기에서도 사용할 수 있다.
또한 스펙트로그램과 MFCC의 차이, 그리고 각각의 장단점을 이해한 것은 앞으로 오디오 프로젝트를 할 때 매우 유용할 것이다. 상황에 따라 적절한 방법을 선택할 수 있게 되었다.
이 수업에서 다룬 내용은 앞으로 음성 인식 프로젝트나 IoT 센서 개발에 매우 유용할 것이다. 특히 메모리 제약과 전력 소비를 고려한 최적화 방법을 이해한 것은 실무에서 큰 도움이 될 것 같다.
다음 수업에서는 실제로 KWS 모델을 학습하고 배포하는 실습을 진행할 예정이다. 기대가 된다.
'UNLV' 카테고리의 다른 글
| [UNLV] - 딥러닝과 합성곱 신경망(8일차) (2) | 2026.02.14 |
|---|---|
| [UNLV] - 데이터 엔지니어링과 MQTT 스트리밍(7일차) (0) | 2026.02.13 |
| [UNLV] - 분류 알고리즘과 TinyML(5일차) (3) | 2026.02.11 |
| [UNLV] - 드론 AI 실습: 텔로 드론(4일차) (0) | 2026.02.10 |
| [UNLV] - 머신러닝 기초와 IMU 센서 퓨전(3일차) (0) | 2026.02.07 |