Kutular ve maskeler: segmentasyona gerçekten ne zaman ihtiyaç duyarsın?
Gerçek bir görüntüde maskenin kutuya ne kattığını ölç ve projenin şekil bilgisine ihtiyaç duyup duymadığına sonraki aşamadaki tüketiciye göre karar ver.
Çoğu insan yapay zekâ destekli görüntü işlemeyi düşündüğünde maskeleri hayal eder; ekiplerin etiketleme bütçesinin en büyük kısmını harcadığı yer de burasıdır. Maske, nesnenin tam şeklini; kutu ise yalnızca nerede olduğunu gösterir. Bu fark bazı ürünlerin tümüyle nasıl çalışacağını belirler; çoğu üründe ise hiçbir şeyi değiştirmez.
Uygulamalı
Maskenin kattıkları#

Her nesne için Segment görevi, algılayıcının döndürdüğü her şeyi — sınıf, kutu, güven — ve nesneye ait pikselleri döndürür; böylece yukarıdaki her otomobil, otobüsten ve yayalardan ayrı, kendine ait bir kontura sahip olur. Maskeyi çokgen (masks.xy) veya ikili görüntü (masks.data) olarak okuyabilirsin.
Şekil, sayıları ne kadar değiştiriyor? Her nesnenin kutu alanını maske alanıyla karşılaştır:
from ultralytics import YOLO
model = YOLO("yolo26n-seg.pt")
result = model("https://ultralytics.com/images/bus.jpg", retina_masks=True, verbose=False)[0]
for box, mask in zip(result.boxes, result.masks.data):
x1, y1, x2, y2 = box.xyxy[0].tolist()
box_area = (x2 - x1) * (y2 - y1)
mask_area = float(mask.sum()) # pixels inside the object's mask
name, ratio = result.names[int(box.cls)], mask_area / box_area
print(f"{name:7} box={box_area:7.0f} px mask={mask_area:7.0f} px ({ratio:.0%})")person box= 97116 px mask= 49331 px (51%)
person box= 68102 px mask= 21316 px (31%)
bus box= 410093 px mask= 255265 px (62%)
person box= 55998 px mask= 33524 px (60%)
person box= 23690 px mask= 11109 px (47%)Otobüs kutusunun yalnızca %62'sini, bir kişi ise %31'ini dolduruyor. Yalnızca kutulardan hesaplanan her sayı — boyalı alan, döküntü büyüklüğü, bir rafın ne kadarının boş olduğu — bu oran kadar hatalı olur. Ürünün böyle bir sayı raporluyorsa maskelere ihtiyacın var. Ürün yalnızca sayıyor veya konum belirliyorsa ek pikseller hiçbir şeyi değiştirmez.
Belirti: maske alanları, kutu alanlarının yanında 3–4 kat küçük görünüyor. Neden: varsayılan olarak masks.data çıkarım boyutunda (burada 640×480) dönerken kutular özgün görüntü piksellerindedir (1080×810). Çözüm: yukarıdaki gibi retina_masks=True değerini ilet veya sayıları kendin ölçeklendir.
Demoya göre değil, çıktıyı kullanana göre karar ver#
| Sonraki aşamadaki ihtiyaç | Kutular yeterli mi? | Neden |
|---|---|---|
| Nesneleri say veya varlıklarını kontrol et | Evet | Yanıtın tamamı konumdan ibaret |
| Bir nesne bölgeye girdiğinde uyarı ver | Evet | Bir kutunun çizgiyi geçmesi yeterli |
| Nesneleri kareler boyunca izle | Evet | Takip algoritmaları kutuları eşleştirir |
| İkinci bir sınıflandırıcı için kırp | Evet | Kırpma için yalnızca kutu gerekir |
| Alanı veya kapsamı ölç (yabani otlar, pas, döküntüler) | Hayır | Düzensiz şekiller kutu alanını anlamsız kılar |
| Nesneyi arka plandan ayır (arka planı kaldırma, AR) | Hayır | Tam sınıra ihtiyacın var |
| Boşluğu veya teması kontrol et (robotik kavrama, çarpışma) | Hayır | Kutu nesnenin boyutunu olduğundan büyük gösterir |
| Birbirine değen düzensiz nesneleri ayır | Çoğu zaman hayır | Örtüşen kutular, hangi piksellerin hangi nesneye ait olduğunu belirsizleştirir |
Ürününün ihtiyaç duyduğu her satırda "evet" yanıtı varsa bir algılayıcı kullanıma sun. Yalnızca şekil bilgisinin gerçekten faydası olduğunda YOLO26 segmentasyonuna yönel.
Örnek ve anlamsal segmentasyon#
Örnek segmentasyonu her nesneye kendi maskesini verir; böylece üst üste binen üç otomobil yine üç otomobil olarak kalır. Anlamsal segmentasyon her piksele yalnızca bir sınıf etiketi atar: tüm otomobil pikselleri tek bir "otomobil" bölgesine dönüşür ve sayım bilgisi kaybolur. Hücre, meyve ve kusur gibi tek tek nesneleri saymak veya ölçmek için örnek segmentasyonunu kullan. Yol ile kaldırım, ekili alan ile toprak gibi bölgelerin kapsamını ölçmek için anlamsal segmentasyonu kullan.
Şekil bilgisini etiketlemenin maliyeti#
Bir kutu çizmek iki tıklama gerektirir. İyi bir çokgen çizmek onlarca tıklama gerektirebilir ve her sınır anlaşmazlığa yol açabilir: Çanta kişinin parçası mı, gölge otomobilin parçası mı? Genel bir kurala güvenmek yerine kendi maliyetini ölç: bir etiketleyicinin 20 nesneyi kutu olarak ve aynı 20 nesneyi çokgen olarak etiketlemesinin ne kadar sürdüğünü ölç, ardından aradaki farkı veri kümesinin boyutuyla çarp.
Yapay zekâ destekli araçlar aradaki farkı büyük ölçüde kapatır. Akıllı Etiketleme ve Toplu Etiketleme, tek bir tıklamadan veya kutudan maske önerir; böylece etiketleyiciler sınırları baştan çizmek yerine düzeltir — ancak her sınırı yine de birinin incelemesi gerekir.
Etiketleme başlamadan önce örtülme, şeffaf nesneler, gölgeler, kare kenarında kesilen nesneler ve nesnelere bağlı öğeler (çantalar, kulplar, yükler) için karar ver; aynı sayfayı etiketleyicilere ve incelemecilere ver. Etiketleme En İyi Uygulamaları bu kuralların nasıl uygulanacağını açıklar; COCO-Seg veri kümesi ise büyük ölçekte tutarlı maskeler sunar.
Maskeleri örnekleme yoluyla denetlerken taşma (maske sınırın dışına taşar), delikler (nesnenin içindeki bölgeler atlanır), hayalet sınırlar (maske bir JPEG kusurunu izler) ve belirsiz parçalar (bavulun kolu bavul maskesine dahil mi?) olup olmadığına bak.
Çözümü göster
Otobüs kamerasını paylaşan iki ürün olduğunu varsay: bir yaya sayacı ve araçların sahnenin ne kadarını kapladığını belirten bir sokak işgali raporu. Her iki yanıtı da aynı çalıştırmadan ölç:
from ultralytics import YOLO
model = YOLO("yolo26n-seg.pt")
result = model("https://ultralytics.com/images/bus.jpg", retina_masks=True, verbose=False)[0]
height, width = result.orig_shape
for name in sorted({result.names[int(c)] for c in result.boxes.cls}):
rows = [i for i, c in enumerate(result.boxes.cls) if result.names[int(c)] == name]
union = result.masks.data[rows].amax(dim=0) # merge masks so overlaps count once
box_union = sum(float((b[2] - b[0]) * (b[3] - b[1])) for b in result.boxes.xyxy[rows])
print(f"{name:6} {len(rows)} objects | masks cover {float(union.sum()) / (height * width):.0%} of the image, boxes {box_union / (height * width):.0%}")bus 1 objects | masks cover 29% of the image, boxes 47%
person 4 objects | masks cover 13% of the image, boxes 28%- Yaya sayacı → kutular. Her iki durumda da sayım 4; maskeler etiketleme maliyetini artırır ve hiçbir şeyi değiştirmez.
- İşgali raporu → maskeler. Kutular, otobüsün sahnenin %47'sini kapladığını gösteriyor; gerçek oran %29. Kutu tabanlı bir rapor yarıdan fazla hatalı olur.