YOLOv4 - الشبكة العصبية الأكثر دقة في الوقت الحقيقي على مجموعة بيانات Microsoft COCO

Darknet YOLOv4 أسرع / أكثر دقة من Google TensorFlow EfficientDet و FaceBook Pytorch / Detectron RetinaNet / MaskRCNN.

نفس المقال عن الوسط : كود متوسط : github.com/AlexeyAB/darknet مقال : arxiv.org/abs/2004.10934




سنعرض بعض الفروق الدقيقة في مقارنة واستخدام الشبكات العصبية للكشف عن الأشياء.

كان هدفنا هو تطوير خوارزمية الكشف عن الكائنات للاستخدام في المنتجات الحقيقية ، وليس فقط دفع العلم إلى الأمام. دقة الشبكة العصبية YOLOv4 (608x608) هي 43.5٪ AP / 65.7٪ AP50 Microsoft-COCO-testdev.

62 FPS - YOLOv4 (608x608 دفعة = 1) على Tesla V100 - باستخدام Darknet-framework
400 FPS - YOLOv4 (416x416 batch = 4) على RTX 2080 Ti - باستخدام TensorRT + tkDNN
32 FPS - YOLOv4 (416x416 دفعة = 1) على Jetson AGX Xavier - باستخدام TensorRT + tkDNN




أولاً ، بعض الروابط المفيدة.




شبكتنا العصبية YOLOv4 وإطار عمل Darknet DL الخاص بنا (C / C ++ / CUDA) أفضل في سرعة FPS ودقة AP50: 95 و AP50 في مجموعات بيانات Microsoft COCO من أطر DL والشبكات العصبية: Google TensorFlow EfficientDet و FaceBook Detectron RetinaNet / MaskRCNN و PyTorch Yolov3-ASFF وغيرها الكثير ... يحقق YOLOv4 دقة 43.5٪ AP / 65.7٪ AP50 في اختبار Microsoft COCO بسرعة 62 FPS TitanV أو 34 FPS RTX 2070. على عكس أجهزة الكشف الحديثة الأخرى ، يمكن لـ YOLOv4 تدريب أي شخص باستخدام من لديه بطاقة رسومات الألعاب nVidia مع VRAM 8-16 GB. الآن ، لا يمكن للشركات الكبيرة فقط تدريب شبكة عصبية على مئات GPU / TPUs لاستخدام أحجام مجموعات صغيرة كبيرة لتحقيق دقة أعلى ، لذلك نعيد التحكم في الذكاء الاصطناعي إلى المستخدمين العاديين ، لأنه بالنسبة إلى YOLOv4 ، لا يلزم وجود الكثير الصغير ،يمكن أن يقتصر على حجم 2-8.

YOLOV4 هو الأمثل للاستخدام في الوقت الحقيقي ، لأنه تقع الشبكة على منحنى أمثلية Pareto في الرسم البياني AP (الدقة) / FPS (السرعة).



الرسوم البيانية للدقة (AP) والسرعة (FPS) للعديد من الشبكات العصبية للكشف عن الأجسام المقيسة على GPUs TitanV / TeslaV100 ، TitanXP / TeslaP100 ، TitanX / TeslaM40 لمؤشرين رئيسيين للدقة AP50: 95 و AP50

لمقارنة عادلة ، نأخذ بيانات من المقالات و قارن فقط على GPU بنفس البنية.

معظم المهام العملية لديها الحد الأدنى من المتطلبات اللازمة للكاشف - هذه هي الحد الأدنى من الدقة والسرعة المقبولة. عادة الحد الأدنى المسموح به للسرعة هو 30 إطارًا في الثانية (إطارات في الثانية) وأعلى للأنظمة في الوقت الفعلي.

كما يتضح من الرسوم البيانية ، في أنظمة الوقت الفعلي مع FPS 30 أو أكثر:

  • YOLOv4-608 RTX 2070 450$ (34 FPS) 43.5% AP / 65.7% AP50
  • EfficientDet-D2 TitanV 2250$ (42 FPS) 43.0% AP / 62.3% AP50
  • EfficientDet-D0 RTX 2070 450$ (34 FPS) 33.8% AP / 52.2% AP50

أولئك. يتطلب YOLOv4 معدات أرخص 5 مرات وأكثر دقة من EfficientDet-D2 (Google-TensorFlow). يمكنك استخدام EfficientDet-D0 (Google-TensorFlow) ، ثم تكون تكلفة المعدات هي نفسها ، ولكن الدقة ستكون أقل بنسبة 10٪ AP.
بالإضافة إلى ذلك ، بعض الأنظمة الصناعية لها قيود على تبديد الحرارة أو على استخدام نظام التبريد السلبي - في هذه الحالة لا يمكنك استخدام TitanV حتى مع المال.

عند استخدام YOLOv4 (416x416) على وحدة معالجة الرسوميات RTX 2080 Ti باستخدام TensorRT + tkDNN ، نحقق سرعة أسرع مرتين × مرتين ، وعند استخدام الدفعة = 4 تكون أسرع 3x-4x مرات - للمقارنة الصادقة ، لا نقدم هذه النتائج في مقالة عن arxiv. المؤسسة:

YOLOv4 الشبكة العصبية (416x416) FP16 (التنسور النوى) دفعة = 1 الروافد في 32 FPS حاسبة نفيديا Jetson AGX كزافييه باستخدام مكتبات + tkDNN TensorRT: github.com/ceccocats/tkDNN
أبطأ قليلا سرعة يعطي مكتبة مكتبة برمجية مفتوحة للرؤية الحاسوبية-DNN جمعتها مع CUDA: مستندات .opencv.org / master / da / d9d / tutorial_dnn_yolo.html

في بعض الأحيان ، تتم الإشارة إلى سرعة (FPS) لبعض الشبكات العصبية في المقالات عند استخدام حجم دفعة مرتفع أو عند الاختبار باستخدام برنامج متخصص (TensorRT) ، والذي يحسن الشبكة ويظهر قيمة FPS متزايدة. مقارنة بعض الشبكات على TRT مع شبكات أخرى بدون TRT ليست عادلة. يؤدي استخدام حجم الدفعة العالية إلى زيادة FPS ، ولكنه يزيد أيضًا من الكمون (بدلاً من تقليله) مقارنة بالدُفعة = 1. إذا كانت الشبكة ذات الدفعة = 1 تعرض 40 إطارًا في الثانية ، ومع الدفعة = 32 فإنها تعرض 60 إطارًا في الثانية ، فسيكون التأخير 25 مللي ثانية للدفعة = 1 ، و 500 مللي ثانية للدفعة = 32 ، لأن سيتم معالجة حزمتين فقط (32 صورة لكل منهما) في الثانية ، وهذا هو السبب في أن استخدام الدفعة = 32 غير مقبول في العديد من الأنظمة الصناعية. لذلك ، قارنا النتائج على الرسوم البيانية فقط مع الدفعة = 1 وبدون استخدام TensorRT.

يمكن التحكم في أي عملية سواء بواسطة الأشخاص أو بواسطة أجهزة الكمبيوتر. عندما يعمل نظام الكمبيوتر بتأخير كبير بسبب السرعة المنخفضة ويرتكب الكثير من الأخطاء ، فلا يمكن أن يعهد إليه بالتحكم الكامل في الإجراءات ، وفي هذه الحالة يتحكم الشخص في العملية ، ويعطي نظام الكمبيوتر فقط تلميحات - هذا هو نظام التوصية - يعمل الشخص ، والنظام فقط يخبر عن مكان ارتكاب الأخطاء. عندما يعمل النظام بسرعة وبدقة عالية ، يمكن لهذا النظام التحكم في العملية بشكل مستقل ، ولا يعتني بها الشخص إلا. لذلك ، تعد الدقة وسرعة النظام مهمة دائمًا. إذا كان يبدو لك أن 120 إطارًا في الثانية لـ YOLOv4 416x416 يعد كثيرًا جدًا لمهمتك ، ومن الأفضل أن تأخذ الخوارزمية بشكل أبطأ وأكثر دقة ، فمن المرجح أن تستخدم شيئًا أضعف من Tesla V100 250 Watt في المهام الحقيقية.على سبيل المثال ، RTX 2060 / Jetson-Xavier 30-80 Watt ، في هذه الحالة ستحصل على 30 FPS على YOLOv4 416x416 والشبكات العصبية الأخرى بسرعة 1-15 FPS أو لن تبدأ على الإطلاق.

ملامح تدريب الشبكات العصبية المختلفة


عليك تدريب EfficientDet باستخدام mini-batch = 128 size على العديد من وحدات معالجة رسومات Tesla V100 32GB ، بينما تم تدريب YOLOv4 على وحدة معالجة رسومات Tesla V100 32GB واحدة فقط مع دفعة صغيرة = 8 = دفعة / أقسام فرعية ، ويمكن تدريبها على ألعاب عادية بطاقة الجرافيكس 8-16GB GPU-VRAM.
الفروق الدقيقة التالية هي صعوبة تدريب شبكة عصبية للكشف عن الأشياء الخاصة بها. بغض النظر عن مقدار الوقت الذي تدرب فيه شبكات أخرى على نفس وحدة معالجة الرسوميات 1080 Ti ، فلن تحصل على الدقة الموضحة في الرسم البياني أعلاه. تحتاج معظم الشبكات (EfficientDet ، ASFF ، ...) إلى التدريب على 4-128 GPU (مع حجم دفعة صغيرة كبيرة باستخدام syncBN) ومن الضروري التدريب في كل مرة جديدة لكل دقة شبكة ، دون استيفاء الشرطين ، من المستحيل تحقيق دقة AP أو AP50 التي أعلن عنها.


يمكنك رؤية اعتماد دقة الكشف عن الكائنات على حجم الدفعة الصغيرة في أجهزة الكشف الأخرى ، أي باستخدام 128 بطاقة فيديو بدلاً من 8 بطاقات فيديو وسرعة التعلم أعلى بعشر مرات والدقة النهائية أعلى 1.5 AP - MegDet: جهاز كشف الكائنات المصغرة دفعة كبيرة arxiv.org/abs/1711.07240

Yolo ASFF: arxiv.org/abs/1911.09516
بعد [43] ، نقدم مجموعة من الحيل في عملية التدريب ، مثل خوارزمية المزج [12] ، وجدول التمام [26] ، ومعدل التعلم المتزامن وتقنية تسوية الدفعة المتزامنة [30].

EfficientDet: arxiv.org/abs/1911.09070
تتم إضافة تسوية الدفعة المتزامنة بعد كل التفاف مع انحلال معياري الدفعة 0.99 وإبسيلون 1e-3.

يتم تدريب كل طراز على 300 حقبة مع إجمالي حجم الدفعة 128 على 32 نواة TPUv3.

cloud.google.com/tpu/docs/types-zones#europe
v3-32 TPU type (v3) – 32 TPU v3 cores – 512 GiB Total TPU memory

يجب عليك استخدام 512 جيجا بايت من TPU / GPU-RAM لتدريب نموذج EfficientDet مع تسوية الدفعة المتزامنة عند الدفعة = 128 ، بينما الدفعة الصغيرة = 8 و 32 جيجا بايت فقط من GPU-RAM لتدريب YOLOv4. على الرغم من ذلك ، فإن YOLOv4 أسرع / أكثر دقة من الشبكات العامة ، على الرغم من أنه يتم تدريبه مرة واحدة فقط بدقة 512 × 512 لكل وحدة معالجة رسومات واحدة (Tesla V100 32GB / 16GB). في الوقت نفسه ، لا يؤدي استخدام حجم الدفعة الصغيرة الأصغر و GPU-VRAM إلى فقدان الدقة بشكل كبير كما هو الحال في الشبكات العصبية الأخرى:


المصدر: arxiv.org/abs/2004.10934

لذا يمكنك تدريب الذكاء الاصطناعي محليًا على جهاز الكمبيوتر الخاص بك ، بدلاً من التنزيل مجموعة بيانات إلى السحابة - وهذا يضمن حماية بياناتك الشخصية ويتيح تدريب الذكاء الاصطناعي للجميع.

يكفي تدريب شبكتنا مرة واحدة مع دقة شبكة 512 × 512 ، ومن ثم يمكن استخدامها مع درجات دقة مختلفة للشبكة في النطاق: [416 × 416 - 512 × 512 - 608 × 608].

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

ميزات قياس دقة خوارزميات الكشف عن الأشياء


يمكنك دائمًا العثور على صورة تعمل فيها خوارزمية واحدة بشكل سيئ ، وستعمل خوارزمية أخرى بشكل جيد ، والعكس صحيح. لذلك ، لاختبار خوارزميات الكشف ، يتم استخدام مجموعة كبيرة من ~ 20000 صورة و 80 نوعًا مختلفًا من الكائنات - مجموعة بيانات تطوير اختبار MSCOCO.

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

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

تتكون مجموعة بيانات MSCOCO من 3 أجزاء

  1. البرنامج التعليمي: 120.000 صورة وملف json بإحداثيات كل كائن
  2. مجموعة التحقق: 5000 صورة وملف json بإحداثيات كل كائن
  3. مجموعة الاختبار: 41000 صورة بتنسيق jpg بدون إحداثيات كائنات (يتم استخدام بعض هذه الصور لتحديد الدقة في المهام: كشف الكائنات ، تجزئة المثيل ، نقاط المفاتيح ، ...)

ميزات تطوير YOLOv4


عند تطوير YOLOv4 ، اضطررت إلى تطوير كل من الشبكة العصبية YOLOv4 وإطار Darknet على C / C ++ / CUDA بنفسي. لان في Darknet لا يوجد تمايز تلقائي وتنفيذ تلقائي لقاعدة السلسلة ، ثم يجب تنفيذ جميع التدرجات يدويًا. من ناحية أخرى ، يمكننا الابتعاد عن الالتزام الصارم بقاعدة السلسلة ، وتغيير الانتشار العكسي وتجربة أشياء غير تافهة جدًا لزيادة استقرار التعلم ودقته.

نتائج إضافية عند إنشاء الشبكات العصبية


  • لن تكون دائمًا أفضل شبكة لتصنيف الكائنات هي الأفضل باعتبارها العمود الفقري للشبكة المستخدمة للكشف عن الكائنات
  • يمكن أن يؤثر استخدام الأوزان المُدرَّبة بميزات تزيد من الدقة في التصنيف سلبًا على دقة الكاشف (في بعض الشبكات)
  • لا تحسن جميع الميزات المذكورة في الدراسات المختلفة دقة الشبكة.
  • .
  • BFLOPS , BFLOPS
  • , receptive field , stride=2 / conv3x3, weights (filters) .

YOLOv4


بنيت الكشف عن وجوه باستخدام نماذج YOLOv4 تدريب في مكتبة مكتبة برمجية مفتوحة للرؤية الحاسوبية DNN github.com/opencv/opencv/issues/17148 بحيث يمكنك استخدام YOLOv4 مباشرة من مكتبة برمجية مفتوحة للرؤية الحاسوبية دون استخدام إطار داركنت. تدعم مكتبة OpenCV تنفيذ الشبكات العصبية على وحدة المعالجة المركزية ، GPU (nVidia GPU) ، VPU (Intel Myriad X). مزيد من التفاصيل: docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html إطار

OpenCV (dnn):


إطار Darknet :


tkDNN + TensorRT - السرعة القصوى من الكشف عن وجوه باستخدام YOLOv4: TensorRT + tkDNN github.com/ceccocats/tkDNN

  • 400 إطار في الثانية - YOLOv4 (416x416 دفعة = 4) على RTX 2080 Ti
  • 32 إطارًا في الثانية - YOLOv4 (416x416 دفعة = 1) على Jetson AGX Xavier

يمكن توسيع استخدام YOLOv4 لاكتشاف صناديق ثلاثية الأبعاد مستديرة أو نقاط رئيسية / معالم الوجه ، على سبيل المثال:

github.com/ouyanghuiyu/darknet_face_with_landmark


All Articles