فيديو

جدول المحتويات:

Anonim

هل من الممكن تنفيذ نماذج الكشف عن الكائنات مع الأداء في الوقت الحقيقي دون GPU؟ واجه هو دليل على أنه من الممكن إنشاء نموذج مخصص لكشف الكائن لكائن فئة واحدة (في هذه الحالة ، الوجوه) قيد التشغيل في الوقت الحالى على وحدة المعالجة المركزية.

ما المشكلة؟

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

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

الحل الذي يمكن الوصول إليه واستخدامه في الوقت الحاضر لحل هذه المهمة (والعديد من الحلول الأخرى في رؤية الكمبيوتر) هو الأداء نقل التعلم على النماذج المدربة مسبقًا (في النماذج القياسية العامة المدربة على مجموعات البيانات الضخمة مثل تلك الموجودة في Tensorflow Hub أو في واجهة برمجة تطبيقات TF Object Detection)

هناك الكثير من هياكل الكشف عن الأشياء المدربة (مثل FasterRCNN أو SSD أو YOLO) التي تحقق دقة رائعة في الأداء في الوقت الفعلي يعمل على GPUs.

وحدات معالجة الرسومات غالية ولكنها ضرورية في مرحلة التدريب. ومع ذلك ، في الاستدلال امتلاك وحدة معالجة جرافيكية مخصصة لتحقيق الأداء في الوقت الفعلي أمر غير قابل للتطبيق. فشلت جميع نماذج الكشف عن الأشياء العامة (كما هو مذكور أعلاه) في العمل في الوقت الحقيقي دون GPU.

ثم ، كيف يمكننا إعادة النظر في مشكلة اكتشاف الكائن لكائنات فئة واحدة لتحقيق أداء في الوقت الحقيقي ولكن على وحدة المعالجة المركزية؟

الفكرة الرئيسية: تتطلب المهام الأكثر بساطة ميزات أقل قابلية للتعلم

تم تصميم جميع الهياكل المذكورة أعلاه للكشف عن فئات كائن متعددة (المدربين على مجموعات البيانات COCO أو PASCAL VOC). لكي تكون قادرًا على تصنيف كل مربع محيط وفقًا لفئته المناسبة ، تتطلب هذه الأشكال المعمارية قدرًا كبيرًا من استخراج الميزات. هذا يترجم إلى كمية كبيرة من المعلمات القابلة للتعلم ، وكمية هائلة من المرشحات ، وكمية كبيرة من الطبقات. بعبارات أخرى، هذه الشبكات كبيرة.

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

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

هذا هو واجه الفكرة الرئيسة: بناء أصغر شبكة ممكنة لتشغيلها (نأمل) في الوقت الفعلي في وحدة المعالجة المركزية مع الحفاظ على الدقة.

العمارة

واجه هي عبارة عن مجموعة من شبكتين عصبيتين ، تم تنفيذ كل منهما باستخدام Tensorflow.

الشبكة الرئيسية

واجه يعتمد التصميم الرئيسي على الهندسة المعمارية YOLO. بشكل أساسي ، إنها شبكة ملتوية تمامًا (FCN) تقوم بتشغيل صورة مدخلات 288 × 288 من خلال سلسلة من الطبقات التلافيفية والتجميعية (لا توجد أنواع طبقات أخرى معنية).

الطبقات التلافيفية هي المسؤولة عن استخراج ميزات الفضاء. تجمع طبقات التجميع زيادة الحقل الاستقبالي للطبقات التلافيفية الناتجة.

إخراج الهندسة المعمارية عبارة عن شبكة 9 × 9 (مقابل 13 × 13 شبكة في YOLO). كل خلية شبكة مسؤولة عن التنبؤ بما إذا كان هناك وجه داخل تلك الخلية (مقابل YOLO حيث يمكن لكل خلية اكتشاف ما يصل إلى 5 كائنات مختلفة).

كل خلية الشبكة لديها 5 القيم المرتبطة. أول واحد هو الاحتمال ص تلك الخلية التي تحتوي على وسط الوجه. القيم الأربعة الأخرى هي ( x_center ، y_center ، العرض ، الارتفاع) للكشف عن الوجه (نسبة إلى الخلية).

يتم تعريف الهندسة الدقيقة على النحو التالي:

  • 2x 8 طبقة تلافيفية تصفية على صورة 288x288
  • أقصى تجمع (288x288 إلى 144x144 خريطة ميزة)
  • 2x 16 طبقة تلافيفية تصفية على خريطة ميزة 144x144
  • أقصى تجمع (خريطة ميزة من 144 × 144 إلى 72 × 72)
  • 2x 32 طبقة تصفية تلافيفية على خريطة ميزة 72x72
  • أقصى تجمع (خريطة ميزة من 72 × 72 إلى 36 × 36)
  • 2x 64 طبقة تصفية تلافيفية على خريطة المعالم 36x36
  • أقصى تجمع (36x36 إلى 18x18 خريطة ميزة)
  • 2x 128 طبقة تلافيفية تصفية على خريطة ميزة 18x18
  • أقصى تجمع (18 × 18 إلى 9x9 خريطة ميزة)
  • 4x 192 طبقة تلافيفية تصفية على خريطة ميزة 9x9
  • 5 طبقة تصفية التلافيفي على خريطة ميزة 9x9 للشبكة النهائية

كل وظيفة التنشيط هي leaky_relu.

واجه لديه 6،993،517 المعلمات. YOLOv2 لديها 51000657 معلمة. حجمه 13٪ من حجم YOLO!

شبكة مساعدة

( x_center ، y_center ، العرض ، الارتفاع) مخرجات الشبكة الرئيسية لم تكن دقيقة كما هو متوقع. وبالتالي ، تم تنفيذ شبكة صغيرة من شبكة CNN لتتخذ كمدخلات صورة صغيرة تحتوي على وجه (مقطوع بمخرجات العمارة الرئيسية) ولإخراج انحدار على مربع الحقيقة الواقع على الأرض.

المهمة الوحيدة هي استكمال وتحسين إحداثيات مخرجات الهيكل الرئيسي.

البنية المحددة لهذه الشبكة ليست ذات صلة.

بيانات

تم تدريب كلتا الشبكتين على مجموعة بيانات WIDER FACE.

"مجموعة بيانات WIDER FACE عبارة عن مجموعة بيانات قياسية للكشف عن الوجه …. نحن نختار 32,203 الصور والتسمية 393,703 يواجه درجة عالية من التباين في الحجم والظهور والانسداد كما هو موضح في الصور النموذجية. "

تدريب

تم التدريب على نفيديا تيتان XP GPU. استغرق وقت التدريب ~ 20 ساعة. تم استخدام تقنية التطبيع الدفعي للمساعدة في التقارب وتم استخدام التسرب (بمعدل 40٪) كطريقة للتنظيم لتجنب التحمل الزائد.

الاستدلال وعدم الحد الأقصى للقمع

عند استخدام واجه للاستدلال ، يتم تغيير حجم الصورة أولاً إلى 288 × 288 من أجل إدخالها في الشبكة. الصورة تحت FCN إعطاء إخراج الشبكة 9x9 المذكورة أعلاه.

كل خلية لديها احتمال ص من تحتوي على صورة. يتم تصفية الخلايا بواسطة عتبة قابلة للتكوين (أي الخلايا التي بها فقط ع> ر يتم الاحتفاظ). بالنسبة لتلك الخلايا المحفوظة ، يوجد الوجه باستخدام الخلية ( x_center ، y_center ، العرض ، الارتفاع).

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

أداء

واجه قادر على تحقيق السرعة التالية عند الاستدلال:

جيد جدًا بالنظر إلى أن YOLOv2 لا يمكن أن يحقق حتى 1FPS على i5 2015 MBP.

النتائج

دعونا نرى بعض النتائج!

الآن دعونا نرى مقارنة بين واجه و Haar Cascades ، وهو نهج رؤية الكمبيوتر التقليدية التي لا تستخدم التعلم العميق. كلتا الطريقتين تعمل تحت أداء سرعة مماثلة. واجه يظهر أكثر دقة كبيرة.

كيفية استخدام واجهت؟

واجه هو برنامج بسيط حقًا يمكن استخدامه معًا في كود Python أو كبرنامج سطر أوامر.

انتقل إلى github repo لمزيد من التعليمات:

iitzco / الوجه
😏 😏 قرب الوقت الحقيقي للكشف عن وحدة المعالجة المركزية باستخدام التعلم العميق - iitzco / face github.com

هل أعجبك المشروع؟ اترك ⭐ على الريبو الخاص بالمشروع!

استنتاج

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

موصى به اختيار المحرر