تصدير 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 قطعة أجهزة تغير قواعد اللعبة في معالجة الذكاء الاصطناعي على الحافة (Edge AI). إنه أول مستشعر رؤية ذكي في العالم مزود بقدرات ذكاء اصطناعي على الشريحة. يساعد هذا المستشعر في التغلب على العديد من التحديات في الذكاء الاصطناعي على الحافة، بما في ذلك اختناقات معالجة البيانات، ومخاوف الخصوصية، وقيود الأداء. بينما تكتفي المستشعرات الأخرى بتمرير الصور والإطارات، يروي IMX500 القصة بأكملها. فهو يعالج البيانات مباشرة على المستشعر، مما يسمح للأجهزة بتوليد رؤى في الوقت الفعلي.

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

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

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

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

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

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

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

حاليًا، يمكنك فقط تصدير النماذج التي تتضمن المهام التالية إلى تنسيق IMX500.

متغيرات النماذج المدعومة

صُمم تصدير IMX وتمت معايرته لـ YOLOv8n و YOLO11n (النموذج المصغر). البنيات وأحجام النماذج الأخرى غير مدعومة.

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

قم بتصدير نموذج Ultralytics YOLO11 إلى تنسيق 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")
التصنيف (Classification)
 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")
تحذير

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

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

المعاملالنوعالافتراضيالوصف
formatstr'imx'التنسيق المستهدف للنموذج الذي تم تصديره، مما يحدد التوافق مع بيئات النشر المختلفة.
imgszint أو tuple640حجم الصورة المطلوب لمدخلات النموذج. يمكن أن يكون عدداً صحيحاً للصور المربعة أو صفاً (height, width) لأبعاد محددة.
int8boolTrueيُنشط كمّية INT8، مما يزيد من ضغط النموذج وتسريع الاستنتاج بأقل قدر من فقدان الدقة، بشكل أساسي لأجهزة الحافة.
datastr'coco8.yaml'المسار إلى ملف إعداد مجموعة البيانات (الافتراضي: coco8.yaml)، وهو ضروري للكمية (quantization).
fractionfloat1.0يحدد جزء مجموعة البيانات المستخدم لمعايرة تكميم INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو مفيد للتجارب أو عند محدودية الموارد. إذا لم يتم تحديده مع تفعيل INT8، فسيتم استخدام مجموعة البيانات الكاملة.
nmsboolFalseيضيف خاصية كبت غير الحد الأقصى (NMS) إلى النموذج المصدر. عند ضبطها على True، يتم أيضاً قبول conf و iou و agnostic_nms.
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 Camera

قم بتوصيل كاميرا Raspberry Pi AI بموصل MIPI CSI ذو الـ 15 دبوساً على Raspberry Pi وقم بتشغيل Raspberry Pi.

المتطلبات الأساسية للبرمجيات

ملاحظة

تم اختبار هذا الدليل باستخدام نظام التشغيل Raspberry Pi OS Bookworm الذي يعمل على Raspberry Pi 5.

الخطوة 1: افتح نافذة طرفية (terminal) ونفذ الأوامر التالية لتحديث برنامج 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 DPS 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()

المقاييس المرجعية

تم تشغيل معايير YOLOv8n و YOLO11n و YOLOv8n-pose و YOLO11n-pose و YOLOv8n-cls و YOLO11n-cls أدناه بواسطة فريق Ultralytics على 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 (ميجابايت)acc (top1)acc (top5)وقت الاستنتاج (مللي ثانية/صورة)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
ملاحظة

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

ما الذي يحدث خلف الكواليس؟

Sony IMX500 YOLO model deployment workflow

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

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

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

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

  1. تحسينات الرسم البياني (Graph Optimizations): تحول النماذج إلى إصدارات أكثر كفاءة عن طريق طي الطبقات مثل تسوية الدفعة (batch normalization) في الطبقات السابقة.
  2. البحث عن معلمات التكميم (Quantization Parameter Search): يقلل من ضجيج التكميم باستخدام مقاييس مثل متوسط مربع الخطأ، وعدم القص (No-Clipping)، ومتوسط الخطأ المطلق.
  3. خوارزميات التكميم المتقدمة:
    • تصحيح التحول السالب (Shift Negative Correction): يعالج مشكلات الأداء الناتجة عن تكميم التنشيط المتماثل.
    • تصفية القيم المتطرفة (Outliers Filtering): يستخدم الدرجة المعيارية (z-score) لاكتشاف القيم المتطرفة وإزالتها.
    • التجميع (Clustering): يستخدم شبكات تكميم غير منتظمة لتحسين مطابقة التوزيع.
    • البحث عن الدقة المختلطة (Mixed-Precision Search): يخصص عروض بت (bit-widths) مختلفة للتكميم لكل طبقة بناءً على الحساسية.
  4. التصور (Visualization): استخدم TensorBoard لمراقبة رؤى أداء النموذج، ومراحل التكميم، وتكوينات عرض البت.

التكميم (Quantization)

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

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

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

  1. قوى العدد اثنين (صديقة للأجهزة)
  2. متماثل (Symmetric)
  3. منتظم (Uniform)

التقليم الهيكلي (Structured Pruning)

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

أداة محول IMX500 (المترجم)

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

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

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

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

خاتمة

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

لمزيد من المعلومات والمبادئ التوجيهية التفصيلية، راجع موقع IMX500 الخاص بشركة Sony.

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

كيف يمكنني تصدير نموذج YOLO11 إلى تنسيق IMX500 لكاميرا Raspberry Pi AI Camera؟

لتصدير نموذج 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 لنشر الذكاء الاصطناعي على الحافة (Edge AI)؟

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

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

ما هي متطلبات الأجهزة والبرامج اللازمة لنشر 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)

ما الأداء الذي يمكنني توقعه من نماذج YOLO11 على IMX500؟

بناءً على مقاييس Ultralytics على كاميرا Raspberry Pi AI Camera:

  • يحقق YOLO11n زمن استدلال قدره 62.50 مللي ثانية لكل صورة
  • مقياس mAP50-95 يبلغ 0.492 على مجموعة بيانات COCO128
  • حجم النموذج 3.2 ميجابايت فقط بعد التكميم

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

التعليقات