HyperAI

تدريب YOLOv8 باستخدام البيانات المخصصة

في منشور المدونة هذا، سنستكشف الميزات الجديدة لنموذج Ultralytics الجديد، YOLOv8، ونلقي نظرة أعمق على التغييرات المعمارية مقارنةً بـ YOLOv5، ونوضح النموذج الجديد من خلال اختبار قدرات واجهة برمجة التطبيقات Python للكشف عن مجموعة بيانات كرة السلة الخاصة بنا.

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

في هذه المقالة، سنعيد النظر في أساسيات هذه التقنيات، ونناقش الميزات الجديدة في أحدث إصدار من Ultralytics، YOLOv8، ونستعرض الخطوات اللازمة لضبط نموذج YOLOv8 المخصص باستخدام RoboFlow وPaperspace Gradient وواجهة برمجة التطبيقات الجديدة Ultralytics. بحلول نهاية هذا البرنامج التعليمي، يجب أن يكون المستخدمون قادرين على ملاءمة نموذج YOLOv8 بسرعة وسهولة لأي مجموعة من الصور المسمى.

كيف يعمل YOLO؟

مصدر

أولاً، دعونا نناقش أساسيات كيفية عمل YOLO. فيما يلي اقتباس قصير من ورقة YOLO الأصلية التي تشرح مجموع قدرات النموذج:

شبكة التفافية واحدة تتنبأ في آنٍ واحد بصناديق حدودية متعددة واحتمالات فئاتها. يُدرَّب نموذج YOLO على صور كاملة، ويُحسِّن أداء الكشف مباشرةً. يتميز هذا النموذج الموحد بمزايا عديدة مقارنةً بأساليب كشف الكائنات التقليدية. (مصدر)

كما ذكرنا سابقًا، يتمكن النموذج من التنبؤ بموقع كيانات متعددة في صورة وتحديد موضوعها، نظرًا لأنه تم تدريبه على هذه الميزات. ويتم ذلك في مرحلة واحدة عن طريق تقسيم الصورة إلى N شبكة، كل منها بحجم s*s. يتم تحليل هذه المناطق في وقت واحد لاكتشاف وتحديد موقع أي كائنات موجودة داخلها. ثم يتنبأ النموذج بإحداثيات المربع المحدد B في كل خلية في الشبكة ويتنبأ بالعلامات ودرجات التنبؤ للأشياء الموجودة فيه.

Ultralytics YOLOv5، التصنيف، اكتشاف الكائنات، التجزئة

من خلال جمع كل هذا معًا، نحصل على تقنية قادرة على تنفيذ مهام تصنيف الكائنات، واكتشاف الكائنات، وتجزئة الصور. نظرًا لأن التقنية الأساسية لـ YOLO تظل كما هي، فيمكننا أن نستنتج أن هذا ينطبق أيضًا على YOLOv8. للحصول على تفاصيل أكثر اكتمالاً حول كيفية عمل YOLO، تأكد من مراجعة منشوراتنا السابقة حول YOLOv5 وYOLOv7، ومعاييرنا مع YOLOv6 وYOLOv7، والورقة الأصلية لـ YOLO.هنا).

ما الجديد في YOLOv8؟

نظرًا لأن YOLOv8 تم إصداره للتو، فلا توجد ورقة بحثية منشورة تغطي هذا النموذج حتى الآن. ينوي المؤلفون إصداره قريبًا، ولكن في الوقت الحالي، لا يمكننا سوى متابعة منشور الإصدار الرسمي، واستنتاج التغييرات من سجل الالتزامات، ومحاولة تحديد مدى التغييرات بين YOLOv5 وYOLOv8 بأنفسنا.

بنيان

مصدر الصورة:رينج كينج

وفقالإصدار الرسمييعتمد YOLOv8 على شبكة أساسية جديدة ورأس اكتشاف خالٍ من المرساة ووظيفة الخسارة. شارك مستخدم Github RangeKing نظرة عامة على البنية الأساسية لنموذج YOLOv8، حيث أظهر العمود الفقري للنموذج وهيكل الرأس المحدثين. بمقارنة هذا الرقم مع YOLOv5 مقارنة بالفحوصات المماثلة التي أجرتها RangeKing فيدعاماتوقد تم تحديد التغييرات التالية في:

C2f الوحدة، مصدر الصورة: RoboFlow (مصدر)

  • إنهم يستخدمون C2f تم استبدال الوحدة C3 وحدة. يخرج C2f في، من Bottleneck(اثنان 3×3 مع توصيلات متبقية convs) متصلة ببعضها البعض، ولكن في C3 يتم استخدام الأخير فقط Bottleneck الإخراج. (مصدر)

التحويل الأول لكل إصدار. مصدر الصورة:رينج كينج

  • إنهم Backbone استخدم واحدا 3x3 Conv الكتلة تحل محل الأولى 6x6 Conv
  • لقد حذفوا اثنين Conv(العاشر والرابع عشر في تكوين YOLOv5)

مقارنة بين العمود الفقري للنموذجين. مصدر الصورة:رينج كينج

  • إنهم Bottleneck استخدم واحدا 3x3 Conv تم استبدال الأول 1x1 Conv
  • لقد تحولوا إلى رؤوس منفصلة وأزالوا objectness الفروع

يرجى التحقق مرة أخرى بمجرد إصدار ورقة YOLOv8، وسوف نقوم بتحديث هذا القسم بمزيد من المعلومات. للحصول على تحليل مفصل للتغييرات المذكورة أعلاه، يرجى الاطلاع على مقالة RoboFlow التي تقدم YOLOv8 يطلق.

إمكانية الوصول

بالإضافة إلى الطريقة القديمة لاستنساخ مستودع Github وإعداد البيئة يدويًا، يمكن للمستخدمين الآن الوصول إلى YOLOv8 للتدريب والاستدلال باستخدام واجهة برمجة التطبيقات Ultralytics الجديدة. يرجى الاطلاع أدناه تدريب النموذج قسم للحصول على تفاصيل حول إعداد واجهة برمجة التطبيقات.

لا يوجد مربع حدود للمرساة

وفقًا لمنشور مدونة نشره شريك Ultralytics RoboFlow YOLOv8، أصبح لدى YOLOv8 الآن مربعات حدودية خالية من المرساة. في الإصدار الأولي من YOLO، كان مطلوبًا من المستخدمين تحديد مربعات المرساة هذه يدويًا لتسهيل عملية اكتشاف الكائن. تحتوي مربعات التحديد المحددة مسبقًا هذه على حجم وارتفاع محددين مسبقًا، مما يلتقط مقياس ونسبة العرض إلى الارتفاع لفئات كائنات محددة في مجموعة البيانات. تساعد الإزاحات من هذه الحدود إلى الكائنات المتوقعة النموذج على تحديد موقع الكائنات بشكل أفضل.

في YOLOv8، يتم التنبؤ بهذه المربعات المرساة تلقائيًا في وسط الكائن.

أوقف زيادة الفسيفساء قبل انتهاء التدريب

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

الكفاءة والدقة

السبب الرئيسي وراء ذلك هو تحسين دقة الأداء وكفاءته أثناء الاستدلال والتدريب. لقد زودنا مؤلفو Ultralytics ببعض بيانات العينة المفيدة التي يمكننا استخدامها لمقارنة الإصدار الجديد من YOLO مع الإصدارات الأخرى. كما يمكن أن نرى من المخططات أعلاه، أثناء التدريب، يتفوق YOLOv8 على YOLOv7، وYOLOv6-2.0، وYOLOv5-7.0 من حيث الدقة المتوسطة والحجم والزمن الكامن.

يمكننا العثور على جدول مقارنة إحصائية لنماذج YOLOv8 ذات الأحجام المختلفة على صفحاتهم الخاصة على Github. من الجدول أعلاه، يمكننا أن نرى أنه مع زيادة حجم المعلمات والسرعة وFLOPs، فإن mAP يزداد أيضًا. أكبر نموذج YOLOv5، YOLOv5x، لديه قيمة mAP القصوى 50.7. تمثل الزيادة بمقدار 2.2 وحدة في قيمة mAP تحسنًا كبيرًا في القدرة. ينطبق هذا على جميع أحجام النماذج، حيث يتفوق نموذج YOLOv8 الجديد باستمرار على YOLOv5، كما هو موضح أدناه.

بشكل عام، يمكننا أن نرى أن YOLOv8 يمثل خطوة كبيرة للأمام مقارنة بـ YOLOv5 والأطر المنافسة الأخرى.

الضبط الدقيق لـ YOLOv8

لتشغيل البرنامج التعليمي:ابدأ التشغيل على OpenBayes

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

إعداد مجموعة البيانات

سوف نقوم بإعادة إنشاء تجربة YOLOv7 التي استخدمناها لمقارنة النموذجين، لذلك سوف نعود إلى مجموعة بيانات كرة السلة على Roboflow. يرجى الاطلاع على قسم "إعداد مجموعة بيانات مخصصة" في المقالة السابقة للحصول على إرشادات مفصلة حول إعداد مجموعة البيانات ووضع العلامات عليها وسحبها من RoboFlow إلى دفتر الملاحظات الخاص بنا.

نظرًا لأننا نستخدم مجموعة بيانات تم إنشاؤها مسبقًا، فكل ما نحتاج إليه الآن هو سحب البيانات. فيما يلي الأوامر المستخدمة لسحب البيانات إلى بيئة Notebook. بالنسبة لمجموعة البيانات المُسمّاة الخاصة بك، استخدم نفس العملية ولكن استبدل قيم مساحة العمل والمشروع بقيمك الخاصة للوصول إلى مجموعة البيانات الخاصة بك بنفس الطريقة.

يرجى التأكد من تغيير مفتاح API إلى المفتاح الخاص بك إذا كنت تريد متابعة العرض التوضيحي في دفتر الملاحظات باستخدام البرنامج النصي أدناه.

!pip install roboflow

from roboflow import Roboflow
rf = Roboflow(api_key="")
project = rf.workspace("james-skelton").project("ballhandler-basketball")
dataset = project.version(11).download("yolov8")
!mkdir datasets
!mv ballhandler-basketball-11/ datasets/

تدريب النموذج

باستخدام واجهة برمجة التطبيقات الجديدة Python، يمكننا استخدام ultralytics تتمكن المكتبة من إنجاز كافة الأعمال بسهولة في بيئة Gradient Notebook. سوف نقوم بالبناء من الصفر باستخدام التكوين والأوزان المقدمة YOLOv8n نموذج. سنستخدم بعد ذلك مجموعة البيانات التي قمنا بتحميلها للتو إلى بيئتنا باستخدام model.train() ضبط الطريقة.

from ultralytics import YOLO

# 加载模型
model = YOLO("yolov8n.yaml")  # 从头构建新模型
model = YOLO("yolov8n.pt")  # 加载预训练模型(建议用于训练)

# 使用模型
results = model.train(data="datasets/ballhandler-basketball-11/data.yaml", epochs=10)  # 训练模型

اختبار النموذج

results = model.val()  # 在验证集上评估模型性能

يمكننا أن نستخدم model.val() 方法 قم بتعيين النموذج الجديد الذي سيتم تقييمه على مجموعة التحقق. سيؤدي هذا إلى إخراج جدول لطيف في نافذة الإخراج يوضح مدى أداء نموذجنا. نظرًا لأننا تدربنا هنا لمدة عشر عصور فقط، فمن المتوقع أن يكون هذا mAP المنخفض نسبيًا 50-95.

ومن هناك، يصبح إرسال أي صورة أمرًا بسيطًا. سيقوم بإخراج تنبؤات لمربعات التحديد، ووضع تلك المربعات فوق الصورة، وتحميلها إلى المجلد "runs/detect/predict".

from ultralytics import YOLO
from PIL import Image
import cv2

# from PIL
im1 = Image.open("assets/samp.jpeg")
results = model.predict(source=im1, save=True)  # 保存绘制的图像
print(results)
display(Image.open('runs/detect/predict/image0.jpg'))

نحصل على التوقعات الخاصة بالصناديق المحددة وعلاماتها على النحو التالي:

[Ultralytics YOLO <class 'ultralytics.yolo.engine.results.Boxes'> masks
type: <class 'torch.Tensor'>
shape: torch.Size([6, 6])
dtype: torch.float32
 + tensor([[3.42000e+02, 2.00000e+01, 6.17000e+02, 8.38000e+02, 5.46525e-01, 1.00000e+00],
        [1.18900e+03, 5.44000e+02, 1.32000e+03, 8.72000e+02, 5.41202e-01, 1.00000e+00],
        [6.84000e+02, 2.70000e+01, 1.04400e+03, 8.55000e+02, 5.14879e-01, 0.00000e+00],
        [3.59000e+02, 2.20000e+01, 6.16000e+02, 8.35000e+02, 4.31905e-01, 0.00000e+00],
        [7.16000e+02, 2.90000e+01, 1.04400e+03, 8.58000e+02, 2.85891e-01, 1.00000e+00],
        [3.88000e+02, 1.90000e+01, 6.06000e+02, 6.58000e+02, 2.53705e-01, 0.00000e+00]], device='cuda:0')]

ثم قم بتطبيقها على الصورة كما هو موضح في المثال التالي:

المصدر الأصلي للصورة

كما نرى، يظهر نموذجنا المدرب خفيف الوزن أنه قادر على التعرف على اللاعبين في الملعب من اللاعبين الموجودين في الملعب واللاعبين والمتفرجين على خطوط التماس، باستثناء ركلة ركنية واحدة. من المؤكد تقريبًا أن هناك حاجة إلى مزيد من التدريب، ولكن من السهل أن نرى أن النموذج يكتسب فهمًا للمهمة بسرعة كبيرة.

إذا كنا راضين عن تدريب النموذج، فيمكننا تصدير النموذج إلى التنسيق المطلوب. في هذه الحالة، سنقوم بتصدير نسخة ONNX.

success = model.export(format="onnx")  # 将模型导出为 ONNX 格式

تلخيص

في هذا البرنامج التعليمي، استكشفنا الميزات الجديدة لنموذج Ultralytics الجديد القوي، YOLOv8، وتعمقنا في التغييرات المعمارية مقارنةً بـ YOLOv5، واختبرنا وظيفة واجهة برمجة تطبيقات Python الخاصة بالنموذج الجديد عن طريق اختباره على مجموعة بيانات Ballhandler الخاصة بنا. لقد تمكنا من إظهار أن هذا يمثل تقدمًا كبيرًا في تبسيط عملية ضبط نموذج اكتشاف كائنات YOLO، وأظهرنا قدرة النموذج على التمييز بين ممتلكات الكرة في مباريات NBA باستخدام الصور داخل اللعبة.