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
- 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)

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

- 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.

- 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.
- 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