Etiketleme İçin En İyi Uygulamalar
Bir etiketleme kılavuzu yaz, bir araç seç, doğruluğu sessizce düşüren on hatadan kaçın ve ölçeği büyütmeden önce bir betikle etiketleyiciler arasındaki uyumu ölç.
Etiket kalitesi, model kalitesinin üst sınırını belirler. Her biri “palet” kavramını biraz farklı yorumlayan on etiketleyici, on yorumun tamamını aynı anda öğreten bir veri kümesi üretir ve hiçbir eğitim miktarı bu çelişkiyi gideremez. Yazılı bir kılavuz, ölçümlü bir kalibrasyon turu ve bilinen hataların kısa bir listesi, bir kişi 500 görüntüyü veya bir ekip 50.000 görüntüyü etiketlese de etiketleri tutarlı kılar.
Uygulamalı
Etiketleme aracını seç#
Doğru araç; göreve, ekibe ve eğitimin nerede yapıldığına bağlıdır:
| Araç | En uygun olduğu kullanım | Notlar |
|---|---|---|
| Ultralytics Platform | Yedi YOLO görevinin tümü: kutular, çokgenler, anlamsal maskeler, kilit noktalar, döndürülmüş kutular ve görüntü sınıfları için bir düzenleyici; ayrıca yüklenen derinlik haritaları ve SAM akıllı etiketleme | Etiketler, veri kümesi grafikleri ve eğitim tek yerde; dışa aktarma adımı yok |
| CVAT | Büyük ekipler, video ve karmaşık inceleme iş akışları | Kendi sunucunda barındırılan veya bulut tabanlı |
| Label Studio | Çok modlu projeler (görüntü + metin + ses) | Esnek yapılandırma, öğrenme eğrisi daha dik |
| Labelme | Küçük ekipler için çokgen etiketleme | Basit masaüstü uygulaması |
| LabelImg | Yalnızca kutu etiketlemeli hızlı prototipler | Hafif; deposu arşivlendi |
Ultralytics Platform'da, SAM 2.1, SAM 3 ve SAM 3.1 akıllı etiketleme; detect, segment, semantic ve OBB veri kümelerinde çalışır. Ne seçersen seç, görevinin ihtiyaç duyduğu YOLO biçiminde dışa aktarabildiğini doğrula; Özel Veri Kümesi Hazırlama etiket biçimini ve dönüştürme işlemini açıklar.
Yedi etiket türü#

| Etiket türü | Ne çizersin | Görev |
|---|---|---|
| Sınıf etiketi | Görüntü başına bir etiket | Sınıflandırma |
| Sınırlayıcı kutu | Her nesne için eksenlere hizalı dikdörtgen | Nesne algılama |
| Çokgen | Her nesne örneğinin dış çizgisi | Örnek bölütleme |
| Yoğun maske | Her piksel için bir sınıf | Anlamsal segmentasyon |
| Kilit noktalar | Eklemler gibi adlandırılmış noktalar | Poz |
| Yönlendirilmiş kutu | Her nesne için döndürülmüş dikdörtgen | Yönelimli sınırlayıcı kutular |
| Derinlik haritası | Hiçbir şey: derinlik sensöründen alınan ve her görüntüyle eşleştirilen piksel başına mesafe haritası | Derinlik tahmini |
Önce etiketleme kılavuzunu yaz#
Herhangi biri kutu çizmeye başlamadan önce beş bölümden oluşan bir kılavuz yaz:
- Sınıf tanımları: her sınıf için olumlu örnekleri, sınıfa girmeyen benzer görünümleri ve sınır durumlarını içeren bir paragraf.
- Çizim kuralları: görünen nesnenin etrafına sıkı kutular çiz; çokgenleri görünen dış çizgiyi takip edecek şekilde oluştur.
- Örtülme ve boyut kuralları: kısmen görünen nesneler için ("sınıfı belirleyebiliyorsan etiketle") ve küçük nesneler için ("boyu 10 pikselden uzun kişileri etiketle") birer eşik belirle ve bunları her yerde uygula.
- Belirsiz durumlar kaydı: üzerinde uzlaşılan yanıtı ve ekran görüntüsüyle birlikte her "peki ya bu?" sorusu.
- Atlanacaklar: bu görev için etiketlemeye değmeyen her şey.
Ekran görüntüleri içeren bir iki sayfa yeterlidir. Ardından kılavuz, etiketleme ölçeği büyütülmeden önce yürütülen kısa bir döngüye yön verir:
Her görüntüdeki ilgili tüm nesneleri etiketle. Etiketlenmemiş bir forklift, modele forkliftlerin bazen arka plan olduğunu öğretir; böylece model forkliftleri kaçırmayı öğrenir. Kısmen etiketlenmiş bir veri kümesi, eğitim yapana kadar tamamen etiketlenmiş daha küçük bir veri kümesiyle aynı görünür. Sonraki görüntüye geçmeden önce her görüntüyü tamamla.
Doğruluğu düşüren on hata#
Ultralytics etiketleme ekibinin en sık gördüğü hatalar; forklift, kişi ve palet görüntüleri üzerinde gösterilmiştir (Alexis Schutzger tarafından hazırlanan sunumdan uyarlanmıştır). Bunları kılavuzuna eklenecek ilk maddeler olarak kullan.
1. Nesnenin şeklini tahmin ederek tamamlama. Yalnızca görebildiğin kısımları etiketle. Burada forklift bir kişinin ve kereste yığınının arkasında duruyor, ancak etiketleyici kamyonun geri kalanını hayal ederek kutuyu ikisinin üzerinden geçiriyor. Yalnızca görünen kısmı kutula.

2. Kesin olmayan kutular. Kutular nesneyi sıkıca çevrelemelidir. Bu kutu üst koruma lambalarının içinden geçiyor; nesnenin bir kısmını kesen veya zeminden pay bırakan bir kutu, nesnenin kapladığı alanı yanlış öğretir.

3. Benzer nesnelerde tutarsız kurallar. Soldaki kutu çatalları içeriyor; sağdaki ise dışarıda bırakıyor. Model aynı soruya iki farklı yanıt alıyor; bu nedenle kuralı yazılı hale getir: çatallar dahil mi, hariç mi?

4. Eksik etiketler. Forkliftin yanında iki kişi duruyor, ancak yalnızca biri kutulanmış. Etiketsiz kalan kişi, modele "insanlar arka plandır" dersini verir.

5. Yanlış sınıf. Yalnızca kutuyu değil, sınıfı da kontrol et. person etiketi verilen bir forkliftin etrafına doğru çizilmiş kutu, her iki sınıfı da bozar; bunun nedeni genellikle klavye kısayolunun yanlışlıkla kullanılmasıdır.

6. Boş veya başıboş etiketler. Her etiketin gerçek bir nesneye ve gerçek bir sınıfa karşılık gelmesi gerekir. Yanlışlıkla tıklamak, buradaki köşedeki gibi neredeyse boş bir kutu bırakır; sınıf atanmadan kaydedilen bir kutu da None veya 0. sınıf olarak dışa aktarılabilir. Bunları düzelt ya da sil.

7. Yinelenen kutular. Bir nesne, bir kutu. Aynı forkliftin üzerindeki iki çakışan kutu, örnek sayısını şişirir ve modele yinelenen tahminler yapmayı öğretir.

8. Belirsiz yönergeler. Yazılı bir kural yoksa etiketleyenler kendi kararlarını verir: burada biri yalnızca sürücünün başını kutulayıp forklift sınıfını vermiş. Sürücü forkliftin bir parçası mı, yoksa ayrı bir person mı? Yanıtı bir kez, kılavuzda ver.

9. Aykırı görüntüler. Dağıtım senaryosuna uymayan görüntüleri çıkar. Forklift veri kümesindeki şehir silüeti fotoğrafı hiçbir işe yaramaz ve diğer tüm verilerin etkisini azaltır.

10. Veri artırmanın yol açtığı belirsizlik. Kırpma, bir sınıfı tanımlayan özelliği ortadan kaldırabiliyorsa iki sınıf birbirinin aynısı hâline gelir. Kupa asının köşe simgesini kırpınca kart, unknown etiketi verilen kartlara benzer. Çözüm için Veri Artırmayı Dikkatli Kullan sayfasına bak.

Tahmin etme, uyumu ölç#
Kalibrasyon turunda iki etiketleyene aynı görüntüler verilir ve etiketleri nesne nesne karşılaştırılır. İki etiket, sınıfları aynıysa ve en az 0.5 IoU değerinde örtüşüyorsa uyumludur. Bu betik, COCO8 veri kümesinin doğrulama görüntülerindeki puanı hesaplar. İkinci bir kişi olmadan çalıştırabilmek için önceden eğitilmiş bir model B etiketleyeni olarak görev yapar; gerçek bir ekiple çalışırken B'nin kutularını kendi etiket dosyalarından oku:
from pathlib import Path
import torch
from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset, img2label_paths
from ultralytics.utils.metrics import box_iou
from ultralytics.utils.ops import xywh2xyxy
data = check_det_dataset("coco8.yaml")
model = YOLO("yolo26n.pt") # stands in for a second annotator; compare two label folders the same way
names = data["names"]
matched = total = 0
for image in sorted(Path(data["val"]).glob("*.jpg")):
rows = [r.split() for r in Path(img2label_paths([str(image)])[0]).read_text().splitlines() if r.strip()]
a_cls = torch.tensor([int(r[0]) for r in rows]) # annotator A: the dataset labels
a_box = xywh2xyxy(torch.tensor([[float(v) for v in r[1:]] for r in rows]))
b = model(image, conf=0.5, verbose=False)[0].boxes # annotator B: confident model proposals
iou = box_iou(a_box, b.xyxyn)
used = set()
for i in range(len(rows)): # pair each A object with the best unused same-class B box at IoU >= 0.5
ok = [j for j in range(len(b)) if j not in used and b.cls[j] == a_cls[i] and iou[i, j] >= 0.5]
if ok:
used.add(max(ok, key=lambda j: iou[i, j]))
else:
print(f"{image.name}: {names[int(a_cls[i])]} labeled by A only")
for j in set(range(len(b))) - used:
print(f"{image.name}: {names[int(b.cls[j])]} labeled by B only")
matched += len(used)
total += len(rows) + len(b) - len(used)
print(f"agreement: {matched}/{total} objects = {matched / total:.0%}")000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: potted plant labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000061.jpg: person labeled by A only
000000000061.jpg: elephant labeled by A only
000000000061.jpg: person labeled by A only
agreement: 8/17 objects = 47%Nasıl okunur:
- Puan, eşleşen nesnelerin, etiketleyenlerden herhangi birinin çizdiği tüm nesnelere oranıdır: 17 nesneden 8'i.
- Uyumsuzluklar belirli noktalarda yoğunlaşıyor. Dokuz uyumsuzluğun tümü iki görüntüde; çoğu, görüntü alanının %1'inden çok daha azını kaplayan kişilerle ilgili. Bunlar rastgele dokuz hata değil; eksik tek bir kuralın sonucu: uzaktaki kişileri etiketliyor muyuz?
- Çözüm, kılavuza bir madde eklemek; örneğin "640 pikselde en az 10 piksel boyundaki her kişiyi etiketle". İki etiketleyen bu iki görüntüyü yeniden etiketler ve puan tekrar ölçülür.
Karar kuralı: Etiketlemeyi yalnızca uyum %90'a ulaştığında ölçeklendir. Bu oranın altındayken her yeni etiketleyen tutarsızlığı katlar.
Akıllı etiketlemeyi hızlandırıcı olarak kullan#
Akıllı etiketleme, bir YOLO modelinin veya SAM'in önerdiği etiketleri bir kişinin kabul etmesini ya da düzeltmesini sağlar; böylece iş hacmi birkaç kat artabilir. Süreci turlar hâlinde başlat: gözden geçirilmiş bir veri grubuyla eğit, sonraki grup için bu modelin önerilerini kullan, gözden geçir ve yeniden eğit. Bu, aktif öğrenme döngüsüdür; Akıllı Etiketleme ve Toplu Etiketleme sayfasında Ultralytics Platform üzerinde nasıl yapılacağı anlatılır.
Küçük kişileri kaçıran bir model bu kişiler için kutu önermez; "tümünü kabul et" seçeneğine tıklayan bir incelemeci de bunları eklemez. Bu etiketlerle eğitilen sonraki model kişileri daha da yüksek güvenle kaçırır. Her görüntüyü incele; modelin çizdiklerini düzeltmenin yanı sıra kaçırdıklarını da ekle.
Gözle doğrula#
Her Ultralytics eğitim çalıştırması, çalıştırma klasörüne labels.jpg ve train_batch*.jpg dosyalarını yazar. İlk dosya sınıf sayılarını, kutuların konumlarını ve boyutlarını çizer; diğerleri ise etiketleri üzerlerinde çizilmiş gerçek eğitim görüntülerini gösterir. İlk epoch bitmeden bu dosyaları aç. Gözlerin, metriklerin asla yakalayamayacağı şeyleri görür: gölgelerin etrafına çizilmiş kutuları, yanlış sınıf kimliklerini ve kapanmayan çokgenleri.
Çözümü göster
COCO8'deki uyumsuzluklar, aşağıdaki gibi kılavuz maddelerine dönüştürülür:
| Uyumsuzluk | Kılavuza eklenen kural |
|---|---|
000000000049.jpg içindeki uzaktaki kişileri yalnızca A etiketlemiş | 640 pikselde en az 10 piksel boyundaki herkesi etiketle; her görüntüde daha küçük olanları atla. |
| Yalnızca A'nın görüntü kenarındaki saksı bitkisini etiketlemesi | Görüntü kenarı tarafından kesilen bir nesnenin en az yarısı görünüyorsa nesneyi etiketle. |
000000000061.jpg içinde başka bir filin kısmen gizlediği fil | Başını veya gövdesinin yarısını görebildiğin, örtülmüş hayvanları etiketle; yalnızca görünen kısmı kutula. |
Bir kişiyle bir modeli değil, iki kişiyi karşılaştırmak için B etiketleyeninin satırlarını ikinci etiket klasöründen, betiğin A'yı okuduğu şekilde (Path("labels_b", image.stem + ".txt")) oku; aynı iki satırı kullanarak bunlardan b_cls ve b_box oluştur ve betiğin b.cls ile b.xyxyn dosyalarını okuduğu yerlerde bunları kullan. Yeniden etiketledikten sonra betiği tekrar çalıştır; puan %90'ı aştığında tur tamamlanır.