7.1. Sinir ağı nedir¶
Bir sinir ağı, davranışı elle kodlanmak yerine örneklerden öğrenilen bir algoritmadır. Aynı ağ mimarisi, kendisine bir milyon yüz görüntüsü verildiğinde yüzleri tespit etmeyi öğrenir. Aynı mimari, kendisine bir milyon el görüntüsü verildiğinde elleri tespit etmeyi öğrenir. Aynı mimari, birçok nesne kategorisini kapsayan etiketli bir küme verildiğinde hepsini bir kerede tespit etmeyi öğrenir. Hedefler arasında yalnızca ağırlıklar değişir ve ağırlıklar, ağın tahminlerini etiketli örneklere karşı izleyen ve eşleşene kadar ağırlıkları ayarlayan, harici (off-board) bir eğitim süreci tarafından üretilir.
7.1.1. Mekanizma¶
Bir sinir ağı, katmanlardan oluşan bir yığındır. Her katman, bir önceki katmanın çıktısını bir ağırlık matrisiyle çarpar, bir bias vektörü ekler ve sonuca doğrusal olmayan bir fonksiyon uygular. Bir katmanın çıktısı, sonrakinin girdisidir. Yakalanan bir görüntü yığının tepesinden girer, onlarca ya da yüzlerce katmandan aşağı doğru akar ve en altta, girişlerinin görüntüde ne olduğunu betimlediği bir tensör olarak çıkar.
Her katmanın ağırlıklarının ne yaptığı, ağın ne üzerinde eğitildiğine bağlıdır. Bir görü ağındaki erken katman ağırlık matrisi kısa yatay bir kenara tepki verebilir; biraz daha derin olanı bir köşeye; daha derin olanı dairesel bir göz şekline; en derin katmanlar ise bütün bir yüz düzenine tepki verebilir. Bunların hiçbiri elle yazılmadı. Eğitim süreci milyonlarca etiketli örnek üzerinde yineledi, ağırlıkları bir kayıp fonksiyonunda aşağı doğru itti ve kenar-sonra-köşe-sonra-göz-sonra-yüz hiyerarşisi verilerden kendiliğinden ortaya çıktı.
Katmanlardan oluşan bir yığın olarak küçük bir sınıflandırma ağı. Giriş tensörü, yakalanan görüntünün şekliyle tepeden girer ve katmanlardan aşağı doğru akar; her biri tensörün boyutlarını dönüştürür. En alttaki çıkış tensörü, sınıf başına bir giriş içerir. Tespit ve anahtar nokta ağları aynı katman yığını biçimini paylaşır; yalnızca çıkış tensörünün yorumlanması değişir.¶
Ağın mimarisi – katmanların nasıl düzenlendiği, hangi işlemlerin onları birbirine bağladığı – ağın yapabileceği şeydir. Ağırlıklar ise ağın öğrenmiş olduğu şeydir. Kameranın bu işteki payı, eğitimin ürettiği ağırlık dosyasını yüklemek ve eğiticinin çalıştırdığı aynı aritmetiği, eğitim kümesi yerine yakalanan çerçeve üzerinde çalıştırmaktır.
7.1.2. İçeri ne beslenir, dışarı ne çıkar¶
Ağın her iki ucu da tensördür – sayılardan oluşan çok boyutlu diziler, numpy bölümünün az önce tanıttığı türden nesnelerin aynısı. Bir görü ağının giriş tensörü, ağın beklediği düzene göre yeniden düzenlenmiş yakalanan görüntüdür: tipik olarak bir (B, H, W, C) 4’lü şekli; burada B yığın boyutudur (kamerada her zaman 1, çünkü her seferinde tek bir çerçeve işlenir), H ve W ağın beklediği piksel yüksekliği ve genişliğidir ve C kanal sayısıdır (RGB ağı için 3, gri tonlama için 1).
Çıkış tensörü ağın ne için olduğuna bağlıdır:
Bir sınıflandırma ağı, sınıf başına bir tane olmak üzere güven puanlarından oluşan 1 boyutlu bir tensör üretir. En büyük puanın indeksi tahmin edilen sınıftır. Çoğu kamerayla birlikte gelen MobileNet türevli kişi tespit edici bu biçimdedir: iki puan, biri “kişi” için, biri “kişi değil” için.
Bir tespit ağı, girişleri bir sınırlayıcı kutu listesini ve sınıf olasılıklarını betimleyen 2 boyutlu bir tensör üretir. YOLOv8 bu biçimdedir: 84 satırın 4’ünün kutu regresyon değerleri, diğer 80’inin sınıf başına olasılıklar olduğu ve
Nçapa konumu boyunca tekrarlanan bir(84, N)tensörü.Bir anahtar nokta ağı, girişleri adlandırılmış işaretlerin piksel konumları olan bir tensör üretir. MediaPipe yüz işaretleri modeli bu biçimdedir: tespit edilen yüz başına 468 anahtar nokta.
Bir bölütleme ağı, girişleri piksel başına sınıf etiketleri olan 2 boyutlu bir tensör üretir – girişle aynı boyutlarda, her konumda bir kategori indeksi ile.
Bir regresyon ağı, tek bir sayı ya da kısa bir sayı vektörü üretir – bir derinlik tahmini, bir açı, bir sıcaklık.
Her biçimin kamerada kendi son işlemcisi (post-processor) vardır; bu, ham çıkış tensörünü uygulamanın geri kalanının kullandığı sonuç biçimine geri çevirir – sınırlayıcı kutular, anahtar nokta listeleri, sınıf etiketleri, sayısal tahminler. Son işlemci, ağın çıkış düzenini bilen uygulama tarafındaki koddur; ağın kendisi yalnızca tensörü üreten aritmetiktir.
7.1.3. Bunun bir kamerada neden işe yaradığı¶
İki aritmetik parça bunu bir mikrodenetleyici sınıfı parça için pratik kılar. Birincisi niceleme (quantization). Eğitim 32 bitlik kayan noktalı aritmetikte gerçekleşir; çıkarım ise çoğu ağ için neredeyse hiç doğruluk kaybı olmadan 8 bitlik tamsayı aritmetiğinde çalışabilir. Sekiz bitlik ağırlıklar depolamanın dörtte birini kaplar ve 32 bitlik kayan noktalardan birkaç kat daha hızlı çalışır. Kameranın birlikte geldiği her model, harici olarak (off-board) zaten nicelenmiştir.
İkincisi donanım hızlandırması. Bir mikrodenetleyicinin CPU’sunun her seferinde bir komut işleyerek ağır ağır geçtiği aynı aritmetiği, bir sinir ağı hızlandırıcısı bir kerede yüzlerce işlem olarak çalıştırır. Daha yeni kameralar (AE3 ve N6) özel bir sinir işleme birimi (NPU) taşır – SoC üzerinde bir tensör hızlandırıcısı – ve bu, CPU’da çalışması bir saniye sürecek bir modeli onlarca milisaniyede çalışan bir modele dönüştürür. Çıkarım motorları bölümü, kameranın bu işteki payının nasıl göründüğünü ele alır.
7.1.4. Bölümün kapsadıkları¶
Eğitim kameranın işi değildir. Eğitilmiş bir model kameraya bir .tflite dosyası olarak gelir; kamera onu yükler, yakalanan her çerçeveyi içinden geçirir ve ortaya çıkan tensörü uygulamanın üzerinde işlem yapabileceği bir sonuca çözer. Bundan sonra gelen her şey bu adımların her biriyle ilgilidir:
bir modelin yüklenmesi ve incelenmesi;
model dosyalarının bulunduğu flash bölümü;
bir çıkarım çağrısının dört aşaması;
aritmetiği gerçekten yapan motorlar;
ve bir çıkış tensörünü tekrar bir kutu, anahtar nokta ya da sınıf listesine dönüştüren son işlemciler.
Görüntü bölümündeki tespit ediciler her biri belirli bir hedefe yönelikti. Bu bölümün geri kalanının kapsadığı tespit ediciler ise bunun yerine verilerden eğitilir ve betiğin yüklediği hangi modelse onu çalıştıran aynı motor kullanılır. Bunlarla birlikte gelen iş akışı değişikliği – hedefe özgü bir algoritmanın yerini hedefe özgü bir ağırlık dosyasının alması – ortaya konacak bir sonraki konudur.