>100 Views
September 30, 26
スライド概要
マイコン(スタックチャン: ESP32-S3)で動く日本語 TTSの開発とリリースについての内容
https://github.com/ayutaz/sanoTTS-jp
0.000559B 3 – 5 M I N U T E S / LO CA L A I を $3のマイコンで。 Japanese TTS on ESP32-S3 — sanoTTS-jp yousan / @ayutaz 1 / 14
ABOUT ME ようさん /yousan GitHub @ayutaz ・ Hugging Face @ayousanz 🎮 Game / Unity 🎙️ Voice & Speech ML ⚡ Local / Edge AI 🎪 Event Organizer ゲーム開発・個人ゲーム制作 オンデバイス推論 TTS・音声対話 生成AI・技術イベント運営 ゲーム・音声AI・イベントを中心に、いろいろ作ったり運営した りしています。 Game / Unity × Speech ML × Local AI × Event 2 / 14
LLMはローカル。 M OT I VAT I O N でも「声」はクラウド? Local LLM 手元で推論 Voice should be local too. → Text 生成された返答 → Cloud TTS? ここだけ外へ 3 / 14
ESP32-S3に、どこまで入る? CONSTRAINTS ESP32-S3 SoC 512 KB M5STACK CORES3 internal SRAM 16 MB 240 MHz × 2 INTERNAL RAM / 実機 DIRAM pool 654 KB INT8 model 211,535 B static 61.9% 8 MB FLASH / 配置するもの 341,760 B static DIRAM Flash stream arena peak 115,056 B 辞書実サイズ: external PSRAM 13.7 MB 漢字G2P辞書 13,702,320 B 8 MB PSRAMがあっても、内蔵SRAM 512 KBの制約は消えない。 RAMとFlashの両方を詰める必要がある。 ESP32-S3 / M5Stack CoreS3 / sanoTTS-jp measured values 4 / 14
作ったもの。 S A N O T T S -J P 559K 654 KB C99 no malloc parameters libm only sanoTTS-jp INT8 model arena based 5 / 14
大きい教師から、小さい生徒へ。 D I S T I L L AT I O N Teacher Students MB-iSTFT-VITS2。日本語音声の教師として利用。 ESP32-S3に載せるため、3つの小さなネットへ。 piper-plus teacher → distillation → edge model 559K 6 / 14
3つに分ける。 ARCHITECTURE Duration 33K params → Acoustic 195K params 40-dim latent → iSTFT Decoder 331K params テキスト→波形を1本で覚えさせず、明示的な中間表現を渡す。 33K + 195K + 331K ≈ 559K 7 / 14
日本語は、G2Pで詰まる。 J A PA N E S E P R O B L E M 英語圏の前提 文字から音素への変換が比較的軽い。 102 MB TTS だけ小さくしても終わらない 日本語 漢字の読み・アクセント・無声化など、前処理側の問題が重い。 そのままの辞書はマイコンには重すぎる 8 / 14
辞書を、TTS専用にする。 ON-DEVICE G2P 877 B かな経路の変換テーブル 13.7 MB 漢字辞書 438,750 dictionary entries 漢字かな交じり文をESP32-S3へ直接送るだけで喋れる。 Japanese G2P on device 9 / 14
小さいから、 速いと思っていた。 FIRST BENCHMARK 0.926 xRT / first device benchmark ほぼリアルタイム。でも、狙いは ≤ 0.5。 measure first 10 / 14
MACは、約30%しかない。 PROFILE MAC — 約30% 量子化 / GELU / tensor lookup / weight copy … ローカル推論は、パラメータ数 ≠ 実機の速さ。 profiling changed the plan 11 / 14
モデルではなく、実装を削る。 O P T I M I Z AT I O N Quantization 活性化周り → GELU ホットパス改善 → Tensor lookup 毎stepの探索削減 → Weight copy 489 KB/stepを削る 18.38M → 11.66M cycles / step cycles / step same waveform checksum 12 / 14
最終的に。 R E S U LT before 0.926 xRT after → 0.473 xRT ✅ リアルタイム / 波形checksum同一 ESP32-S3 device measurement 13 / 14
実機なしでも、 その場で試せます。 LIVE WEB DEMO 今日は地元のLLM LT会に来ています。 browser ↓ same C99 inference core → WebAssembly ↓ 🔊 Japanese speech Web Demo ayutaz.github.io/sanoTTS-jp/ ESP32版と同じC99推論コアをWASM化。 Dキーでデモを開く Web Demo → GitHub Pages / sanoTTS-jp GitHub: ayutaz/sanoTTS-jp 14 / 14