تصنيف الصور باستخدام Ultralytics YOLO#
تصنيف الصور هو أبسط المهام المدعومة، ويتضمن تصنيف الصورة بأكملها ضمن فئة واحدة من مجموعة فئات محددة مسبقًا.
يكون ناتج مصنّف الصور تسمية فئة واحدة ودرجة ثقة. ويكون تصنيف الصور مفيدًا عندما تحتاج فقط إلى معرفة الفئة التي تنتمي إليها الصورة، ولا تحتاج إلى معرفة مواقع الكائنات من تلك الفئة أو أشكالها الدقيقة.
شاهد: استكشف مهام Ultralytics YOLO: تصنيف الصور باستخدام منصة Ultralytics
تستخدم نماذج YOLO26 Classify اللاحقة -cls، مثل yolo26n-cls.pt، وتُدرّب مسبقًا على ImageNet.
النماذج#
تظهر أدناه نماذج YOLO26 Classify المدرّبة مسبقًا على مجموعة بيانات ImageNet.
تُنزّل النماذج تلقائيًا من أحدث إصدار من Ultralytics عند استخدامها لأول مرة.
| النموذج | الحجم (بكسل) | الدقة أعلى 1 | الدقة أعلى 5 | السرعة CPU ONNX (مللي ثانية) | السرعة 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.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 classify val data=path/to/ImageNet device=0 - متوسط السرعة على صور التحقق من ImageNet باستخدام ONNX على CPU وTensorRT10 على وحدة معالجة الرسوميات NVIDIA T4.
أعِد إنتاجها باستخدامyolo classify val 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
# تحميل نموذج
model = YOLO("yolo26n-cls.yaml") # إنشاء نموذج جديد من YAML
model = YOLO("yolo26n-cls.pt") # تحميل نموذج مدرّب مسبقًا (موصى به للتدريب)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt") # الإنشاء من YAML ونقل الأوزان
# تدريب النموذج
results = model.train(data="mnist160", epochs=100, imgsz=64)راجع التفاصيل الكاملة لوضع train في صفحة التدريب. ويمكن أيضًا تدريب نماذج التصنيف باستخدام التدريب السحابي على Ultralytics Platform.
تنسيق مجموعة البيانات#
ترد تفاصيل تنسيق مجموعة بيانات تصنيف YOLO في دليل مجموعات البيانات. ويمكن أيضًا إدارة مجموعات بيانات التصنيف ووضع التسميات عليها باستخدام أدوات التعليقات التوضيحية في Ultralytics Platform.
تحويلات مخصصة#
يستخدم تصنيف Ultralytics YOLO torchvision.transforms.RandomResizedCrop للتدريب وtorchvision.transforms.CenterCrop للتحقق والاستدلال. تفترض هذه التحويلات القائمة على الاقتصاص أن المدخلات مربعة، وقد تقتطع مناطق مهمة من الصور ذات نسب العرض إلى الارتفاع الشديدة. للاحتفاظ بالصورة كاملة، استبدل عمليات الاقتصاص بـ torchvision.transforms.Resize، الذي يغيّر الحجم إلى imgsz × imgsz بدلًا من الاقتصاص، عبر ClassificationDataset وClassificationTrainer وClassificationValidator مخصصة:
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)
# أضف تحويلات التدريب المخصصة هنا
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),
]
)
# أضف تحويلات التحقق المخصصة هنا
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)التحقق#
تحقق من دقة نموذج YOLO26n-cls المدرّب. لا حاجة إلى وسيطات، إذ يحتفظ model ببيانات data الخاصة بالتدريب ووسيطاته ضمن سمات النموذج: يتحقق path/to/best.pt من المثال الوارد في التدريب على MNIST160. تسجل الأوزان الرسمية مسار مجموعة بيانات التدريب الذي لا يوجد على جهازك، لذا تعود إلى imagenet10 الافتراضي للمهمة مع إصدار تحذير. مرّر data للتحقق باستخدام مجموعة بيانات أخرى.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n-cls.pt") # حمّل نموذجًا رسميًا
model = YOLO("path/to/best.pt") # تحميل نموذج مخصص
# تحقّق من النموذج
metrics = model.val() # لا حاجة إلى وسيطات؛ إذ تُحفظ مجموعة البيانات والإعدادات
metrics.top1 # top1 accuracy
metrics.top5 # top5 accuracyيحتاج النموذج المدرّب باستخدام تحويلات مخصصة إلى تمرير ClassificationValidator المطابق إلى val()، وإلا فسيقتطع التحقق الصور بينما أعاد التدريب تحجيمها.
التنبؤ#
استخدم نموذج YOLO26n-cls مدرّبًا لإجراء تنبؤات على الصور.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n-cls.pt") # حمّل نموذجًا رسميًا
model = YOLO("path/to/best.pt") # تحميل نموذج مخصص
# أجرِ التنبؤ باستخدام النموذج
results = model("https://ultralytics.com/images/bus.jpg") # أجرِ التنبؤ على صورة
# الوصول إلى النتائج
for result in results:
top1 = result.probs.top1 # معرّف الفئة الأعلى تنبؤًا
top1_conf = result.probs.top1conf # درجة الثقة لأعلى تنبؤ
top1_name = result.names[top1] # اسم الفئة الأعلى تنبؤًااطّلع على التفاصيل الكاملة لوضع 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
# تحميل نموذج
model = YOLO("yolo26n-cls.pt") # حمّل نموذجًا رسميًا
model = YOLO("path/to/best.pt") # تحميل نموذج مخصص
# صدّر النموذج
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 |
| 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 على المخرجات الأولية لإجراء 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 # تحميل نموذج model = YOLO("yolo26n-cls.pt") # تحميل نموذج مدرّب مسبقًا (موصى به للتدريب) # تدريب النموذج results = model.train(data="mnist160", epochs=100, imgsz=64)لمزيد من خيارات الإعداد، تفضّل بزيارة صفحة الإعدادات.
للتحقق من دقة نموذج مدرَّب على مجموعة بيانات مثل MNIST160، يمكنك استخدام أوامر Python أو CLI التالية:
مثالfrom ultralytics import YOLO # تحميل نموذج model = YOLO("path/to/best.pt") # حمّل النموذج المدرَّب # تحقّق من النموذج metrics = model.val() # لا حاجة إلى وسيطات؛ إذ يستخدم مجموعة البيانات والإعدادات الخاصة بالتدريب metrics.top1 # top1 accuracy metrics.top5 # top5 accuracyلمزيد من المعلومات، تفضّل بزيارة قسم التحقق من الصحة.
يمكنك تصدير نموذج YOLO26 مدرَّب إلى تنسيقات متنوعة باستخدام أوامر Python أو CLI. على سبيل المثال، لتصدير نموذج إلى تنسيق ONNX:
مثالfrom ultralytics import YOLO # تحميل نموذج model = YOLO("yolo26n-cls.pt") # حمّل النموذج المدرَّب # صدّر النموذج إلى ONNX model.export(format="onnx")للاطلاع على خيارات التصدير بالتفصيل، راجع صفحة التصدير.