Ultralytics YOLO27:

تصنيف الصور باستخدام Ultralytics YOLO#

Ultralytics YOLO image classification of objects and scenes

يُعدّ تصنيف الصور أبسط المهام المدعومة، ويتضمن تصنيف صورة كاملة ضمن إحدى الفئات المحددة مسبقًا.

تتمثل مخرجات مصنّف الصور في تسمية فئة واحدة ودرجة ثقة. ويكون تصنيف الصور مفيدًا عندما تحتاج فقط إلى معرفة الفئة التي تنتمي إليها الصورة، ولا تحتاج إلى معرفة مواقع الكائنات التابعة لهذه الفئة أو شكلها الدقيق.



Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
نصيحة

تستخدم نماذج YOLO26 Classify اللاحقة -cls، أي yolo26n-cls.pt، وهي مدرّبة مسبقًا على ImageNet.

النماذج#

تُعرض هنا نماذج YOLO26 Classify المدرّبة مسبقًا. وقد دُرّبت نماذج Detect وSegment وPose مسبقًا على مجموعة بيانات COCO، بينما دُرّبت نماذج Semantic مسبقًا على Cityscapes، ودُرّبت نماذج Classify مسبقًا على مجموعة بيانات ImageNet.

تُنَزَّل النماذج تلقائيًا من أحدث إصدار من Ultralytics عند الاستخدام لأول مرة.

النموذجالحجم
(بكسل)
الدقة
top1
الدقة
top5
السرعة
CPU ONNX
(مللي ثانية)
السرعة
T4 TensorRT10
(مللي ثانية)
المعاملات
(M)
FLOPs
(B) عند 224
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 هي دقة النماذج على مجموعة التحقق من مجموعة بيانات ImageNet.
    يمكن إعادة إنتاجها باستخدام yolo val classify data=path/to/ImageNet device=0
  • Speed هو متوسط السرعة على صور التحقق من ImageNet باستخدام مثيل Amazon EC2 P4d.
    يمكن إعادة إنتاجها باستخدام yolo val classify data=path/to/ImageNet batch=1 device=0|cpu
  • قيم Params وFLOPs مخصّصة للنموذج المدمج بعد تنفيذ model.fuse()، الذي يدمج طبقات Conv وBatchNorm. وتحتفظ نقاط التحقق المدرّبة مسبقًا ببنية التدريب الكاملة، وقد تُظهر أعدادًا أعلى.

راجع مع معاينة YOLO27 غير الإصدار الرسمي لمعرفة السرعة الأولية للتصنيف وأحجام نماذج تصنيف الصور.

التدريب#

درّب YOLO26n-cls على مجموعة بيانات MNIST160 لمدة 100 حقبة وبحجم صورة قدره 64. للحصول على قائمة كاملة بالوسائط المتاحة، راجع صفحة الإعداد.

مثال
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)
نصيحة

يستخدم تصنيف Ultralytics YOLO torchvision.transforms.RandomResizedCrop للتدريب وtorchvision.transforms.CenterCrop للتحقق والاستدلال. تفترض التحويلات المعتمدة على الاقتصاص أن تكون المدخلات مربعة، وقد تقتصّ عن غير قصد مناطق مهمة من الصور ذات نسب العرض إلى الارتفاع الشديدة، مما قد يؤدي إلى فقدان معلومات مرئية أساسية أثناء التدريب. للحفاظ على الصورة كاملة مع الإبقاء على نسبها، يمكنك استخدام torchvision.transforms.Resize بدلًا من تحويلات الاقتصاص.

يمكنك تنفيذ ذلك عبر تخصيص مسار تحسين البيانات من خلال ClassificationDataset وClassificationTrainer مخصصين.

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)

تنسيق مجموعة البيانات#

يمكن العثور على تفاصيل تنسيق مجموعة بيانات تصنيف YOLO في دليل مجموعة البيانات. كما يمكن إدارة مجموعات بيانات التصنيف ووضع تسميات لها باستخدام أدوات التعليق التوضيحي في منصة Ultralytics.

التحقق#

تحقّق من دقة نموذج YOLO26n-cls المدرّب على مجموعة بيانات MNIST160. لا حاجة إلى أي وسائط، لأن model يحتفظ بـdata الخاص بالتدريب وبالوسائط باعتبارها سمات للنموذج.

مثال
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
نصيحة

كما ذُكر في قسم التدريب، يمكنك التعامل مع نسب العرض إلى الارتفاع الشديدة أثناء التدريب باستخدام ClassificationTrainer مخصص. وللحصول على نتائج تحقق متسقة، يجب تطبيق النهج نفسه من خلال تنفيذ ClassificationValidator مخصص عند استدعاء الطريقة val(). راجع مثال التعليمات البرمجية الكامل في قسم التدريب لمعرفة تفاصيل التنفيذ.

التنبؤ#

استخدم نموذج YOLO26n-cls مدرّبًا لإجراء تنبؤات على الصور.

مثال
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 الكاملة في صفحة التنبؤ.

مخرجات النتائج#

يعيد تصنيف الصور كائن Results واحدًا لكل صورة. وحقل التنبؤ الأساسي هو result.probs، الذي يحتوي على متجه احتمالات الفئات وأدوات مساعدة للتنبؤات الأعلى.

السمةالنوعالشكلالوصف
result.probsProbs(C,)احتمالات الفئات.
result.probs.datatorch.float32(C,)الاحتمال لكل فئة.
result.probs.top1int()معرّف الفئة الأعلى.
result.probs.top1conftorch.float32()الثقة الأعلى.
result.probs.top5list[int](<=5)معرّفات الفئات الخمس الأعلى.

للاطلاع على حقول Results الخاصة بالمهمة عبر جميع المهام، راجع قسم نتائج التنبؤ حسب المهمة.

التصدير#

صدّر نموذج YOLO26n-cls إلى تنسيق مختلف مثل ONNX أو CoreML أو غيرهما.

مثال
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")

تتوفر تنسيقات التصدير YOLO26-cls في الجدول أدناه. يمكنك التصدير إلى أي تنسيق باستخدام الوسيط format، أي format='onnx' أو format='engine'. ويمكنك إجراء التنبؤ أو التحقق مباشرةً على النماذج المُصدَّرة، أي yolo predict model=yolo26n-cls.onnx. وتُعرض أمثلة الاستخدام لنموذجك بعد اكتمال التصدير.

التنسيقوسيط formatالنموذجالبيانات الوصفيةالوسائط
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 المخرجات الخام لـ NMS الخارجي. قم بتعيين nms=False لتحديد رأس متاح خالٍ من NMS؛ وتتراجع التنسيقات غير المدعومة إلى مسار إخراجها الأصلي. وتحدد مُدخلات nms أعلاه التنسيقات التي يمكنها تضمين NMS باستخدام nms=True.

راجع تفاصيل export الكاملة في صفحة التصدير.

الأسئلة الشائعة#

  • صُممت نماذج YOLO26، مثل yolo26n-cls.pt، لتصنيف الصور بكفاءة. فهي تعيّن تسمية فئة واحدة للصورة كاملةً إلى جانب درجة ثقة. ويكون ذلك مفيدًا خصوصًا للتطبيقات التي يكفي فيها معرفة فئة الصورة المحددة، بدلًا من تحديد موقع الكائنات داخل الصورة أو شكلها.

  • لتدريب نموذج YOLO26، يمكنك استخدام أوامر Python أو CLI. على سبيل المثال، لتدريب نموذج yolo26n-cls على مجموعة بيانات MNIST160 لمدة 100 حقبة وبحجم صورة قدره 64:

    مثال
    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)

    لمزيد من خيارات الإعداد، تفضل بزيارة صفحة الإعداد.

  • يمكن العثور على نماذج YOLO26 المدرّبة مسبقًا لتصنيف الصور في قسم النماذج. ونماذج مثل yolo26n-cls.pt وyolo26s-cls.pt وyolo26m-cls.pt وغيرها مدرّبة مسبقًا على مجموعة بيانات ImageNet، ويمكن تنزيلها واستخدامها بسهولة في مهام متنوعة لتصنيف الصور.

  • يمكنك تصدير نموذج YOLO26 مدرّب إلى تنسيقات متنوعة باستخدام أوامر Python أو CLI. على سبيل المثال، لتصدير نموذج إلى تنسيق ONNX:

    مثال
    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")

    للاطلاع على خيارات التصدير التفصيلية، راجع صفحة التصدير.

  • للتحقق من دقة نموذج مدرّب على مجموعة بيانات مثل MNIST160، يمكنك استخدام أوامر Python أو CLI التالية:

    مثال
    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

    لمزيد من المعلومات، تفضل بزيارة قسم التحقق.

التعليقات