Deteksi wajah merupakan gerbang utama bagi sebagian besar alur kerja (pipeline) computer vision. Setiap panggilan video, galeri foto, dan umpan keamanan bergantung pada pendeteksian wajah manusia sebelum hal lain dapat dilakukan. Namun, pilihan model biasanya memaksa adanya pertukaran (trade-off) yang tidak menyenangkan. Jaringan yang berat menawarkan akurasi tetapi membutuhkan GPU mahal dan pendingin rak (rack-mounted cooling). Model yang lebih kecil dapat berjalan pada perangkat keras sederhana namun sering kali kesulitan menangani wajah kecil atau umpan beresolusi tinggi. Model YuNet dari OpenCV Zoo mematahkan pola tersebut. Saya menghabiskan waktu untuk melakukan benchmarking pada berbagai skala guna melihat apakah model ini layak mendapatkan tempat dalam proyek nyata atau hanya terlihat bagus di atas kertas.
Mengapa YuNet Layak Diperhatikan Lebih Dekat
YuNet bukanlah sekadar rasa ingin tahu penelitian. Model ini berada di dalam OpenCV Zoo, sebuah koleksi model pra-latih (pre-trained) yang dioptimalkan untuk modul OpenCV DNN. Varian spesifik yang saya uji menggunakan kuantisasi INT8, yang berarti bobot (weights) dan aktivasinya dikompresi menjadi integer 8-bit, bukan angka floating-point 32-bit seperti biasanya. Ini bukan sekadar catatan teknis kecil. INT8 memangkas bandwidth memori, mengurangi tekanan cache, dan memungkinkan CPU modern untuk menjalankan inferensi tanpa kesulitan berarti. Bagi siapa pun yang membangun aplikasi di laptop, perangkat edge, atau server tanpa kartu grafis khusus, efisiensi ini adalah pembeda antara alur kerja yang lancar dan tampilan yang patah-patah (slideshow).
Arsitekturnya sendiri dirancang ringan. Ia melewatkan beban backbone yang besar dan berfokus pada satu tugas tunggal: melokalisasi wajah. Kedisiplinan ini membuahkan hasil saat Anda perlu mengintegrasikan deteksi ke dalam aplikasi yang lebih besar di mana anggaran CPU dan baterai harus dibagi dengan pelacakan (tracking), pengenalan (recognition), atau pengodean video (video encoding).
Pengaturan (Setup)
Semua pengujian dijalankan pada Mac Studio dengan chip Apple M4 Max. File model yang digunakan adalah build YuNet INT8 quantized ONNX dari repositori OpenCV Zoo. Saya mengukur kecepatan inferensi pada gambar 1280x720 terlebih dahulu, kemudian membandingkan jumlah deteksi di empat resolusi input yang berbeda untuk memahami bagaimana skala memengaruhi hasil.
Jika Anda ingin memverifikasi angka-angka ini pada mesin Anda sendiri, prosesnya dapat direproduksi sepenuhnya. Jalankan perintah berikut untuk menarik repositori sparse dan mengeksekusi benchmark:
git clone --depth 1 --filter=blob:none --sparse https://github.com/kiarina/labs.git
cd labs
git sparse-checkout set .gitignore .mise/tasks Makefile mise.toml 2026/07/08/yunet-face-detection
mise -C 2026/07/08/yunet-face-detection run
Sparse checkout menjaga ukuran unduhan tetap kecil, dan task runner mise menangani dependensi di balik layar. Anda tidak perlu bersusah payah dengan lingkungan Python atau instalasi paket secara manual.
Kecepatan yang Tetap Konsisten
Pada gambar 1280x720, model YuNet INT8 rata-rata membutuhkan 9,21 milidetik per inferensi. Kecepatan tercepat tercatat pada 8,03 ms, sementara yang terlambat menyentuh 10,47 ms. Rentangnya sangat sempit. Kurang dari dua setengah milidetik memisahkan waktu terbaik dan terburuk.
Dalam praktiknya, konsistensi ini lebih penting daripada sekadar pamer angka. Aplikasi real-time tidak hanya membutuhkan latensi rata-rata yang rendah; mereka membutuhkan latensi yang dapat diprediksi. Model yang terkadang membutuhkan waktu 50 ms akan menciptakan gangguan (stutter) yang terlihat pada umpan webcam. YuNet tetap stabil. Anda dapat mengandalkannya untuk menyelesaikan satu frame sebelum frame berikutnya tiba, yang membuat penjadwalan sisa alur kerja Anda menjadi jauh lebih sederhana.
Variansi Skala Mengungkap Fakta Sebenarnya
Kecepatan mentah tidak berarti banyak jika model melewatkan separuh wajah dalam sebuah adegan. Untuk menguji hal ini, saya memasukkan citra sumber yang sama melalui YuNet pada empat resolusi berbeda. Hasil penghitungannya menceritakan sebuah fakta yang jelas:
- 320 x 180: 6 wajah terdeteksi
- 640 x 360: 26 wajah terdeteksi
- 1280 x 720: 38 wajah terdeteksi
- 2560 x 1440: 52 wajah terdeteksi
Lonjakannya sangat dramatis. Pada 320 x 180, hanya wajah terbesar dan terdekat yang terdeteksi. Naik ke 640 x 360, jumlahnya meningkat empat kali lipat. Pada resolusi penuh 1440p, YuNet menemukan lebih dari delapan kali lipat jumlah wajah dibandingkan pada resolusi terendah.
Hal ini terjadi karena downsampling menghancurkan detail lebih cepat daripada yang diperkirakan. Wajah yang menempati area sedang dalam frame 1440p dapat menyusut menjadi sekadar bercak berukuran lima kali lima piksel pada 360p. Begitu fitur wajah runtuh di bawah receptive field model, fitur tersebut menjadi noise yang tidak terlihat. Mata menyatu dengan alis. Hidung menghilang. YuNet tidak memiliki titik acuan untuk mendeteksinya.
Kesimpulan praktisnya patut diingat. Jika kamera Anda menangkap pandangan sudut lebar (wide-angle) dari sebuah ruang kelas, ruang konferensi, atau sudut jalan, wajah-wajah yang jauh tidak akan muncul kecuali Anda memberikan piksel yang cukup kepada model tersebut. Di sini, resolusi bukan sekadar tentang kualitas gambar. Resolusi adalah tuas langsung untuk meningkatkan recall.
Strategi Resize yang Benar-benar Anda Butuhkan
YuNet cukup cepat sehingga Anda tidak perlu mengecilkan input Anda menjadi 320 x 240 secara paksa karena kebiasaan. Pada M4 Max, bahkan resolusi 2560 x 1440 dapat berjalan tanpa GPU khusus. Hal ini mengubah cara Anda merancang sebuah pipeline.
Alih-alih memaksa setiap frame melewati ukuran tetap yang kecil, pilihlah resolusi input berdasarkan apa yang ingin Anda temukan. Jika Anda hanya peduli dengan orang yang berada tepat di depan kamera, 720p atau bahkan 640p sudah cukup. Jika Anda perlu mengatalogkan setiap peserta di aula besar, berikan model potongan (crop) beresolusi lebih tinggi atau frame asli secara penuh. Karena YuNet ringan, Anda memiliki ruang (headroom) untuk membuat pilihan tersebut. Anda tidak terkunci pada satu preset tunggal hanya untuk menghindari lag 200 ms.
Satu catatan tetap ada. Model ini masih bergantung pada ukuran wajah relatif terhadap tensor input. Tidak ada invariansi skala ajaib di sini. Wajah-wajah kecil akan tetap tidak terlihat kecuali mereka menempati piksel yang cukup. Solusinya bersifat mekanis: perbesar ukuran gambar sumber Anda sebelum inferensi saat mencari subjek yang jauh, lalu petakan bounding box yang dihasilkan kembali ke koordinat asli. YuNet memberi Anda anggaran kecepatan untuk melakukan langkah tersebut.
Di Mana Posisi Ini dalam Stack Anda
YuNet bukanlah solusi untuk setiap tugas wajah yang bisa dibayangkan. Oklusi berat, sudut profil ekstrem, atau ekstraksi mesh 3D berada di luar cakupannya. Namun untuk pekerjaan utama seperti menemukan wajah dalam foto dan aliran video, YuNet berada di titik yang ideal. Aplikasi webcam real-time, alat penyortiran foto otomatis, dan sistem embedded sederhana semuanya mendapat manfaat dari detektor yang berjalan cepat pada CPU standar.
Format INT8 ONNX juga membuat penerapan (deployment) menjadi mudah. Anda tidak perlu menginstal PyTorch atau TensorFlow pada perangkat target. Modul DNN OpenCV memuat model secara langsung, yang menjaga ukuran biner Anda tetap kecil dan pohon dependensi Anda tetap dangkal.
Kesimpulan
YuNet membuktikan bahwa deteksi wajah tidak memerlukan perangkat keras industri atau framework yang berat. Angkanya berbicara dengan jelas: kurang dari sepuluh milidetik untuk frame 720p, dan peningkatan jumlah deteksi yang langsung dan dapat diprediksi seiring meningkatnya resolusi. Anda dapat memilih apakah ingin kecepatan maksimum pada resolusi sedang atau cakupan yang lebih luas pada skala yang lebih tinggi, dan model ini tidak akan merugikan Anda atas pilihan tersebut.
Jika Anda sedang membangun sesuatu yang bersentuhan dengan citra dunia nyata, jalankan langkah-langkah reproduksi di atas pada perangkat keras Anda sendiri. Uji dengan rekaman Anda. Kemudian sesuaikan logika resize Anda agar sesuai dengan wajah yang benar-benar perlu Anda temukan. Kecepatan hanya berguna jika Anda dapat mengarahkannya. YuNet memberi Anda kecepatan sekaligus kendali.
