7.12. Son işlemciler¶
Bir tespit ağı kutular yaymaz. Düzeni, modelin üzerinde eğitildiği mimariye bağlı olan bir veya daha fazla tensör yayar – bir YOLO ailesi tespitçisi için aday tahminlerinden oluşan 2 boyutlu bir tensör, bir MediaPipe tespitçisi için bir çift (boxes, scores) tensörü, bir poz ağı için düz bir anahtar nokta koordinatları listesi. Uygulama bunların hiçbirini doğrudan okuyamaz; istediği şey – kutuların listesi, anahtar noktaların listesi, sınıf başına bir döküm – ham tensörden kod çözülerek çıkarılmalıdır.
Bu kod çözücü bir son işlemcidir. ml.postprocessing modülü bunları kaynak ekosistemine göre gruplandırır.
7.12.1. Darknet¶
ml.postprocessing.darknet, özgün YOLO döneminden gelen modellerin kodunu çözer. YOLO v2, sonraki tespitçilerin çoğunun bir biçimde miras aldığı ızgara ve bağlantı (anchor) fikirlerini ortaya koydu, dolayısıyla v2 düzeni en temiz başlangıç noktasıdır.
YOLO v2, giriş görüntüsünü kaba bir ızgaraya bölerek başlar – kanonik 416 piksellik giriş için 13’e 13’lük bir düzen, daha küçük modeller için daha küçük – ve ağı, her ızgara hücresi merkezi kendi içine düşen herhangi bir nesneyi tespit etmekten sorumlu olacak şekilde eğitir. Çıkış tensörünün uzamsal düzeni, girişin düzenini yansıtır: görüntüdeki her hücre için çıkışta bir konum.
Her ızgara hücresinde ağ, bir kutuyu yoktan tahmin etmez. Bağlantılar (anchors) adı verilen önceden seçilmiş birkaç referans şekilden seçim yapar – eğitim kümesindeki kutu boyutlarının kümelenmesiyle çevrimdışı türetilen ve modelin görmesi beklenen tipik nesneleri kapsayan sabit (width, height) çiftleri. Ağın her hücredeki görevi, her bağlantı için hücre içindeki kutu merkezine küçük bir ofset, bağlantının genişlik ve yüksekliği üzerinde bir ölçek, bir nesnellik skoru (orada herhangi bir şeyin bulunma olasılığı) ve sınıf başına bir olasılık vektörü tahmin etmektir. Bu nedenle varsayılan 5 bağlantı ve 20 sınıfa sahip 13’e 13’lük bir ızgara, çıkarım başına 13 * 13 * 5 * (4 + 1 + 20) = 21,125 sayı yayar.
YoloV2 bu düzenin kodunu çözer: hücreleri dolaşır, mutlak kutu koordinatlarını kurtarmak için her bağlantının ofsetlerini ve ölçeklerini uygular, sınıf başına skor için nesnelliği sınıf olasılığıyla birleştirir, eşikler ve hayatta kalanları NMS’ye iletir. Model özel bir bağlantı tablosuna karşı eğitildiğinde sınıf bir anchors= kurucu argümanı alır, aksi takdirde yerleşik bir varsayılana geri döner. Belirli sınıf kümeleri için ayarlanmış çeşitler aynı alt modülde sevk edilir.
7.12.2. Ultralytics¶
ml.postprocessing.ultralytics, daha yeni YOLO nesillerinin kodunu çözer. YoloV8, her sütunun kutu koordinatlarını ve sınıf başına bir skor vektörünü tutan tek bir bağlantı tahmini olduğu sütun ağırlıklı bir çıkışı okur – daha eski YOLO çıkışlarının taşıdığı nesnellik kanalı v8’de düşürülmüştür ve sınıf skorları kendi başına durur. YOLOv8 adım adım kılavuzu kod çözmeyi tensör tensör adımlar. Daha eski Ultralytics dönemi sürümleri, kendi düzenlerine karşı eğitilmiş modeller için aynı alt modülde sevk edilir.
7.12.3. MediaPipe¶
ml.postprocessing.mediapipe, Google’ın hafif cihaz üzeri ailesinin kodunu çözer. BlazeFace, hello-blazeface belgesinde ele alınan yüz tespitçisidir: kutuları ve yüz başına altı belirgin nokta koordinatını yayan, hızlı, bağlantı tabanlı bir tespitçi; belirgin noktalar ayrı bir çıkış listesi olarak değil her kutuya eklenmiş şekilde (box, score, keypoints) demetleri olarak döndürülür. Aynı aileden el tespiti, belirgin nokta ve poz modelleri onunla birlikte sevk edilir ve aynı ekli anahtar nokta döndürme yapısını izler.
7.12.4. Birini seçme¶
Doğru son işlemci, uygulamanın istediğine göre değil, modelin üzerinde eğitildiği mimariye göre belirlenir. Bir YOLOv8 .tflite yalnızca YoloV8 aracılığıyla doğru kod çözülür; bir BlazeFace .tflite yalnızca BlazeFace aracılığıyla. Son işlemciyi seçmek, modeli seçmenin bir parçasıdır. Bir modelin mimarisi sevk edilen bir son işlemci tarafından temsil edilmediğinde, kendinizinkini yazmak basittir.
Sınıflandırma ağları istisnadır. Tek çıkış tensörleri zaten uygulamanın istediği şeydir – sınıf başına skorlardan oluşan bir liste – ve hiçbir son işlemci gerekmez. tensör G/Ç belgesinde ele alındığı gibi, modeli postprocess= olmadan yüklemek ve tahmin sonucunu düz bir ndarray olarak okumak doğru yoldur.