10달러짜리 칩에서 실제 음성 인식을 구현했습니다 (휘파람)
원제 · I Got Real Speech Recognition Running on a $10 Chip (Whistle)
핵심 요약
10달러짜리 ESP32-S3 칩에서 모델 레이어를 4개로 축소하고 하드웨어를 최적화하여 16.9MB 크기의 음성 인식 모델 '휘슬'을 오프라인으로 완전히 구현했다.
하이라이트
캐스퍼 컴퓨트가 출시한 '휘슬(Whistle)' 음성 인식 모델의 전체 파일 용량은 16.9메가바이트에 불과하다.
ESP32-S3 마이크로컨트롤러의 16메가바이트 플래시 저장 공간 한계를 극복하기 위해 4개의 레이어만 포함하도록 모델을 축소하는 다이어트 과정이 적용되었다.
휘슬은 영어, 독일어, 프랑스어, 스페인어, 이탈리아어, 네덜란드어, 폴란드어 등 7개 언어를 지원하며 사용자의 언어를 스스로 파악한다.
단일 색상 단어만 발화할 때의 인식 성공률은 44%에 그친 반면, '빨간색으로 만들어줘' 같은 짧은 구절로 발화할 때는 정확도가 82%에서 93%까지 상승한다.
하드웨어 최적화를 통해 여러 오디오 프레임을 한 번에 처리하고 칩의 양쪽 코어와 8비트 정수 벡터 유닛에 연산을 분산시켜 평균 응답 시간을 약 10초로 단축했다.
타임라인
휘슬 모델 개요와 특징
오프라인 상태에서 작동하는 보조 배터리와 ESP32-S3 마이크로컨트롤러 기반의 음성 인식 기기가 시연된다. 캡스 컴퓨트가 개발한 휘슬 모델은 이전 모델인 니들과 동일한 엔진에서 실행되며 17개의 플랫폼용 빌드가 제공된다.
- 휘슬은 단일 파일 용량이 16.9메가바이트인 온프레미스 음성 인식 모델이다.
- 영어와 유럽 권역의 7개 언어를 지원하며 오디오 클립을 임베딩으로 변환할 수 있다.
- 오픈아이의 위스퍼 베이스 모델보다 크기가 약 9배 작으면서도 리브리시치 벤치마크에서 뛰어난 성능을 기록한다.
초소형 칩을 위한 모델 용량 최적화
모델 전체를 그대로 올릴 수 없기 때문에 유지하고 싶은 레이어만 포함하는 새로운 파일을 생성하는 도구가 사용된다. 4레이어 버전은 2레이어 버전보다 오류가 적고 98킬로바이트의 여유 공간을 남기며 안정적으로 작동한다.
- 보드의 플래시 저장 공간은 16메가바이트인 반면 모델 크기는 16.9메가바이트여서 축소 작업이 필수적이다.
- 디코더의 8개 레이어 중 4개만 남기는 방식으로 모델 크기를 칩에 맞게 줄였다.
- 가장 큰 용량을 차지하는 부분은 약 5.3메가바이트를 차지하는 n-gram 메모리 조회 테이블이다.
오디오 처리 파이프라인과 하드웨어 구성
합성곱 레이어 스택을 거친 오디오 프레임은 인코더와 디코더를 거쳐 텍스트로 변환된다. 디코더는 언어 토큰을 가장 먼저 작성하고 크로스 어텐션을 통해 이전 내용을 확인하며 텍스트를 출력한다.
- 원시 오디오는 10밀리초 단위로 쪼개진 후 멜 스펙트로그램으로 변환된다.
- 인코더는 8개의 레이어를 통해 문장 전체의 맥락을 동시에 참조한다.
- 하드웨어는 16MB 플래시와 8MB 메모리를 탑재한 ESP32-S3 보드와 INMP441 디지털 마이크로 구성된다.
실제 작동 테스트와 성능 향상 팁
터미널 앱을 통해 변환된 텍스트와 소요 시간이 실시간으로 확인된다. 완전한 문장 구조가 학습 데이터에 반영되어 있기 때문에 단일 단어보다 '빨간색으로 만들어줘' 같은 구절 발화가 인식률 향상에 유리하다.
- 버튼을 누르고 말을 하면 텍스트 변환과 함께 보드의 내장 RGB LED 색상이 변경된다.
- 명령어 처리 시간은 영어와 프랑스어 테스트에서 각각 8.8초와 11.7초가 소요된다.
- 단일 단어보다 짧은 구절 형태로 말할 때 인식 정확도가 훨씬 높아진다.
연산 최적화와 최종 인식 정확도
초기 버전에서 24초가 걸리던 처리 시간은 하드웨어 가속과 병렬 처리를 통해 평균 10초 내외로 단축되었다. 키워드 유도와 교차 언어 재시도 로직이 적용되어 제한된 리소스 환경에서도 정확한 결과 도출이 가능해진다.
- 행렬 연산과 곱셈 과정을 최적화하기 위해 칩의 양쪽 코어와 8비트 정수 벡터 유닛이 활용되었다.
- 영어 색상 명령어 테스트에서 주변 소음이 섞여도 정확도는 거의 유지된다.
- 키워드 바이어싱과 재시도 규칙을 추가하여 경량화된 버전의 성능을 높였다.
설명
We ported Cactus Compute’s Whistle, a 16.9 MB speech-to-text model that understands seven languages, to a $10 ESP32-S3 microcontroller, where it runs completely offline with no Wi-Fi and no cloud. To make it fit, we trimmed the model’s decoder down to four layers and sped up the matrix math with 8-bit integers and both CPU cores, so you can hold a button, speak a command, and watch the onboard LED respond. We also break down how Whistle turns your voice into text, and the full project is on GitHub if you want to build one yourself. 🔗 Relevant Links Whistle: https://cactuscompute.com/blog/whistle Whistle on ESP32 S3: https://github.com/andrisgauracs/whistle-esp32 ❤️ More about us Radically better observability stack: https://betterstack.com/ Written tutorials: https://betterstack.com/community/ Example projects: https://github.com/BetterStackHQ 📱 Socials Twitter: https://twitter.com/betterstackhq Instagram: https://www.instagram.com/betterstackhq/ TikTok: https://www.tiktok.com/@betterstack LinkedIn: https://www.linkedin.com/company/betterstack 📌 Chapters: 0:00 Speech-to-text on a $10 chip 0:50 Meet Whistle by Cactus Compute 2:03 Whistle vs OpenAI Whisper 3:04 The model is bigger than the chip 3:45 Shrinking the model to fit 5:06 How speech becomes text 6:46 The hardware 7:59 Live demo 9:42 From 24 s to ~10 s 10:32 Accuracy 11:28 Recap and credits
