Ultralytics YOLO27:

تصدير 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

# Load a YOLO11n PyTorch model
model = YOLO("yolo11n.pt")

# Export the model
model.export(format="imx", data="coco8.yaml")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
تقدير الوضعيات
from ultralytics import YOLO

# Load a YOLO11n-pose PyTorch model
model = YOLO("yolo11n-pose.pt")

# Export the model
model.export(format="imx", data="coco8-pose.yaml")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n-pose_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
التصنيف
from ultralytics import YOLO

# Load a YOLO11n-cls PyTorch model
model = YOLO("yolo11n-cls.pt")

# Export the model
model.export(format="imx", data="imagenet10")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n-cls_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
التقسيم المُثيلي
from ultralytics import YOLO

# Load a YOLO11n-seg PyTorch model
model = YOLO("yolo11n-seg.pt")

# Export the model
model.export(format="imx", data="coco8-seg.yaml")  # exports with PTQ quantization by default

# Load the exported model
imx_model = YOLO("yolo11n-seg_imx_model")

# Run inference
results = imx_model("https://ultralytics.com/images/bus.jpg")
التحقق
from ultralytics import YOLO

# Load the exported IMX500 model
model = YOLO("yolo11n_imx_model")

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")
تحذير

تثبّت حزمة Ultralytics تبعيات تصدير إضافية أثناء التشغيل. عند تشغيل أمر التصدير للمرة الأولى، قد تحتاج إلى إعادة تشغيل وحدة التحكم لديك لضمان عمله بشكل صحيح.

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

الوسيطةالنوعالافتراضيالوصف
formatstr'imx'التنسيق المستهدف للنموذج المُصدَّر، والذي يحدد التوافق مع بيئات النشر المختلفة.
imgszint أو tuple640حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون عددًا صحيحًا للصور المربعة أو صفًا (height, width) لأبعاد محددة.
quantizeint أو str8/autoدقة التكميم. يتم تمكين 8 (INT8/PTQ) تلقائيًا لـ IMX500؛ ويُصدّر "w8a16" أوزان INT8 مع تنشيطات FP16. لا يُدعم التصدير بـ FP32 أو FP16 فقط. ويستبدل ذلك العلامتَي half/int8 المهجورتين.
datastrNoneمسار YAML الخاص بـ مجموعة البيانات، وهو ضروري للتكميم؛ أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمّنة. إذا أُغفل مع quantize=8 أو 'w8a16'، فستحدد Ultralytics مجموعة بيانات المعايرة الافتراضية لمهمة النموذج.
fractionfloat أو int أو list1.0مجموعة المعايرة الجزئية كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم ذات العنصرين test ممتلئًا، بينما تتخطى 0.
nmsbool، اختياريNoneحدد الناتج الخام (None، الافتراضي)، أو الحد Non-Maximum Suppression المدمج (True)، أو رأس النموذج الخالي من الحد Non-Maximum Suppression (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)زمن الاستدلال (مللي ثانية/صورة)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
النموذجالتنسيقالحجم (بالبكسل)حجم packerOut.zip (بالميغابايت)الدقة (top1)الدقة (top5)زمن الاستدلال (مللي ثانية/صورة)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
ملاحظة

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

ما الذي يحدث تحت الغطاء؟#

Sony IMX500 YOLO model deployment workflow

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

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

الميزات المدعومة في MCT#

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

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

التكميم#

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

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

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

  1. قوة العدد اثنين (ملائم للعتاد)
  2. متماثل
  3. موحّد

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

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

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

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

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

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

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

الخلاصة#

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

لمزيد من المعلومات والإرشادات التفصيلية، راجع موقع IMX500 التابع لـ Sony.

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

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

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="imx")  # Exports with PTQ quantization by default

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

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

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

    الأجهزة:

    • Raspberry Pi 5 أو Raspberry Pi 4 Model B
    • كاميرا Raspberry Pi AI المزودة بمستشعر IMX500

    البرمجيات:

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

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

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

التعليقات