Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
Dersorta düzey

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.

Yan yana segmentasyon, pose, yönlendirilmiş sınırlayıcı kutu ve sınıflandırma örnekleri

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.

Sonuç

İşlem hattındaki her model için görevi, ağırlıkları, etiket biçimini, sonuç alanını ve eşik metriğini belirten bir görev planı yaz ve yedi görevin tamamını tek bir görüntüde çalıştırarak sonuç alanını doğrula.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. İsteği, çıktının yanıtlaması gereken soru biçiminde yeniden yaz: türü ne, nerede, şekli ne, hangi pikseller, hangi eklemler, hangi yön ya da ne kadar uzakta.

  2. Karar şemasını izle ve çıktısı soruyu yanıtlayan ilk görevde dur.

  3. Ağırlıkları, etiket biçimini, sonuç alanını ve eşik metriğini bir plan tablosuna kaydet.

  4. Yalnızca tek bir görev soruyu yanıtlayamıyorsa ikinci bir model ekle ve maliyetini hesaba kat.

Uygulamalı

Tek fotoğraf, dört farklı yanıt#

Örnek görüntülerde yan yana gösterilen Ultralytics YOLO görev çıktıları: detect, pose, segment, classify, OBB, anlamsal segmentasyon ve derinlik

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 camera

Satı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 train adı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.
Karar kuralı

Ü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ığı soruGörevYOLO26 ağırlıklarıSonuç alanıEtiket biçimiEşik metriği
Her nesne nerede?detectyolo26n.ptboxessınıf + kutukutu mAP50-95
Her nesnenin tam şekli ve alanı nedir?segmentyolo26n-seg.ptmasks + boxessınıf + çokgenmaske mAP50-95
Her piksel hangi sınıfa ait?semanticyolo26n-sem.ptsemantic_maskPNG sınıf haritası veya çokgenlermIoU
Eklemler veya işaret noktaları nerede?poseyolo26n-pose.ptkeypoints + boxessınıf + kutu + anahtar noktalarpose mAP50-95 (OKS)
Her nesne nasıl döndürülmüş?obbyolo26n-obb.ptobbsınıf + 4 köşeOBB mAP50-95
Bu görüntünün (veya kırpımın) tamamında ne var?classifyyolo26n-cls.ptprobsher sınıf için bir klasörtop-1 doğruluğu
Her piksel kameradan ne kadar uzakta?depthyolo26n-depth.ptdepthher 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")segmentanlamsal 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çeriyorsaobbaçı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ı gerekiyorsaposeOBB 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)classifyen 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:

Yükleme alanı, veri kümesi adı, URL ve açıklamanın bulunduğu; Görev Türü seçicisinin Lisans, Yüzleri bulanıklaştır ve Görünürlük seçeneklerinin yanında yer aldığı Ultralytics Platform Yeni Veri Kümesi iletişim kutusu

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.

OBB sonuçlarında kutu bulunmaz

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:

Çizim modundaki Ultralytics Platform anotasyon düzenleyicisi; depo robotlarının üzerindeki paketlerin çevresine çizilmiş pembe çokgen maskeler ve açık sınıf listesi

Her aşama maliyeti katlar

İ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#

Demo etkisine göre seçim yapmak

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.

Sonuç alanını belirlemeden plan yapmak

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.

Yanlış görüntülerle eğitilmiş ikinci aşama

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.

Dene

İş listenden bir özellik isteği seç — ya da "sabit bir depo kamerasında raf kenarından taşan paletleri işaretle" isteğini kullan — ve şu satırları içeren bir plan tablosu yaz: soru, görev, ağırlıklar, etiket biçimi, sonuç alanı, eşik metriği ve ikinci aşama (ya da gerekçesiyle birlikte "yok"). Ardından tasks.py komutunu çalıştır ve belirttiğin alanın dolu olarak döndüğünü doğrula.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Plan tablon, her model için görevi, ağırlıkları, etiket biçimini, sonuç alanını ve eşik metriğini belirtir.

  • Daha ucuz bir görevin (detect veya classify) soruyu neden yanıtlayamayacağını tek bir cümleyle açıklayabilirsin.

  • tasks.py çalıştı ve planında belirttiğin sonuç alanı çıktısında yer alıyor.

Çözümü göster

Palet isteği için:

SatırSeçim
SoruPaletin herhangi bir kısmı raf kirişinin çizgisini aşıyor mu?
Görevsegment — 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ıklaryolo26n-seg.pt, depo kameralarından alınan karelerle ince ayar yapılmış
Etiket biçimiPalet başına bir çokgen
Sonuç alanıresult.masks.data ve retina_masks=True (kiriş çizgisinin ötesindeki pikseller)
Eşik metriğiEğitim dışında tutulan bir kamerada maske mAP50-95
İkinci aşamaYok — ışı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.

Sırada ne var

Sonraki adımda bir örnek segmentasyonu modelini etiketleyip eğitecek, poligonlarını kodda kontrol edecek ve iki metrik grubunun ne anlattığını okuyacağız.

İlerlemeni kaydetmek için giriş yap