Ultralytics YOLO27:
Get Started

تصدير Sony IMX500 لنماذج Ultralytics YOLO11#

يتناول هذا الدليل تصدير نماذج Ultralytics YOLO11 ونشرها على كاميرات Raspberry Pi AI المزودة بمستشعر Sony IMX500.

قد يكون نشر نماذج الرؤية الحاسوبية على الأجهزة ذات القدرة الحاسوبية المحدودة، مثل Raspberry Pi AI Camera، أمرًا صعبًا. ويُحدث استخدام تنسيق نموذج محسّن لتحقيق أداء أسرع فرقًا كبيرًا.

صُمم تنسيق نموذج IMX500 لاستهلاك أقل قدر من الطاقة مع توفير أداء سريع للشبكات العصبية. ويتيح لك تحسين نماذج Ultralytics YOLO11 لتحقيق استدلال سريع ومنخفض الطاقة. في هذا الدليل، سنشرح كيفية تصدير نماذجك ونشرها بتنسيق IMX500، مع تسهيل تقديمها أداءً جيدًا على Raspberry Pi AI Camera.

Raspberry Pi AI Camera with Sony IMX500 sensor

لماذا ينبغي التصدير إلى IMX500؟#

يُعد مستشعر الرؤية الذكي IMX500 من Sony قطعة عتاد ثورية في معالجة الذكاء الاصطناعي الطرفي. فهو أول مستشعر رؤية ذكي في العالم مزود بإمكانات الذكاء الاصطناعي على الشريحة. ويساعد هذا المستشعر على تجاوز العديد من تحديات الذكاء الاصطناعي الطرفي، بما فيها اختناقات معالجة البيانات ومخاوف الخصوصية ومحدودية الأداء. في حين تكتفي المستشعرات الأخرى بنقل الصور والإطارات، يروي IMX500 قصة متكاملة؛ إذ يعالج البيانات مباشرةً على المستشعر، ما يتيح للأجهزة استخلاص الرؤى في الوقت الفعلي.

تصدير Sony IMX500 لنماذج YOLO11#

صُمم IMX500 لتحويل طريقة تعامل الأجهزة مع البيانات مباشرةً على المستشعر، دون الحاجة إلى إرسالها إلى السحابة لمعالجتها.

يعمل IMX500 مع النماذج المكمّمة. ويؤدي التكميم إلى تصغير النماذج وتسريعها دون فقدان قدر كبير من الدقة. وهو مثالي للموارد المحدودة في الحوسبة الطرفية، إذ يتيح للتطبيقات الاستجابة بسرعة عبر تقليل زمن الاستجابة ومعالجة البيانات محليًا بسرعة، دون الاعتماد على السحابة. كما تحافظ المعالجة المحلية على خصوصية بيانات المستخدم وأمانها، لأنها لا تُرسل إلى خادم بعيد.

الميزات الرئيسية لـ IMX500:

  • إخراج البيانات الوصفية: بدلًا من إرسال الصور فقط، يمكن لـ IMX500 إخراج الصورة والبيانات الوصفية (نتيجة الاستدلال) معًا، كما يمكنه إخراج البيانات الوصفية فقط لتقليل حجم البيانات وعرض النطاق الترددي والتكاليف.
  • معالجة مخاوف الخصوصية: يعالج IMX500 مخاوف الخصوصية عبر معالجة البيانات على الجهاز، ما يجعله مثاليًا للتطبيقات التي تركز على الإنسان، مثل عدّ الأشخاص وتتبع الإشغال.
  • المعالجة في الوقت الفعلي: تدعم المعالجة السريعة على المستشعر اتخاذ القرارات في الوقت الفعلي، ما يجعلها مثالية لتطبيقات الذكاء الاصطناعي الطرفي مثل الأنظمة ذاتية التشغيل.

قبل البدء: للحصول على أفضل النتائج، تأكد من إعداد نموذج YOLO11 جيدًا للتصدير باتباع دليل تدريب النماذج ودليل إعداد البيانات ودليل ضبط المعلمات الفائقة.

المهام المدعومة#

يدعم تصدير IMX500 أربعًا من مهام Ultralytics السبع، وذلك لنموذجي YOLOv8n وYOLO11n فقط: أما عائلات النماذج الأخرى ومقاييسها وبُناها فلا تُدعم، ويؤدي تصدير نموذج للتجزئة الدلالية أو OBB أو تقدير العمق إلى ظهور خطأ.

المهمةYOLOv8YOLO11YOLO26
كشف✅✅❌
تجزئة✅✅❌
دلالي❌❌❌
العمق❌❌❌
تصنيف✅✅❌
الوضعية✅✅❌
OBB❌❌❌

أمثلة الاستخدام#

صدّر نموذج Ultralytics YOLO11 إلى تنسيق IMX500 وشغّل الاستدلال باستخدام النموذج المُصدّر.

يدعم تنسيق IMX500 أوضاع التصدير والتنبؤ والتحقق. ويُجرى الاستدلال والتحقق على Raspberry Pi AI Camera (IMX500).

ملاحظة

نجري هنا الاستدلال للتأكد من أن النموذج يعمل كما هو متوقع. لكن لنشر النموذج وتشغيل الاستدلال على Raspberry Pi AI Camera، انتقل إلى قسم استخدام تصدير IMX500 في النشر.

اكتشاف الكائنات
from ultralytics import YOLO

# ⁨تحميل نموذج YOLO11n من PyTorch⁩
model = YOLO("yolo11n.pt")

# ⁨صدّر النموذج⁩
model.export(format="imx", data="coco8.yaml")  # ⁨يُجري التصدير التكميم باستخدام PTQ افتراضيًا⁩

# ⁨تحميل النموذج المُصدّر⁩
imx_model = YOLO("yolo11n_imx_model")

# ⁨تنفيذ الاستدلال⁩
results = imx_model("https://ultralytics.com/images/bus.jpg")
تقدير الوضعية
from ultralytics import YOLO

# ⁨تحميل نموذج YOLO11n-pose من PyTorch⁩
model = YOLO("yolo11n-pose.pt")

# ⁨صدّر النموذج⁩
model.export(format="imx", data="coco8-pose.yaml")  # ⁨يُجري التصدير التكميم باستخدام PTQ افتراضيًا⁩

# ⁨تحميل النموذج المُصدّر⁩
imx_model = YOLO("yolo11n-pose_imx_model")

# ⁨تنفيذ الاستدلال⁩
results = imx_model("https://ultralytics.com/images/bus.jpg")
التصنيف
from ultralytics import YOLO

# ⁨تحميل نموذج YOLO11n-cls من PyTorch⁩
model = YOLO("yolo11n-cls.pt")

# ⁨صدّر النموذج⁩
model.export(format="imx", data="imagenet10")  # ⁨يُجري التصدير التكميم باستخدام PTQ افتراضيًا⁩

# ⁨تحميل النموذج المُصدّر⁩
imx_model = YOLO("yolo11n-cls_imx_model")

# ⁨تنفيذ الاستدلال⁩
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
تقسيم المثيلات
from ultralytics import YOLO

# ⁨تحميل نموذج YOLO11n-seg من PyTorch⁩
model = YOLO("yolo11n-seg.pt")

# ⁨صدّر النموذج⁩
model.export(format="imx", data="coco8-seg.yaml")  # ⁨يُجري التصدير التكميم باستخدام PTQ افتراضيًا⁩

# ⁨تحميل النموذج المُصدّر⁩
imx_model = YOLO("yolo11n-seg_imx_model")

# ⁨تنفيذ الاستدلال⁩
results = imx_model("https://ultralytics.com/images/bus.jpg")
تحقّق
from ultralytics import YOLO

# ⁨تحميل نموذج IMX500 المُصدّر⁩
model = YOLO("yolo11n_imx_model")

# ⁨# التحقق من الدقة على مجموعة بيانات COCO8⁩
metrics = model.val(data="coco8.yaml")
تحذير

لا يُدعم تصدير IMX إلا على Linux باستخدام Python 3.9 أو إصدار أحدث، ويتطلب Java 17 أو إصدارًا أحدث. تثبّت حزمة Ultralytics تبعيات التصدير الإضافية أثناء التشغيل. عند تشغيل أمر التصدير للمرة الأولى، قد تحتاج إلى إعادة تشغيل وحدة التحكم لضمان عمله على النحو الصحيح.

وسيطات التصدير#

المعاملالنوعالافتراضيالوصف
formatstr'imx'التنسيق المستهدف للنموذج المُصدَّر، ويحدد مدى توافقه مع بيئات النشر المختلفة.
imgszint أو tuple640حجم الصورة المطلوب كمدخل للنموذج. يمكن تحديده كعدد صحيح للصور المربعة أو كصف (height, width) للأبعاد المحددة.
quantizeint أو str8/تلقائيدقة التكميم. يلزم استخدام 8 (INT8/PTQ)، ويُفعّل تلقائيًا لـ IMX500. لا يُدعم التصدير باستخدام FP32 أو FP16 فقط. ويحل هذا الخيار محل العلامتين المهملتين half/int8.
datastrNoneمسار ملف YAML الخاص بـمجموعة البيانات، وهو ضروري للتكميم؛ أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمّنة. إذا لم تحدد هذا المسار، تختار Ultralytics مجموعة بيانات المعايرة الافتراضية لمهمة النموذج.
fractionfloat أو int أو list1.0مجموعة فرعية للمعايرة محددة كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم المكوّنة من عنصرين test كاملة، بينما تتجاوزها 0.
nmsbool، اختياريNoneحدّد المخرجات الأولية (None، الافتراضي) أو NMS المضمّن (True) أو الرأس الخالي من NMS (False). يتطلب IMX الخيار nms=True لمهام الكشف والتجزئة وتقدير الوضعية، ويحدده تلقائيًا.
devicestrNoneيحدد الجهاز المستخدم للتصدير: GPU (device=0)، أو CPU (device=cpu).
نصيحة

إذا كنت تُجري التصدير على GPU يدعم CUDA، فأمرِر الوسيطة device=0 لتسريع التصدير.

لمزيد من التفاصيل حول عملية التصدير، تفضّل بزيارة صفحة وثائق Ultralytics حول التصدير.

ستُنشئ عملية التصدير نموذج ONNX للتحقق من التكميم، إلى جانب دليل باسم <model-name>_imx_model. وسيحتوي هذا الدليل على الملف packerOut.zip الضروري لتعبئة النموذج ونشره على عتاد IMX500. بالإضافة إلى ذلك، سيحتوي المجلد <model-name>_imx_model على ملف نصي (labels.txt) يسرد جميع التصنيفات المرتبطة بالنموذج.

بنية المجلدات
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

استخدام تصدير IMX500 في النشر#

بعد تصدير نموذج Ultralytics YOLO11n إلى تنسيق IMX500، يمكن نشره على Raspberry Pi AI Camera لإجراء الاستدلال.

متطلبات العتاد#

تأكد من توفر العتاد التالي:

  1. Raspberry Pi 5 أو Raspberry Pi 4 Model B
  2. كاميرا Raspberry Pi AI

وصّل كاميرا Raspberry Pi AI بموصل MIPI CSI ذي 15 دبوسًا على Raspberry Pi، ثم شغّل Raspberry Pi

متطلبات البرمجيات#

ملاحظة

اختُبر هذا الدليل باستخدام Raspberry Pi OS Bookworm على Raspberry Pi 5

الخطوة 1: افتح نافذة طرفية ونفّذ الأوامر التالية لتحديث برنامج Raspberry Pi إلى أحدث إصدار.

sudo apt update && sudo apt full-upgrade

الخطوة 2: ثبّت البرنامج الثابت لـ IMX500، وهو مطلوب لتشغيل مستشعر IMX500.

sudo apt install imx500-all

الخطوة 3: أعد تشغيل Raspberry Pi لتطبيق التغييرات

sudo reboot

الخطوة 4: ثبّت مكتبة وحدة تطبيق Aitrios Raspberry Pi

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

الخطوة 5: شغّل اكتشاف الكائنات وتقدير الوضعية والتصنيف والتجزئة باستخدام YOLO11، وذلك عبر البرامج النصية التالية المتاحة ضمن أمثلة مكتبة وحدة تطبيق aitrios-rpi-application-module-library.

ملاحظة

تأكد من استبدال الدليلين model_file وlabels.txt بما يتناسب مع بيئتك قبل تشغيل هذه البرامج النصية.

البرامج النصية لـ Python
import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics

class YOLO(Model):
    """YOLO model for IMX500 deployment."""

    def __init__(self):
        """Initialize the YOLO model for IMX500 deployment."""
        super().__init__(
            model_file="yolo11n_imx_model/packerOut.zip",  # replace with proper directory
            model_type=MODEL_TYPE.CONVERTED,
            color_format=COLOR_FORMAT.RGB,
            preserve_aspect_ratio=False,
        )

        self.labels = np.genfromtxt(
            "yolo11n_imx_model/labels.txt",  # replace with proper directory
            dtype=str,
            delimiter="\n",
        )

    def post_process(self, output_tensors):
        """Post-process the output tensors for object detection."""
        return pp_od_yolo_ultralytics(output_tensors)

device = AiCamera(frame_rate=16)  # Optimal frame rate for maximum FPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.55]
        labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]

        annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
        frame.display()

المعايير المرجعية#

أجرى فريق Ultralytics الاختبارات المعيارية أدناه لنماذج YOLOv8n وYOLO11n وYOLOv8n-pose وYOLO11n-pose وYOLOv8n-cls وYOLO11n-cls على Raspberry Pi AI Camera باستخدام تنسيق النموذج imx لقياس السرعة والدقة.

النموذجالتنسيقالحجم (بالبكسل)حجم packerOut.zip (ميغابايت)mAP50-95(B)وقت الاستدلال (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
النموذجالتنسيقالحجم (بالبكسل)حجم packerOut.zip (ميغابايت)acc (top1)acc (top5)وقت الاستدلال (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
ملاحظة

أُجري التحقق من الاختبارات المعيارية أعلاه باستخدام مجموعة بيانات COCO128 لنماذج الكشف، ومجموعة بيانات COCO8-Pose لنماذج تقدير الوضعية، وImageNet10 لنماذج التصنيف.

ما الذي يجري في الكواليس؟#

Sony IMX500 YOLO model deployment workflow

مجموعة أدوات ضغط النماذج من Sony (MCT)#

تُعد مجموعة أدوات ضغط النماذج من سوني (MCT) أداة قوية لتحسين نماذج التعلم العميق من خلال التكميم والتقليم. وهي تدعم أساليب تكميم متنوعة، وتوفر خوارزميات متقدمة لتقليل حجم النموذج وتعقيده الحسابي دون التضحية بالدقة بدرجة كبيرة. وتفيد MCT خصوصًا في نشر النماذج على الأجهزة محدودة الموارد، إذ تضمن استدلالًا فعالًا وزمن استجابة أقل.

الميزات التي تدعمها MCT#

تقدم MCT من سوني مجموعة من الميزات المصممة لتحسين نماذج الشبكات العصبية:

  1. تحسينات الرسم البياني: تحوّل النماذج إلى إصدارات أكثر كفاءة عن طريق دمج طبقات مثل تطبيع الدفعات في الطبقات السابقة.
  2. البحث عن معلمات التكميم: يقلل ضوضاء التكميم إلى أدنى حد باستخدام مقاييس مثل متوسط مربع الخطأ، وعدم القص، ومتوسط متوسط الخطأ.
  3. خوارزميات التكميم المتقدمة:
    • تصحيح الإزاحة السالبة: يعالج مشكلات الأداء الناتجة عن تكميم التنشيط المتماثل.
    • ترشيح القيم المتطرفة: يستخدم درجة z لاكتشاف القيم المتطرفة وإزالتها.
    • التجميع: يستخدم شبكات تكميم غير موحدة لتحقيق تطابق أفضل مع التوزيع.
    • البحث عن الدقة المختلطة: يعيّن عروض بتات تكميم مختلفة لكل طبقة استنادًا إلى حساسيتها.
  4. التصور: استخدم TensorBoard للاطلاع على مؤشرات أداء النموذج ومراحل التكميم وإعدادات عرض البتات.

التكميم#

تدعم MCT عدة أساليب للتكميم لتقليل حجم النموذج وتحسين سرعة الاستدلال:

  1. التكميم بعد التدريب (PTQ):
    • متاح عبر واجهات Keras وPyTorch البرمجية.
    • التعقيد: منخفض
    • التكلفة الحسابية: منخفضة (دقائق من وقت وحدة المعالجة المركزية)
  2. التكميم بعد التدريب القائم على التدرج (GPTQ):
    • متاح عبر واجهات Keras وPyTorch البرمجية.
    • التعقيد: متوسط
    • التكلفة الحسابية: متوسطة (ساعتان إلى ثلاث ساعات من وقت GPU)
  3. التدريب الواعي بالتكميم (QAT):
    • التعقيد: مرتفع
    • التكلفة الحسابية: مرتفعة (12 إلى 36 ساعة من وقت GPU)

تدعم MCT أيضًا مخططات تكميم متنوعة للأوزان وعمليات التنشيط:

  1. قوى العدد اثنين (ملائم للأجهزة)
  2. متماثل
  3. موحد

التقليم المنظّم#

تقدم MCT تقليمًا منظّمًا للنماذج ومراعيًا للأجهزة، ومصممًا لهياكل أجهزة محددة. تستفيد هذه التقنية من إمكانات المنصة المستهدفة في المعالجة بتعليمة واحدة وبيانات متعددة (SIMD)، وذلك بتقليم مجموعات SIMD. ويقلل هذا من حجم النموذج وتعقيده، مع تحسين استخدام القنوات بما يتوافق مع بنية SIMD، لاستهداف استخدام الموارد وتقليل مساحة الذاكرة التي تشغلها الأوزان. وهي متاحة عبر واجهات Keras وPyTorch البرمجية.

أداة تحويل IMX500 (المُصرِّف)#

تُعد أداة تحويل IMX500 جزءًا أساسيًا من مجموعة أدوات IMX500، إذ تتيح تجميع النماذج لنشرها على مستشعر IMX500 من سوني (مثل كاميرات Raspberry Pi AI). وتسهّل هذه الأداة نقل نماذج Ultralytics YOLO11 التي عولجت باستخدام برمجيات Ultralytics، وتضمن توافقها وأداءها بكفاءة على الأجهزة المحددة. وتتضمن عملية التصدير، التي تلي تكميم النموذج، إنشاء ملفات ثنائية تضم البيانات الأساسية والإعدادات الخاصة بالجهاز، مما يبسّط عملية النشر على Raspberry Pi AI Camera.

حالات الاستخدام في العالم الحقيقي#

يُستخدم التصدير إلى تنسيق IMX500 على نطاق واسع في قطاعات متعددة. إليك بعض الأمثلة:

  • الذكاء الاصطناعي الطرفي وإنترنت الأشياء: فعّل اكتشاف الأجسام على الطائرات المسيّرة أو كاميرات الأمن، حيث تكون المعالجة الفورية على الأجهزة منخفضة الطاقة ضرورية.
  • الأجهزة القابلة للارتداء: انشر نماذج محسّنة لمعالجة الذكاء الاصطناعي على نطاق صغير في الأجهزة القابلة للارتداء لمراقبة الصحة.
  • المدن الذكية: استخدم نماذج YOLO11 المُصدّرة إلى IMX500 لمراقبة حركة المرور وتحليل السلامة بسرعة معالجة أعلى وزمن استجابة أدنى.
  • تحليلات البيع بالتجزئة: عزّز المراقبة داخل المتاجر بنشر نماذج محسّنة في أنظمة نقاط البيع أو الرفوف الذكية.

الخلاصة#

يتيح تصدير نماذج Ultralytics YOLO11 إلى تنسيق IMX500 من سوني نشر النماذج للاستدلال الفعال على الكاميرات المعتمدة على IMX500. وبالاستفادة من تقنيات التكميم المتقدمة، يمكنك تقليل حجم النموذج وتحسين سرعة الاستدلال دون التأثير بدرجة كبيرة في الدقة.

لمزيد من المعلومات والإرشادات التفصيلية، يُرجى الرجوع إلى موقع IMX500 من سوني.

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

  • لتصدير نموذج YOLO11 إلى تنسيق IMX500، استخدم واجهة Python البرمجية أو أمر CLI:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="imx")  # ⁨يُصدّر باستخدام التكميم PTQ افتراضيًا⁩

    ستنشىء عملية التصدير دليلًا يحتوي على الملفات اللازمة للنشر، بما في ذلك packerOut.zip.

  • يوفر تنسيق IMX500 عدة مزايا مهمة للنشر الطرفي:

    • تقلل معالجة الذكاء الاصطناعي على الشريحة من زمن الاستجابة واستهلاك الطاقة
    • يُخرج الصور والبيانات الوصفية (نتيجة الاستدلال) بدلًا من الصور وحدها
    • تعزيز الخصوصية بمعالجة البيانات محليًا دون الاعتماد على السحابة
    • إمكانات معالجة فورية مثالية للتطبيقات الحساسة للوقت
    • تكميم محسّن لنشر النماذج بكفاءة على الأجهزة محدودة الموارد
  • لنشر نماذج IMX500، ستحتاج إلى:

    الأجهزة:

    • Raspberry Pi 5 أو Raspberry Pi 4 Model B
    • Raspberry Pi AI Camera مزوّدة بمستشعر IMX500

    البرمجيات:

    • Raspberry Pi OS Bookworm
    • البرامج الثابتة والأدوات الخاصة بـ IMX500 (sudo apt install imx500-all)
  • استنادًا إلى معايير Ultralytics على Raspberry Pi AI Camera:

    • يحقق YOLO11n زمن استدلال قدره 58.82ms لكل صورة
    • mAP50-95 يبلغ 0.517 على مجموعة بيانات COCO128
    • حجم النموذج لا يتجاوز 2.2MB بعد التكميم

    يوضح هذا أن تنسيق IMX500 يوفر استدلالًا فوريًا بكفاءة مع الحفاظ على دقة جيدة لتطبيقات الذكاء الاصطناعي الطرفي.

التعليقات