Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

11. hafta / 14

Robotlarda derin öğrenme ve uçta yapay zekâ

Araçlar: Python (PyTorch ya da Keras), bu platform, Webots

Bu haftanın sonunda

  • Bir sinir ağının veriden nasıl öğrendiğini açıklamak (kayıp, gradyan inişi, aşırı öğrenme)
  • Küçük bir görüntü sınıflandırıcı eğitmek ve karışıklık matrisiyle değerlendirmek
  • Bir uç hızlandırıcı seçmek ve kameradan denetleyiciye bir tespit akışını tarif etmek

Ders notları

Klasik görü (10. hafta) kuralı yazabildiğinde işe yarar: "nesne kırmızıdır". Derin öğrenme yazamadığında devreye girer: "bu bir dur işareti", "bu bir insan". Kuralı yazmak yerine etiketli örnekler toplar ve ağın kuralı öğrenmesini sağlarsın.

Bir ağ nasıl öğrenir?

  • Bir nöron girdilerinin ağırlıklı toplamını ve bir sapmayı (bias) hesaplar, sonra doğrusal olmayan bir fonksiyon (ReLU) uygular. Nöron katmanları bir ağ oluşturur.
  • Kayıp fonksiyonu tahminlerin ne kadar yanlış olduğunu ölçer (sınıflandırmada çapraz entropi).
  • Gradyan inişi her ağırlığı kaybın gradyanının tersi yönünde biraz kaydırır; geri yayılım (backpropagation) bu gradyanları verimli hesaplar. Öğrenme oranı adım boyunu belirler: çok büyükse ıraksar, çok küçükse sürünür.
  • Veri eğitim, doğrulama ve test kümelerine ayrılır. Eğitim doğruluğu artmaya devam ederken doğrulama doğruluğu düşüyorsa ağ aşırı öğreniyor (overfitting): öğrenmek yerine ezberliyor. Daha fazla veri, veri çoğaltma (çevirme, parlaklık, gürültü) ve daha küçük modeller yardımcı olur.

Evrişimli ağlar (CNN)

Evrişim küçük bir filtreyi (örneğin 3×3) görüntü üzerinde kaydırır; böylece aynı kenar bulucu her yerde yeniden kullanılır. Üst üste evrişimler önce kenarları, sonra şekilleri, sonra nesneleri öğrenir. CNN'ler görüntü sınıflandırıcıların ve dedektörlerin omurgasıdır.

Tespit (detection)

Sınıflandırıcılar "görüntüde ne var" sorusunu cevaplar. YOLO gibi dedektörler "ne var ve nerede" sorusunu: sınıf ve güven puanıyla bir sınırlayıcı kutu listesi. Robotta akış 10. haftadakiyle aynıdır: kamera → dedektör → hedef seç → hata → denetleyici.

Bir modeli ölçmek

Doğruluk tek başına hataları gizler. Karışıklık matrisi hangi sınıfların karıştırıldığını gösterir. Güvenlik açısından önemli sınıflarda (insan, dur işareti) duyarlılık (recall) kesinlikten (precision) daha önemlidir: bir insanı kaçırmak, yanlış alarmdan daha kötüdür.

Uçta yapay zekâ donanımı

PlatformTipik kullanım
ESP32-S3 (TinyML)çok küçük modeller: anahtar sözcük tanıma, basit hareketler, 1 MB altı
Raspberry Pi + Hailo-8L / Coraldüşük güçte gerçek zamanlı tespit
Jetson Orin Nano / NXaynı anda birkaç ağ, ROS 2; araştırma robotlarında ve drone'larda olağan seçim

Modeller uç cihazlar için nicemleme (quantisation: 32-bit kayan noktadan 8-bit tam sayıya) ile küçültülür ve bir çalışma ortamına (TensorRT, TFLite, ONNX) aktarılır.

Eylemi öğrenmek

  • Pekiştirmeli öğrenme (reinforcement learning): bir ajan ödüllerden bir politika öğrenir; genellikle önce simülasyonda, sonra gerçek robota aktarılır (sim-to-real).
  • Taklit öğrenme (imitation learning): insan gösterimlerinden öğrenmek.
  • Görme-dil-eylem modelleri ve LLM ajanları: doğal dilden üst düzey görev planlama; altta klasik denetleyicileri çağırır.

Derinlemesine

Çözümlü örnek: parametreleri ve işlemleri saymak

k × k çekirdekli, Cin giriş ve Cout çıkış kanallı ve H × W çıktılı bir evrişim (convolution) için:

params = k · k · Cin · Cout + Cout     MACs = H · W · k · k · Cin · Cout

Bunu 32 × 32 renkli görüntüler ve 10 sınıf için küçük bir levha sınıflandırıcısına uygulayalım (aynı dolgu, 2 × 2 maksimum havuzlama):

KatmanÇıktıParametreMAC
evrişim 3×3, 3 → 1632 × 32 × 16448442 368
maks. havuzlama16 × 16 × 1600
evrişim 3×3, 16 → 3216 × 16 × 324 6401 179 648
maks. havuzlama8 × 8 × 3200
tam bağlı 2048 → 101020 49020 480

Ağın 25 578 parametresi vardır ve görüntü başına yaklaşık 1,64 milyon çarp-topla (MAC) işlemi gerektirir. float32'de ağırlıklar 102 KB, int8'e nicemlendiğinde (quantised) 25,6 KB yer tutar. En büyük aktivasyon (32 × 32 × 16 = 16 384 değer, int8'de 16 KB) da ESP32-S3'ün 512 KB SRAM'ine rahatça sığar; yani bu model gerçekçi bir TinyML hedefidir. Örüntüye dikkat edin: evrişimler az parametre ama hesaplamanın çoğunu, tam bağlı katman ise parametrelerin çoğunu tutar.

Tek satırda nicemleme

real = s · (q − z)

[−2, 6] aralığını uint8'e eşlemek için s = 8 / 255 ≈ 0,0314 ve z = 64 olur; böylece 0,0 tam olarak 64 diye saklanır. Ölçek ve sıfır noktası birkaç yüz temsilî kalibrasyon görüntüsünden seçilir; doğruluk kaybı CNN'lerde genellikle küçüktür, ama onu her zaman kendi doğrulama kümenizde ölçün.

Algılama metrikleri

Tahmin edilen bir kutu, gerçek bir kutuyla kesişim bölü birleşim (IoU) değeri en az 0,5 olduğunda doğru sayılır. (0, 0)–(10, 10) ve (5, 0)–(15, 10) kutuları 50 piksel² örtüşür ve birleşimleri 150 piksel²'dir; IoU = 0,33, yani bir ıska. Maksimum olmayanı bastırma (NMS), bir IoU eşiğinin üstündeki yinelenen kutuları kaldırır. 45 doğru pozitif, 15 yanlış pozitif ve 5 yanlış negatifle kesinlik (precision) = 45 / 60 = 0,75 ve duyarlılık (recall) = 45 / 50 = 0,90 olur.

Gecikme bir güvenlik sayısıdır

Kare yakalamadan direksiyon komutuna 100 ms geçen ve 2 m/s giden bir araç 0,2 m kör ilerler. Yalnızca çıkarım (inference) süresini değil, zincirin tamamını (yakalama, yeniden boyutlandırma, çıkarım, son işleme, mesaj) ölçün. Kaba bir rehber: küçük CNN'ler için ESP32-S3; bir ana bilgisayarın yanında gerçek zamanlı algılama için Coral Edge TPU (4 TOPS, yalnızca int8 TFLite) ve Hailo-8L (13 TOPS); birkaç ağ, CUDA ve ROS 2 tek kartta çalışacaksa Jetson Orin Nano.

Simülasyon

Tarayıcıda sinir ağı eğitmek

Küçük bir ağ (12×12 piksel → gizli katman → 3 sınıf) daireyi, kareyi ve üçgeni ayırt etmeyi öğrenir. Öğrenme oranını, gizli nöron ve eğitim görüntüsü sayısını değiştir; aşırı öğrenmenin ortaya çıktığını görmek için veri çoğaltmayı kapat.

Kod

Python (PyTorch): trafik işareti sınıfları için küçük bir CNN
import torch
import torch.nn as nn

class SignNet(nn.Module):
    def __init__(self, n_classes=4):          # dur, sol, sağ, hız sınırı
        super().__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),   # 64 -> 32
            nn.Conv2d(16, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),  # 32 -> 16
        )
        self.head = nn.Sequential(nn.Flatten(), nn.Linear(32 * 16 * 16, 64), nn.ReLU(), nn.Linear(64, n_classes))

    def forward(self, x):
        return self.head(self.features(x))

model = SignNet()
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
loss_fn = nn.CrossEntropyLoss()

def train_epoch(loader):
    model.train()
    for images, labels in loader:             # images: (B, 3, 64, 64)
        opt.zero_grad()
        loss = loss_fn(model(images), labels)
        loss.backward()                       # geri yayılım
        opt.step()                            # gradyan inişi adımı

Sık yapılan hatalar

  • Veri sızıntısı: aynı Webots çalışmasının ardışık karelerini hem eğitim hem test kümesine koymak.
  • Karelerin %90'ında levha bulunmayan dengesiz bir veri kümesinde düz doğruluk raporlamak.
  • Çıkarım sırasında eğitimden farklı ön işleme yapmak (RGB yerine BGR, farklı yeniden boyutlandırma veya normalleştirme).
  • Temsilî bir kalibrasyon kümesi olmadan nicemleyip gerekenden çok daha fazla doğruluk kaybetmek.
  • Hiperparametreleri test kümesinde ayarlamak; raporlanan sonuç iyimser çıkar.
  • Yalnızca çıkarım süresini verip yakalama, yeniden boyutlandırma ve son işleme gecikmesini yok saymak.

Yazılım mühendisliği bağlantısı

Eğitilmiş bir model, kod artı veriden üretilen bir derleme çıktısıdır (build artefact); bu yüzden diğer her çıktı gibi disiplin ister: sürümleme, yeniden üretilebilirlik ve yayın kapıları. Bu pratiğe MLOps denir.

  • Veriyi sürümleyin (DVC ya da en azından depoda veri kümesinin bir özeti, hash) ve eğitim, doğrulama ve test ayrımını dondurun.
  • Yeniden üretilebilir eğitim: sabit rastgele tohumlar, sabitlenmiş kütüphane sürümleri ve modeli yeniden üreten tek bir komut.
  • CI'da değerlendirme kapısı: bir betik her aday modeli dondurulmuş test kümesinde değerlendirir ve örneğin "dur" sınıfının duyarlılığı 0,95'in altına düşerse veya gecikme bütçeyi aşarsa başarısız olur.
  • Kısa bir model kartı (model card) veriyi, amaçlanan kullanımı, metrikleri ve bilinen hata durumlarını kaydeder.

Dönem projesi uygulaması: sınıf başına kesinlik ve duyarlılığı yazdıran ve gereksinimlerinizdeki bir eşik kaçırıldığında hata koduyla çıkan bir evaluate.py ekleyin; her model değişikliğinde CI'da çalıştırın.

İlgili kurs

Makine Öğrenmesi, sıfırdan: regresyon, k-NN, karar ağacı, k-means, PCA ve küçük bir sinir ağı

Aç

Laboratuvar görevi

Tarayıcıdaki sinir ağı simülasyonunda şekil sınıflandırıcıyı eğit: ıraksayan bir öğrenme oranı ve çok yavaş kalan bir öğrenme oranı bul, sonra veri çoğaltmayı kapat ve eğitim ile doğrulama doğruluğu arasındaki farkın büyüdüğünü izle. En iyi çalıştırmanın karışıklık matrisini kaydet.

Kendini sına

  1. 32 giriş kanallı, 64 çıkış kanallı ve sapma (bias) terimli 3 × 3'lük bir evrişimin kaç parametresi vardır?

  2. Bir dedektör 80 doğru pozitif, 20 yanlış pozitif ve 40 yanlış negatif üretiyor. Duyarlılığı (recall) nedir?

  3. 4 milyon parametreli bir model float32'den int8'e dönüştürülüyor. Ağırlıklarının boyutu nasıl değişir?

  4. (0, 0)–(10, 10) ve (5, 0)–(15, 10) kutularının IoU değeri nedir?

Bu hafta dönem projesinde

  • Otonom kara aracı: Ara kontrol: işaret sınıflandırıcı. Webots'tan toplanan veriyle eğitilmiş işaret ağı (doğrulama doğruluğu, karışıklık matrisi); engel durumu çalışıyor.
  • Otonom drone görevi: Ara kontrol: ara nokta görevi. Dört ara noktalı görev ve durum makinesi; kayıt ve harita görüntüsü.
  • Görsel kılavuzlu robot kol: Ara kontrol: al-bırak. Tek bir küp için tam al-bırak döngüsü; IK birim testleri.

Ödev

Webots dünyasından (ya da açık bir veri kümesinden) en az 200 trafik işareti görüntüsü topla, yukarıdaki SignNet'i eğit ve doğrulama doğruluğunu, karışıklık matrisini ve sınıf başına duyarlılığı raporla. Bir başarısızlık örneğini açıkla.

Bu haftanın donanımı (Hyvex)

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • TestlerimMini testler ve puanlarSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç