We zijn een paar jaar geleden begonnen met het Computer Vision Annotation Tool (CVAT)-project geleden om de annotatie van digitale afbeeldingen en video's te versnellen voor gebruik bij het trainen van computervisie-algoritmen. Toen we begonnen, hadden we geen uniforme benadering van beeldannotatie. Annotatietaken werden uitgevoerd met behulp van onze eigen set tools, voornamelijk geschreven in C++ met de OpenCVbibliotheek. Deze tools zijn geïnstalleerd op eindgebruikers’ lokale machines, en had een aantal duidelijke nadelen: complexe implementatie in omgevingen zonder beperkingen, een moeilijk updateproces op veel machines, moeilijk debuggen en root-veroorzaken van bugs, beperkte samenwerkingsmogelijkheden, enz.
Geschiedenis en evolutie
Eind 2016 zijn we begonnen met het gebruik van VATIC (Video Annotation Tool uit Irvine, Californië) voor het annoteren van afbeeldingen. Dit kan worden beschouwd als het begin van de geschiedenis van CVAT.
De VATIC-tool was gebaseerd op open-sourcecode en een client-server-toepassingsarchitectuur en introduceerde een aantal geweldige ideeën, zoals interpolatie tussen keyframes in video. Het bood echter beperkte functionaliteit voor annotaties en we moesten het veel verfijnen. We hebben de functie voor het annoteren van afbeeldingen in de eerste helft van 2017 geïmplementeerd, evenals ondersteuning voor door de gebruiker toegewezen objectkenmerken en een webpagina met bestaande taken met de mogelijkheid om nieuwe toe te voegen via de webinterface.
In de tweede helft van 2017 hebben we de TensorFlow Object Detection API . geïmplementeerdals een methode om pre-annotatie van afbeeldingen te verkrijgen. Dit omvatte veel kleine bugfixes aan de kant van de klant, maar had een negatieve invloed op de prestaties. Naarmate de taken groter werden, nam de tijd die nodig was om ze te openen toe in directe verhouding tot het aantal frames en pre-annotatiegegevens. Ook was de reactie van de gebruikersinterface (UI) traag vanwege een onnauwkeurige weergave van geannoteerde objecten. De vooruitgang zorgde er vaak voor dat we uren werk verloren. Kortom, de prestaties waren verminderd bij het annoteren van afbeeldingen, omdat de architectuur was ontworpen om met video te werken, niet met afbeeldingen. Om dit op te lossen, moesten we de klantarchitectuur volledig veranderen. Het is ons gelukt en op dat moment waren de meeste prestatieproblemen opgelost. De webinterface werd veel sneller en stabieler en er was een mogelijkheid om meer taken te annoteren. In dezelfde periode hebben we geprobeerd unit-testing en automatische controle van nieuwe wijzigingen te implementeren, wat niet volledig is voltooid. We hebben QUnit, Karma en Headless Chrome ingesteldin de Docker-container, schreef enkele tests en voerde het allemaal uit in continue integratie. Een groot deel van de code bleef echter nog niet getest. Een andere verbetering was een systeem voor het loggen van gebruikersacties met zoeken en visualisatie op basis van de ELK Stack. Hierdoor konden we het annotatieproces inspecteren en actiescenario's zoeken die tot programma-uitzonderingen leiden.
In de eerste helft van 2018 hebben we onze klantfunctionaliteit uitgebreid. We hebben een Attribuut Annotation Mode toegevoegd die effectief attributen kan annoteren. We kregen het idee van onze collega's en generaliseerden het. Nu kunt u objecten filteren op verschillende kenmerken, een gedeelde opslagplaats verbinden voor het uploaden van gegevens bij het maken van taken, de opslagplaats bekijken via een browser, enzovoort. Taken werden opnieuw groter en de problemen met de prestaties kwamen opnieuw naar voren.
Op dat moment was een zwak punt de server-side code van de tool. VATIC had veel handgeschreven code voor taken die gemakkelijk konden worden opgelost met kant-en-klare oplossingen, dus besloten we om Django als serverframework te gebruiken vanwege de bruikbaarheid en de vele out-of- de box-functies. Na het wijzigen van de servercode bleef er niets over van de VATIC-tool, dus besloten we ons werk met de community te delen en open source te gaan.
Toestemming krijgen om open source te gaan, kan een behoorlijk moeilijk proces zijn in een groot bedrijf. Er was een grote lijst met eisen. Er moest vooral een naam bedacht worden. We schetsten enkele mogelijke varianten en interviewden onze collega's. Als gevolg hiervan werd onze interne tool de Computer Vision Annotation Tool (CVAT) genoemd, en op 29 juni 2018 publiceerden we de eerste versie van onze code (0.1.0) op GitHub in de OpenCV-organisatie.
Verdere ontwikkeling vond plaats in de openbare repository en versie 0.2.0 werd eind september 2018 uitgebracht. Er waren een paar bugfixes en wijzigingen, maar het belangrijkste doel van deze release was om nieuwe annotatievormen toe te voegen: polygonen, punten , en een set besturingselementen voor annotatie en validatie van segmentatietaken. Nu kun je al deze dingen uitproberen in onze tool.
Versie 0.3.0 is uitgebracht op 29 december 2018. Een van de belangrijkste toevoegingen aan deze versie was de optie om de Deep Learning Deployment Toolkit te integreren als een element van de Intel® Distributie van OpenVINO™ Toolkit. Dit kan de lancering van de TensorFlow Object Detection API versnellen zonder een videokaart. Daarnaast hebben we een analysecomponent toegevoegd om een gegevensannotatieteam te beheren, uitzonderingen te bewaken en client- en serverlogboeken te verzamelen. U kunt meer informatie over de geschiedenis van CVAT-wijzigingen vinden in de GitHub changelog, en houd Intel.ai in de gaten voor de laatste updates over onze computer vision-tool.
Boris Sekachev
Deep Learning-softwareontwikkelaar, Internet of Things Group, Intel
Nikita Manovich
Deep Learning Manager, Internet of Things Group, Intel
Andrey Zhavoronkov
Deep Learning Software Engineer, Intel