2 puan yazan kdrkdrkdr 7 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş

Kendi yaptığım bir proje.

  • FastEnhancer-Medium’un (48 kHz akışlı ses iyileştirme modeli) çalışma zamanını saf C ile yeniden gerçekleştiren bir kütüphane
  • Orijinal model: https://github.com/aask1357/fastenhancer (Ahn ve diğerleri, 2025)
  • Orijinal repo, makaleden (16 kHz) sonra ayrıca yayımladığı 48 kHz ağırlıklarını olduğu gibi kullanıyor. Yeniden eğitim, fine-tuning veya calibration set yok
  • Model ve ağırlıklar orijinal yazarlara ait; optimize edilen kısım çalışma zamanı tarafı

■ Performans

  • Apple M2’nin tek çekirdeğinde real-time factor 0.069 çıkıyor. Aynı makinede aynı grafiği ONNX Runtime ile çalıştırınca 0.230 olduğundan 3,3 kat daha hızlı
  • Galaxy S23+’ta (Snapdragon 8 Gen 2) 0.096
  • Kalite düşüşü neredeyse yok. VoiceBank-DEMAND’deki 824 konuşma örneğinde fp32 modele göre yalnızca -0.006 PESQ. Duyarak ayırt edilebilecek düzeyde değil

■ Uygulanan optimizasyonlar

3 kat hızlanma tek bir teknikle gelmedi; birden fazla katman ayrı ayrı elden geçirildi.

  • Kuantizasyon: Aktivasyon aralığı her karede yeniden hesaplanıyor. Bu yüzden bir calibration set ayarlamaya veya birlikte dağıtmaya hiç gerek yok; girdi dağılımı değişse bile bozulmuyor
  • Evrişim: k=3 conv için Winograd F(2,3) uygulanıyor; ardından gelen epilog (dequant + bias + SiLU + fp16 write) da aynı pasa katılarak ara tampon kaldırılıyor
  • Özyineleme: GRU, her tier için tek bir kernel olacak şekilde tamamen birleştirildi. Girdi tarafı matris çarpımı, hidden tarafı matris çarpımı, r/z/n üç kapısı ve hidden güncellemesi tek kernel içinde bitiyor; böylece int32 akümülatör belleğe sızmıyor
  • Attention: softmax, int32 skorları doğrudan alıp işliyor. fp32 skor matrisi hiç oluşturulmadığından o kadar bellek gidiş gelişi ortadan kalkıyor
  • Bellek: cross-stage durumlar (GRU hidden, encoder skip) fp16 olarak tutuluyor; kareler arası bant genişliği yarıya iniyor
  • Kernel: ISA’ya göre 6 farklı int8 GEMM kerneli doğrudan yazıldı ve başlatma sırasında otomatik seçiliyor (ARM NEON/DOTPROD/I8MM, x86 AVX2/AVX-VNNI/AVX-512)
  • Kalan optimizasyon listesi proje Github’ında görülebilir

■ Gerçek zamanlı kararlılık

  • 37 saniyelik tek bir benchmark ile yetinilmedi; gerçek ses callback döngüsüyle 30 dakika kesintisiz çalıştırılarak doğrulandı
  • M2, 30 dakika boyunca kare bütçesinin içinde kaldı (p99 0.56)

■ Diğer

  • Dış bağımlılık yok. cmake + make ile derleniyor ve statik kütüphane 162 KiB
  • Genel API 4 fonksiyondan oluşuyor (fe_init / fe_run / fe_reset / fe_free)
  • Ağırlık blob’u 565 KB, parametre sayısı 511.754
  • MIT lisansı

Henüz yorum yok.

Henüz yorum yok.