تصنيف الصور باستخدام Ultralytics YOLO#
يُعدّ تصنيف الصور أبسط المهام المدعومة، ويتضمن تصنيف صورة كاملة ضمن إحدى الفئات المحددة مسبقًا.
تتمثل مخرجات مصنّف الصور في تسمية فئة واحدة ودرجة ثقة. ويكون تصنيف الصور مفيدًا عندما تحتاج فقط إلى معرفة الفئة التي تنتمي إليها الصورة، ولا تحتاج إلى معرفة مواقع الكائنات التابعة لهذه الفئة أو شكلها الدقيق.
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-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 هي دقة النماذج على مجموعة التحقق من مجموعة بيانات 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.probs | Probs | (C,) | احتمالات الفئات. |
result.probs.data | torch.float32 | (C,) | الاحتمال لكل فئة. |
result.probs.top1 | int | () | معرّف الفئة الأعلى. |
result.probs.top1conf | torch.float32 | () | الثقة الأعلى. |
result.probs.top5 | list[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 | ✅ | - |
| 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 |
| Apple Core AI | coreai | yolo26n-cls.aimodel | ✅ | imgsz، 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 مدرّب إلى تنسيقات متنوعة باستخدام أوامر 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لمزيد من المعلومات، تفضل بزيارة قسم التحقق.