تصدير Sony IMX500 لنماذج Ultralytics YOLO11
يغطي هذا الدليل تصدير ونشر نماذج Ultralytics YOLO11 على كاميرات Raspberry Pi AI التي تتميز بمستشعر Sony IMX500.
قد يكون نشر نماذج الرؤية الحاسوبية على الأجهزة ذات القدرة الحسابية المحدودة، مثل Raspberry Pi AI Camera، أمراً معقداً. ويُحدث استخدام تنسيق نموذج مُحسَّن لأداء أسرع فرقاً كبيراً.
صُمم تنسيق النموذج IMX500 لاستهلاك الحد الأدنى من الطاقة مع تقديم أداء سريع للشبكات العصبية. وهو يتيح لك تحسين نماذج Ultralytics YOLO11 الخاصة بك للاستدلال عالي السرعة ومنخفض الطاقة. في هذا الدليل، سنرشدك خلال تصدير ونشر نماذجك بتنسيق IMX500، مما يسهل على نماذجك تحقيق أداء جيد على Raspberry Pi AI Camera.
لماذا يجب عليك التصدير إلى تنسيق 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") 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 بتثبيت تبعيات تصدير إضافية في وقت التشغيل. في المرة الأولى التي تقوم فيها بتشغيل أمر التصدير، قد تحتاج إلى إعادة تشغيل وحدة التحكم الخاصة بك للتأكد من أنها تعمل بشكل صحيح.
وسائط التصدير
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'imx' | التنسيق المستهدف للنموذج الذي تم تصديره، مما يحدد التوافق مع بيئات النشر المختلفة. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب لمدخلات النموذج. يمكن أن يكون عدداً صحيحاً للصور المربعة أو صفاً (height, width) لأبعاد محددة. |
int8 | bool | True | يُنشط كمّية INT8، مما يزيد من ضغط النموذج وتسريع الاستنتاج بأقل قدر من فقدان الدقة، بشكل أساسي لأجهزة الحافة. |
data | str | 'coco8.yaml' | المسار إلى ملف إعداد مجموعة البيانات (الافتراضي: coco8.yaml)، وهو ضروري للكمية (quantization). |
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.pbtxtاستخدام تصدير IMX500 في النشر
بعد تصدير نموذج Ultralytics YOLO11n إلى تنسيق IMX500، يمكن نشره على Raspberry Pi AI Camera للاستدلال.
المتطلبات الأساسية للأجهزة
تأكد من توفر الأجهزة التالية لديك:
- Raspberry Pi 5 أو Raspberry Pi 4 Model B
- 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 وفقاً لبيئتك قبل تشغيل هذه البرامج النصية.
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) | وقت الاستنتاج (مللي ثانية/صورة) |
|---|---|---|---|---|---|
| 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) | وقت الاستنتاج (مللي ثانية/صورة) |
|---|---|---|---|---|---|---|
| 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 لنماذج التصنيف.
ما الذي يحدث خلف الكواليس؟
مجموعة أدوات ضغط النماذج (MCT) من Sony
مجموعة أدوات ضغط النماذج (MCT) من Sony هي أداة قوية لتحسين نماذج التعلم العميق من خلال التكميم والتقليم (pruning). وهي تدعم طرق تكميم مختلفة وتوفر خوارزميات متقدمة لتقليل حجم النموذج والتعقيد الحسابي دون التضحية بالدقة بشكل كبير. تُعد MCT مفيدة بشكل خاص لنشر النماذج على الأجهزة المحدودة الموارد، مما يضمن استدلالاً فعالاً وزمن استجابة أقل.
الميزات المدعومة في MCT
تقدم MCT من Sony مجموعة من الميزات المصممة لتحسين نماذج الشبكات العصبية:
- تحسينات الرسم البياني (Graph Optimizations): تحول النماذج إلى إصدارات أكثر كفاءة عن طريق طي الطبقات مثل تسوية الدفعة (batch normalization) في الطبقات السابقة.
- البحث عن معلمات التكميم (Quantization Parameter Search): يقلل من ضجيج التكميم باستخدام مقاييس مثل متوسط مربع الخطأ، وعدم القص (No-Clipping)، ومتوسط الخطأ المطلق.
- خوارزميات التكميم المتقدمة:
- تصحيح التحول السالب (Shift Negative Correction): يعالج مشكلات الأداء الناتجة عن تكميم التنشيط المتماثل.
- تصفية القيم المتطرفة (Outliers Filtering): يستخدم الدرجة المعيارية (z-score) لاكتشاف القيم المتطرفة وإزالتها.
- التجميع (Clustering): يستخدم شبكات تكميم غير منتظمة لتحسين مطابقة التوزيع.
- البحث عن الدقة المختلطة (Mixed-Precision Search): يخصص عروض بت (bit-widths) مختلفة للتكميم لكل طبقة بناءً على الحساسية.
- التصور (Visualization): استخدم TensorBoard لمراقبة رؤى أداء النموذج، ومراحل التكميم، وتكوينات عرض البت.
التكميم (Quantization)
تدعم MCT العديد من طرق التكميم لتقليل حجم النموذج وتحسين سرعة الاستدلال:
- تكميم ما بعد التدريب (PTQ):
- متاح عبر واجهات برمجة تطبيقات Keras و PyTorch.
- التعقيد: منخفض
- التكلفة الحسابية: منخفضة (دقائق على CPU)
- تكميم ما بعد التدريب القائم على التدرج (GPTQ):
- متاح عبر واجهات برمجة تطبيقات Keras و PyTorch.
- التعقيد: متوسط
- التكلفة الحسابية: معتدلة (2-3 ساعات على GPU)
- التدريب المدرك للتكميم (QAT):
- التعقيد: عالٍ
- التكلفة الحسابية: عالية (12-36 ساعة على GPU)
تدعم MCT أيضاً مخططات تكميم مختلفة للأوزان والتنشيطات:
- قوى العدد اثنين (صديقة للأجهزة)
- متماثل (Symmetric)
- منتظم (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).