أداة التعليقات التوضيحية الخاصة برؤية الكمبيوتر: ترميز بيانات الشباك الواحد

يقوم مكتب نيجني نوفغورود التابع لشركة إنتل ، من بين أمور أخرى ، بتطوير خوارزميات رؤية الكمبيوتر القائمة على الشبكات العصبية العميقة. يتم نشر العديد من الخوارزميات الخاصة بنا في مستودع Open Model Zoo . يتطلب التدريب النموذجي عددًا كبيرًا من البيانات الموسومة. من الناحية النظرية ، هناك طرق عديدة لإعدادهم ، ولكن توفر البرامج المتخصصة يسرع هذه العملية عدة مرات. لذلك ، من أجل تحسين كفاءة وجودة الترميز ، قمنا بتطوير أداتنا الخاصة - Computer Vision Annotation Tool (CVAT) .



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

هناك حلان للمشكلة:

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

في البداية ، تم تطوير أداة شرح رؤية الكمبيوتر خصيصًا لفريق التعليقات التوضيحية الخاص بنا.



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

كذلك في المقال:

  • معلومات عامة (وظائف ، تطبيقات ، مزايا وعيوب الأداة)
  • التاريخ والتطور (قصة قصيرة حول كيف عاش وتطور CVAT)
  • جهاز داخلي (وصف معماري رفيع المستوى)
  • اتجاهات التنمية (قليلا عن الأهداف التي أود تحقيقها ، والطرق الممكنة لتحقيقها)

معلومات عامة


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

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

  • كشف الكائن
  • تصنيف الصورة
  • تجزئة الصورة

CVAT مناسب في كل هذه السيناريوهات.

المزايا:

  • عدم التثبيت من قبل المستخدمين النهائيين. لإنشاء مهمة أو ترميز البيانات ، ما عليك سوى فتح رابط معين في المتصفح.
  • القدرة على العمل معا. هناك فرصة لجعل المهمة متاحة للجمهور للمستخدمين وموازنة العمل عليها.
  • سهلة النشر. تثبيت CVAT على الشبكة المحلية هو بضعة أوامر من خلال استخدام Docker .
  • أتمتة عملية العلامات. على سبيل المثال ، يسمح لك Interpolation بالحصول على علامات على العديد من الإطارات ، مع عمل حقيقي فقط على بعض الإطارات الرئيسية.
  • تجربة المهنيين. تم تطوير الأداة بمشاركة التعليقات التوضيحية وفرق حسابية متعددة.
  • القدرة على الاندماج. CVAT مناسب للتكامل في منصة أوسع. على سبيل المثال ، Onepanel .
  • دعم اختياري لمختلف الأدوات:

    • مجموعة أدوات النشر للتعلم العميق (مكون كجزء من OpenVINO)
    • Tensorflow Object Detection API (TF OD API)
    • ELK (Elasticsearch + Logstash + Kibana) نظام التحليلات
    • مجموعة أدوات NVIDIA CUDA
  • دعم سيناريوهات التعليق التوضيحي المختلفة.
  • المصدر المفتوح تحت رخصة MIT بسيطة ومجانية.

العيوب:

  • دعم متصفح محدود. يتم ضمان أداء جزء العميل فقط في متصفح Google Chrome. نحن لا نختبر CVAT في متصفحات أخرى ، ولكن من الناحية النظرية ، يمكن أن تعمل الأداة في Opera و Yandex Browser وغيرها باستخدام محرك Chromium.
  • لم يتم تطوير نظام الاختبارات التلقائية. يتم إجراء جميع الفحوصات الصحية يدويًا ، مما يؤدي إلى إبطاء عملية التطوير بشكل ملحوظ. ومع ذلك ، نحن نعمل بالفعل على إيجاد حل لهذه المشكلة بالتعاون مع طلاب UNN لهم. Lobachevsky كجزء من مشروع IT Lab .
  • لا توجد وثائق شفرة المصدر المتاحة. الانخراط في التنمية يمكن أن يكون صعبا للغاية.
  • قيود الأداء. مع تزايد الطلبات على حجم العلامات ، واجهنا العديد من المشكلات ، مثل تقييد Chrome Sandbox على استخدام RAM.

بالطبع ، هذه القوائم ليست شاملة ، ولكنها تحتوي على أحكام أساسية.

كما ذكرنا سابقًا ، يدعم CVAT عددًا من المكونات الإضافية. من بينها:

تُستخدم مجموعة أدوات النشر للتعلم العميق كجزء من مجموعة أدوات OpenVINO - لتسريع إطلاق نموذج TF OD API في غياب وحدة معالجة الرسومات. نحن نعمل على اثنين من الاستخدامات المفيدة الأخرى لهذا المكون.

Tensorflow Object Detection API - يستخدم لتمييز الكائنات تلقائيًا. بشكل افتراضي ، نستخدم طراز Faster RCNN Inception Resnet V2 ، المدربين على COCO (80 صنفًا) ، ولكن يجب ألا تكون هناك صعوبة في توصيل الطرز الأخرى.

Logstash، Elasticsearch، Kibana - تسمح لك بتصور وتحليل السجلات المتراكمة من قبل العملاء. يمكن استخدام هذا ، على سبيل المثال ، لمراقبة عملية الترميز أو البحث عن الأخطاء وأسباب حدوثها.



مجموعة أدوات NVIDIA CUDA - مجموعة من الأدوات لإجراء العمليات الحسابية على معالج الرسومات (GPU). يمكن استخدامه لتسريع التخطيط التلقائي مع TF OD API أو في وظائف إضافية مخصصة أخرى.

ترميز البيانات


  1. تبدأ العملية ببيان المشكلة الخاصة بالتخطيط. يتضمن التدريج:
    • تحديد اسم المهمة
    • تعداد الفصول لتتميز وخصائصها
    • تحديد الملفات لتنزيلها
      • يتم تنزيل البيانات من نظام الملفات المحلي ، أو من نظام ملفات موزَّع مركب في حاوية
      • يمكن أن تحتوي المهمة على أرشيف واحد يحتوي على صور وفيديو واحد ومجموعة من الصور وحتى بنية دليل به صور عند التنزيل عبر وحدة تخزين موزعة

    • تعيين اختياريا:
      • رابط لمواصفات الترميز التفصيلية ، وأي معلومات إضافية أخرى (Bug Tracker)
      • رابط إلى مستودع Git بعيد لتخزين التعليقات التوضيحية (مستودع بيانات Dataset)
      • تدوير كل الصور 180 درجة (صور الوجه)
      • دعم الطبقة لمهام التجزئة (ترتيب Z)
      • حجم الجزء يمكن تقسيم المهمة القابلة للتنزيل إلى عدة مهام فرعية للعمل المتوازي
      • منطقة تقاطع القطاع (التداخل). يستخدم في الفيديو لدمج التعليقات التوضيحية في قطاعات مختلفة
      • مستوى الجودة عند تحويل الصور (جودة الصورة)



  2. بعد معالجة الطلب ، ستظهر المهمة التي تم إنشاؤها في قائمة المهام.


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


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



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



    يحتوي مربع حوار التعليمات على العديد من اختصارات لوحة المفاتيح المدعومة وبعض النصائح الأخرى.



    يمكن رؤية عملية العلامات في الأمثلة أدناه.

    يمكن لـ CVAT استيفاء المستطيلات والسمات خطيًا بين الإطارات المفتاحية في الفيديو. نتيجة لهذا ، يتم عرض التعليق التوضيحي على مجموعة الإطارات تلقائيًا.


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


    المضلعات تدعم البرامج النصية للتجزئة والدلالات التجزيئية للنسخة. تسهل الإعدادات المرئية المختلفة عملية التحقق من الصحة.


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

التاريخ والتطور


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

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



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

خلال النصف الثاني من عام 2017 ، قدمنا ​​واجهة برمجة تطبيقات Tensorflow Object Detection كوسيلة للحصول على العلامات الأولية. كان هناك العديد من التحسينات الطفيفة للعميل ، ولكن في النهاية واجهنا حقيقة أن جزء العميل بدأ العمل ببطء شديد. كانت الحقيقة هي أن حجم المهام زاد ، وزاد وقت فتحها بما يتناسب مع عدد الإطارات والبيانات الموسومة ، تباطأت واجهة المستخدم بسبب العرض غير الفعال للكائنات الموسومة ، وكثيرا ما ضاع التقدم على مدار ساعات العمل. تراجعت الإنتاجية في الغالب في المهام باستخدام الصور ، لأن أساس بنية ذلك الوقت كان مصممًا في الأصل للعمل مع الفيديو. كانت هناك حاجة إلى تغيير كامل في بنية العميل ، والذي تعاملنا معه بنجاح. معظم مشاكل الأداء في ذلك الوقت قد ولت. أصبحت واجهة الويب أسرع وأكثر استقرارًا. أصبح وضع علامات على المهام الأكبر أمرًا ممكنًا. في نفس الفترة ، كانت هناك محاولة لإدخال اختبار وحدة لتوفير ، إلى حد ما ، أتمتة الشيكات أثناء التغييرات. لم يتم حل هذه المهمة بنجاح. قمنا بتكوين QUnit ، وكارما ، كروم بلا رأس في حاوية دوكر ، وكتب بعض الاختبارات ، أطلقت كل هذا على CI. ومع ذلك ، بقي جزء كبير من التعليمات البرمجية ، ولا يزال ، مكتشف بواسطة الاختبارات. كان هناك ابتكار آخر هو نظام لتسجيل إجراءات المستخدم من خلال البحث والتصور اللاحقين على أساس ELK Stack. يسمح لك بمراقبة عملية الشروح والبحث عن سيناريوهات الإجراءات التي تؤدي إلى استثناءات البرامج.

في النصف الأول من عام 2018 ، قمنا بتوسيع وظائف عملائنا. تمت إضافة وضع تعليق السمة ، والذي ينفذ برنامجًا نصيًا فعالًا لوضع علامات على السمات التي استعارناها من الزملاء وقمنا بتعميمها ؛ يمكنك الآن تصفية الكائنات وفقًا لعدد من العلامات ، وتوصيل وحدة تخزين مشتركة لتنزيل البيانات عند تعيين المهام مع عرضها من خلال متصفح ، والعديد من الآخرين. أصبحت المهام أكثر ضخامة وبدأت مشاكل الأداء في الظهور مرة أخرى ، ولكن هذه المرة كان جزء الخادم عنق الزجاجة. تكمن مشكلة Vatic في أنه يحتوي على الكثير من التعليمات البرمجية المكتوبة ذاتيًا للمهام التي يمكن حلها بسهولة وكفاءة أكثر باستخدام حلول جاهزة. لذلك قررنا إعادة جانب الخادم. لقد اخترنا Django كإطار عمل للخادم ، ويرجع ذلك إلى حد كبير إلى شعبيته وتوافر العديد من الأشياء ، كما يقولون ، خارج الصندوق. بعد تغيير جزء الخادم ، عندما لم يتبق شيء من Vatic ، قررنا أننا قمنا بالفعل بالكثير من العمل ، والذي يمكن مشاركته مع المجتمع. لذلك تقرر الذهاب إلى المصدر المفتوح. الحصول على إذن لهذا داخل شركة كبيرة هو عملية شائكة إلى حد ما. هناك قائمة كبيرة من المتطلبات لهذا الغرض. بما في ذلك ، كان من الضروري التوصل إلى اسم. قمنا برسم الخيارات وإجراء سلسلة من الدراسات الاستقصائية بين الزملاء. ونتيجة لذلك ، تم تسمية الأداة الداخلية الخاصة بنا باسم CVAT ، وفي 29 يونيو 2018 ، تم نشر التعليمات البرمجية المصدر على GitHub في مؤسسة OpenCV بموجب ترخيص MIT ومع الإصدار الأولي 0.1.0. حدث المزيد من التطوير في مستودع عام.

في نهاية سبتمبر 2018 ، تم إصدار الإصدار الرئيسي 0.2.0. كان هناك الكثير من التغييرات والإصلاحات الصغيرة ، ولكن كان التركيز الرئيسي على دعم أنواع جديدة من التعليقات التوضيحية. لذلك ظهر عدد من الأدوات لوضع العلامات والتحقق من تجزئة ، وكذلك القدرة على التعليق التوضيحي مع polylines أو النقاط.

الإصدار التالي ، تمامًا مثل هدية عيد الميلاد ، من المقرر في 31 ديسمبر 2018. أهم النقاط هنا هي الدمج الاختياري لمجموعة أدوات التعليم العميق كجزء من OpenVINO ، والذي يستخدم لتسريع إطلاق TF OD API في غياب بطاقة رسومات NVIDIA ؛ نظام تحليل سجل المستخدم الذي لم يكن متاحًا مسبقًا في الإصدار العام ؛ العديد من التحسينات في جانب العميل.

لقد لخص تاريخ CVAT حتى الآن (ديسمبر 2018) واستعرضنا الأحداث الأكثر أهمية. يمكنك دائمًا قراءة المزيد عن سجل التغيير في سجل التغيير .

الجهاز الداخلي




لتبسيط التثبيت والنشر ، يستخدم CVAT حاويات Docker. يتكون النظام من عدة حاويات. يتم تنفيذ عملية الإشراف في حاوية CVAT ، التي تولد العديد من عمليات Python في بيئة Django. واحد منهم هو خادم wsgi ، والذي يعالج طلبات العميل. تستخدم العمليات الأخرى ، عمال rq ، لمعالجة المهام "الطويلة" من طوابير Redis: الافتراضية والمنخفضة. تتضمن هذه المهام تلك التي لا يمكن معالجتها ضمن طلب مستخدم واحد (إعداد مهمة ، إعداد ملف تعليق توضيحي ، ترميز باستخدام TF OD API ، وغيرها). يمكن تكوين عدد العمال في ملف تكوين المشرف.

تتفاعل بيئة Django مع خادمي قاعدة بيانات. يخزن خادم Redis حالة قوائم انتظار المهام ، وتحتوي قاعدة بيانات CVAT على جميع المعلومات حول المهام والمستخدمين والتعليقات التوضيحية ، إلخ. يستخدم PostgreSQL (و SQLite 3 قيد التطوير) كـ DBMS لـ CVAT. يتم تخزين جميع البيانات على قسم قابل للتوصيل (حجم cvat ديسيبل). يتم استخدام الأقسام حيثما كان ذلك ضروريًا لتجنب فقد البيانات عند تحديث الحاوية. وبالتالي ، يتم تثبيت ما يلي في حاوية CVAT:

  • قسم مع الفيديو والصور (حجم بيانات cvat)
  • قسم بالمفاتيح (حجم مفاتيح cvat)
  • قسم مع سجلات (حجم سجلات cvat)
  • تخزين الملفات المشتركة (حجم cvat المشترك)

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

على مستوى المصدر ، يتكون CVAT من العديد من تطبيقات Django:

  • المصادقة - مصادقة المستخدمين في النظام (أساسي و LDAP)
  • المحرك - تطبيق رئيسي (نماذج قواعد البيانات الأساسية ؛ مهام التحميل والحفظ ؛ تحميل التعليقات التوضيحية وتفريغها ؛ واجهة عميل الترميز ؛ واجهة الخادم لإنشاء المهام وتغييرها وحذفها)
  • لوحة القيادة - واجهة العميل لإنشاء المهام وتحريرها والبحث عنها وحذفها
  • الوثائق - عرض وثائق المستخدم في واجهة العميل
  • tf_annotation - تعليق توضيحي تلقائي باستخدام API Tensorflow Object Detection
  • log_viewer - إرسال السجلات من العميل إلى Logstash عند حفظ مهمة
  • log_proxy - اتصال وكيل CVAT → Kibana
  • git - بوابة مستودع التكامل لتخزين التعليقات التوضيحية

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

يتم تطبيق جزء العميل على قوالب JavaScript و Django. JavaScript , , - ( ) model-view-controller. , (, , ) , . ( - UI), (, , : , , models, views controllers).


open source, . , . . , CVAT. , , . :

  • CVAT , , , , . UI .
  • . , .
  • , . , .
  • . deep learning , . , Deep Learning Deployment Toolkit OpenVINO - . , . , .
  • demo- CVAT, , , . demo- Onepanel, CVAT .
  • Amazon Mechanical Turk CVAT . SDK .

, . , , . open source . – , . , PR . , , Gitter . , ! !

المراجع


Source: https://habr.com/ru/post/ar433772/


All Articles