تصنيف الصور باستخدام Ultralytics YOLO#
Image classification هي أبسط المهام المدعومة وتتضمن تصنيف صورة بأكملها إلى فئة واحدة من مجموعة من الفئات المحددة مسبقاً.
مخرجات مصنف الصور عبارة عن تسمية فئة واحدة ودرجة ثقة. يعد تصنيف الصور مفيدًا عندما تحتاج فقط إلى معرفة الفئة التي تنتمي إليها الصورة ولا تحتاج إلى معرفة مكان وجود كائنات تلك الفئة أو شكلها الدقيق.
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.
يتم تنزيل Models تلقائياً من أحدث release لـ Ultralytics عند الاستخدام الأول.
| النموذج | الحجم (بكسل) | acc top1 | acc top5 | السرعة CPU ONNX (ms) | السرعة T4 TensorRT10 (ms) | المعلمات (M) | FLOPs (B) عند 224 |
|---|---|---|---|---|---|---|---|
| YOLO26n-cls | 224 | 71.4 | 90.1 | 5.0 ± 0.3 | 1.1 ± 0.0 | 2.8 | 0.5 |
| YOLO26s-cls | 224 | 76.0 | 92.9 | 7.9 ± 0.2 | 1.3 ± 0.0 | 6.7 | 1.6 |
| YOLO26m-cls | 224 | 78.1 | 94.2 | 17.2 ± 0.4 | 2.0 ± 0.0 | 11.6 | 4.9 |
| YOLO26l-cls | 224 | 79.0 | 94.6 | 23.2 ± 0.3 | 2.8 ± 0.0 | 14.1 | 6.2 |
| YOLO26x-cls | 224 | 79.9 | 95.0 | 41.4 ± 0.9 | 3.8 ± 0.0 | 29.6 | 13.6 |
- قيم 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. تحتفظ نقاط التحقق المدربة مسبقاً ببنية التدريب الكاملة وقد تظهر أعداداً أعلى.
التدريب#
قم بتدريب YOLO26n-cls على مجموعة بيانات MNIST160 لمدة 100 epochs بحجم صورة 64. للحصول على قائمة كاملة بالوسائط المتاحة، راجع صفحة Configuration.
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="imagenet1000", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet1000", validator=CustomizedValidator, imgsz=224, batch=64)تنسيق مجموعة البيانات#
يمكن العثور على تفاصيل تنسيق مجموعة بيانات تصنيف YOLO في Dataset Guide. يمكن أيضاً إدارة مجموعات بيانات التصنيف وتسميتها باستخدام Ultralytics Platform annotation tools.
التحقق#
تحقق من accuracy نموذج 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كما ذكرنا في training section، يمكنك التعامل مع نسب الأبعاد المتطرفة أثناء التدريب باستخدام ClassificationTrainer مخصص. تحتاج إلى تطبيق نفس النهج لنتائج تحقق متسقة من خلال تنفيذ ClassificationValidator مخصص عند استدعاء طريقة val(). راجع مثال الكود الكامل في training section لمعرفة تفاصيل التنفيذ.
التنبؤ#
استخدم نموذج 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 الكاملة في صفحة التنبؤ (Predict).
مخرجات النتائج#
يقوم تصنيف الصور بإرجاع كائن Results واحد لكل صورة. حقل التنبؤ الأساسي هو result.probs، والذي
يحتوي على متجه احتمالية الفئة ومساعدات للتنبؤات العلوية.
| السمة (Attribute) | النوع | الشكل | الوصف |
|---|---|---|---|
result.probs | Probs | (C,) | احتمالات الفئات. |
result.probs.data | torch.float32 | (C,) | الاحتمالية لكل فئة. |
result.probs.top1 | int | () | معرف الفئة الأعلى. |
result.probs.top1conf | torch.float32 | () | أعلى درجة ثقة. |
result.probs.top5 | list[int] | (<=5) | أعلى 5 معرفات للفئات. |
للحصول على حقول Results الخاصة بكل مهمة عبر كل مهمة، راجع قسم نتائج التنبؤ حسب المهمة (Predict Results by Task).
التصدير#
تصدير نموذج 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 | النموذج | البيانات الوصفية | الوسائط (Arguments) |
|---|---|---|---|---|
| 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 |
| TF SavedModel | saved_model | yolo26n-cls_saved_model/ | ✅ | imgsz، keras، 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 |
| 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 |
| LiteRT | litert | yolo26n-cls.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-cls_hailo_model/ | ✅ | imgsz، name، quantize، data، fraction، simplify، conf، iou |
| Huawei Ascend | ascend | yolo26n-cls_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
راجع تفاصيل export الكاملة في صفحة التصدير (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)لمزيد من خيارات التكوين، تفضل بزيارة صفحة Configuration.
يمكنك تصدير نموذج 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")للحصول على خيارات التصدير التفصيلية، راجع صفحة Export.
للتحقق من دقة نموذج مدرب على مجموعة بيانات مثل 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لمزيد من المعلومات، تفضل بزيارة قسم Validate.