Rilis Opus 1.5: Opus yang Di-upgrade dengan Machine Learning
(opus-codec.org)- Dengan fitur berbasis machine learning, ditambahkan packet loss concealment, peningkatan kualitas suara bitrate rendah, dan transmisi redundan DRED sambil tetap mempertahankan kompatibilitas penuh dengan RFC 6716
- Fitur baru berbasis ML dinonaktifkan secara default, dan karena ukuran serta biaya CPU, memerlukan sakelar saat build dan sakelar saat runtime
- Deep PLC dibangun dengan
--enable-deep-plcdan harus dijalankan dengan kompleksitas decoder 5 atau lebih agar berfungsi; karena hanya memengaruhi decoder, tidak ada dampak terhadap kompatibilitas - DRED diaktifkan dengan
--enable-dreddan juga otomatis mengaktifkan--enable-deep-plc; belum distandardisasi, dan DRED di Opus 1.5 tidak kompatibel dengan versi final, tetapi ketidakcocokan dideteksi melalui nomor versi eksperimental pada bitstream sehingga payload DRED diabaikan - DRED mengirim hingga 1 detik audio redundan sekaligus, dengan overhead sekitar 12~32 kb/s, pada dasarnya setara dengan mengirim paket 20 ms sebanyak 50 kali
- Untuk meningkatkan suara bitrate rendah, ditambahkan LACE dan NoLACE; setelah build dengan
--enable-osce, LACE aktif pada kompleksitas decoder 6 dan NoLACE aktif pada 7 atau lebih tinggi - LACE dan NoLACE saat ini hanya diterapkan ketika ukuran frame 20 ms dan bandwidth wideband atau lebih tinggi, dan karena peningkatannya independen dari encoder, tidak ada dampak terhadap kompatibilitas
- Penggunaan DRED memerlukan integrasi yang lebih dekat dengan jitter buffer, dan DRED dapat diuji melalui patch webrtc-opus-ng, sebuah fork dari repositori Google WebRTC
- Di kelompok kerja IETF mlcodec, sedang berlangsung pekerjaan standardisasi untuk mekanisme ekstensi Opus, deep redundancy, dan speech coding enhancement
- Ditambahkan dukungan AVX2/FMA dan deteksi runtime sehingga kode DNN baru dan encoder SILK menggunakan SIMD 256-bit pada perangkat yang didukung
- Pada AArch64, optimisasi ARMv7 Neon diaktifkan kembali, dan ekstensi Arm dot product pada Cortex-A75 atau lebih baru dideteksi saat runtime untuk mempercepat inner product integer 8-bit pada kode DNN baru
- Ditambahkan simulator packet loss yang realistis, dan setelah build dengan
--enable-lossgen, dapat digunakan diopus_demodengan-sim-loss <percentage>
1 komentar
Pendapat di Hacker News
Batasan utama codec seperti ini adalah CPU dan daya tahan baterai, dan saya suka karena di sini machine learning diterapkan secara selektif di sana-sini lalu digabungkan dengan algoritma tradisional non-machine-learning, sehingga mendapatkan kompromi yang baik antara kualitas dan CPU
Misalnya, dalam dukungan bitrate rendah/LACE, mereka mengatakan “memulai dari ide postfilter yang sudah teruji, lalu menaburkan sedikit saja sihir jaringan saraf deep learning di atasnya, tepat sesuai kebutuhan”
Intinya adalah tidak memasukkan sampel audio mentah ke jaringan saraf. Pendekatannya adalah “audio itu sendiri tidak pernah melewati DNN. Hasilnya adalah model yang kecil menurut standar DNN dan memiliki kompleksitas sangat rendah, sehingga bisa dijalankan bahkan di ponsel lama”
Ini tampak seperti arah yang tepat untuk algoritma embedded, dan dibandingkan machine learning end-to-end yang sedang populer akhir-akhir ini, kelihatannya merupakan area yang masih relatif kurang dieksplorasi
Speech recognition berbasis machine learning juga lebih baik pada beberapa benchmark, tetapi punya kompromi serupa berupa halusinasi hasil
Ini kabar yang sangat menyenangkan karena saya memakai Opus sebagai salah satu codec utama di library streaming audio P2P (https://git.iem.at/cm/aoo/ - masih alfa)
Saya pasti akan mencoba sendiri fitur-fitur machine learning baru ini
Mendapatkan kualitas suara sebagus ini pada 9kbps dengan NoLACE benar-benar luar biasa
Agar bisa terus menguji kode produksi, saya harus meng-encode ulang seluruh katalog musik ke WMA 8000kbps dan melakukan streaming
Kualitasnya agak mengecewakan
$ ffmpeg -i female_ref.wav - acodec real_144 female_ref.raKarena mungkin tidak didukung, saya mengubahnya kembali ke wav dan mengunggahnya di sini: http://9ol.es/female_ref-ra.wav
Ini dulu dianggap sebagai audio “14.4” untuk dial-up 14,4kb/s pada pertengahan 90-an. Sangat mengesankan melihat kualitas yang bisa didapat, bahkan dengan jumlah byte yang sebenarnya lebih sedikit, telah meningkat sejauh ini dalam hampir 30 tahun
Menarik melihat bagaimana codec audio, sintesis suara, dan pengenalan suara berkembang saling terkait. Kemajuan di satu sisi biasanya mengarah pada kemajuan di sisi lain
Yang saya penasaran adalah apakah mereka menangani pertanyaan-pertanyaan umum seputar etika machine learning. Secara spesifik, apakah algoritmanya berkinerja lebih baik atau lebih buruk pada suara pria dan wanita, bagaimana dengan berbagai bahasa atau dialek, dan apakah sejak awal memang disetel hanya untuk suara manusia atau juga bekerja baik pada musik atau kicau burung
Meski begitu, contohnya mengesankan, dan saya berharap kualitas yang bisa dipahami seperti ini menjadi standar dalam panggilan telepon
Mereka terutama mengujinya dalam bahasa Inggris, tetapi karena ini belum distandardisasi, salah satu alasan mereka merilisnya lebih awal adalah agar orang bisa mencobanya sendiri dan melaporkan masalah
Rasio pembicara pria dan wanita hampir sama. Namun codec memang selalu memiliki sedikit bias kualitas perseptual ke satu arah atau lainnya tergantung tinggi nada. Dan semua yang ada di sini khusus untuk suara manusia
Dalam kasus seperti itu pun, test set, dan kadang bahkan set “training” dan “validation”, digunakan untuk menemukan parameter yang baik. Data seperti ini, maupun telinga evaluator yang mengambil keputusan, semuanya bisa menjadi sumber bias
Dalam machine learning, pertanyaan bias sering muncul karena pada dasarnya algoritma tidak bekerja tanpa data, tetapi semua algoritma dirancang manusia dan banyak algoritma menggunakan data untuk pengaturan parameter. Keduanya bisa menjadi sumber bias
Menurut saya machine learning lebih terkenal dalam hal ini karena memiliki bias induktif yang lebih sedikit daripada algoritma tradisional, sehingga lebih mudah menyerap bias yang ada dalam dataset
Sebelum UTF digunakan luas, situs web dan aplikasi yang mengabaikan karakter khusus yang dipakai dalam bahasa saya juga mirip
Saya melihat ini lebih sebagai keterbatasan teknis atau ketidaktahuan daripada masalah etika
Saya bertanya-tanya bagaimana kalau menyertakan stream subtitle teks. Encoder bisa mengubah suara menjadi teks dengan machine learning, lalu decoder dapat menggunakan teks itu bersama audio di sekitar bagian audio yang terputus dan memasukkannya ke DNN text-to-speech bersyarat
Dengan begitu jaringan tidak perlu mempelajari masalah yang lebih sulit, yaitu menginterpolasi bagian yang terputus secara buta hanya dari audio. Stream teks memiliki bitrate rendah, jadi redundansi yang cukup besar juga bisa ditambahkan untuk meningkatkan kemungkinan pesan teks tertentu diterima
Pada akhirnya, output disintesis dari informasi tingkat lebih tinggi yang dikompresi secara efisien
Sangat keren. Tampaknya mereka menangani masalah halusinasi. Akan menarik melihat contoh ketika halusinasi muncul saat tidak ada redundansi, lalu diperbaiki dengan redundansi
Saya penasaran apakah versi Opus baru ini memperkecil jarak dengan xHE-AAC yang selama ini unggul pada bitrate rendah
Saya suka bahwa Opus 1.5 sekarang praktis transparan untuk suara bahkan pada 16kbps, dan pada 96kbps masih lebih baik daripada MP3 192kbps
Sebaliknya, xHE-AAC masih terasa setengah matang karena rentang 96~256kbps justru tampak lebih buruk dalam praktik dibanding sekitar 160kbps AAC-LC (Apple, FDK)
Saya bertanya-tanya apakah ada profiler atau pengaturan yang membantu agar tidak menambahkan terlalu banyak artefak saat meng-encode ulang format lossy yang sudah ada
Koleksi besar akan menghadapi masalah ini jika tidak mudah mengakses master lossless
Jika saya bisa tahu bahwa penurunan kualitas tambahannya minimal, saya sangat tertarik memindahkan berbagai file mp3, aac, dan vorbis ke Opus