7.2. ML’in değiştirdikleri¶
image modülü bir avuç eski (legacy) tespit yöntemi taşır – Haar-cascade yüz tespiti için find_features(), sabit gözbebeği bulucu için find_eye(), gradyan yönü özetleri için find_hog(), keyfi anahtar noktalar için find_keypoints() ve find_lbp() yolları. Hepsi hâlâ çalışıyor; hepsinin yerini makine öğrenmesi iş hattı aldı.
7.2.1. Klasik ayrım: elle tasarlanmış özetler, öğrenilmiş kararlar¶
Klasik bir görü iş hattı iki adımlı bir şeydi. İlk adım, ham pikselleri, resimde ne olduğunu özetlemek için seçilmiş kompakt bir sayı kümesine dönüştürürdü – piksel değerlerinin kendisini değil, hangi desenlerin nerede göründüğüne dair daha kısa bir betimlemeyi. İkinci adım bu özeti alır ve bir karar verirdi: yüz mü değil mi, bu nesne mi şu nesne mi, aynı hedef mi farklı mı.
Ayrım önemliydi çünkü iki adımın yazarları farklıydı. İlk adımı bir insan yazardı. Birisi oturup, iki belirli dikdörtgen arasındaki parlaklık farkının bir göz bölgesinin iyi bir özeti olduğuna, bir ızgaranın her hücresindeki baskın kenar yönünün ayakta duran bir kişinin silüetinin iyi bir özeti olduğuna, her pikselin çevresindeki parlak-ya-da-koyu desenin yerel dokunun iyi bir özeti olduğuna karar verirdi. Bu seçimlerin her biri elle yazılmış bir algoritmaydı – yazılmış, hata ayıklanmış ve yayımlanmış. Yukarıdaki eski yöntemlerin hepsi, standart araçlar hâline gelmiş bu türden özetlerdi:
find_features(), görüntünün bir penceresini, birkaç dikdörtgenin içindeki parlaklığı toplayıp toplamları karşılaştırarak özetler. Dikdörtgen düzenleri, insan yüzlerinin güvenilir parlak-karşı-koyu kontrastlar gösterdiği için seçildi: kaşlar yanaklara karşı, göz çukurları alına karşı, burun çevresindeki cilde karşı.find_hog(), bir görüntüyü, küçük hücrelerden oluşan bir ızgarayı dolaşarak ve her hücrede hangi kenar yönünün baskın olduğunu kaydederek özetler. Izgara, ayakta duran bir kişinin silüeti giysi ya da aydınlatmadan bağımsız olarak tanınabilir bir kenar yönleri deseni ürettiği için seçildi.find_lbp(), her pikselin komşuluğunu, çevresindeki piksellerden hangilerinin daha parlak hangilerinin daha koyu olduğunu kodlayarak özetler. Kodlama, bu daha-parlak / daha-koyu desenleri genel aydınlatmadan bağımsız olarak bir yüzeyin dokusunu yakaladığı için seçildi.find_keypoints(), görüntüdeki köşe noktalarını bulur ve her köşenin çevresindeki alanı, köşe döndürüldüğünde aynı kalacak şekilde betimler. Köşe-ve-döndürme şeması, bir sahne farklı bir açıdan görüldüğünde aynı köşeler yeniden ortaya çıktığı için seçildi.
Bir özet elle yazıldıktan sonra, üzerine eklenen küçük bir öğrenme adımı sayıları bir kararda birleştirebilirdi. Yüz tespit algoritması, dikdörtgen-farkı özetinin üzerine bir öğrenme adımı ekledi ve onu etiketli yüz ve yüz-olmayan görüntüler üzerinde eğiterek hangi fark kombinasyonlarının bir yüze işaret ettiğini öğretti. Kenar-yönü özeti, etiketli kişi ve kişi-olmayan görüntüler üzerinde eğitilmiş bir öğrenme adımına beslendi. Köşe tanımlayıcıları, her köşeye ne kadar ağırlık verileceğini öğrenen bir eşleştirme adımına beslendi. Bu ikinci adımların her biri bir öğrenme algoritmasıdır – modern standartlara göre küçük bir tane, ama yine de bir öğrenme algoritması.
Önemli olan, katkının nasıl bölündüğüydü. İnsan özeti katkı olarak sundu. Makine kombinasyonu öğrendi. Yeni bir hedef eklemek, yeni bir özet yazmak demekti.
7.2.2. Sinir ağlarının değiştirdikleri¶
Bir sinir ağı bu ayrımı ortadan kaldırır. Ağın ilk katmanları, elle yazılmış algoritmaların eskiden yaptığı özet işini yapar – kenarları, köşeleri, yönlendirilmiş çubukları, dokuları tespit etmek, tam olarak yukarıda listelenen eski yöntemlerin her birinin tespit etmeye ayarlanmış olduğu şeyleri – ama bunlar elle yazılmamıştır. Karar adımının öğrenildiği aynı eğitim verilerinden, ağın her iki yarısını da bir kerede ayarlayan tek bir eğitim geçişinde öğrenilirler. Daha derin katmanlar, elle yazılmış özetlerin üzerindeki küçük öğrenme adımının eskiden yaptığı birleştirme işini yapar; bu da yine aynı geçişte öğrenilir.
Neyi kimin tasarladığı konusundaki değişim tamdır:
İnsan girişi tasarlar – belirli bir boyut ve biçimde yakalanan çerçeveler.
İnsan çıkışı tasarlar – sonuç tensörünün düzenini (sınıflandırma için sınıf başına bir puan, tespit için bir kutu listesi, işaretler için bir anahtar nokta ızgarası).
İnsan etiketli eğitim verisi sağlar – eğitim sürecinin öğrenebileceği bir şeyler olması için hedeften yeterince örnek ve hedef-olmayanlardan yeterince örnek.
Giriş ile çıkış arasındaki her şey eğitim süreci tarafından üretilir. Ayrı bir özet-yazma adımı yoktur. Erken katmanlar, birisi onları öyle yazdığı için değil, kenar ve doku tespitinin ağın tahminlerini etiketlerle eşleştiren şey olduğu için kenar ve doku tespit edicilere yerleşir. Daha derin katmanlar aynı nedenle şekil ve nesne tespit edicilere yerleşir. Her iki yarı birlikte eğitilir; bu da her katmanın ürettiği özetlerin tam olarak bir sonraki katmanın ihtiyaç duyduğu özetler olmasını sağlar – elle yazılmış bir iş hattının razı olmak zorunda kaldığı genel olanlar değil.
7.2.3. image modülüyle birlikte kullanım¶
Sinir ağı iş hatları hâlâ aynı sensör API’leri üzerinden yakalar, sonuçları aynı draw_rectangle() ve draw_circle() ilkelleri üzerinden çizer ve işi aynı (x, y, w, h) ROI’leri üzerinden kapsamlandırır. Tipik bir iş hattı bir çerçeve yakalar, isteğe bağlı olarak find_blobs() gibi klasik bir tespit ediciyle kaba bir hedef bulur ve onun sınırlayıcı kutusunu çıkarıma bir ROI olarak geçirir, çıkarımı çalıştırır ve döndürülen tespitleri tekrar özgün çerçeveye işaretler. Klasik ilkeller alt katmandır; ağ ise ortadaki yeni adımdır.