Ultralytics YOLO27:

Ultralytics YOLO ile Görüntü Sınıflandırma#

Ultralytics YOLO image classification of objects and scenes

Görüntü sınıflandırma, desteklenen görevler arasındaki en basit görevdir ve bir görüntünün tamamının önceden tanımlanmış sınıflardan birine atanmasını 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 skoru olur. Görüntü sınıflandırma, yalnızca bir görüntünün hangi sınıfa ait olduğunu bilmen gerektiğinde ve bu sınıfa ait nesnelerin nerede bulunduğunu ya da tam şeklinin ne olduğunu bilmen gerekmediğinde kullanışlıdır.



Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
İpucu

YOLO26 Classify modelleri -cls son ekini, yani yolo26n-cls.pt ifadesini kullanır ve ImageNet üzerinde önceden eğitilmiştir.

Modeller#

Önceden eğitilmiş YOLO26 Classify modelleri burada gösterilmiştir. Detect, Segment ve Pose modelleri COCO veri kümesi üzerinde, Semantik modeller Cityscapes üzerinde ve Classify modelleri ImageNet veri kümesi üzerinde önceden eğitilmiştir.

Modeller, ilk kullanımda en güncel Ultralytics sürümünden otomatik olarak indirilir.

Modelboyut
(piksel)
acc
top1
acc
top5
Hız
CPU ONNX
(ms)
Hız
T4 TensorRT10
(ms)
parametre
(M)
FLOPs
(B) 224'te
YOLO26n-cls22471.490.15.0 ± 0.31.1 ± 0.02.80.4
YOLO26s-cls22476.092.97.9 ± 0.21.3 ± 0.06.71.5
YOLO26m-cls22478.194.217.2 ± 0.42.0 ± 0.011.64.8
YOLO26l-cls22479.094.623.2 ± 0.32.8 ± 0.014.16.0
YOLO26x-cls22479.995.041.4 ± 0.93.8 ± 0.029.613.5
  • acc değerleri, ImageNet veri kümesinin doğrulama kümesindeki model doğruluklarını gösterir.
    yolo val classify data=path/to/ImageNet device=0 ile yeniden oluşturabilirsin.
  • Speed, bir Amazon EC2 P4d örneği kullanılarak ImageNet doğrulama görüntüleri üzerindeki ortalama hızı gösterir.
    yolo val classify data=path/to/ImageNet batch=1 device=0|cpu ile yeniden oluşturabilirsin.
  • 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 göz at.

Eğit#

YOLO26n-cls modelini MNIST160 veri kümesi üzerinde, görüntü boyutu 64 olacak şekilde 100 epoch boyunca eğit. Kullanılabilir tüm bağımsız değişkenlerin listesi için Yapılandırma sayfasına bak.

Örnek
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.yaml")  # build a new model from YAML
model = YOLO("yolo26n-cls.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="mnist160", epochs=100, imgsz=64)
İpucu

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. Bu kırpmaya dayalı dönüşümler, kare girişler varsayar ve aşırı en-boy oranlarına sahip görüntülerde önemli bölgeleri istemeden kırpabilir; bu da eğitim sırasında kritik görsel bilgilerin kaybolmasına neden olabilir. Oranlarını korurken görüntünün tamamını muhafaza etmek için kırpma dönüşümleri yerine torchvision.transforms.Resize kullanmayı düşünebilirsin.

Bunu, özel bir ClassificationDataset ve ClassificationTrainer aracılığıyla artırma işlem hattını özelleştirerek uygulayabilirsin.

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 = ""):
        """Initialize a customized classification dataset with enhanced data augmentation transforms."""
        super().__init__(root, args, augment, prefix)

        # Add your custom training transforms here
        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),
            ]
        )

        # Add your custom validation transforms here
        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=mode)

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)

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)

Veri kümesi biçimi#

YOLO sınıflandırma veri kümesi formatının ayrıntılarını Veri Kümesi Kılavuzu içinde bulabilirsin. Sınıflandırma veri kümeleri, Ultralytics Platform açıklama araçları ile de yönetilebilir ve etiketlenebilir.

Doğrulama#

Eğitilmiş YOLO26n-cls modelinin MNIST160 veri kümesindeki doğruluğunu doğrula. model, eğitim sırasında kullanılan data değerini ve bağımsız değişkenleri model öznitelikleri olarak koruduğundan herhangi bir bağımsız değişken gerekmez.

Örnek
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.top1  # top1 accuracy
metrics.top5  # top5 accuracy
İpucu

Eğitim bölümünde belirtildiği gibi, eğitim sırasında özel bir ClassificationTrainer kullanarak aşırı en-boy oranlarını ele alabilirsin. Tutarlı doğrulama sonuçları elde etmek için val() yöntemini çağırırken özel bir ClassificationValidator uygulayarak aynı yaklaşımı kullanman gerekir. Uygulama ayrıntıları için eğitim bölümündeki eksiksiz kod örneğine bak.

Tahmin#

Görüntüler üzerinde tahminler çalıştırmak için eğitilmiş bir YOLO26n-cls modeli kullan.

Örnek
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    top1 = result.probs.top1  # top predicted class ID
    top1_conf = result.probs.top1conf  # top prediction confidence
    top1_name = result.names[top1]  # top predicted class name

predict modunun 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ık vektörünü ve en yüksek tahminler için yardımcıları içeren result.probs alanıdır.

ÖznitelikTürŞekilAçıklama
result.probsProbs(C,)Sınıf olasılıkları.
result.probs.datatorch.float32(C,)Sınıf başına olasılık.
result.probs.top1int()En yüksek sınıf kimliği.
result.probs.top1conftorch.float32()En yüksek güven.
result.probs.top5list[int](<=5)En yüksek 5 sınıf kimliği.

Her görevdeki göreve özgü Results alanlarının tamamı için Göreve Göre Tahmin Sonuçları bölümüne bak.

Dışa aktarma#

Bir YOLO26n-cls modelini ONNX, CoreML vb. farklı bir biçime aktar.

Örnek
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

Kullanılabilir YOLO26-cls dışa aktarma biçimleri aşağıdaki tabloda verilmiştir. format bağımsız değişkenini, yani format='onnx' veya format='engine' değerini kullanarak herhangi bir biçime aktarabilirsin. Dışa aktarılan modeller üzerinde doğrudan tahmin yapabilir veya doğrulama gerçekleştirebilirsin; bunun için yolo predict model=yolo26n-cls.onnx kullanılır. Dışa aktarma tamamlandıktan sonra modelin için kullanım örnekleri gösterilir.

Biçimformat bağımsız değişkeniModelMeta verilerBağımsız değişkenler
PyTorch-yolo26n-cls.pt-
TorchScripttorchscriptyolo26n-cls.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-cls.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-cls_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-cls_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-cls.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/imgsz, batch, device
MNNmnnyolo26n-cls.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-cls_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-cls_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-cls_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-cls_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-cls_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-cls_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-cls.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-cls_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-cls_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-cls.aimodelimgsz, batch, quantize

nms=None, harici NMS için varsayılan olarak ham çıktıları kullanır. Mevcut bir NMS'siz başlığı seçmek için nms=False değerini ayarla; desteklenmeyen formatlar yerel çıktı yollarına geri döner. Yukarıdaki nms girdileri, NMS'yi nms=True ile gömebilen formatları tanımlar.

Ayrıntıların tamamı için Dışa aktarma sayfasındaki export bilgilerine bak.

SSS#

  • yolo26n-cls.pt gibi YOLO26 modelleri, verimli görüntü sınıflandırma için tasarlanmıştır. Tüm görüntüye tek bir sınıf etiketi ve güven skoru atarlar. Bu, görüntüdeki nesnelerin konumunu veya şeklini belirlemek yerine görüntünün belirli sınıfını bilmenin yeterli olduğu uygulamalar için özellikle kullanışlıdır.

  • Bir YOLO26 modelini eğitmek için Python veya CLI komutlarından birini kullanabilirsin. Örneğin, yolo26n-cls modelini MNIST160 veri kümesi üzerinde, görüntü boyutu 64 olacak şekilde 100 epoch boyunca eğitmek için:

    Örnek
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-cls.pt")  # load a pretrained model (recommended for training)
    
    # Train the model
    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.

  • Önceden eğitilmiş YOLO26 sınıflandırma modellerini Modeller bölümünde bulabilirsin. yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt vb. modeller ImageNet veri kümesi üzerinde önceden eğitilmiştir ve çeşitli görüntü sınıflandırma görevleri için kolayca indirilebilir ve kullanılabilir.

  • Eğitilmiş bir YOLO26 modelini Python veya CLI komutlarını kullanarak çeşitli biçimlere aktarabilirsin. Örneğin, bir modeli ONNX biçimine aktarmak için:

    Örnek
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-cls.pt")  # load the trained model
    
    # Export the model to ONNX
    model.export(format="onnx")

    Ayrıntılı dışa aktarma seçenekleri için Dışa Aktarma sayfasına bak.

  • 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:

    Örnek
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-cls.pt")  # load the trained model
    
    # Validate the model
    metrics = model.val()  # no arguments needed, uses the dataset and settings from training
    metrics.top1  # top1 accuracy
    metrics.top5  # top5 accuracy

    Daha fazla bilgi için Doğrulama bölümünü ziyaret et.

Yorumlar