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.
Link to this sectionلماذا يجب عليك التصدير إلى IMX500؟#
مستشعر الرؤية الذكي IMX500 من Sony هو قطعة أجهزة غيرت قواعد اللعبة في معالجة الذكاء الاصطناعي على الحافة. إنه أول مستشعر رؤية ذكي في العالم يتمتع بقدرات ذكاء اصطناعي مدمجة على الشريحة. يساعد هذا المستشعر في التغلب على العديد من التحديات في الذكاء الاصطناعي على الحافة، بما في ذلك اختناقات معالجة البيانات، ومخاوف الخصوصية، وقيود الأداء. بينما تكتفي المستشعرات الأخرى بتمرير الصور والإطارات، يروي IMX500 القصة بأكملها. فهو يعالج البيانات مباشرة على المستشعر، مما يسمح للأجهزة بتوليد رؤى في الوقت الفعلي.
Link to this sectionتصدير Sony IMX500 لنماذج YOLO11#
صُمم IMX500 لتغيير كيفية تعامل الأجهزة مع البيانات مباشرة على المستشعر، دون الحاجة إلى إرسالها إلى السحابة للمعالجة.
يعمل IMX500 مع النماذج المكممة (quantized). تجعل الكمية (Quantization) النماذج أصغر وأسرع دون فقدان الكثير من الدقة. إنه مثالي للموارد المحدودة للحوسبة على الحافة، مما يسمح للتطبيقات بالاستجابة بسرعة عن طريق تقليل التأخير والسماح بمعالجة البيانات بسرعة محلياً، دون الاعتماد على السحابة. كما تحافظ المعالجة المحلية على خصوصية بيانات المستخدم وأمنها نظراً لعدم إرسالها إلى خادم بعيد.
الميزات الرئيسية لـ IMX500:
- إخراج البيانات الوصفية (Metadata): بدلاً من نقل الصور فقط، يمكن لـ IMX500 إخراج كل من الصورة والبيانات الوصفية (نتائج الاستدلال)، ويمكنه إخراج البيانات الوصفية فقط لتقليل حجم البيانات، وتقليل النطاق الترددي، وخفض التكاليف.
- معالجة مخاوف الخصوصية: من خلال معالجة البيانات على الجهاز، يعالج IMX500 مخاوف الخصوصية، وهو مثالي للتطبيقات التي تتمحور حول الإنسان مثل عد الأشخاص وتتبع الإشغال.
- المعالجة في الوقت الفعلي: تدعم المعالجة السريعة على المستشعر اتخاذ القرارات في الوقت الفعلي، وهي مثالية لتطبيقات الذكاء الاصطناعي على الحافة مثل الأنظمة المستقلة.
قبل البدء: للحصول على أفضل النتائج، تأكد من أن نموذج YOLO11 الخاص بك مُعد جيداً للتصدير باتباع دليل تدريب النموذج، ودليل إعداد البيانات، ودليل ضبط المعلمات الفائقة.
Link to this sectionالمهام المدعومة#
حالياً، يمكنك فقط تصدير النماذج التي تتضمن المهام التالية إلى تنسيق IMX500.
تم تصميم واختبار تصدير IMX لـ YOLOv8n و YOLO11n (nano). البنى وأحجام النماذج الأخرى غير مدعومة.
Link to this sectionأمثلة الاستخدام#
تصدير نموذج 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 بتثبيت تبعيات تصدير إضافية في وقت التشغيل. في المرة الأولى التي تقوم فيها بتشغيل أمر التصدير، قد تحتاج إلى إعادة تشغيل وحدة التحكم الخاصة بك للتأكد من أنها تعمل بشكل صحيح.
Link to this sectionوسائط التصدير#
| الوسيط | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'imx' | التنسيق المستهدف للنموذج المصدر، والذي يحدد التوافق مع بيئات النشر المختلفة. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب لمدخلات النموذج. يمكن أن يكون عدداً صحيحاً للصور المربعة أو صفاً (tuple) (height, width) لأبعاد محددة. |
int8 | bool | True | يُنشط تكميم INT8، مما يضغط النموذج بشكل أكبر ويسرع الاستدلال مع فقدان ضئيل في الدقة، بشكل أساسي لأجهزة الحافة. |
data | str | 'coco8.yaml' | مسار ملف تكوين مجموعة البيانات (الافتراضي: coco8.yaml)، وهو ضروري للتكميم. |
fraction | float | 1.0 | يحدد نسبة مجموعة البيانات المستخدمة لمعايرة تكميم INT8. يسمح بالمعايرة على مجموعة فرعية من مجموعة البيانات الكاملة، وهو مفيد للتجارب أو عندما تكون الموارد محدودة. إذا لم يتم تحديده مع تمكين INT8، فسيتم استخدام مجموعة البيانات الكاملة. |
nms | bool | False | يضيف خاصية غير الحد الأقصى (NMS) إلى النموذج المصدر. عندما يكون True، يتم أيضاً قبول conf و iou و agnostic_nms. |
device | str | None | يحدد الجهاز للتصدير: 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.pbtxtLink to this sectionاستخدام تصدير IMX500 في النشر#
بعد تصدير نموذج Ultralytics YOLO11n إلى تنسيق IMX500، يمكن نشره على Raspberry Pi AI Camera للاستدلال.
Link to this sectionالمتطلبات الأساسية للأجهزة#
تأكد من توفر الأجهزة التالية لديك:
- Raspberry Pi 5 أو Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
قم بتوصيل كاميرا Raspberry Pi AI بموصل MIPI CSI ذي 15 سنًا على Raspberry Pi وقم بتشغيل Raspberry Pi
Link to this sectionالمتطلبات الأساسية للبرمجيات#
تم اختبار هذا الدليل باستخدام 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 وفقاً لبيئتك قبل تشغيل هذه البرامج النصية.
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) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| النموذج | التنسيق | الحجم (بكسل) | حجم packerOut.zip (ميغابايت) | acc (top1) | acc (top5) | وقت الاستدلال (ms/im) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
تم إجراء التحقق من المقاييس أعلاه باستخدام مجموعة بيانات COCO128 لنماذج الاكتشاف، ومجموعة بيانات COCO8-Pose لنماذج تقدير الوضعية، وImageNet10 لنماذج التصنيف.
Link to this sectionما الذي يحدث خلف الكواليس؟#
Link to this sectionمجموعة أدوات ضغط النماذج من Sony (MCT)#
مجموعة أدوات ضغط النماذج من Sony (MCT) هي أداة قوية لتحسين نماذج التعلم العميق من خلال التكميم والتقليم. وهي تدعم طرق تكميم مختلفة وتوفر خوارزميات متقدمة لتقليل حجم النموذج والتعقيد الحسابي دون التضحية بالدقة بشكل كبير. تعد MCT مفيدة بشكل خاص لنشر النماذج على الأجهزة ذات الموارد المحدودة، مما يضمن استدلالاً فعالاً وتقليلاً للتأخير.
Link to this sectionالميزات المدعومة في MCT#
تقدم MCT من Sony مجموعة من الميزات المصممة لتحسين نماذج الشبكات العصبية:
- تحسينات الرسم البياني (Graph Optimizations): تحول النماذج إلى إصدارات أكثر كفاءة عن طريق طي الطبقات مثل التسوية الدفعية (batch normalization) في الطبقات السابقة.
- البحث عن معلمات التكميم: يقلل من ضوضاء التكميم باستخدام مقاييس مثل متوسط الخطأ التربيعي (Mean-Square-Error)، وعدم الاقتطاع (No-Clipping)، ومتوسط الخطأ المطلق (Mean-Average-Error).
- خوارزميات التكميم المتقدمة:
- تصحيح النقل السلبي (Shift Negative Correction): يعالج مشاكل الأداء الناتجة عن تكميم التنشيط المتماثل.
- تصفية القيم المتطرفة (Outliers Filtering): يستخدم درجات z لاكتشاف القيم المتطرفة وإزالتها.
- التجميع (Clustering): يستخدم شبكات تكميم غير منتظمة لمطابقة أفضل للتوزيع.
- البحث عن الدقة المختلطة (Mixed-Precision Search): يخصص عرض بتات تكميم مختلف لكل طبقة بناءً على الحساسية.
- التصور: استخدم TensorBoard لمراقبة رؤى أداء النموذج، ومراحل التكميم، وتكوينات عرض البتات.
Link to this sectionالتكميم (Quantization)#
تدعم MCT العديد من طرق التكميم لتقليل حجم النموذج وتحسين سرعة الاستدلال:
- التكميم بعد التدريب (PTQ):
- متاح عبر واجهات برمجة تطبيقات Keras و PyTorch.
- التعقيد: منخفض
- التكلفة الحسابية: منخفضة (دقائق CPU)
- التكميم بعد التدريب القائم على التدرج (GPTQ):
- متاح عبر واجهات برمجة تطبيقات Keras و PyTorch.
- التعقيد: متوسط
- التكلفة الحسابية: معتدلة (2-3 ساعات GPU)
- التدريب الواعي بالتكميم (QAT):
- التعقيد: عالٍ
- التكلفة الحسابية: عالية (12-36 ساعة GPU)
تدعم MCT أيضاً مخططات تكميم متنوعة للأوزان والتنشيطات:
- قوة اثنين (صديقة للأجهزة)
- متماثل
- منتظم
Link to this sectionالتقليم الهيكلي#
تقدم MCT تقليماً هيكلياً للنماذج يراعي خصائص العتاد ومصمماً لبنى عتادية محددة. تستفيد هذه التقنية من إمكانات "Single Instruction, Multiple Data (SIMD)" الخاصة بالمنصة المستهدفة عن طريق تقليم مجموعات SIMD. يؤدي هذا إلى تقليل حجم النموذج وتعقيده مع تحسين استخدام القنوات، بما يتماشى مع بنية SIMD لتحقيق استفادة مستهدفة من مساحة ذاكرة الأوزان. متاح عبر واجهات برمجة تطبيقات Keras وPyTorch.
Link to this sectionأداة محول IMX500 (المترجم)#
تعد أداة محول IMX500 جزءاً لا يتجزأ من مجموعة أدوات IMX500، مما يسمح بترجمة النماذج للنشر على مستشعر 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 الخاصة بسوني نشر نماذجك لاستدلال فعال على الكاميرات القائمة على IMX500. من خلال الاستفادة من تقنيات التكميم المتقدمة، يمكنك تقليل حجم النموذج وتحسين سرعة الاستدلال دون المساس بالدقة بشكل كبير.
لمزيد من المعلومات والإرشادات التفصيلية، راجع موقع IMX500 الخاص بسوني.
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 توفر استدلالاً فعالاً في الوقت الفعلي مع الحفاظ على دقة جيدة لتطبيقات الذكاء الاصطناعي عند الحافة.