7.12. Post-processor¶
Jaringan deteksi tidak memancarkan kotak. Ia memancarkan satu atau lebih tensor yang tata letaknya bergantung pada arsitektur tempat model dilatih -- tensor 2-D dari prediksi kandidat untuk detektor keluarga YOLO, sepasang tensor (boxes, scores) untuk detektor MediaPipe, daftar datar koordinat titik kunci untuk jaringan pose. Aplikasi tidak dapat membaca salah satu dari ini secara langsung; apa yang diinginkan -- daftar kotak, daftar titik kunci, perincian per-kelas -- harus didekode dari tensor mentah.
Dekoder tersebut adalah post-processor. Modul ml.postprocessing mengelompokkannya berdasarkan ekosistem sumber.
7.12.1. Darknet¶
ml.postprocessing.darknet mendekode model dari era YOLO asli. YOLO v2 memperkenalkan ide grid dan anchor yang diwarisi oleh sebagian besar detektor berikutnya dalam berbagai bentuk, sehingga tata letak v2 adalah titik awal yang paling bersih.
YOLO v2 mulai dengan membagi citra input menjadi grid kasar -- tata letak 13-kali-13 untuk input 416-piksel kanonik, lebih kecil untuk model yang lebih kecil -- dan melatih jaringan sehingga setiap sel grid bertanggung jawab untuk mendeteksi objek mana pun yang pusatnya berada di dalamnya. Tata letak spasial tensor output mencerminkan tata letak input: satu posisi dalam output per sel dalam citra.
Pada setiap sel grid, jaringan tidak memprediksi kotak dari udara. Ia memilih dari beberapa bentuk referensi yang telah dipilih sebelumnya yang disebut anchor -- pasangan (width, height) tetap yang diperoleh secara offline dengan mengelompokkan ukuran kotak dalam set pelatihan sehingga mencakup objek-objek tipikal yang diharapkan dilihat oleh model. Tugas jaringan di setiap sel adalah memprediksi, untuk setiap anchor, offset kecil ke pusat kotak dalam sel, skala pada lebar dan tinggi anchor, skor objectness (kemungkinan ada sesuatu di sana), dan vektor probabilitas per-kelas. Grid 13-kali-13 dengan 5 anchor default dan 20 kelas oleh karena itu memancarkan 13 * 13 * 5 * (4 + 1 + 20) = 21,125 angka per inferensi.
YoloV2 mendekode tata letak tersebut: ia menelusuri sel-sel, menerapkan offset dan skala setiap anchor untuk memulihkan koordinat kotak absolut, menggabungkan objectness dengan probabilitas kelas untuk skor per-kelas, melakukan thresholding, dan mendorong para penyintas ke NMS. Kelas ini mengambil argumen konstruktor anchors= ketika model dilatih terhadap tabel anchor kustom dan kembali ke default bawaan jika tidak. Varian yang disesuaikan untuk set kelas tertentu tersedia dalam submodul yang sama.
7.12.2. Ultralytics¶
ml.postprocessing.ultralytics mendekode generasi YOLO yang lebih baru. YoloV8 membaca output kolom-utama di mana setiap kolom adalah satu prediksi anchor yang menyimpan koordinat kotak dan vektor skor per-kelas -- saluran objectness yang dibawa output YOLO sebelumnya telah dihilangkan di v8, dan skor kelas berdiri sendiri. Panduan YOLOv8 menelusuri tensor dekode satu per satu. Versi era Ultralytics yang lebih lama tersedia dalam submodul yang sama untuk model yang dilatih terhadap tata letaknya.
7.12.3. MediaPipe¶
ml.postprocessing.mediapipe mendekode keluarga perangkat ringan Google. BlazeFace adalah detektor wajah yang dibahas dalam hello-blazeface: detektor berbasis anchor yang cepat yang memancarkan kotak dan enam koordinat landmark per wajah, dikembalikan sebagai tuple (box, score, keypoints) dengan landmark yang dilampirkan ke setiap kotak daripada sebagai daftar output terpisah. Model deteksi tangan, landmark, dan pose dari keluarga yang sama tersedia bersamanya dan mengikuti bentuk kembalian keypoint-terlampir yang sama.
7.12.4. Memilih satu¶
Post-processor yang tepat ditentukan oleh arsitektur tempat model dilatih, bukan oleh apa yang diinginkan aplikasi. .tflite YOLOv8 hanya dapat didekode dengan benar melalui YoloV8; .tflite BlazeFace hanya melalui BlazeFace. Memilih post-processor adalah bagian dari memilih model. Ketika arsitektur model tidak diwakili oleh post-processor yang tersedia, menulis sendiri adalah hal yang mudah.
Jaringan klasifikasi adalah pengecualian. Tensor output tunggalnya sudah merupakan apa yang diinginkan aplikasi -- daftar skor per-kelas -- dan tidak diperlukan post-processor. Memuat model tanpa postprocess= dan membaca hasil prediksi sebagai ndarray datar adalah jalur yang tepat, sebagaimana yang dibahas oleh tensor I/O.