Meet YOLO26: next-gen vision AI.

Link to this sectionتصدير 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

Link to this sectionلماذا يجب عليك التصدير إلى IMX500؟#

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

Link to this sectionتصدير Sony IMX500 لنماذج YOLO11#

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

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

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

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

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

Link to this sectionالمهام المدعومة#

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

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

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

Link to this sectionأمثلة الاستخدام#

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

يدعم تنسيق IMX أوضاع Export، وPredict، وValidate. يتم تشغيل الاستدلال والتحقق من الصحة على 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 بتثبيت تبعيات تصدير إضافية في وقت التشغيل. في المرة الأولى التي تشغل فيها أمر التصدير، قد تحتاج إلى إعادة تشغيل وحدة التحكم (console) لضمان عمله بشكل صحيح.

Link to this sectionوسائط التصدير#

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

Link to this sectionاستخدام تصدير IMX500 في النشر#

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

Link to this sectionالمتطلبات الأساسية للأجهزة#

تأكد من توفر الأجهزة التالية لديك:

  1. Raspberry Pi 5 أو Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

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

Link to this sectionالمتطلبات الأساسية للبرامج#

ملاحظة

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

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

sudo apt update && sudo apt full-upgrade

الخطوة 2: ثبّت البرنامج الثابت (firmware) الخاص بـ 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()

Link to this sectionالمقارنات المعيارية#

تم تشغيل معايير YOLOv8n، وYOLO11n، وYOLOv8n-pose، وYOLO11n-pose، وYOLOv8n-cls، وYOLO11n-cls أدناه بواسطة فريق Ultralytics على 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 لنماذج التصنيف.

Link to this sectionما الذي يحدث خلف الكواليس؟#

Sony IMX500 YOLO model deployment workflow

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

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

Link to this sectionالميزات المدعومة في MCT#

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

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

Link to this sectionالتكميم#

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

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

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

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

Link to this sectionالتقليم الهيكلي#

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

Link to this sectionأداة تحويل IMX500 (المترجم)#

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

Link to this sectionحالات الاستخدام في العالم الحقيقي#

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

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

Link to this sectionالخلاصة#

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

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

Link to this sectionالأسئلة الشائعة#

Link to this sectionكيف يمكنني تصدير نموذج 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.

Link to this sectionما هي الفوائد الرئيسية لاستخدام تنسيق IMX500 لنشر الذكاء الاصطناعي على الحافة؟#

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

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

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

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

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

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

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

التعليقات