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ı
| Platform | Tipik kullanım |
|---|---|
| ESP32-S3 (TinyML) | çok küçük modeller: anahtar sözcük tanıma, basit hareketler, 1 MB altı |
| Raspberry Pi + Hailo-8L / Coral | düşük güçte gerçek zamanlı tespit |
| Jetson Orin Nano / NX | aynı 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:
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ı | Parametre | MAC |
|---|---|---|---|
| evrişim 3×3, 3 → 16 | 32 × 32 × 16 | 448 | 442 368 |
| maks. havuzlama | 16 × 16 × 16 | 0 | 0 |
| evrişim 3×3, 16 → 32 | 16 × 16 × 32 | 4 640 | 1 179 648 |
| maks. havuzlama | 8 × 8 × 32 | 0 | 0 |
| tam bağlı 2048 → 10 | 10 | 20 490 | 20 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
[−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
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
32 giriş kanallı, 64 çıkış kanallı ve sapma (bias) terimli 3 × 3'lük bir evrişimin kaç parametresi vardır?
Bir dedektör 80 doğru pozitif, 20 yanlış pozitif ve 40 yanlış negatif üretiyor. Duyarlılığı (recall) nedir?
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?
(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.