यह मेरा खुद बनाया हुआ प्रोजेक्ट है.

  • FastEnhancer-Medium (48 kHz streaming speech enhancement model) के runtime को pure C में दोबारा implement करने वाली लाइब्रेरी है
  • मूल मॉडल: https://github.com/aask1357/fastenhancer (Ahn et al., 2025)
  • मूल repo ने paper (16 kHz) के बाद अतिरिक्त रूप से जारी किए गए 48 kHz weights को ज्यों का त्यों इस्तेमाल किया है। कोई retraining, fine-tuning, या calibration set नहीं है
  • मॉडल और weights मूल लेखक के हैं, और optimize किया गया हिस्सा runtime side है

■ प्रदर्शन

  • Apple M2 के 1 core पर real-time factor 0.069 आता है। उसी मशीन पर वही graph ONNX Runtime में चलाने पर 0.230 आता है, इसलिए यह 3.3 गुना है
  • Galaxy S23+ (Snapdragon 8 Gen 2) पर यह 0.096 है
  • quality degradation लगभग नहीं के बराबर है। VoiceBank-DEMAND की 824 utterances पर fp32 मॉडल की तुलना में यह केवल -0.006 PESQ तक सीमित है। सुनकर फर्क पहचानने लायक स्तर नहीं है

■ लागू किए गए optimization

एक ही technique से 3 गुना नहीं मिला, बल्कि कई layers को अलग-अलग optimize किया गया है.

  • quantization: activation value range को हर frame में फिर से calculate किया जाता है। इसलिए calibration set को match करने या साथ में distribute करने की बिल्कुल जरूरत नहीं है, और input distribution बदलने पर भी यह नहीं टूटता
  • convolution: k=3 conv पर Winograd F(2,3) लागू किया गया है, और उसके बाद आने वाले epilogue (dequant + bias + SiLU + fp16 write) को भी उसी pass में fold करके intermediate buffer हटा दिया गया है
  • recurrence: GRU को हर tier पर एक kernel में पूरी तरह fuse किया गया है। input-side matrix multiplication, hidden-side matrix multiplication, r/z/n तीनों gates, और hidden update तक सब एक ही kernel में खत्म हो जाता है, इसलिए int32 accumulator memory में leak नहीं होता
  • attention: softmax सीधे int32 scores लेकर process करता है। fp32 score matrix को बिल्कुल नहीं बनाया जाता, इसलिए उतनी memory round-trip खत्म हो जाती है
  • memory: cross-stage state (GRU hidden, encoder skip) को fp16 में store करके frames के बीच bandwidth को आधा कर दिया गया है
  • kernels: ISA के हिसाब से int8 GEMM kernels के 6 प्रकार सीधे लिखे गए हैं और initialization के समय auto-select होते हैं (ARM NEON/DOTPROD/I8MM, x86 AVX2/AVX-VNNI/AVX-512)
  • बाकी optimization list प्रोजेक्ट के Github पर देखी जा सकती है

■ real-time स्थिरता

  • सिर्फ 37 सेकंड के benchmark से बात खत्म नहीं की गई, बल्कि असली audio callback cycle पर 30 मिनट लगातार चलाकर verify किया गया है
  • M2 पूरे 30 मिनट frame budget के भीतर रहा (p99 0.56)

■ अन्य

  • external dependency 0। cmake + make से build होता है और static library का आकार 162 KiB है
  • public API में 4 functions हैं (fe_init / fe_run / fe_reset / fe_free)
  • weight blob 565 KB, parameters 511,754
  • MIT लाइसेंस

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.