Görevi Seç ve İşlem Hattını Planla
Her ürün sorusunu yedi Ultralytics YOLO görevinden biriyle eşleştir; ağırlıklarını, sonuç alanını, etiket biçimini ve eşik metriğini belirle ve her görevi tek bir görüntüde çalıştırarak planı doğrula.

Bir dedektör kullanıma alındıktan sonra gelen yeni istekler nadiren "daha fazla kutu" olur. Bunlar "döküntü ne kadar geniş", "çalışanın beli eğilmiş mi", "gemi hangi yöne bakıyor" ve "bu parça hurda mı" gibi sorulardır. Bu kursta baştan sona kullanılan sokak fotoğrafında, otobüsün sınırlayıcı kutusu görüntünün %48'ini kaplarken otobüsün kendisi yalnızca %29'unu kaplıyor; dolayısıyla kutuya dayalı alan hesabı yarıdan fazla hatalı olur. Seçtiğin görev etiket biçimini belirler; bu nedenle görevi etiketleme başlamadan seçmek projedeki en düşük maliyetli karardır. Daha sonra değiştirmek, etiketleri yeniden oluşturmak demektir.
Uygulamalı
Tek fotoğraf, dört farklı yanıt#

Tek bir fotoğrafa tek bir soru sor — bu görüntünün ne kadarı otobüs ve otobüs ne kadar uzakta? — ve dört Ultralytics YOLO görevinin yanıtlamasını sağla:
from ultralytics import YOLO
image = "https://ultralytics.com/images/bus.jpg"
det = YOLO("yolo26n.pt")(image, verbose=False)[0]
seg = YOLO("yolo26n-seg.pt")(image, retina_masks=True, verbose=False)[0]
sem = YOLO("yolo26n-sem.pt")(image, verbose=False)[0]
depth = YOLO("yolo26n-depth.pt")(image, verbose=False)[0]
frame = det.orig_shape[0] * det.orig_shape[1] # pixels in the photo
i = [det.names[int(c)] for c in det.boxes.cls].index("bus")
x1, y1, x2, y2 = det.boxes.xyxy[i].tolist()
print(f"detect bus box covers {(x2 - x1) * (y2 - y1) / frame:.1%} of the frame")
i = [seg.names[int(c)] for c in seg.boxes.cls].index("bus")
bus_mask = seg.masks.data[i].bool() # H x W, True on bus pixels
print(f"segment bus mask covers {bus_mask.sum().item() / frame:.1%} of the frame")
ratios = {row["name"]: row["pixel_ratio"] for row in sem.summary()}
print(f"semantic 'train' pixels {ratios['train']:.1%} of the frame")
meters = depth.depth.data[bus_mask].median().item() # depth map and mask share the original size
print(f"depth bus is about {meters:.1f} m from the camera")detect bus box covers 47.7% of the frame
segment bus mask covers 29.2% of the frame
semantic 'train' pixels 30.9% of the frame
depth bus is about 4.5 m from the cameraSatır satır incele:
- detect, nerede sorusunu yanıtlar. Kutu, otobüsün altındaki yolu ve önünde duran dört kişiyi de içerir; bu yüzden alan hesabı %63 fazla çıkar.
- segment, şekli ne sorusunu yanıtlar. Görüntüde otobüsün kapladığı gerçek alan %29,2'dir; alan, kapsam veya örtüşme kurallarında kullanman gereken sayı budur.
- semantic, hangi piksellerin hangi sınıfa ait olduğunu yanıtlar. Alan maske alanına yakındır, ancak model otobüse
trainadını verir: yüzeyleri eğitim kümesindeki sınıflarla (Cityscapes, ders 4) etiketler ve araçları birbirinden ayırmaz. - depth, ne kadar uzakta sorusunu yanıtlar. Otobüs maskesinin içindeki medyan derinlik 4,5 m'dir — tek başına hiçbirinin yanıtlayamadığı bir soruyu yanıtlamak için iki görev birleştirilmiştir.
Ürünün raporladığı değer alan, kapsama oranı veya örtüşmeyse kutu yanlış araçtır. Nesneler için maske (segment), yüzeyler için sınıf haritası (semantik) kullan.
Yedi göreve genel bakış#
Computer Vision Foundations, görevler arasında nasıl seçim yapacağını ayrıntılı olarak ele alır — seçim açık değilse Yedi Görüntü İşleme Görevi bölümünü yeniden incele. Bu, kursun geri kalanı için pratik bir özettir. Her satır, kurulu ultralytics paketinin aynı API ile eğittiği, doğruladığı, tahmin yaptığı ve dışa aktardığı bir görevi gösterir; görevlere genel bakış kapsamlı başvuru kaynağıdır.
| Çıktının yanıtladığı soru | Görev | YOLO26 ağırlıkları | Sonuç alanı | Etiket biçimi | Eşik metriği |
|---|---|---|---|---|---|
| Her nesne nerede? | detect | yolo26n.pt | boxes | sınıf + kutu | kutu mAP50-95 |
| Her nesnenin tam şekli ve alanı nedir? | segment | yolo26n-seg.pt | masks + boxes | sınıf + çokgen | maske mAP50-95 |
| Her piksel hangi sınıfa ait? | semantic | yolo26n-sem.pt | semantic_mask | PNG sınıf haritası veya çokgenler | mIoU |
| Eklemler veya işaret noktaları nerede? | pose | yolo26n-pose.pt | keypoints + boxes | sınıf + kutu + anahtar noktalar | pose mAP50-95 (OKS) |
| Her nesne nasıl döndürülmüş? | obb | yolo26n-obb.pt | obb | sınıf + 4 köşe | OBB mAP50-95 |
| Bu görüntünün (veya kırpımın) tamamında ne var? | classify | yolo26n-cls.pt | probs | her sınıf için bir klasör | top-1 doğruluğu |
| Her piksel kameradan ne kadar uzakta? | depth | yolo26n-depth.pt | depth | her görüntü için derinlik haritası (16 bit PNG veya NPY) | δ1 (delta1) |
İlk satırdaki görevi zaten kullanıma alıyorsun. 2-8. dersler ortadaki beş satırı, 9. ve 10. dersler ise bu görevlerin zincirlenmesini ve kullanıma alınmasını öğretir. Son satırdaki tek görüntülü derinlik kestirimi, tek bir görüntüdeki her piksel için metre cinsinden mesafe tahmini yapar. Etiketleri anotatörlerden değil, derinlik sensörlerinden veya 3D oluşturuculardan gelir; bu yüzden kendine özgü bir veri kümesi biçimi vardır. Bu kurs, iş akışının ortak olduğu yerlerde bu görevi de içerir: bu planda, doğrulama döngüsünde ve son dersteki dışa aktarma kontrolünde.
Her seferinde tek bir soru seç#
Soruları sırayla incele ve ilk evet yanıtında dur:
Şema yaygın durumları kapsar. Diğer durumların çoğu için dört ek ayırt edici ölçüt yeterlidir:
| İstek… | Seç | Çünkü |
|---|---|---|
| hem bir sayıma hem de alana ihtiyaç duyuyorsa ("kaç döküntü var ve ne kadar büyükler") | segment | anlamsal segmentasyon birbirine değen nesneleri tek bir bölgede birleştirir |
| yukarıdan görülen, yan yana sıkışık, uzun ve ince nesneler içeriyorsa | obb | açıları hiç okumasan bile eksenlere hizalı kutular örtüşür ve NMS gerçek nesneleri eler |
| ön ile arka ya da sol ile sağ ayrımı gerekiyorsa | pose | OBB yön ekseni verir, başlık vermez |
| tasarımı gereği her görüntüde tam olarak tek bir öğe varsa (sabit bir inceleme istasyonu) | classify | en ucuz etiketler ve en hızlı model |
Veri kümesini oluşturduğunda görev sabitlenir — Ultralytics Platform'da bu, Yeni Veri Kümesi iletişim kutusundaki Görev Türü alanıdır — dolayısıyla bu seçimi ilk etiketi oluşturmadan önce yapmalısın:

Tek API, yedi sonuç alanı#
Her görev aynı çağrıyı kullanır; model görevini ağırlık dosyasından okur. Değişen, sonuçta hangi alanın doldurulduğudur ve kodunun okuyacağı alan da budur:
from ultralytics import YOLO
WEIGHTS = ["yolo26n.pt", "yolo26n-seg.pt", "yolo26n-sem.pt", "yolo26n-pose.pt", "yolo26n-obb.pt", "yolo26n-cls.pt", "yolo26n-depth.pt"]
FIELDS = ("boxes", "masks", "semantic_mask", "keypoints", "obb", "probs", "depth")
for weights in WEIGHTS:
model = YOLO(weights)
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]
fields = [f for f in FIELDS if getattr(result, f) is not None]
print(f"{weights:17s} task={model.task:9s} fields={fields}")yolo26n.pt task=detect fields=['boxes']
yolo26n-seg.pt task=segment fields=['boxes', 'masks']
yolo26n-sem.pt task=semantic fields=['semantic_mask']
yolo26n-pose.pt task=pose fields=['boxes', 'keypoints']
yolo26n-obb.pt task=obb fields=['obb']
yolo26n-cls.pt task=classify fields=['probs']
yolo26n-depth.pt task=depth fields=['depth']Segmentasyon ve pose sonuçları boxes alanını korur; böylece mevcut tespit kodun bunlarla çalışmaya devam eder. Sınıflandırma, anlamsal segmentasyon ve derinlik sonuçları görüntünün tamamını tanımlar ve nesne başına hiçbir alan içermez.
result.boxes üzerinde döngü kuran tespit kodu, OBB modelinde TypeError: 'NoneType' object is not iterable hatasıyla durur: result.boxes, None değeridir ve döndürülmüş tespitler yalnızca result.obb içinde bulunur. Tespit kodunu OBB'ye uyarlarken None denetimi ekleyip sıfır tespit almak yerine result.obb değerini oku.
Tek bir model yeterli olmadığında#
Tespitin ötesine geçen üretim sistemlerinin çoğu üç biçimden birini alır:
- Önce tespit, sonra sınıflandırma. Dedektör büyük bir görüntüdeki küçük nesneleri bulur; bir görüntü sınıflandırıcı, tam çözünürlüklü her kırpım için ayrıntılı bir karar verir: kask türü, kusur derecesi, ürün SKU'su.
- Pose ve takip. Anahtar noktalar tek bir kareyi tanımlar; bir takipçi bunları, tekrarları sayabileceğin veya düşmeleri tespit edebileceğin, kişi başına bir zaman serisine dönüştürür.
- Önce segmentasyon, sonra ölçüm. Model pikselleri döndürür; basit kod bunları alanlara, genişliklere, kapsama oranlarına veya (derinlikle birlikte) mesafelere dönüştürür.
Segmentasyon-sonra-ölçüm işlem hattının etiketleri, Ultralytics Platform düzenleyicisindeki depo robotlarının üzerindeki bu paketlerde olduğu gibi nesne başına bir çokgendir:

İkinci bir model, çıkarım gecikmesi, etiketleyip bakımını yapacağın ikinci bir veri kümesi ve izlemen gereken ikinci bir model ekler. Yalnızca tek bir görev soruyu yanıtlayamadığında modelleri zincirle — etiketleyebileceğin tek modelli bir plan, etiketleyemeyeceğin üç modelli bir plandan daha iyidir.
Yaygın Hatalar#
Belirti: Ekip, maskeler demoda iyi göründüğü için çokgenleri etiketliyor, ancak ürün yalnızca sayıyı kullanıyor. Çözüm: Etiketlemeden önce çıktıyı kullanan kod satırını belirle. Hiçbir şey dış çizgiyi okumuyorsa bir tespit modeli dağıt: kutuları etiketlemek ve çalıştırmak daha hızlıdır.
Belirti: Bir aylık etiketlemenin ardından biri, ürünün yön bilgisine ihtiyaç duyduğunu ve veri kümesinde yalnızca bir eksen veren OBB etiketleri bulunduğunu fark ediyor. Çözüm: Planına kesin özniteliği yaz (result.masks.xy, result.keypoints.xy, result.obb.xywhr) ve ilk etiketi eklemeden önce seçtiğin ağırlıklarla tasks.py çalıştır.
Belirti: Temiz ürün fotoğraflarında %95 puan alan bir sınıflandırıcı, üretimde tespit modelinin kırptığı görüntülerin çoğunda yanlış sonuç veriyor. Çözüm: İkinci aşama veri kümesini, gerçek bulanıklık ve kadraj özellikleriyle ilk aşamanın kendi kırpımlarından oluştur; 9. ders nasıl yapılacağını gösteriyor.
Çözümü göster
Palet isteği için:
| Satır | Seçim |
|---|---|
| Soru | Paletin herhangi bir kısmı raf kirişinin çizgisini aşıyor mu? |
| Görev | segment — taşma paletin dış hatlarına bağlıdır; kutusu ayrıca paletin altındaki boşluğu ve üstündeki yükü de kapsar |
| Ağırlıklar | yolo26n-seg.pt, depo kameralarından alınan karelerle ince ayar yapılmış |
| Etiket biçimi | Palet başına bir çokgen |
| Sonuç alanı | result.masks.data ve retina_masks=True (kiriş çizgisinin ötesindeki pikseller) |
| Eşik metriği | Eğitim dışında tutulan bir kamerada maske mAP50-95 |
| İkinci aşama | Yok — ışın çizgisi her kamera için sabittir; dolayısıyla bu bir model değil, yapılandırmadır. |
Çıkıntı kuralı böylece üç satır koddan ibarettir: ışın çizgisini her kamera için bir kez çiz, yanlış tarafta kalan maske piksellerini say ve birkaç bilinen çıkıntıyla kalibre ettiğin piksel eşiği aşıldığında uyarı ver. 3. Ders, tam da bu tür bir maske-bölge testini gösteriyor.