การปรับปรุงเสียงพูด — DeepFilterNet3
ลบเสียงรบกวนพื้นหลังออกจากการบันทึกเสียงพูดโดยใช้ DeepFilterNet3 โมเดลทำงานบน Neural Engine ผ่าน CoreML เพื่อให้ inference มีประสิทธิภาพ ขณะที่การประมวลผลสัญญาณทั้งหมด (STFT, ERB filterbank, deep filtering) ทำงานบน CPU ผ่าน Accelerate/vDSP
สถาปัตยกรรม
DeepFilterNet3 ใช้สถาปัตยกรรม decoder คู่ที่แยกการปรับปรุงเส้นโครงสเปกตรัมออกจากการกู้คืนรายละเอียดสเปกตรัมแบบละเอียด
| ขั้นตอน | รายละเอียด |
|---|---|
| STFT | Short-time Fourier transform ผ่าน vDSP |
| Encoder | 4 ชั้น SepConv2d + SqueezedGRU |
| ERB Decoder | มาสก์ sigmoid ใช้กับแถบความถี่ระดับ ERB |
| DF Decoder | สัมประสิทธิ์ filter เชิงซ้อน 5-tap |
| iSTFT | STFT แบบผกผันเพื่อสร้างสัญญาณในโดเมนเวลา |
ERB Decoder ประมาณค่ามาสก์ gain บนสเกล Equivalent Rectangular Bandwidth (ERB) ใช้สำหรับการกำหนดรูปร่างสเปกตรัมกว้าง DF Decoder ทำนายสัมประสิทธิ์ filter เชิงซ้อน 5-tap สำหรับรายละเอียดเล็ก โดยใช้ฟิลเตอร์ที่เรียนรู้แล้วโดยตรงในโดเมนความถี่
ไปป์ไลน์การประมวลผล
- STFT — แตกเสียงที่มีนอยส์ออกเป็นการแทนค่าเวลา–ความถี่ด้วย vDSP
- คุณลักษณะ ERB — แมป bin ของ STFT ไปยังแถบความถี่สเกล ERB
- โครงข่ายประสาท — Encoder ประมวลผลคุณลักษณะบน Neural Engine; decoder ERB และ DF ทำนายพารามิเตอร์การปรับปรุง
- การมาสก์ ERB — ใช้มาสก์ gain แบบ sigmoid เพื่อกดเสียงรบกวนในเส้นโครงสเปกตรัม
- Deep filtering — ใช้สัมประสิทธิ์เชิงซ้อน 5-tap เพื่อกู้คืนรายละเอียดสเปกตรัมที่ละเอียด
- iSTFT — สร้างเสียงสะอาดกลับจากสเปกตรัมที่ปรับปรุงแล้ว
รุ่นของโมเดล
| รุ่น | ขนาด | ความแม่นยำ |
|---|---|---|
| INT8 (ค่าเริ่มต้น) | ~2.2 MB | quantize 8 บิต |
| FP32 | ~4.3 MB | ความแม่นยำเต็ม |
โมเดลมีประมาณ 2.1M พารามิเตอร์ รุ่น INT8 ถูกใช้เป็นค่าเริ่มต้นและให้คุณภาพเทียบเท่าโดยใช้ขนาดเพียงครึ่งเดียว
การใช้งาน CLI
# ลดเสียงรบกวน (เอาต์พุตไปที่ _denoised.wav)
.build/release/speech denoise noisy.wav
# ระบุไฟล์เอาต์พุต
.build/release/speech denoise noisy.wav -o clean.wav
# ใช้โมเดลรุ่น FP32
.build/release/speech denoise noisy.wav --model fp32
ตัวเลือก
| ตัวเลือก | คำอธิบาย |
|---|---|
--output, -o | เส้นทางไฟล์เอาต์พุต (ค่าเริ่มต้น <input>_denoised.wav) |
--model | รุ่นของโมเดล: int8 (ค่าเริ่มต้น) หรือ fp32 |
DeepFilterNet3 ทำงานบน Neural Engine ผ่าน CoreML ไม่ใช่บน GPU ผ่าน MLX นั่นหมายความว่าโมเดลทำงานได้อย่างมีประสิทธิภาพแม้ในขณะที่โมเดลอื่นๆ ที่อาศัย GPU (ASR, TTS) กำลังทำงานอยู่ ไม่จำเป็นต้อง compile metallib
ดาวน์โหลดโมเดล
| โมเดล | ขนาด | HuggingFace |
|---|---|---|
| DeepFilterNet3 (CoreML FP16) | ~4.2 MB | aufklarer/DeepFilterNet3-CoreML |
การใช้ร่วมกับโมเดลอื่นๆ
การปรับปรุงเสียงพูดมีประโยชน์อย่างยิ่งเมื่อใช้เป็นขั้นตอน preprocessing ก่อนใช้กับโมเดลอื่นๆ
- ก่อนการถอดเสียง — ลดเสียงรบกวนก่อนรัน ASR เพื่อลดอัตราข้อผิดพลาดของคำในการบันทึกที่มีนอยส์สูง
- ก่อนการทำ embedding ผู้พูด — เสียงที่สะอาดกว่าทำให้ได้ embedding ผู้พูดที่น่าเชื่อถือกว่า
- ก่อนการแยกแยะผู้พูด — การลบเสียงรบกวนช่วยปรับปรุงความแม่นยำของการแบ่งเซกเมนต์ได้
# ลดเสียงรบกวนแล้วถอดเสียง
.build/release/speech denoise noisy.wav -o clean.wav
.build/release/speech transcribe clean.wav
API ของ Swift
import SpeechEnhancement
let model = try await DeepFilterNet3.loadFromHub()
let cleanAudio = try await model.denoise(audioFile: "noisy.wav")
try cleanAudio.write(to: "clean.wav")
มีให้ใช้บน Android และ Linux ผ่าน ONNX Runtime ด้วยเช่นกัน