Outil d'annotation de vision par ordinateur: balisage de données unique

Le bureau d'Intel à Nijni Novgorod, entre autres, développe des algorithmes de vision par ordinateur basés sur des réseaux de neurones profonds. Beaucoup de nos algorithmes sont publiés dans le référentiel Open Model Zoo . La formation aux modÚles nécessite un grand nombre de données balisées. Théoriquement, il existe de nombreuses façons de les préparer, mais la disponibilité de logiciels spécialisés accélÚre ce processus à plusieurs reprises. Ainsi, afin d'améliorer l'efficacité et la qualité du balisage, nous avons développé notre propre outil - Computer Vision Annotation Tool (CVAT) .



Bien sûr, sur Internet, vous pouvez trouver beaucoup de données annotées, mais il y a quelques problÚmes. Par exemple, de nouvelles tùches surgissent constamment pour lesquelles il n'existe tout simplement pas de telles données. Un autre problÚme est que toutes les données ne conviennent pas au développement de produits commerciaux, en raison de leurs accords de licence. Ainsi, en plus du développement et de la formation d'algorithmes, notre activité comprend également le balisage de données. Il s'agit d'un processus assez long et long, qui serait déraisonnable à mettre sur les épaules des développeurs. Par exemple, pour former l'un de nos algorithmes, environ 769 000 objets ont été balisés pendant plus de 3 100 heures-homme.

Il existe deux solutions au problĂšme:

  • La premiĂšre consiste Ă  transfĂ©rer les donnĂ©es de balisage Ă  des sociĂ©tĂ©s tierces, avec la spĂ©cialisation appropriĂ©e. Nous avons vĂ©cu une expĂ©rience similaire. Il convient de noter le processus complexe de validation et de re-partitionnement des donnĂ©es, ainsi que la prĂ©sence de la bureaucratie.
  • La seconde, plus pratique pour nous, est la crĂ©ation et le support de notre propre Ă©quipe d'annotation. La commoditĂ© rĂ©side dans la capacitĂ© Ă  dĂ©finir rapidement de nouvelles tĂąches, Ă  gĂ©rer l'avancement de leur mise en Ɠuvre et Ă  faciliter l'Ă©quilibre entre prix et qualitĂ©. De plus, il est possible d'implĂ©menter des algorithmes d'automatisation personnalisĂ©s et d'amĂ©liorer la qualitĂ© du balisage.

Initialement, l'outil d'annotation de vision par ordinateur a été développé spécifiquement pour notre équipe d'annotation.



Bien sĂ»r, notre objectif n'Ă©tait pas de crĂ©er la «15e norme». Dans un premier temps, nous avons utilisĂ© une solution prĂȘte Ă  l'emploi - Vatic , mais dans le processus, les Ă©quipes d'annotation et d'algorithmique ont prĂ©sentĂ© de nouvelles exigences, dont la mise en Ɠuvre a finalement conduit Ă  une rĂ©Ă©criture complĂšte du code du programme.

Plus loin dans l'article:

  • Informations gĂ©nĂ©rales (fonctionnalitĂ©, applications, avantages et inconvĂ©nients de l'outil)
  • Histoire et Ă©volution (une courte histoire sur la façon dont CVAT a vĂ©cu et dĂ©veloppĂ©)
  • PĂ©riphĂ©rique interne (description de l'architecture de haut niveau)
  • Directions de dĂ©veloppement (un peu sur les objectifs que j'aimerais atteindre et les moyens possibles pour les atteindre)

Informations générales


L'outil d'annotation de vision par ordinateur (CVAT) est un outil open source pour le balisage d'images et de vidéos numériques. Sa tùche principale est de fournir à l'utilisateur des moyens pratiques et efficaces de marquer les ensembles de données. Nous créons CVAT en tant que service universel qui prend en charge différents types et formats de balisage.

Pour les utilisateurs finaux, CVAT est une application Web basĂ©e sur un navigateur. Il prend en charge divers scĂ©narios de travail et peut ĂȘtre utilisĂ© Ă  la fois pour le travail personnel et en Ă©quipe. Les principales tĂąches de l'apprentissage automatique avec un enseignant dans le domaine du traitement d'image peuvent ĂȘtre divisĂ©es en trois groupes:

  • DĂ©tection d'objets
  • Classification d'image
  • Segmentation d'image

La CVAT convient à tous ces scénarios.

Avantages:

  • Manque d'installation par les utilisateurs finaux. Pour crĂ©er une tĂąche ou annoter des donnĂ©es, ouvrez simplement un lien spĂ©cifique dans le navigateur.
  • La capacitĂ© de travailler ensemble. Il est possible de mettre la tĂąche Ă  la disposition du public et de parallĂ©liser le travail sur celle-ci.
  • Facile Ă  dĂ©ployer. L'installation de CVAT sur le rĂ©seau local est un couple de commandes via l'utilisation de Docker .
  • Automatisation du processus de balisage. L'interpolation, par exemple, vous permet d'obtenir un balisage sur de nombreuses images, avec un travail rĂ©el uniquement sur certaines images clĂ©s.
  • L'expĂ©rience des professionnels. L'outil a Ă©tĂ© dĂ©veloppĂ© avec la participation d'annotations et de plusieurs Ă©quipes algorithmiques.
  • La capacitĂ© Ă  s'intĂ©grer. CVAT peut ĂȘtre intĂ©grĂ© dans une plateforme plus large. Par exemple, Onepanel .
  • Prise en charge facultative de divers outils:

    • Deep Learning Deployment Toolkit (composant faisant partie d'OpenVINO)
    • API de dĂ©tection d'objets Tensorflow (API TF OD)
    • SystĂšme d'analyse ELK (Elasticsearch + Logstash + Kibana)
    • NVIDIA CUDA Toolkit
  • Prise en charge de divers scĂ©narios d'annotation.
  • Open source sous une licence MIT simple et gratuite.

Inconvénients:

  • Prise en charge limitĂ©e du navigateur. Les performances de la partie client sont garanties uniquement dans le navigateur Google Chrome. Nous ne testons pas CVAT dans d'autres navigateurs, mais thĂ©oriquement, l'outil peut fonctionner dans Opera, Yandex Browser et autres avec le moteur Chromium.
  • Le systĂšme de tests automatiques n'a pas Ă©tĂ© dĂ©veloppĂ©. Tous les contrĂŽles de santĂ© sont effectuĂ©s manuellement, ce qui ralentit considĂ©rablement le dĂ©veloppement. Cependant, nous travaillons dĂ©jĂ  sur une solution Ă  ce problĂšme en collaboration avec les Ă©tudiants de l'UNN eux. Lobachevsky dans le cadre du projet IT Lab .
  • Aucune documentation de code source disponible. S'impliquer dans le dĂ©veloppement peut ĂȘtre assez difficile.
  • Limitations de performances. Avec les demandes croissantes sur le volume de balisage, nous avons Ă©tĂ© confrontĂ©s Ă  divers problĂšmes, tels que la limitation du Chrome Sandbox Ă  l'utilisation de la RAM.

Bien entendu, ces listes ne sont pas exhaustives, mais contiennent des dispositions de base.

Comme mentionné précédemment, CVAT prend en charge un certain nombre de composants supplémentaires. Parmi eux:

Deep Learning Deployment Toolkit dans le cadre de l' OpenVINO Toolkit - est utilisé pour accélérer le lancement du modÚle d'API TF OD en l'absence d'un GPU. Nous travaillons sur quelques autres utilisations utiles de ce composant.

API Tensorflow Object Detection - utilisée pour marquer automatiquement les objets. Par défaut, nous utilisons le modÚle Faster RCNN Inception Resnet V2, formé sur COCO (80 classes), mais il ne devrait y avoir aucune difficulté à connecter d'autres modÚles.

Logstash, Elasticsearch, Kibana - vous permettent de visualiser et d'analyser les journaux accumulĂ©s par les clients. Cela peut ĂȘtre utilisĂ©, par exemple, pour surveiller le processus de balisage ou rechercher des erreurs et les causes de leur occurrence.



NVIDIA CUDA Toolkit - un ensemble d'outils pour effectuer des calculs sur le processeur graphique (GPU). Il peut ĂȘtre utilisĂ© pour accĂ©lĂ©rer la mise en page automatique avec l'API TF OD ou dans d'autres modules complĂ©mentaires personnalisĂ©s.

Balisage des données


  1. Le processus commence par l'énoncé du problÚme de la mise en page. La mise en scÚne comprend:
    • SpĂ©cification d'un nom de tĂąche
    • ÉnumĂ©ration des classes Ă  baliser et de leurs attributs
    • SpĂ©cification des fichiers Ă  tĂ©lĂ©charger
      • Les donnĂ©es sont tĂ©lĂ©chargĂ©es Ă  partir du systĂšme de fichiers local ou d'un systĂšme de fichiers distribuĂ© montĂ© dans un conteneur
      • Une tĂąche peut contenir une archive avec des images, une vidĂ©o, un ensemble d'images et mĂȘme une structure de rĂ©pertoire avec des images lors du tĂ©lĂ©chargement via le stockage distribuĂ©

    • DĂ©finissez Ă©ventuellement:
      • Lien vers les spĂ©cifications de balisage dĂ©taillĂ©es, ainsi que toute autre information supplĂ©mentaire (Bug Tracker)
      • Lien vers un rĂ©fĂ©rentiel Git distant pour stocker des annotations (rĂ©fĂ©rentiel de jeux de donnĂ©es)
      • Faire pivoter toutes les images de 180 degrĂ©s (Flip Images)
      • Prise en charge des couches pour les tĂąches de segmentation (Z-Order)
      • Taille de segment Une tĂąche tĂ©lĂ©chargeable peut ĂȘtre divisĂ©e en plusieurs sous-tĂąches pour un travail parallĂšle
      • Zone d'intersection de segment (chevauchement). UtilisĂ© en vidĂ©o pour fusionner des annotations dans diffĂ©rents segments
      • Niveau de qualitĂ© lors de la conversion d'images (QualitĂ© d'image)



  2. AprÚs avoir traité la demande, la tùche créée apparaßtra dans la liste des tùches.


  3. Chacun des liens de la section Emplois correspond à un segment. Dans ce cas, la tùche n'était pas segmentée auparavant. Un clic sur l'un des liens ouvre la page de balisage.


  4. Ensuite, les donnĂ©es sont directement balisĂ©es. Les rectangles, les polygones (principalement pour les tĂąches de segmentation), les polylignes (peuvent ĂȘtre utiles, par exemple, pour le marquage routier) et de nombreux points (par exemple, le marquage des repĂšres de face ou l'estimation de la pose) sont fournis comme primitives.



    Divers outils d'automatisation sont Ă©galement disponibles (copie, multiplication vers d'autres images, interpolation, marquage prĂ©liminaire avec TF OD API), paramĂštres visuels, nombreuses touches de raccourci, recherche, filtrage et autres fonctionnalitĂ©s utiles. Dans la fenĂȘtre des paramĂštres, vous pouvez modifier un certain nombre de paramĂštres pour un travail plus confortable.



    La boĂźte de dialogue d'aide contient de nombreux raccourcis clavier pris en charge et quelques autres conseils.



    Le processus de balisage peut ĂȘtre vu dans les exemples ci-dessous.

    CVAT peut interpoler linéairement des rectangles et des attributs entre des images clés dans une vidéo. Pour cette raison, l'annotation sur l'ensemble de cadres s'affiche automatiquement.


    Le mode d'annotation d'attribut a été développé pour le scénario de classification, ce qui vous permet d'accélérer l'annotation d'attributs en concentrant le balisage sur une propriété spécifique. De plus, le balisage se produit ici grùce à l'utilisation de "touches de raccourci".


    Les polygones prennent en charge les scripts de segmentation sémantique et de segmentation d'instance. Différents paramÚtres visuels facilitent le processus de validation.


  5. Recevoir une annotation
    Le fait d'appuyer sur le bouton «Dump Annotation» lance le processus de prĂ©paration et de chargement des rĂ©sultats de balisage dans un seul fichier. Un fichier d'annotation est un fichier .xml spĂ©cifiĂ© qui contient certaines mĂ©tadonnĂ©es de tĂąche et l'annotation entiĂšre. Le balisage peut ĂȘtre tĂ©lĂ©chargĂ© directement dans le rĂ©fĂ©rentiel Git, si ce dernier Ă©tait connectĂ© lors de la crĂ©ation de la tĂąche.

Histoire et Ă©volution


Au dĂ©but, nous n'avions pas d'unification, et chaque tĂąche de balisage a Ă©tĂ© rĂ©alisĂ©e avec ses propres outils, principalement Ă©crits en C ++ Ă  l'aide de la bibliothĂšque OpenCV . Ces outils ont Ă©tĂ© installĂ©s localement sur les machines des utilisateurs finaux, il n'y avait pas de mĂ©canisme de partage des donnĂ©es, un pipeline commun pour dĂ©finir et marquer les tĂąches, beaucoup de choses devaient ĂȘtre faites manuellement.

Le point de dĂ©part de l'histoire de la CVAT peut ĂȘtre considĂ©rĂ© fin 2016, lorsque le Vatican a Ă©tĂ© prĂ©sentĂ© comme un outil de mise en page, dont l'interface est prĂ©sentĂ©e ci-dessous. Vatic Ă©tait open source et a introduit de grandes idĂ©es gĂ©nĂ©rales, telles que l'interpolation du balisage entre les images clĂ©s dans une architecture d'application vidĂ©o ou client-serveur. Cependant, en gĂ©nĂ©ral, il fournissait une fonctionnalitĂ© de balisage plutĂŽt modeste, et nous avons fait beaucoup de travail par nous-mĂȘmes.



Ainsi, par exemple, pour les six premiers mois, la possibilitĂ© d'annoter des images a Ă©tĂ© mise en Ɠuvre, des attributs utilisateurs d'objets ont Ă©tĂ© ajoutĂ©s, une page a Ă©tĂ© dĂ©veloppĂ©e avec une liste de tĂąches existantes et la possibilitĂ© d'en ajouter de nouvelles via l'interface Web.

Au cours du second semestre 2017, nous avons introduit l'API de dĂ©tection d'objets Tensorflow comme mĂ©thode d'obtention d'un balisage prĂ©liminaire. Il y a eu de nombreuses amĂ©liorations mineures au client, mais Ă  la fin nous avons Ă©tĂ© confrontĂ©s au fait que la partie client a commencĂ© Ă  fonctionner trĂšs lentement. Le fait Ă©tait que la taille des tĂąches augmentait, le temps de leur ouverture augmentait proportionnellement au nombre de trames et de donnĂ©es marquĂ©es, l'interface utilisateur ralentissait en raison de la prĂ©sentation inefficace des objets marquĂ©s, les progrĂšs Ă©taient souvent perdus au cours des heures de travail. La productivitĂ© a principalement flĂ©chi sur les tĂąches avec des images, car la fondation de l'architecture de cette Ă©poque a Ă©tĂ© initialement conçue pour fonctionner avec la vidĂ©o. Il y avait un besoin d'un changement complet de l'architecture client, avec lequel nous avons rĂ©ussi Ă  faire face. La plupart des problĂšmes de performances Ă  ce moment-lĂ  avaient disparu. L'interface Web est devenue beaucoup plus rapide et plus stable. Le marquage de tĂąches plus importantes est devenu possible. Au cours de la mĂȘme pĂ©riode, on a tentĂ© d'introduire des tests unitaires pour assurer, dans une certaine mesure, l'automatisation des vĂ©rifications lors des modifications. Cette tĂąche n'a pas Ă©tĂ© rĂ©solue avec autant de succĂšs. Nous avons configurĂ© QUnit, Karma, Headless Chrome dans le conteneur Docker, Ă©crit quelques tests, lancĂ© tout cela sur CI. Cependant, une Ă©norme partie du code est restĂ©e, et reste toujours, dĂ©couverte par des tests. Une autre innovation a Ă©tĂ© un systĂšme de journalisation des actions des utilisateurs avec recherche et visualisation ultĂ©rieures basĂ©es sur ELK Stack. Il vous permet de surveiller le processus des annotateurs et de rechercher des scĂ©narios d'action qui conduisent Ă  des exceptions logicielles.

Au premier semestre 2018, nous avons Ă©tendu nos fonctionnalitĂ©s client. Le mode d'annotation d'attributs a Ă©tĂ© ajoutĂ©, qui implĂ©mente un script efficace pour marquer les attributs, dont nous avons empruntĂ© l'idĂ©e Ă  nos collĂšgues et gĂ©nĂ©ralisĂ©; Vous pouvez maintenant filtrer les objets en fonction d'un certain nombre de signes, connecter un stockage commun pour tĂ©lĂ©charger des donnĂ©es lors de la dĂ©finition des tĂąches en les visualisant via un navigateur, et bien d'autres. Les tĂąches sont devenues plus volumineuses et des problĂšmes de performances ont recommencĂ© Ă  se poser, mais cette fois, la partie serveur Ă©tait le goulot d'Ă©tranglement. Le problĂšme avec Vatic Ă©tait qu'il contenait beaucoup de code auto-Ă©crit pour des tĂąches qui pourraient ĂȘtre rĂ©solues plus facilement et plus efficacement en utilisant des solutions prĂȘtes Ă  l'emploi. Nous avons donc dĂ©cidĂ© de refaire le cĂŽtĂ© serveur. Nous avons choisi Django comme infrastructure de serveur, en grande partie en raison de sa popularitĂ© et de la disponibilitĂ© de nombreuses choses, comme on dit, prĂȘtes Ă  l'emploi. AprĂšs la modification de la partie serveur, alors qu'il ne restait plus rien de Vatic, nous avons dĂ©cidĂ© que nous avions dĂ©jĂ  fait pas mal de travail, qui peut ĂȘtre partagĂ© avec la communautĂ©. Il a donc Ă©tĂ© dĂ©cidĂ© de passer Ă  l'open source. Obtenir la permission pour cela au sein d'une grande entreprise est un processus plutĂŽt Ă©pineux. Il existe une grande liste d'exigences pour cela. Y compris, il fallait trouver un nom. Nous avons esquissĂ© des options et menĂ© une sĂ©rie d'enquĂȘtes auprĂšs de nos collĂšgues. En consĂ©quence, notre outil interne a Ă©tĂ© nommĂ© CVAT, et le 29 juin 2018, le code source a Ă©tĂ© publiĂ© sur GitHub dans l'organisation OpenCV sous la licence MIT et avec la version initiale 0.1.0. La poursuite du dĂ©veloppement a eu lieu dans un rĂ©fĂ©rentiel public.

Fin septembre 2018, la version majeure 0.2.0 est sortie. Il y a eu beaucoup de petits changements et corrections, mais l'objectif principal était de prendre en charge de nouveaux types d'annotations. Ainsi, un certain nombre d'outils pour marquer et valider la segmentation sont apparus, ainsi que la possibilité d'annoter avec des polylignes ou des points.

La prochaine version, tout comme un cadeau de Noël, est prévue pour le 31 décembre 2018. Les points les plus importants ici sont l'intégration facultative de la boßte à outils de déploiement Deep Learning dans le cadre d'OpenVINO, qui est utilisée pour accélérer le lancement de l'API TF OD en l'absence d'une carte graphique NVIDIA; systÚme d'analyse des journaux d'utilisateurs qui n'était pas disponible auparavant dans la version publique; nombreuses améliorations cÎté client.

Nous avons résumé l'historique de la CVAT à ce jour (décembre 2018) et passé en revue les événements les plus importants. Vous pouvez toujours en savoir plus sur l'historique des modifications dans le journal des modifications.

Dispositif interne




Pour simplifier l'installation et le dĂ©ploiement, CVAT utilise des conteneurs Docker. Le systĂšme se compose de plusieurs conteneurs. Un processus de supervision est exĂ©cutĂ© dans le conteneur CVAT, qui gĂ©nĂšre plusieurs processus Python dans l'environnement Django. L'un d'eux est le serveur wsgi, qui gĂšre les demandes des clients. D'autres processus, rq workers, sont utilisĂ©s pour traiter les «longues» tĂąches des files d'attente Redis: par dĂ©faut et faible. Ces tĂąches incluent celles qui ne peuvent pas ĂȘtre traitĂ©es dans une seule demande utilisateur (dĂ©finition d'une tĂąche, prĂ©paration d'un fichier d'annotation, balisage avec TF OD API, etc.). Le nombre de travailleurs peut ĂȘtre configurĂ© dans le fichier de configuration de supervord.

L'environnement Django interagit avec deux serveurs de base de données. Le serveur Redis stocke l'état des files d'attente de tùches et la base de données CVAT contient toutes les informations sur les tùches, les utilisateurs, les annotations, etc. PostgreSQL (et SQLite 3 en cours de développement) est utilisé comme SGBD pour CVAT. Toutes les données sont stockées sur une partition enfichable (volume cvat db). Les sections sont utilisées lorsque cela est nécessaire pour éviter la perte de données lors de la mise à jour du conteneur. Ainsi, les éléments suivants sont montés dans le conteneur CVAT:

  • Section avec vidĂ©o et images (volume de donnĂ©es cvat)
  • Section avec clĂ©s (volume des clĂ©s cvat)
  • Section avec journaux (volume de journaux cvat)
  • Stockage de fichiers partagĂ© (volume partagĂ© cvat)

Le systĂšme d'analyse se compose d'Elasticsearch, Logstash et Kibana emballĂ©s dans des conteneurs Docker. Lors de l'enregistrement du travail sur le client, toutes les donnĂ©es, y compris les journaux, sont transfĂ©rĂ©es vers le serveur. Le serveur, Ă  son tour, les envoie Ă  Logstash pour filtrage. De plus, il est possible d'envoyer automatiquement des notifications par e-mail en cas d'erreur. Ensuite, les journaux tombent dans Elasticsearch. Ce dernier les enregistre sur une partition enfichable (volume d'Ă©vĂ©nements cvat). Ensuite, l'utilisateur peut utiliser l'interface Kibana pour afficher les statistiques et les journaux. Dans le mĂȘme temps, Kibana interagira activement avec Elasticsearch.

Au niveau source, CVAT comprend de nombreuses applications Django:

  • authentification - authentification des utilisateurs dans le systĂšme (de base et LDAP)
  • moteur - une application clĂ© (modĂšles de base de donnĂ©es de base; chargement et enregistrement de tĂąches; chargement et dĂ©chargement d'annotations; interface client de balisage; interface serveur pour crĂ©er, modifier et supprimer des tĂąches)
  • tableau de bord - interface client pour crĂ©er, modifier, rechercher et supprimer des tĂąches
  • documentation - affichage de la documentation utilisateur dans l'interface client
  • tf_annotation - annotation automatique avec l'API de dĂ©tection d'objets Tensorflow
  • log_viewer - envoi de journaux du client Ă  Logstash lors de l'enregistrement d'une tĂąche
  • log_proxy - Connexion proxy CVAT → Kibana
  • git - IntĂ©gration du rĂ©fĂ©rentiel Git pour le stockage des annotations

Nous nous efforçons de créer un projet avec une structure flexible. Pour cette raison, les applications facultatives n'ont pas d'intégration de code dur. Malheureusement, bien que nous ne disposions pas d'un prototype idéal du systÚme de plug-in, mais progressivement, avec le développement de nouvelles applications, la situation ici s'améliore.

La partie client est implémentée sur des modÚles JavaScript et 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 . , ! !

Les références


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


All Articles