Ini proyek yang saya buat sendiri.
- Library yang mengimplementasikan ulang runtime FastEnhancer-Medium (model peningkatan kualitas suara streaming 48 kHz) dalam C murni
- Model asli: https://github.com/aask1357/fastenhancer (Ahn dkk., 2025)
- Menggunakan apa adanya bobot 48 kHz yang dirilis tambahan oleh repo asli setelah makalah (16 kHz). Tidak ada pelatihan ulang, fine-tuning, maupun calibration set
- Model dan bobot adalah milik penulis asli; yang dioptimalkan adalah sisi runtime
■ Performa
- Di satu core Apple M2, real-time factor mencapai 0,069. Jika graf yang sama dijalankan dengan ONNX Runtime di mesin yang sama, hasilnya 0,230, jadi 3,3 kali lebih cepat
- Di Galaxy S23+ (Snapdragon 8 Gen 2), hasilnya 0,096
- Penurunan kualitas nyaris tidak ada. Pada 824 utterance VoiceBank-DEMAND, hanya -0,006 PESQ dibanding model fp32. Bukan pada tingkat yang bisa dibedakan dengan pendengaran
■ Optimasi yang diterapkan
Hasil 3x ini bukan dari satu teknik saja, melainkan dari perbaikan pada beberapa lapisan.
- Kuantisasi: rentang nilai aktivasi dihitung ulang setiap frame. Jadi sama sekali tidak perlu menyesuaikan atau mendistribusikan calibration set, dan tidak rusak meski distribusi input berubah
- Konvolusi: menerapkan Winograd F(2,3) pada conv k=3, lalu menggabungkan epilog berikutnya (dequant + bias + SiLU + write fp16) ke pass yang sama sehingga buffer perantara dihilangkan
- Rekurensi: GRU sepenuhnya digabung menjadi satu kernel per tier. Perkalian matriks sisi input, perkalian matriks sisi hidden, tiga gate r/z/n, hingga pembaruan hidden selesai dalam satu kernel sehingga akumulator int32 tidak bocor ke memori
- Attention: softmax memproses skor int32 secara langsung. Karena matriks skor fp32 sama sekali tidak dibuat, round-trip memori sebesar itu hilang
- Memori: status cross-stage (GRU hidden, encoder skip) disimpan sebagai fp16 sehingga bandwidth antar-frame berkurang setengah
- Kernel: menulis sendiri 6 jenis kernel GEMM int8 per ISA dan memilih otomatis saat inisialisasi (ARM NEON/DOTPROD/I8MM, x86 AVX2/AVX-VNNI/AVX-512)
- Daftar optimasi lainnya bisa dilihat di GitHub proyek
■ Stabilitas real-time
- Tidak berhenti pada satu benchmark 37 detik; juga diuji dengan menjalankannya terus-menerus selama 30 menit pada siklus callback audio nyata
- M2 tetap berada dalam anggaran frame sepanjang 30 menit (p99 0,56)
■ Lain-lain
- 0 dependensi eksternal. Dibangun dengan cmake + make, dan library statisnya 162 KiB
- API publik terdiri dari 4 fungsi (fe_init / fe_run / fe_reset / fe_free)
- Blob bobot 565 KB, 511.754 parameter
- Lisensi MIT
Belum ada komentar.