نستمر في فهم السحر الحديث (رؤية الكمبيوتر). الجزء 2 لا يعني أنك بحاجة إلى قراءة الجزء 1. يعني الجزء 2 الآن أن كل شيء خطير الآن - نريد أن نفهم القوة الكاملة للشبكات العصبية في الرؤية. الاكتشاف ، التعقب ، التجزئة ، تقييم الموقف ، التعرف على الحركة ... أكثر البنى عصرية وأروع ، مئات الطبقات وعشرات الأفكار الرائعة في انتظارك بالفعل!

في السلسلة الأخيرة
اسمحوا لي أن أذكرك بأننا في
الجزء الأول تعرفنا على الشبكات العصبية التلافيفية وتصورها ، وكذلك مع مهام تصنيف الصور وبناء تمثيلاتها الفعالة (حفلات الزفاف). لقد ناقشنا مهام التعرف على الوجوه وإعادة تحديد هوية الأشخاص.
حتى في المقال السابق تحدثنا عن أنواع مختلفة من البنيات (نعم ، نفس الأجهزة اللوحية
التي صنعتها في الشهر ) ، وهنا لم تضيع Google الوقت: لقد أطلقت بعد ذلك بنية
EfficientNet أخرى سريعة للغاية ودقيقة. قاموا بإنشائها باستخدام
NAS وإجراء تحجيم مركب خاص. تحقق من
المادة ، الأمر يستحق كل هذا العناء.
في هذه الأثناء ، يقوم بعض الباحثين
بتحريك الوجوه والبحث عن القبلات في الأفلام ، وسنتعامل مع مشاكل أكثر إلحاحًا.
هنا يقول الناس: "التعرف على الصور". ولكن ما هو "الاعتراف"؟ ما هو "الفهم (المشهد)"؟ في رأيي ، تعتمد إجابات هذه الأسئلة على ما نريد أن "ندركه" بالضبط ، وما نريد "فهمه" بالضبط. إذا قمنا ببناء الذكاء الاصطناعي ، والذي سوف يستخرج المعلومات حول العالم من الدفق المرئي بكفاءة (أو حتى أفضل) من الناس ، فعندئذ نحتاج إلى الانتقال من المهام ، من الاحتياجات. تاريخياً ، يمكن تقسيم "التعرّف" و "فهم المشهد" الحديث إلى عدة مهام محددة: التصنيف والكشف والتتبع وتقييم المواقف ونقاط الوجوه وتقسيمها والتعرف على الإجراءات على الفيديو ووصف الصورة في النص. ستركز هذه المقالة على أول مهمتين من القائمة (المنبثقة ، المفسد من الجزء الثالث) ، وبالتالي فإن الخطة الحالية هي:
- تجد لي إذا كنت تستطيع: كشف الكائن
- كشف الوجه: لم يتم القبض عليه - وليس لص
- العديد من الحروف: الكشف عن النص (والاعتراف)
- الفيديو والتتبع: في دفق واحد
هيا بنا يا نجوم!
تجد لي إذا كنت تستطيع: كشف الكائن
لذلك ، تبدو المهمة بسيطة - يتم إعطاء صورة ، تحتاج إلى العثور على كائنات من فئات محددة مسبقًا (شخص ، كتاب ، تفاحة ، أرتيس نورمان basset-griffon ، وما إلى ذلك). من أجل حل هذه المشكلة بمساعدة الشبكات العصبية ، فإننا نطرحها من حيث التنسورات والتعلم الآلي.
نتذكر أن الصورة الملونة هي موتر (H ، W ، 3) (إذا لم نتذكر ، هذا هو
الجزء 1 ). في السابق ، كنا نعرف فقط كيفية تصنيف الصورة بأكملها ، ولكن هدفنا الآن هو التنبؤ بمواقع الكائنات موضع الاهتمام (إحداثيات بكسل) في الصورة وفئاتها.
الفكرة الأساسية هنا هي حل مشكلتين في وقت واحد - التصنيف والانحدار. نحن نستخدم شبكة عصبية لتراجع الإحداثيات وتصنيف الكائنات بداخلها.
تصنيف؟ الانحدار؟دعني أذكرك بأننا نتحدث عن مهام التعلم الآلي. في مشكلة
التصنيف ، تعمل تسميات الفئات كجودة التسميات الحقيقية للكائنات ، ونتوقع فئة الكائن. في مشكلة
الانحدار ، تعمل
الأرقام الحقيقية كأرقام حقيقية ، ونتوقع العدد (على سبيل المثال: الوزن والطول والرواتب وعدد الشخصيات التي تموت في السلسلة التالية من لعبة العروش ...). بمزيد من التفصيل -
اهلا وسهلا بكم في المحاضرة الثالثة لمدرسة DLSchool (FPMI MIPT) .
لكن إحداثيات الكائن ، بشكل عام ، يمكن إضفاء الطابع الرسمي عليها بطرق مختلفة ، في DL هناك ثلاث طرق رئيسية هي:
الكشف (
مربعات الكائنات) ،
وتقييم الموقف (النقاط الرئيسية للكائنات)
وتجزئة ("أقنعة" الكائنات). الآن
دعنا نتحدث عن التنبؤ بدقة
مربعات ، والنقاط والتجزئة سيكون أكثر في النص.
بشكل أساسي ، يتم وضع علامة على مجموعات بيانات الكشف بمربعات بالتنسيق: "إحداثيات الزوايا اليمنى العليا والسفلية اليمنى لكل كائن في كل صورة" (يُسمى هذا التنسيق أيضًا
أعلى اليسار ، أسفل اليمين ) ، وتتوقع معظم أساليب الشبكة العصبية هذه الإحداثيات.
حول مجموعات البيانات والمقاييس في مشكلة الكشفبعد تعيين المهمة ، من الأفضل معرفة البيانات المتاحة للتدريب وما هي المقاييس المستخدمة لقياس الجودة. هذا ما أتحدث عنه ببطء في النصف الأول من
المحاضرة الثالثة عشرة من مدرسة التعليم العميق (في x2.0 هو الأكثر).
قبل الانغماس في أنواع الشبكات العصبية للكشف عنها ، دعونا نفكر سويًا في كيفية حل مشكلة اكتشاف أي شيء في الصور. ربما ، إذا كنا نريد العثور على كائن معين في الصورة ، فإننا نعرف تقريبًا كيف يبدو وما هي المساحة التي يجب أن تشغلها في الصورة (على الرغم من إمكانية تغييرها).
اكتشاف اختراع من الصفرتتمثل الطريقة الساذجة والأبسط في إنشاء خوارزمية "البحث عن القوالب": اجعل الصورة 100 × 100 بكسل ، ونحن نبحث عن كرة قدم. اسمحوا يكون هناك نمط الكرة 20x20 بكسل. خذ هذا القالب وسنختبره تمامًا مثل الإلتفاف عبر الصورة ، مع حساب اختلاف البيكسل في بكسل. هذه هي الطريقة التي تعمل بها
مطابقة القالب (غالبًا ما يتم استخدام نوع من الارتباط بدلاً من فرق البكسل في بكسل).
إذا لم يكن هناك قالب ، لكن يوجد مصنف شبكة عصبي ، فيمكننا القيام بذلك: سننتقل عبر نافذة ذات حجم ثابت في الصورة ونتوقع فئة منطقة الصورة الحالية. ثم نقول فقط إن أكثر المناطق المحتملة في الكائنات هي تلك التي أجاب المصنف عنها بثقة. وبالتالي ، يمكننا حل مشكلة حقيقة أن الكائن يبدو مختلفًا في المظهر بشكل مختلف (لأنه تم تدريبه على التصنيف على عينة متنوعة للغاية).
ولكن بعد ذلك تنبثق مشكلة - الكائنات الموجودة في الصور لها أحجام مختلفة. يمكن أن تكون نفس كرة كرة القدم في ارتفاع / عرض الصورة بأكملها ، أو يمكن أن تكون بعيدة عن الهدف ، حيث تأخذ 10-20 بكسل فقط من 1000. أود أن أكتب خوارزمية القوة الغاشمة: نرن من خلال أحجام النافذة في حلقة. افترض أن لدينا 100 × 200 بكسل ، ثم سننتقل إلى نافذة 2 × 2 ، 2X3 ، 3x2 ، 2x4 ، 4x2 ، 3x3 ... ، 3x4 ، 4x3 ... أعتقد أنك تفهم أن عدد الإطارات الممكنة سيكون 100 * 200 ، وكل منها سنتصفحه ، إجراء (100-W_window) * (200 - H_window) عمليات التصنيف ، والتي تستغرق الكثير من الوقت. أخشى أننا لن ننتظر حتى تعمل هذه الخوارزمية.
يمكنك بالطبع اختيار أكثر النوافذ تميزًا وفقًا للكائن ، لكنه سيعمل أيضًا لفترة طويلة جدًا ، وإذا كان سريعًا ، فمن غير المرجح أن يكون دقيقًا - في التطبيقات الحقيقية سيكون هناك مقدار مجنون من الاختلافات في حجم الكائنات في الصور.
علاوة على ذلك ، سأعتمد أحيانًا على
مراجعة جديدة لمنطقة الكشف اعتبارًا من يناير 2019 (ستكون الصور أيضًا). هذا مجرد قراءة يجب قراءتها إذا كنت ترغب في الحصول بسرعة أكبر نظرة ممكنة على DL في الكشف.
كانت إحدى المقالات الأولى حول الكشف والتعريب باستخدام CNN هي
Overfeat . يدعي المؤلفون أنهم استخدموا أولاً شبكة عصبية للكشف على ImageNet ، وإعادة صياغة المشكلة وتغيير الخسارة. بالمناسبة ، كان النهج يكاد يكون نهاية (نهاية هو مخطط Overfeat).
كانت البنية المهمة التالية هي
الشبكة العصبية التلافيفية القائمة على المنطقة (
RCNN ) ، والتي اخترعها باحثون من
FAIR في عام 2014. جوهرها هو أنها تتنبأ أولاً بالكثير من "المناطق ذات الاهتمام" (RoI's) ، والتي يحتمل وجود كائنات (باستخدام خوارزمية البحث الانتقائي) ، وتقوم بتصنيفها وتنقيح إحداثيات المربعات باستخدام CNN.
صحيح أن خط الأنابيب هذا جعل النظام بأكمله بطيئًا ، لأننا ركضنا كل منطقة عبر الشبكة العصبية (لقد مررنا إلى الأمام آلاف المرات). وبعد ذلك بعام ، قام نفس FAIR Ross Girshick بترقية RCNN إلى
Fast-RCNN . كانت الفكرة هنا هي تبديل البحث الانتقائي والتنبؤ بالشبكة: أولاً ، نقوم بتمرير الصورة بأكملها من خلال شبكة عصبية مدربة مسبقًا ، ثم نتوقع مناطق الاهتمام عبر خريطة الميزات الصادرة عن الشبكة الأساسية (على سبيل المثال ، باستخدام نفس البحث الانتقائي ، ولكن هناك
خوارزميات أخرى ). كان لا يزال بطيئًا جدًا ، وأبطأ كثيرًا من الوقت الفعلي (في الوقت الحالي ، نفترض أن الوقت الفعلي أقل من 40 مللي ثانية لكل صورة).
تأثرت السرعة بشكل كبير ليس من خلال CNN ، ولكن من خلال خوارزمية توليد الصناديق نفسها ، لذلك تقرر استبدالها بشبكة عصبية ثانية - Network Proposal Network (
RPN ) ، والتي سيتم تدريبها على التنبؤ بالمناطق التي تهم الكائنات. هكذا
ظهر Faster-RCNN (نعم ، من الواضح أنهم لم يفكروا في الاسم لفترة طويلة). القيادة:
ثم كان هناك تحسن آخر في شكل
R-FCN ، لم نتحدث عن ذلك بالتفصيل ، لكنني أود أن أذكر
Mask-RCNN . Mask-RCNN هي شبكة فريدة من نوعها ، وهي أول شبكة عصبية تعمل على حل
مشكلة الاكتشاف وتجزئة المثيلات في نفس الوقت - وتتوقع الأقنعة الدقيقة (الصور الظلية) للأشياء داخل الصناديق المحيطة. إن فكرتها بسيطة للغاية في الواقع - هناك فرعين: للكشف والتجزئة ، وتحتاج إلى تدريب الشبكة لكلا المهمتين في وقت واحد. الشيء الرئيسي هو أن يكون البيانات المعلمة. يشبه Mask-RCNN نفسه Faster-RCNN: العمود الفقري هو نفسه ، ولكن في النهاية يوجد
"رأسان" (كما يتم استدعاء
الطبقات الأخيرة من الشبكة العصبية) لمهمتين مختلفتين.
وكانت هذه هي ما يسمى النهج
على مرحلتين (أو
القائمة على المنطقة ). بالتوازي معهم ، تم تطوير نظائرها في نهج DL- كشف -
مرحلة واحدة . وتشمل هذه الشبكات العصبية مثل: كاشف أحادي اللقطة (SSD) ، أنت تنظر فقط مرة واحدة (YOLO) ، وكاشف كائن خاضع للإشراف العميق (DSOD) ، وشبكة بلوك مجال الاستقبال (RFBNet) وغيرها الكثير (انظر الخريطة أدناه ، من
هذا المستودع ).
لا تستخدم النهج أحادية المرحلة ، على عكس مرحلتين ، خوارزمية منفصلة لإنشاء مربعات ، ولكن ببساطة توقع إحداثيات مربعات متعددة لكل خريطة معالم تنتجها شبكة عصبية تلافيفية. يتصرف YOLO بطريقة مماثلة ، SSD مختلف قليلاً ، لكن الفكرة هي نفسها: تتنبأ الإلتواء 1 × 1 بأعداد كثيرة بعمق من خرائط الميزات المستلمة ، ومع ذلك فإننا نتفق مسبقًا على الرقم الذي تعنيه.
على سبيل المثال ، نتوقع من خريطة المعالم أن يكون حجم 13x13x256 عبارة عن أرقام خريطة 13x13x (4 * (5 + 80)) ، حيث نتوقع بعمق 85 رقمًا لـ 4 مربعات: الأرقام الأربعة الأولى في التسلسل هي دائمًا إحداثيات المربع. - الثقة في الملاكمة ، و 80 رقمًا - احتمالات كل فئة من الفئات (التصنيف). هذا ضروري من أجل إرسال الأرقام اللازمة للخسائر اللازمة وتدريب الشبكة العصبية بشكل صحيح.
أريد أن أسترعي الانتباه إلى حقيقة أن جودة عمل الكاشف تعتمد على جودة الشبكة العصبية لاستخراج الميزات (أي
شبكة عصبية أساسية ). عادةً ما يتم لعب هذا الدور من قبل إحدى البنيات التي تحدثت عنها في
مقال سابق (ResNet ، SENet ، إلخ) ، ولكن في بعض الأحيان يتوصل المؤلفون إلى أبنية أكثر مثالية (على سبيل المثال ، Darknet-53 في YOLOv3) أو تعديلات (على سبيل المثال ،
Feature Pyramid Pooling (FPN)).
مرة أخرى ، ألاحظ أننا نقوم بتدريب الشبكة على التصنيف والانحدار في نفس الوقت. في المجتمع ، يُسمى هذا الخسارة متعددة المهام: يظهر مجموع الخسائر للعديد من المهام (مع بعض المعاملات) في خسارة واحدة.
الأخبار مع الرائدة الخسارة تعدد المهامفي
Machines Can See 2019 ، استخدم أحد المتحدثين خسارة متعددة المهام لمدة 7 مهام في وقت واحد
، كارل . اتضح أنه تم في البداية تعيين بعض المهام كموازنة لبعضها البعض وتم الحصول على "تعارض" ، مما حال دون تعلم الشبكة بشكل أفضل مما لو تم تدريبها لكل مهمة على حدة. الخلاصة: إذا كنت تستخدم فقدان المهام المتعددة ، فتأكد من أن هذه المهام المتعددة نفسها لا تتعارض مع العبارة (على سبيل المثال ، يمكن للتنبؤ بحدود الكائنات والتجزئة الداخلية أن تتداخل مع بعضها البعض ، لأن هذه الأشياء يمكن أن تعتمد على علامات مختلفة داخل الشبكة). تحايل المؤلف على ذلك عن طريق
إضافة كتل ضغط وإثارة منفصلة لكل مهمة .
في الآونة الأخيرة ، ظهرت مقالات من عام 2019 حيث أعلن المؤلفون عن نسبة سرعة / دقة أفضل في مهمة الكشف باستخدام
تنبؤات الصندوق المستندة إلى نقطة . أنا أتحدث عن مقالات
"الكائنات كنقاط" و
"CornerNet-Lite" .
ExtremeNet هو تعديل ل CornerNet. يبدو أنه يمكن الآن تسمية SOTA في الكشف باستخدام الشبكات العصبية (لكن هذا ليس دقيقًا).
إذا كان تفسيري للكاشفات فجأة لا يزال يبدو فوضويًا وغير مفهوم ، في
الفيديو الخاص بنا ، أناقشه ببطء. ربما يجب أن تراه أولاً.
أدناه ، لقد قدمت جداول للشبكات العصبية التي تم اكتشافها مع وجود روابط إلى الكود ووصف موجز لشرائح كل شبكة. حاولت أن أجمع فقط تلك الشبكات التي من المهم حقًا معرفتها (على الأقل أفكارهم) من أجل الحصول على فكرة جيدة عن اكتشاف الكائنات اليوم:
كاشفات الشبكة العصبية (مرحلتان) كاشفات الشبكة العصبية (مرحلة واحدة) كاشفات الشبكة العصبية (متنوعة) كاشفات الشبكة العصبية (القائمة على نقطة) لفهم كيفية ارتباط سرعة / جودة كل بنية ، يمكنك الاطلاع على
هذا الاستعراض أو نسخته
الأكثر شيوعًا .
الهندسة المعمارية على ما يرام ، ولكن الكشف هو في المقام الأول مهمة عملية. "ليس لديك مائة شبكة ، لكن لديك واحدة على الأقل تعمل" - هذه هي رسالتي. توجد روابط إلى الكود في الجدول أعلاه ، لكنني شخصياً نادراً ما واجهت أجهزة الكشف عن الإطلاق مباشرة من المستودعات (على الأقل بهدف زيادة النشر إلى الإنتاج). غالبًا ما يتم استخدام مكتبة لهذا الغرض ، على سبيل المثال ، واجهة برمجة تطبيقات TensorFlow Object Detection (انظر
الجزء العملي من الدرس ) أو
مكتبة من باحثين من CUHK . أوجه انتباهكم إلى طاولة خارقة أخرى (هل أعجبكم ، أليس كذلك؟):
مكتبات لتشغيل نماذج الكشف غالبًا ما تحتاج إلى اكتشاف كائن من فئة واحدة فقط ، ولكنه محدد ومتغير للغاية. على سبيل المثال ، لاكتشاف كل الوجوه في الصورة (لمزيد من التحقق / عد الأشخاص) ، لاكتشاف أشخاص بأكملهم (لإعادة تحديد الهوية / العد / التتبع) أو لاكتشاف نص على الساحة (
للتعرف على
الحروف / ترجمة الكلمات في الصورة). بشكل عام ، ستعمل طريقة الكشف "العادية" هنا إلى حد ما ، لكن لكل مهمة من هذه المهام الفرعية حيلها الخاصة لتحسين الجودة.
كشف الوجه: لم يتم القبض عليه - وليس لص
تظهر بعض الخصوصية هنا ، نظرًا لأن الوجوه غالبًا ما تشغل جزءًا صغيرًا إلى حد ما من الصورة. بالإضافة إلى ذلك ، لا ينظر الأشخاص دائمًا إلى الكاميرا ، وغالبًا ما يكون الوجه مرئيًا فقط من الجانب. كان من أوائل الطرق في التعرف على الوجوه اكتشاف كاشف فيولا جونز الشهير استنادًا إلى شلالات هار ، التي تم اختراعها عام 2001.
الشبكات العصبية
لم تكن في ذلك الوقت ، فهي لا تزال غير قوية في الرؤية ، ومع ذلك ، فإن الطريقة اليدوية القديمة الجيدة أدت وظيفتها. تم استخدام عدة أنواع من أقنعة المرشحات الخاصة بفعالية ، مما ساعد على استخراج مناطق الوجه من الصورة وعلاماتها ، ثم تم إرسال هذه العلامات إلى مصنف AdaBoost. بالمناسبة ، هذه الطريقة تعمل بشكل جيد ، والآن ، فهي سريعة بدرجة كافية وتبدأ من الصندوق
باستخدام OpenCV . عيب هذا الكاشف هو أنه لا يرى سوى الوجوه التي يتم نشرها أمام الكاميرا. على المرء أن يستدير قليلاً وينتهك استقرار الاكتشاف.
لمثل هذه الحالات الأكثر تعقيدًا ، يمكنك استخدام
dlib . هذا هو C ++ - مكتبة يتم فيها تنفيذ العديد من خوارزميات الرؤية ، بما في ذلك اكتشاف الوجه.
من مقاربات الشبكة العصبية في اكتشاف الوجه ، تعد
ميزة متعددة المهام Cascaded CNN (MTCNN) (
MatLab ،
TensorFlow ) ذات أهمية خاصة. بشكل عام ، يتم استخدامه الآن بنشاط (في نفس
facenet ).
فكرة MTCNN هي استخدام ثلاث شبكات عصبية بالتسلسل (وبالتالي ،
"سلسلة" ) للتنبؤ بموقف الوجه ونقاطه الفريدة. في هذه الحالة ، هناك بالضبط 5 نقاط خاصة على الوجه: العين اليسرى والعين اليمنى والحافة اليسرى للشفاه والحافة اليمنى للشفاه والأنف. يتم استخدام أول شبكة عصبية من السلسلة (
P-Net ) لإنشاء مناطق محتملة للوجه.
الثاني ( R-Net ) - لتحسين إحداثيات الصناديق المستلمة. تتراجع الشبكة العصبية الثالثة ( O-Net ) مرة أخرى عن إحداثيات الصناديق ، بالإضافة إلى توقع 5 نقاط رئيسية للوجه. هذه الشبكة متعددة المهام لأن ثلاث مهام يتم حلها: انحدار نقاط الصندوق ، وتصنيف الوجه / عدم الوجه لكل مربع ، وتراجع نقاط الوجه. علاوة على ذلك ، فإن MTCNN تفعل كل شيء في الوقت الفعلي ، أي تتطلب أقل من 40 مللي ثانية لكل صورة.كيف ، ما زلت لا تقرأ المقالات مع ArXiv بنفسك؟في هذه الحالة ، أوصي بمحاولة قراءة المقالة الأصلية حول MTCNN ، إذا كان لديك بالفعل خلفية في شبكات الالتفاف. تحتوي هذه المقالة على 5 صفحات فقط ، ولكنها تحدد جميع المعلومات التي تحتاجها لفهم الطريقة. جربه ، سوف يتأخر :) بين أحدث ما توصلت إليه التكنولوجيا الحديثة ، يمكن ملاحظة جهاز الكشف عن الوجه المزدوج (DSFD) و FaceBoxes . يتمتع FaceBoxes بالقدرة على التشغيل بسرعة على وحدة المعالجة المركزية (!) ، ولديه DSFD أفضل جودة (تم إصداره في أبريل 2019). تعد DSFD أكثر تعقيدًا من MTCNN ، حيث يتم استخدام فرعين من معالجتها وأنواع خاصة من الخسائر داخل الشبكة ، وذلك نظرًا لوجود وحدة خاصة لتحسين الميزات (مع التشويش المتوسع ). بالمناسبة ، مع التشنجات الموسعة ، سنصادف أكثر من مرة في المقالات المتعلقة بالتجزئة في الجزء التالي. يوجد أدناه مثال ل DSFD (مثير للإعجاب ، أليس كذلك؟).لمعرفة كيفية التعرف على الوجوه ، لا تنس النظر إلى المقالة السابقة في السلسلة ، حيث تحدثت عنها لفترة وجيزة.العديد من الحروف: الكشف عن النص (والاعتراف)
إيلاء الاهتمام للصورة أعلاه. من السهل أن ترى أنك إذا توقعت مربعات الربط الموازية لمحاور الإحداثيات (كما فعلنا من قبل) ، فستتحول إلى جودة رديئة للغاية. غالبًا ما يتبين أن هذا أمر بالغ الأهمية إذا أردنا ، على سبيل المثال ، إرسال هذه المربعات إلى مدخلات شبكة التعرف العصبية ، والتي ستتوقع النص من الصورة .في مثل هذه الحالات ، يكون من المعتاد التنبؤ بالمربعات المحيطية المدورة ، أو حتى قصر النص على المضلعات بدلاً من المستطيلات إذا كان منحنيًا (الأمثلة أدناه). يتم التعامل مع التنبؤ بالمربعات الدوارة ، على سبيل المثال ، بواسطة جهاز كشف EAST .إن فكرة كاشف EAST تتمثل في عدم توقع إحداثيات زوايا الصناديق ، ولكن الأمور الثلاثة التالية:- خرائط نقاط النص (احتمال العثور على نص في كل بكسل)
- زاوية دوران كل مربع
- المسافات إلى حدود المستطيل لكل بكسل
وبالتالي ، فإن هذا يذكرنا بمهمة التقسيم (تسليط الضوء على أقنعة النص) من الكشف. صورة توضيحية من مقالة arxiv :مهمة التعرف على النص (وبالتالي الكشف عنه) شائعة جدًا ، وبالتالي هناك نظائرها: TextBoxes ++ ( Caffe ) و SegLinks ، ولكن EAST ، في رأيي ، هو الأكثر بسيطة وبأسعار معقولة.بعد اكتشاف النص ، أرغب في إرساله فورًا إلى شبكة عصبية أخرى للتعرف عليه وإنتاج سلسلة من الأحرف. هنا يمكنك ملاحظة تغيير مثير للاهتمام في الطريقة - من الصور إلى النص. يجب ألا تخاف من هذا على الإطلاق ، لأن كل شيء يعتمد فقط على ماهية بنية الشبكة ، وما هو متوقع بالضبط على الطبقة الأخيرة ونوع الخسارة المستخدمة. على سبيل المثال ، MORAN ( PyTorch code ) و ASTER ( TensorFlow code ) التعامل تماما مع المهمة.ليس لديهم شيء خارق للطبيعة ، لكن أنواع الشبكات العصبية المختلفة بشكل أساسي جدًا تستخدم بكفاءة عالية في آن واحد: CNN و RNN. الأول هو لاستخراج الميزات من الصورة ، والثاني هو لتوليد النص. المزيد عن مثال MORAN: يوجد أدناه هيكل شبكة التعرف الخاصة بها.ومع ذلك ، على الرغم من الصناديق الدوارة من EAST ، لا تزال شبكة يمكن التعرف عليها تتلقى صورة مستطيلة ، مما يعني أن النص بداخلها يمكن أن يحتل مكانًا بعيدًا عن كل المساحة. لتسهيل عملية التعرّف على النص مباشرة من الصورة ، يمكنك تحويله بطريقة معينة.يمكننا تطبيق تحويل affine على صورة الإدخال لتمديد / تدوير النص. يمكن تحقيق ذلك باستخدام شبكة التحويل المكانية (STN) ، حيث إنها تتعلم بشكل مستقل مثل هذه التحولات ويمكن دمجها بسهولة في الشبكات العصبية الأخرى (بالمناسبة ، يمكنك القيام بهذا المحاذاة لأي صورة ، وليس للنص فقط). أدناه مثال قبل / بعد STN.ليس من المنطقي التحدث عن STN بالتفصيل هنا ، لأنه يوجد مقال رائع عن حبري (تم التقاط الصورة من هناك ، بفضل المؤلف) وكود PyTorch .لكن MORAN (نفس الشبكة العصبية للتعرف على النص) أكثر ذكاءً - فهي لا تقتصر على عائلة تحويل الأقارب ، ولكنها تتوقع خريطة إزاحة لكل من x و y لكل بكسل من صورة الإدخال ، وبالتالي تحقيق أي تحول يحسن تعلم الشبكة للتعرف عليها. تسمى هذه الطريقة " تصحيح" ، أي تصحيح صورة باستخدام شبكة عصبية مساعدة ( مقوم ). يوجد أدناه مقارنة بين الصورة بعد تحويل التقارب وبعد التصحيح:ومع ذلك ، بالإضافة إلى مناهج التعرف على النص "نموذجي" (شبكة الكشف -> شبكة التعرف) ، هناك بنية نهاية إلى نهاية: الإدخال صورة ، والإخراج عبارة عن كشف والنص الذي تم التعرف عليه داخلها. وكل هذا هو خط أنابيب واحد يتعلم كلتا المهمتين في وقت واحد. في هذا الاتجاه ، هناك عمل مثير للإعجاب يتمثل في
اكتشاف النص السريع الموجه باستخدام شبكة موحدة ( FOTS ) ( رمز PyTorch ) ، حيث يلاحظ المؤلفون أيضًا أن النهج من طرف إلى طرف هو ضعف سرعة "اكتشاف + التعرف". يوجد أدناه مخطط FOTS للشبكة العصبية ، حيث تلعب كتلة RoiRotate دورًا خاصًا ، حيث يُمكن "تدرجات التدرجات" من الشبكة للاعتراف بها على الشبكة العصبية للكشف (هذا الأمر أكثر تعقيدًا مما يبدو).
بالمناسبة ، يتم
عقد مؤتمر
ICDAR كل عام ، حيث يتم توقيت
العديد من المسابقات للتعرف على النص في مجموعة متنوعة من الصور.
المشاكل الحالية في الكشف
في رأيي ، المشكلة الرئيسية في الاكتشاف الآن ليست في جودة نموذج الكاشف ، ولكن البيانات: عادة ما تكون طويلة ومكلفة للترميز ، خاصة إذا كان هناك الكثير من الفئات التي يجب اكتشافها (ولكن بالمناسبة يوجد
مثال عن حل لـ 500 فئة). لذلك ،
يتم الآن تخصيص
العديد من الأعمال لإنشاء أكثر البيانات المقبولة "صناعياً" والحصول على العلامات "مجانًا". فيما يلي صورة من
شهادتي لمقال من نفيديا ، والذي يتناول بشكل خاص توليد البيانات الاصطناعية.
ولكن لا يزال من الرائع أنه الآن يمكننا أن نقول على وجه اليقين أين في الصورة ما يجب أن يكون. وإذا أردنا ، على سبيل المثال ، حساب مقدار شيء ما على الإطار ، فهذا يكفي لاكتشاف ذلك وإعطاء عدد الصناديق. عند اكتشاف الأشخاص ، تعمل YOLO العادي أيضًا بشكل جيد ، الشيء الرئيسي هو إرسال الكثير من البيانات. نفس
Darkflow مناسب ، وتوجد الفئة "البشرية" في جميع مجموعات البيانات الرئيسية تقريبًا. لذا ، إذا أردنا استخدام الكاميرا لحساب عدد الأشخاص الذين مروا بها ، على سبيل المثال ، في يوم واحد ، أو عدد البضائع التي أخذها شخص ما في أحد المتاجر ، فسوف نكتشف ببساطة ونمنح الكمية ...
إيقاف. ولكن إذا أردنا اكتشاف الأشخاص في كل صورة من الكاميرا ، فيمكننا حساب أرقامهم في إطار واحد ، وفي إطارين - لم يعد ، لأنه لا يمكننا تحديد مكان الشخص بالضبط. نحتاج إلى خوارزمية تتيح لنا حساب الأشخاص الفريدين في تدفق الفيديو. قد تكون خوارزمية
إعادة تعريف ، ولكن عندما يتعلق الأمر بالفيديو والكشف ، فمن الخطيئة عدم استخدام خوارزميات التتبع.
الفيديو والتتبع: في دفق واحد
حتى الآن ، تحدثنا فقط عن المهام في الصور ، ولكن الشيء الأكثر إثارة للاهتمام يحدث في الفيديو. لحل نفس التعرف على الإجراءات ، نحتاج إلى استخدام ليس فقط المكون
المكاني ، ولكن أيضًا المكون
الزمني ، لأن الفيديو هو سلسلة من الصور في الوقت المناسب.
تتبع هو التماثلية للكشف عن الصور ، ولكن للفيديو. وهذا يعني أننا نريد أن نعلّم الشبكة أن تتنبأ بعدم الملاكمة في الصورة ، ولكن تتبع في الوقت المناسب (والذي هو في الأساس سلسلة من الصناديق). في ما يلي مثال لصورة تُظهر "ذيول" - مسارات هؤلاء الأشخاص في الفيديو.
دعونا نفكر في كيفية حل مشكلة التتبع. فليكن هناك مقطع فيديو وإطاراته رقم 1 ورقم 2. دعنا ننظر حتى الآن في كائن واحد فقط - نحن نتتبع كرة واحدة. في الإطار رقم 1 ، يمكننا استخدام كاشف لاكتشافه. في المرحلة الثانية ، يمكننا أيضًا اكتشاف كرة ، وإذا كانت هناك بمفردها ، فكل شيء على ما يرام: نقول إن الملاكمة على الإطار السابق هي الملاكمة من نفس الكرة كما في الإطار رقم 2. يمكنك أيضًا
المتابعة إلى الإطارات المتبقية ، أسفل الصورة المتحركة من
دورة رؤية
pyimagesearch .
بالمناسبة ، من أجل توفير الوقت ، لا يمكننا بدء الشبكة العصبية في الإطار الثاني ، ولكن ببساطة "قص" مربع الكرة من الإطار الأول وابحث عن نفس
الارتباط بالضبط في الإطار الثاني أو بكسل بكسل. يستخدم
متتبعو الارتباط هذا النهج ، فهم يعتبرون بسيطين أو أكثر أو أقل موثوقية إذا كنا نتعامل مع حالات بسيطة مثل "تتبع كرة واحدة أمام الكاميرا في غرفة فارغة". وتسمى هذه المهمة أيضًا
تتبع الكائنات المرئية . فيما يلي
مثال عن عمل متتبع الارتباط باستخدام مثال شخص واحد.
ومع ذلك ، إذا كان هناك العديد من عمليات الكشف / الأشخاص ، فأنت بحاجة إلى أن تكون قادرًا على مطابقة الصناديق من الإطار رقم 1 ومن الإطار رقم 2. الفكرة الأولى التي تتبادر إلى الذهن هي محاولة مطابقة المربع مع تلك التي تحتوي على أكبر منطقة تقاطع (
IoU ) معها. صحيح ، في حالة وجود العديد من الاكتشافات المتداخلة ، سيكون هذا المتعقب غير مستقر ، لذلك تحتاج إلى استخدام المزيد من المعلومات.
يعتمد النهج مع IoU فقط على
علامات "هندسية" للكشف ، أي أنه يحاول ببساطة مقارنتها بالقرب من الإطارات. لكن لدينا تحت تصرفنا صورة كاملة (حتى صورتان في هذه الحالة) ، ويمكننا استخدام حقيقة أن هناك داخل هذه الاكتشافات
علامات "بصرية" . بالإضافة إلى ذلك ، لدينا تاريخ من الاكتشافات لكل شخص ، وهو ما يسمح لنا بالتنبؤ بمزيد من الدقة لموضعه التالي على أساس السرعة واتجاه الحركة ، وهذا يمكن أن يسمى
علامات "جسدية" .
تم نشر واحدة من أوائل أجهزة التتبع في الوقت الفعلي ، والتي كانت موثوقة تمامًا وقادرة على التعامل مع المواقف الصعبة ، في 2016
Simple Online و Realtime Traker (SORT) (
رمز Python ). لم يستخدم SORT أي علامات بصرية وشبكات عصبية ، لكنه قدر عدد المعلمات لكل مربع على كل إطار: السرعة الحالية (x و y بشكل منفصل) والحجم (الارتفاع والعرض). يتم دائمًا أخذ نسبة العرض إلى الارتفاع في المربع من الكشف الأول عن ذلك المربع. علاوة على ذلك ، يتم التنبؤ بالسرعات باستخدام
مرشحات Kalman (وهي جيدة بوجه عام وخفيفة في عالم معالجة الإشارات) ، وتم بناء مصفوفة تقاطع الصناديق بواسطة IoU ، ويتم تعيين الكشف بواسطة
الخوارزمية المجرية .
إذا بدا لك أن الرياضيات قد أصبحت كبيرة بالفعل ، فسيتم شرح كل شيء في
هذا المقال بطريقة يمكن الوصول إليها (هذه متوسطة :).
بالفعل في عام 2017 ، تم إصدار تعديل SORT في شكل
DeepSORT (
رمز TensorFlow ). بدأت DeepSORT بالفعل في استخدام الشبكة العصبية لاستخراج العلامات البصرية ، واستخدامها لحل التصادمات. لقد نمت جودة التتبع - ليس من أجل لا شيء ، فهي تعتبر واحدة من أفضل أجهزة التتبع على الإنترنت اليوم.
إن مجال التتبع يتطور بالفعل بشكل نشط: هناك
أجهزة تتبع
مع الشبكات العصبية السيامية ،
وأجهزة تتبع
مع RNN . أبقِ إصبعك على النبض ، لأنه في أي يوم يمكن أن تخرج بنية أكثر دقة وسرعة (أو خرجت بالفعل). بالمناسبة ، من المريح جدًا اتباع مثل هذه الأشياء على
PapersWithCode ، فهناك دائمًا روابط لمقالات وكود لهم (إن وجد).
خاتمة
لقد شهدنا الكثير بالفعل وتعلمنا الكثير. لكن رؤية الكمبيوتر هي منطقة واسعة للغاية ، وأنا شخص عنيد للغاية. لهذا السبب سوف نراكم في المقالة الثالثة من هذه الدورة (هل ستكون الأخيرة؟ من يعرف ...) ، حيث سنناقش بمزيد من التفصيل تجزئة وتقييم الموقف والتعرف على الإجراءات على مقطع فيديو وإنشاء وصف من صورة باستخدام شبكات عصبية.
ملاحظة: أود أن أعرب عن شكره الخاص لفديم غورباتشوف على نصائحه وتعليقاته القيمة في إعداد هذا المقال والمادة السابقة.