GÖREV KAYDI

GÖREV KAYDI

KAYIT AÇIK

ATILIM UAV · YER KONTROL İSTASYONU

GÖREV KAYDI / DETAY

Arşiv

CANLI · OKUMA MODU

Yazılım

YOLO11 ile Havadan Nesne Tespiti: Uçtan Uca Eğitim Rehberi

YOLO11 ile Havadan Nesne Tespiti: Uçtan Uca Eğitim Rehberi

FIG. 01

KAYIT KÜNYESİ

Kategori

Yazılım

TARİH

TÜM KAYITLAR

Takımın ilk denemesi klasikti: yolo11n.pt'yi indir, gimbal kamerasının RTSP akışına bağla, İHA'yı 20 metreye çıkar. Sonuç, yerdeki hedeflerde sıfır tespit oldu. Aynı model, masaüstünde bir web görselindeki insanı, arabayı ya da çantayı bulmakta hiç zorlanmıyordu.

Burada gizemli bir şey yok. COCO gibi genel amaçlı veri setleri, nesnenin karenin epey büyük bir bölümünü doldurduğu göz hizası fotoğraflardan derlenir. 20 metreden dik aşağı bakan bir kamerada ise aynı hedef birkaç düzine piksele iner ve silueti tamamen değişir. Model bu dağılımı hiç görmemiştir, o kadar.

Bu yazıda SUAS 2026 için kurduğumuz eğitim hattını uçtan uca anlatıyoruz: veriyi nasıl topladık, data.yaml'i nasıl yazdık, model boyutu ve imgsz seçimimizi ne belirledi, results.csv'den ne okuduk. Her komutu ve parametre adını resmî Ultralytics dokümantasyonunun 8.4.105 sürümüne göre doğruladık (24 Temmuz 2026 itibarıyla, Python 3.8-3.13). YOLO11 ailesi bu sürümde hâlâ aktif olarak destekleniyor ve aşağıdaki API, daha yeni YOLO26 modellerinde de birebir aynı.

Modelin tavanını veriniz belirler

Eğitim komutunu yazmadan önce harcadığınız her saat kendini geri öder. İlk veri setimizin yalnızca %11 kadarı gerçek havadan çekimdi; geri kalanı internetten toplanmış yer seviyesi görüntülerdi. İki sınıf arasındaki örnek oranı da 7:1'e kadar açılmıştı. O sürümün ürettiği doğrulama skoru iyi görünüyordu ama sahada bir karşılığı yoktu.

Kritik nokta şu: doğrulama setine web görselleri koyarsanız model kolay örneklerden puan toplar ve gerçek uçuş koşullarını hiçbir zaman ölçemezsiniz. Doğrulama setini yalnızca havadan çekimlerden yeniden kurduğumuzda sayılar dürüstleşti ve bu sette mAP50 (0.50 IoU, yani Intersection over Union — kesişimin birleşime oranı — eşiğinde hesaplanan mean Average Precision) 0.950'ye ulaştı.

Veri kaynağı

Güçlü yanı

Zayıf yanı

Ne zaman kullanılır

Web görselleri

Hızlı, bol, ücretsiz

Yanlış bakış açısı, yanlış ölçek

Bir sınıfın genel görünümünü öğretmek için, yalnızca eğitim setinde

Kendi uçuş kayıtlarımız

Tam olarak doğru dağılım

Toplaması pahalı, havaya bağlı

Doğrulama setinin tamamı, artı eğitimin büyük bölümü

Simülasyon kareleri (Gazebo + SITL)

Sınırsız üretim, etiketler bedava geliyor

Doku ve aydınlatma gerçekçi değil

Nadir senaryoları ve arka plan çeşitliliğini takviye etmek

Pratik kural: her yeni veri turunda önce doğrulama setini, sonra eğitim setini büyütün.

Klasör düzeni ve data.yaml

Ultralytics, etiket dosyalarını görüntü yolundaki images dizinini labels ile değiştirerek bulur. Yani klasör adları tam olarak şöyle olmak zorunda:



Her etiket dosyası satır başına bir nesne tutar: sınıf indeksi, ardından normalize edilmiş (0-1 aralığına ölçeklenmiş) merkez-x, merkez-y, genişlik ve yükseklik.

0 0.512 0.334 0.041 0.062
1 0.780 0.611 0.115 0

0 0.512 0.334 0.041 0.062
1 0.780 0.611 0.115 0

Kullandığımız data.yaml dosyası da şöyle görünüyor:

path: /home/team/datasets/suas2026   # root directory
train: images/train
val: images/val
# test: images/test   # optional

nc: 2
names:
  0: mannequin
  1

path: /home/team/datasets/suas2026   # root directory
train: images/train
val: images/val
# test: images/test   # optional

nc: 2
names:
  0: mannequin
  1

Etiket dosyalarındaki sınıf numaraları ile names içindeki indeksler birebir eşleşmek zorunda. Bu eşlemeyi bozmak, bir modelin sessiz sedasız yanlış şeyi öğrenmesinin en yaygın nedenidir.

Model boyutu: n, s, m mi, l mi?

Aşağıdaki sayılar Ultralytics'in resmî YOLO11 tablosundan geliyor; COCO doğrulama setinde imgsz=640 ile ölçülmüş. Hız değerleri TensorRT10 ile bir NVIDIA T4 üzerinde alındı. Kendi companion computer'ınızda (uçuşta görüntü işlemeyi koşturan kart) süreler farklı çıkacaktır; o sütuna yalnızca göreli bir karşılaştırma gözüyle bakın.

Model

mAP50-95

T4 TensorRT10 (ms)

Parametre (M)

FLOPs (B)

Ne zaman

YOLO11n

39.5

1.5

2.6

6.5

Zayıf donanım, yüksek FPS şartsa

YOLO11s

47.0

2.5

9.4

21.5

Hız/doğruluk dengesi, ilk prototip

YOLO11m

51.5

4.7

20.1

68.0

Jetson sınıfı kart artı küçük nesneler

YOLO11l

53.4

6.2

25.3

86.9

Gerçek zamanlı değil, sonradan işleme

Jetson Orin NX 16GB üzerinde YOLO11m'de karar kıldık. m'den l'ye çıkmak COCO'da kabaca 2 mAP puanı kazandırıyor ama çıkarım süresini gözle görülür biçimde artırıyor; bizim uçuş bütçemizde bu takas kendini ödetmedi. Kendi kartımızda tam kare 640 çıkarımda 15-20 FPS alıyoruz.

imgsz seçimi: küçük nesnelerin can simidi

imgsz varsayılan olarak 640'tır. Havadan görüntüde her şeyi belirleyen parametre budur. Hedef 1080p bir karede 25 piksel genişliğindeyse, 640'a küçültmek onu kabaca 15 piksele indirir; modelin en ince öznitelik haritası bile onu yakalamakta zorlanır.

Biz imgsz=1280 ile eğitiyoruz. Bunun bir bedeli var: aynı batch boyutunda hem GPU belleği hem epoch süresi gözle görülür biçimde tırmanıyor, çoğu zaman batch'i düşürmek zorunda kalıyorsunuz. Uçuşta tam kareyi 640'ta işliyor, şüpheli bölgeler için kareyi SAHI (dilimli çıkarım) ile birbiriyle örtüşen parçalara bölüyoruz. SAHI'nin slice_height, slice_width, overlap_height_ratio ve overlap_width_ratio parametreleri parçaların ne kadar örtüşeceğini belirler; örtüşmeyi sıfırda bırakmayın, yoksa dilim sınırında ikiye bölünen nesneleri kaybedersiniz.

Çıkarım tarafında imgsz değerini her zaman açıkça belirtin. Eğitimdeki değerle çıkarımdaki değer sessizce ayrışırsa, doğrulamada gördüğünüz skor sahada gördüğünüz davranışla örtüşmez.

Temel eğitim komutu

CLI'dan:

yolo detect train model=yolo11m.pt data=suas2026.yaml \
  epochs=300 imgsz=1280 batch=8 patience=50 \
  device=0 workers=8 project=runs name

yolo detect train model=yolo11m.pt data=suas2026.yaml \
  epochs=300 imgsz=1280 batch=8 patience=50 \
  device=0 workers=8 project=runs name

Aynı iş Python API'siyle:

from ultralytics import YOLO

model = YOLO("yolo11m.pt")          # start from pretrained weights
results = model.train(
    data="suas2026.yaml",
    epochs=300,
    imgsz=1280,
    batch=8,          # -1 enables AutoBatch, which targets ~60% of GPU memory
    patience=50,      # stop if there is no improvement for 50 epochs
    close_mosaic=10,  # turn off mosaic augmentation for the last 10 epochs
    amp=True,         # mixed precision: faster and lighter on memory
    seed=0,
)
from ultralytics import YOLO

model = YOLO("yolo11m.pt")          # start from pretrained weights
results = model.train(
    data="suas2026.yaml",
    epochs=300,
    imgsz=1280,
    batch=8,          # -1 enables AutoBatch, which targets ~60% of GPU memory
    patience=50,      # stop if there is no improvement for 50 epochs
    close_mosaic=10,  # turn off mosaic augmentation for the last 10 epochs
    amp=True,         # mixed precision: faster and lighter on memory
    seed=0,
)

Parametre

Varsayılan

Bizim değerimiz

Gerekçe

epochs

100

300

Ultralytics başlangıç önerisi olarak 300 veriyor; overfitting (aşırı öğrenme) yaşamıyorsanız 600'ün ötesine de çıkabilirsiniz

patience

100

50

Varsayılan değer, 100 epoch'luk bir koşuda erken durdurmayı fiilen devre dışı bırakıyor

batch

16

8

imgsz=1280 belleği doldurduğu için düşürüldü

imgsz

640

1280

Küçük hedefler

optimizer

auto

auto

Bunu elle ayarlamaktansa önce veriyi düzeltmek daha çok kazandırıyor

fraction

1.0

0.1 (deneme koşularında)

Hattın çalıştığını 10 dakikada doğrulamak için

Sonuçları okumak

Eğitim bittiğinde çıktılar runs/detect/train/ altına yazılır: weights/best.pt ve weights/last.pt, results.csv, results.png, BoxPR_curve.png, BoxF1_curve.png, confusion_matrix.png, artı val_batch*_labels.jpg / val_batch*_pred.jpg karşılaştırma kareleri.

results.csv dosyasının sütunları şunlar: epoch, time, train/box_loss, train/cls_loss, train/dfl_loss, metrics/precision(B), metrics/recall(B), metrics/mAP50(B), metrics/mAP50-95(B), val/box_loss, val/cls_loss, val/dfl_loss, lr/pg0, lr/pg1, lr/pg2.

Biz üç sinyale bakıyoruz:

  • val/box_loss düşüp sonra yeniden tırmanmaya başlıyorsa overfitting başlamış demektir; best.pt zaten o dönüm noktasından alınır.

  • Yüksek precision ile düşük recall, modelin temkinli davranıp hedefleri kaçırdığı anlamına gelir; çaresi daha fazla veri çeşitliliği ya da daha yüksek bir imgsz.

  • Tersi, yani yüksek recall ile düşük precision, modelin yanlış pozitif ürettiğini gösterir; çalışma noktasını PR eğrisinden seçip uçuş için conf eşiğini yükseltin. Bizim uçuş değerimiz: conf=0.25.

Karıştırılmaması gereken bir nokta: mAP, güven eşiğinden bağımsız bir metriktir. Uçuşta kullandığınız conf değeri ayrı bir mühendislik kararıdır ve mAP'i değiştirmez.

Sık düşülen tuzaklar

  • Web görsellerini doğrulama setinde bırakmak. Var olan en pahalı hata bu. Skoru şişirir, sahada size hiçbir şey kazandırmaz.

  • train/val sızıntısı. Aynı uçuştan gelen ardışık kareleri iki sete dağıtırsanız, model esasen aynı görüntüyü ezberler. Kareye göre değil, uçuşa göre bölün.

  • names ile etiket indekslerinin birbirinden kayması. Etiketleme aracınızda sınıf sırası değişirse tüm veri seti sessizce bozulur. Her dışa aktarımdan sonra rastgele 10 etiketi elle kontrol edin.

  • Körü körüne batch=-1'e güvenmek. AutoBatch, GPU belleğinin yaklaşık %60'ını hedefler; kartı başka bir süreç paylaşıyorsa eğitimin ortasında bellek yetmeyebilir.

  • Varsayılan patience=100 ile 100 epoch eğitmek. Erken durdurma hiç devreye girmez, boşuna zaman yakarsınız.

  • Ölçek uyuşmazlığı. 640'ta eğitip 1280'de çıkarım koşturmak (ya da tersi) tespit sayınızı hiç beklemediğiniz biçimde değiştirir.

Pratik özet

  1. Doğrulama setini yalnızca gerçek uçuş kayıtlarından kurun ve her şeyi ona göre ölçün.

  2. imgsz'yi hedefin piksel boyutuna göre seçin. Havadan tespitte 640 çoğu zaman yetmez.

  3. Model boyutunu COCO tablosuna değil, companion computer'ınızdaki gerçek FPS'e göre seçin.

  4. İlk turu fraction=0.1 ve az sayıda epoch ile koşup hattın uçtan uca çalıştığını doğrulayın, sonra tam eğitime geçin.

  5. Her koşuda results.csv dosyasını arşivleyin; iki eğitim koşusunu karşılaştıramıyorsanız, neyin işe yaradığını asla bilemezsiniz.

©2026 ATILIM UAV TEAM

©2026 ATILIM UAV TEAM