تصدير 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 Intelligent Vision Sensor من Sony قطعة عتاد تُحدث ثورة في معالجة الذكاء الاصطناعي على الحافة. إنه أول مستشعر رؤية ذكي في العالم مزود بقدرات الذكاء الاصطناعي على الشريحة. يساعد هذا المستشعر في التغلب على العديد من التحديات في الذكاء الاصطناعي على الحافة، بما في ذلك اختناقات معالجة البيانات، ومخاوف الخصوصية، وقيود الأداء. وبينما تكتفي المستشعرات الأخرى بتمرير الصور والإطارات، فإن IMX500 يروي قصة كاملة. فهو يعالج البيانات مباشرة على المستشعر، مما يسمح للأجهزة بتوليد رؤى في الوقت الفعلي.
تصدير Sony IMX500 لنماذج YOLO11#
تم تصميم IMX500 لتغيير كيفية تعامل الأجهزة مع البيانات مباشرة على المستشعر، دون الحاجة إلى إرسالها إلى السحابة للمعالجة.
يعمل IMX500 مع النماذج الكمومية. تجعل الكمومية النماذج أصغر حجمًا وأسرع دون فقدان كبير في الدقة. وهو مثالي للموارد المحدودة للحوسبة الطرفية، مما يسمح للسبليكات بالاستجابة بسرعة عن طريق تقليل وقت الاستجابة وإتاحة المعالجة السريعة للبيانات محلياً، دون الاعتماد على السحابة. كما تبقي المعالجة المحلية بيانات المستخدم خاصة وآمنة نظراً لعدم إرسالها إلى خادم بعيد.
الميزات الرئيسية لـ IMX500:
- إخراج البيانات الوصفية (Metadata): بدلاً من نقل الصور فقط، يمكن لـ IMX500 إخراج كل من الصور والبيانات الوصفية (نتيجة الاستدلال)، ويمكنه إخراج البيانات الوصفية فقط لتقليل حجم البيانات، وتقليل النطاق الترددي، وخفض التكاليف.
- معالجة مخاوف الخصوصية: من خلال معالجة البيانات على الجهاز، يعالج IMX500 مخاوف الخصوصية، وهو مثالي للتطبيقات التي تركز على الإنسان مثل عد الأشخاص وتتبع الإشغال.
- المعالجة في الوقت الفعلي: تدعم المعالجة السريعة على المستشعر اتخاذ القرارات في الوقت الفعلي، وهي مثالية لتطبيقات الذكاء الاصطناعي على الحافة مثل الأنظمة المستقلة.
قبل أن تبدأ: للحصول على أفضل النتائج، تأكد من إعداد نموذج YOLO11 الخاص بك جيداً للتصدير من خلال اتباع دليل تدريب النموذج، ودليل إعداد البيانات، ودليل ضبط المعلمات الفائقة.
المهام المدعومة#
يدعم تصدير IMX500 أربع مهام من أصل سبع مهام لـ Ultralytics، وفقط لـ YOLOv8n و YOLO11n: عائلات النماذج الأخرى، والأحجام، والبُنى غير مدعومة، ويؤدي تصدير نموذج تجزئة دلالية، أو OBB، أو تقدير العمق إلى ظهور خطأ.
أمثلة الاستخدام#
قم بتصدير نموذج Ultralytics YOLO11 إلى تنسيق IMX500 وقم بتشغيل الاستدلال باستخدام النموذج المصدر.
يدعم تنسيق IMX500 أوضاع التصدير (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) لضمان عمله بشكل صحيح.
وسائط التصدير#
| الوسيط | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'imx' | التنسيق المستهدف للنموذج المصدر، والذي يحدد التوافق مع بيئات النشر المختلفة. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون رقماً صحيحاً للصور المربعة أو صفاً (tuple) (height, width) لأبعاد محددة. |
quantize | int أو str | 8/auto | دقة الكمومية. يتم تمكين 8 (INT8/PTQ) تلقائياً لـ IMX500؛ بينما يقوم "w8a16" بتصدير أوزان INT8 مع تنشيطات FP16. لا يتم دعم التصدير بـ FP32 أو FP16 فقط. ويحل محل علامات half/int8 المهملة. |
data | str | None | مسار ملف YAML الخاص بـ مجموعة البيانات، وهو أمر أساسي للكمومية؛ بينما تأخذ عملية التصنيف بدلاً من ذلك دليل مجموعة بيانات أو اسم مجموعة بيانات مدمج. إذا تم حذفه باستخدام quantize=8 أو 'w8a16'، فإن Ultralytics يختار مجموعة بيانات المعايرة الافتراضية لمهمة النموذج. |
fraction | float أو int أو list | 1.0 | مجموعة المعايرة الفرعية كنسبة، أو عدد صور، أو نسب/أعداد [train, val]؛ تحد قائمة train أو val، بينما يظل test كاملاً. |
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 camera بموصل 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: ثبّت البرنامج الثابت (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 وفقاً لبيئتك قبل تشغيل هذه البرامج النصية.
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()المقارنات المعيارية#
تم تشغيل المقارنات المرجعية لكل من 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 لنماذج التصنيف.
ما الذي يحدث خلف الكواليس؟#
مجموعة أدوات ضغط النماذج من Sony (MCT)#
تعد مجموعة ضغط نماذج Sony (MCT) أداة قوية لتحسين نماذج التعلم العميق من خلال الكمومية والتقليم. وهي تدعم طرق كمومية مختلفة وتوفر خوارزميات متقدمة لتقليل حجم النموذج وتعقيده الحسابي دون التضحية بالدقة بشكل كبير. تُعد MCT مفيدة بشكل خاص لنشر النماذج على الأجهزة المحدودة الموارد، مما يضمن استدلالاً فعالاً وتقليلاً لوقت الاستجابة.
الميزات المدعومة في MCT#
تقدم MCT من Sony مجموعة من الميزات المصممة لتحسين نماذج الشبكات العصبية:
- تحسينات الرسم البياني (Graph Optimizations): تحول النماذج إلى إصدارات أكثر كفاءة عن طريق طي الطبقات مثل تسوية الدُفعات (batch normalization) في الطبقات السابقة.
- البحث عن معلمات التكميم: يقلل من ضوضاء التكميم باستخدام مقاييس مثل متوسط مربع الخطأ، وعدم القص (No-Clipping)، ومتوسط متوسط الخطأ.
- خوارزميات التكميم المتقدمة:
- تصحيح الإزاحة السالبة: يعالج مشكلات الأداء الناتجة عن تكميم التنشيط المتماثل.
- تصفية القيم المتطرفة: يستخدم z-score لاكتشاف القيم المتطرفة وإزالتها.
- التجميع (Clustering): يستخدم شبكات تكميم غير منتظمة لمطابقة أفضل للتوزيع.
- البحث عن الدقة المختلطة: يخصص أحجام بت مختلفة للتكميم لكل طبقة بناءً على الحساسية.
- التصور: استخدم TensorBoard لمراقبة رؤى أداء النموذج، ومراحل التكميم، وتكوينات عرض البت.
التكميم#
تدعم MCT عدة طرق للتكميم لتقليل حجم النموذج وتحسين سرعة الاستدلال:
- التكميم بعد التدريب (PTQ):
- متاح عبر واجهات برمجة تطبيقات Keras و PyTorch.
- التعقيد: منخفض
- التكلفة الحسابية: منخفضة (دقائق على CPU)
- التكميم بعد التدريب القائم على التدرج (GPTQ):
- متاح عبر واجهات برمجة تطبيقات Keras و PyTorch.
- التعقيد: متوسط
- التكلفة الحسابية: متوسطة (2-3 ساعات على GPU)
- التدريب الواعي بالتكميم (QAT):
- التعقيد: مرتفع
- التكلفة الحسابية: مرتفعة (12-36 ساعة على GPU)
تدعم MCT أيضاً مخططات تكميم متنوعة للأوزان والتنشيطات:
- قوى العدد اثنين (Power-of-Two) (صديقة للأجهزة)
- متماثل
- موحد
التقليم الهيكلي#
تقدم MCT تقليمًا هيكليًا للنموذج ومدركًا للأجهزة مصممًا لهياكل أجهزة محددة. تستفيد هذه التقنية من قدرات "Single Instruction, Multiple Data" (SIMD) للمنصة المستهدفة عن طريق تقليم مجموعات SIMD. وهذا يقلل من حجم النموذج وتعقيده مع تحسين استخدام القنوات، بما يتماشى مع بنية SIMD لاستخدام الموارد الموجه لذاكرة الأوزان. متاح عبر واجهات برمجة تطبيقات Keras و PyTorch.
أداة تحويل IMX500 (المترجم)#
تعتبر أداة تحويل IMX500 جزءًا لا يتجزأ من مجموعة أدوات IMX500، مما يسمح بتجميع النماذج للنشر على مستشعر Sony IMX500 (على سبيل المثال، Raspberry Pi AI Camera). تسهل هذه الأداة انتقال نماذج 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 Camera مع مستشعر IMX500
البرامج:
- Raspberry Pi OS Bookworm
- البرامج الثابتة وأدوات IMX500 (
sudo apt install imx500-all)
بناءً على معايير Ultralytics على Raspberry Pi AI Camera:
- يحقق YOLO11n وقت استنتاج قدره 58.82 مللي ثانية لكل صورة
- mAP50-95 قدره 0.517 على مجموعة بيانات COCO128
- حجم نموذج يبلغ 2.2 ميجابايت فقط بعد التكميم
يوضح هذا أن تنسيق IMX500 يوفر استنتاجاً فعالاً في الوقت الفعلي مع الحفاظ على دقة جيدة لتطبيقات الذكاء الاصطناعي على الحافة.