Ultralytics YOLO ile Görüntü Sınıflandırma#
Görüntü sınıflandırma, desteklenen görevlerin en basitidir ve bir görüntünün tamamını önceden tanımlanmış sınıflardan birine atamayı içerir.
Bir görüntü sınıflandırıcısının çıktısı, tek bir sınıf etiketi ve güven puanıdır. Görüntü sınıflandırma, bir görüntünün hangi sınıfa ait olduğunu bilmenin yeterli olduğu; o sınıfa ait nesnelerin nerede bulunduğunu veya tam şekillerinin ne olduğunu bilmenin gerekmediği durumlarda kullanışlıdır.
İzle: Ultralytics YOLO Görevlerini Keşfet: Ultralytics Platformunu Kullanarak Görüntü Sınıflandırma
YOLO26 Classify modelleri -cls son ekini kullanır; örneğin yolo26n-cls.pt ve ImageNet üzerinde önceden eğitilmiştir.
Modeller#
ImageNet veri kümesinde önceden eğitilmiş YOLO26 Classify modelleri aşağıda gösterilmiştir.
Modeller ilk kullanımda en güncel Ultralytics sürümünden otomatik olarak indirilir.
| Model | boyut (piksel) | acc top1 | acc top5 | Hız CPU ONNX (ms) | Hız T4 TensorRT10 (ms) | parametre (M) | FLOPs (B), 224'te |
|---|---|---|---|---|---|---|---|
| YOLO26n-cls | 224 | 71.4 | 90.1 | 5.0 ± 0.3 | 1.1 ± 0.0 | 2.8 | 0.4 |
| YOLO26s-cls | 224 | 76.0 | 92.9 | 7.9 ± 0.2 | 1.3 ± 0.0 | 6.7 | 1.5 |
| YOLO26m-cls | 224 | 78.1 | 94.2 | 17.2 ± 0.4 | 2.0 ± 0.0 | 11.6 | 4.8 |
| YOLO26l-cls | 224 | 79.0 | 94.6 | 23.2 ± 0.3 | 2.8 ± 0.0 | 14.1 | 6.0 |
| YOLO26x-cls | 224 | 79.9 | 95.0 | 41.4 ± 0.9 | 3.8 ± 0.0 | 29.6 | 13.5 |
- acc değerleri, modellerin ImageNet veri kümesinin doğrulama bölümündeki doğruluğunu gösterir.
yolo classify val data=path/to/ImageNet device=0ile yeniden üret - Hız, ONNX ile CPU'da ve TensorRT10 ile NVIDIA T4 GPU'da ImageNet doğrulama görüntüleri üzerinde ortalamadır.
yolo classify val data=path/to/ImageNet batch=1 device=0|cpuile yeniden üret - Parametre ve FLOPs değerleri, Conv ve BatchNorm katmanlarını birleştiren
model.fuse()sonrasındaki birleştirilmiş model içindir. Önceden eğitilmiş kontrol noktaları, tam eğitim mimarisini korur ve daha yüksek sayılar gösterebilir.
Ön sınıflandırma hızı ve model boyutları için yayınlanmamış YOLO27 önizlemesine bak.
Eğit#
MNIST160 veri kümesinde YOLO26n-cls modelini, görüntü boyutu 64 olacak şekilde 100 epoch boyunca eğit. Kullanılabilir argümanların tam listesi için Yapılandırma sayfasına bak.
from ultralytics import YOLO
# Bir model yükle
model = YOLO("yolo26n-cls.yaml") # YAML'den yeni bir model oluştur
model = YOLO("yolo26n-cls.pt") # Önceden eğitilmiş bir model yükle (eğitim için önerilir)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt") # YAML'den oluştur ve ağırlıkları aktar
# Modeli eğit
results = model.train(data="mnist160", epochs=100, imgsz=64)train modunun tüm ayrıntılarını Eğitim sayfasında bulabilirsin. Sınıflandırma modelleri Ultralytics Platform bulut eğitimi ile de eğitilebilir.
Veri kümesi biçimi#
YOLO sınıflandırma veri kümesi biçiminin ayrıntılarını Veri Kümesi Kılavuzu sayfasında bulabilirsin. Sınıflandırma veri kümeleri Ultralytics Platform açıklama araçları ile de yönetilebilir ve etiketlenebilir.
Özel dönüşümler#
Ultralytics YOLO sınıflandırması, eğitim için torchvision.transforms.RandomResizedCrop, doğrulama ve çıkarım için torchvision.transforms.CenterCrop kullanır. Kırpmaya dayalı bu dönüşümler kare girişler varsayar ve en-boy oranı aşırı olan görüntülerde önemli bölgeleri kırparak çıkarabilir. Görüntünün tamamını korumak için kırpmaları, kırpmak yerine imgsz × imgsz boyutlarına ölçekleyen torchvision.transforms.Resize ile özel bir ClassificationDataset, ClassificationTrainer ve ClassificationValidator üzerinden değiştir:
import torch
import torchvision.transforms as T
from ultralytics import YOLO
from ultralytics.data.dataset import ClassificationDataset
from ultralytics.models.yolo.classify import ClassificationTrainer, ClassificationValidator
class CustomizedDataset(ClassificationDataset):
"""A customized dataset class for image classification with enhanced data augmentation transforms."""
def __init__(self, root: str, args, augment: bool = False, prefix: str = "", names=None):
"""Initialize a customized classification dataset with enhanced data augmentation transforms."""
super().__init__(root, args, augment, prefix, names)
# Özel eğitim dönüşümlerini buraya ekle
train_transforms = T.Compose(
[
T.Resize((args.imgsz, args.imgsz)),
T.RandomHorizontalFlip(p=args.fliplr),
T.RandomVerticalFlip(p=args.flipud),
T.RandAugment(interpolation=T.InterpolationMode.BILINEAR),
T.ColorJitter(brightness=args.hsv_v, contrast=args.hsv_v, saturation=args.hsv_s, hue=args.hsv_h),
T.ToTensor(),
T.Normalize(mean=torch.tensor(0), std=torch.tensor(1)),
T.RandomErasing(p=args.erasing, inplace=True),
]
)
# Özel doğrulama dönüşümlerini buraya ekle
val_transforms = T.Compose(
[
T.Resize((args.imgsz, args.imgsz)),
T.ToTensor(),
T.Normalize(mean=torch.tensor(0), std=torch.tensor(1)),
]
)
self.torch_transforms = train_transforms if augment else val_transforms
class CustomizedTrainer(ClassificationTrainer):
"""A customized trainer class for YOLO classification models with enhanced dataset handling."""
def build_dataset(self, img_path: str, mode: str = "train", batch=None):
"""Build a customized dataset for classification training and the validation during training."""
return CustomizedDataset(
root=img_path,
args=self.args,
augment=mode == "train",
prefix="train" if mode == "train" else self.args.split,
names=self.data["names"],
)
class CustomizedValidator(ClassificationValidator):
"""A customized validator class for YOLO classification models with enhanced dataset handling."""
def build_dataset(self, img_path: str):
"""Build a customized dataset for classification standalone validation (no augmentation)."""
return CustomizedDataset(root=img_path, args=self.args, augment=False, prefix=self.args.split, names=self.names)
model = YOLO("yolo26n-cls.pt")
model.train(data="imagenet", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet", validator=CustomizedValidator, imgsz=224, batch=64)Doğrula#
Eğitilmiş YOLO26n-cls modelinin doğruluğunu doğrula. model eğitimde kullanılan data değerini ve argümanları model öznitelikleri olarak koruduğundan herhangi bir argüman gerekmez: Eğitim örneğindeki path/to/best.pt, MNIST160 üzerinde doğrulama yapar. Resmî ağırlıklar, makinede bulunmayan bir eğitim veri kümesi yolu kaydeder; bu nedenle uyarı vererek görev varsayılanı olan imagenet10 değerine geri döner. Başka bir veri kümesinde doğrulama yapmak için data değerini geçir.
from ultralytics import YOLO
# Bir model yükle
model = YOLO("yolo26n-cls.pt") # Resmî bir modeli yükle
model = YOLO("path/to/best.pt") # özel bir model yükle
# Modeli doğrula
metrics = model.val() # Bağımsız değişken gerekmez; veri kümesi ve ayarlar hatırlanır
metrics.top1 # top1 accuracy
metrics.top5 # top5 accuracyÖzel dönüşümlerle eğitilmiş bir model için eşleşen ClassificationValidator değerini val()'ye geçirmen gerekir; aksi takdirde doğrulamada, eğitim sırasında yeniden boyutlandırılan yerler kırpılır.
Tahmin#
Görüntülerde tahmin yapmak için eğitilmiş bir YOLO26n-cls modeli kullan.
from ultralytics import YOLO
# Bir model yükle
model = YOLO("yolo26n-cls.pt") # Resmî bir modeli yükle
model = YOLO("path/to/best.pt") # özel bir model yükle
# Modelle tahmin yap
results = model("https://ultralytics.com/images/bus.jpg") # bir görüntü üzerinde tahmin yap
# Sonuçlara eriş
for result in results:
top1 = result.probs.top1 # en yüksek tahmin edilen sınıf kimliği
top1_conf = result.probs.top1conf # en yüksek tahmin güveni
top1_name = result.names[top1] # en yüksek tahmin edilen sınıf adıpredict kipinin tüm ayrıntıları için Tahmin sayfasına bak.
Sonuç Çıktısı#
Görüntü sınıflandırma, görüntü başına bir Results nesnesi döndürür. Birincil tahmin alanı, sınıf olasılığı vektörünü ve en yüksek tahminlere yönelik yardımcı işlevleri içeren result.probs değeridir.
| Öznitelik | Tür | Şekil | Açıklama |
|---|---|---|---|
result.probs | Probs | (C,) | Sınıf olasılıkları. |
result.probs.data | torch.float32 | (C,) | Sınıf başına olasılık. |
result.probs.top1 | int | () | En yüksek sınıf kimliği. |
result.probs.top1conf | torch.float32 | () | En yüksek güven değeri. |
result.probs.top5 | list[int] | (<=5) | En yüksek 5 sınıf kimliği. |
Tüm görevlerde göreve özgü Results alanları için Göreve Göre Tahmin Sonuçları bölümüne bak.
Dışa aktar#
YOLO26n-cls modelini ONNX, CoreML vb. başka bir biçime aktar.
from ultralytics import YOLO
# Bir model yükle
model = YOLO("yolo26n-cls.pt") # Resmî bir modeli yükle
model = YOLO("path/to/best.pt") # özel bir model yükle
# Modeli dışa aktar
model.export(format="onnx")Kullanılabilir YOLO26-cls dışa aktarma biçimleri aşağıdaki tabloda listelenmiştir. format argümanını, yani format='onnx' veya format='engine' değerini kullanarak istediğin biçime aktarabilirsin. Dışa aktarılmış modellerde doğrudan tahmin veya doğrulama yapabilirsin; örneğin yolo predict model=yolo26n-cls.onnx. Dışa aktarma tamamlandığında modeline ilişkin kullanım örnekleri gösterilir.
| Biçim | format bağımsız değişkeni | Model | Üst veriler | Bağımsız değişkenler |
|---|---|---|---|---|
| PyTorch | - | yolo26n-cls.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-cls.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-cls.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-cls_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-cls.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-cls.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n-cls.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-cls_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-cls.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-cls_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n-cls.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-cls_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-cls.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-cls_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-cls_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-cls_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-cls_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-cls_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-cls_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-cls_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n-cls_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-cls_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-cls_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None, harici NMS için varsayılan olarak ham çıktılar üretir. Kullanılabilir bir NMS içermeyen başlık seçmek için nms=False değerini ayarla; desteklenmeyen biçimler yerel çıktı yoluna döner. Yukarıdaki nms girdileri, nms=True ile NMS içerebilen biçimleri tanımlar.
Ayrıntılı export bilgileri için Dışa Aktarma sayfasına bak.
Sık Sorulan Sorular#
yolo26n-cls.ptgibi YOLO26 modelleri, verimli görüntü sınıflandırması için tasarlanmıştır. Bir görüntünün tamamına tek bir sınıf etiketi ve güven puanı atarlar. Bu, görüntüdeki nesnelerin konumunu veya şeklini belirlemek yerine yalnızca görüntünün belirli sınıfını bilmenin yeterli olduğu uygulamalarda özellikle kullanışlıdır.YOLO26 modelini eğitmek için Python veya CLI komutlarını kullanabilirsin. Örneğin, MNIST160 veri kümesinde bir
yolo26n-clsmodelini görüntü boyutu 64 olacak şekilde 100 epoch eğitmek için:Örnekfrom ultralytics import YOLO # Bir model yükle model = YOLO("yolo26n-cls.pt") # Önceden eğitilmiş bir model yükle (eğitim için önerilir) # Modeli eğit results = model.train(data="mnist160", epochs=100, imgsz=64)Daha fazla yapılandırma seçeneği için Yapılandırma sayfasını ziyaret et.
Eğitilmiş bir modelin MNIST160 gibi bir veri kümesindeki doğruluğunu doğrulamak için aşağıdaki Python veya CLI komutlarını kullanabilirsin:
Örnekfrom ultralytics import YOLO # Bir model yükle model = YOLO("path/to/best.pt") # eğitilmiş modeli yükle # Modeli doğrula metrics = model.val() # argüman gerekmiyor; eğitimdeki veri kümesini ve ayarları kullanır metrics.top1 # top1 accuracy metrics.top5 # top5 accuracyDaha fazla bilgi için Doğrulama bölümünü ziyaret et.
Eğitilmiş bir YOLO26 modelini Python veya CLI komutlarıyla çeşitli biçimlere aktarabilirsin. Örneğin, bir modeli ONNX biçimine aktarmak için:
Örnekfrom ultralytics import YOLO # Bir model yükle model = YOLO("yolo26n-cls.pt") # eğitilmiş modeli yükle # Modeli ONNX biçimine aktar model.export(format="onnx")Ayrıntılı aktarım seçenekleri için Aktarım sayfasına bak.