Projet Lacmus: comment la vision par ordinateur aide Ă  sauver des personnes perdues

Bonjour Ă  tous!

Vous connaissez peut-ĂȘtre dĂ©jĂ  l'initiative Machine Learning for Social Good (# ml4sg) de la communautĂ© Open Data Science. Dans son cadre, les passionnĂ©s utilisent des mĂ©thodes d'apprentissage automatique pour rĂ©soudre gratuitement des problĂšmes importants sur le plan social. Nous, l'Ă©quipe du projet Lacmus (#proj_rescuer_la), sommes engagĂ©s dans la mise en Ɠuvre de solutions modernes de Deep Learning pour retrouver les personnes perdues en dehors de la zone peuplĂ©e: dans la forĂȘt, sur le terrain, etc.



Selon des estimations approximatives, en Russie, plus de cent mille personnes disparaissent chaque annĂ©e. La partie tangible d'entre eux sont des gens qui ont perdu leur chemin loin de l'habitation humaine. Heureusement, certains de ceux qui sont perdus sont choisis par eux-mĂȘmes; des Ă©quipes bĂ©nĂ©voles de recherche et de sauvetage sont mobilisĂ©es pour aider les autres. Le dĂ©tachement le plus cĂ©lĂšbre est peut-ĂȘtre Lisa Alert, mais je tiens Ă  souligner qu'il n'est pas le seul.

Les principales mĂ©thodes de recherche actuelles, au XXIe siĂšcle, consistent Ă  peigner les environs Ă  pied Ă  l'aide de moyens techniques, qui ne sont souvent pas plus compliquĂ©s qu'une sirĂšne ou un phare bourdonnant. Le sujet, bien sĂ»r, est pertinent et brĂ»lant, donne lieu Ă  de nombreuses idĂ©es pour utiliser le progrĂšs scientifique et technologique dans la recherche de rĂ©alisations; certains d'entre eux sont mĂȘme incarnĂ©s sous forme de prototypes et testĂ©s lors de compĂ©titions spĂ©cialement organisĂ©es. Mais la forĂȘt est la forĂȘt, et les conditions rĂ©elles de la recherche, couplĂ©es aux ressources matĂ©rielles limitĂ©es, rendent ce problĂšme difficile et encore trĂšs loin d'une solution complĂšte.

Récemment, les sauveteurs utilisent de plus en plus de véhicules aériens sans pilote (UAV) pour arpenter de vastes zones du territoire, photographiant le terrain à une hauteur de 40 à 50 m. En une seule opération de recherche et de sauvetage, plusieurs milliers de photographies sont obtenues et, à ce jour, les volontaires les parcourent manuellement. Il est clair qu'un tel traitement est long et inefficace. AprÚs deux heures d'un tel travail, les volontaires se fatiguent et ne peuvent pas continuer la recherche, et aprÚs tout, la santé et la vie des gens dépendent de sa vitesse.

En collaboration avec les équipes de recherche et de sauvetage, nous développons un programme de recherche de personnes disparues sur les images prises avec des drones. En tant que spécialistes de l'apprentissage automatique, nous nous efforçons de rendre la recherche automatique et rapide.



Différences par rapport à des solutions similaires


Il serait injuste de dire que Lacmus est le seul projet dĂ©veloppĂ© dans cette direction. Cependant, il semble que peu de personnes se dĂ©veloppent en Ă©troite coopĂ©ration avec les Ă©quipes de secours, en se concentrant sur leurs besoins et capacitĂ©s urgents. Il y a quelque temps, le concours Odyssey a eu lieu, dans lequel diffĂ©rentes Ă©quipes ont concouru Ă  la formation de la meilleure solution pour rechercher et sauver des personnes, y compris en utilisant des drones. Étant au stade initial de dĂ©veloppement, nous avons assistĂ© Ă  ce concours non pas en tant que participants, mais en tant qu'observateurs. En comparant les rĂ©sultats du concours, des informations sur des projets similaires et notre expĂ©rience dans la communication avec des Ă©quipes telles que Lisa Alert, Owl, Extreme, je tiens Ă  noter les problĂšmes inhĂ©rents Ă  de nombreux analogues:

  • Le coĂ»t de la mise en Ɠuvre. Certaines Ă©quipes du concours Odyssey dĂ©veloppent leurs propres drones et drones innovants. Mais vous devez comprendre que les OSP en Russie fonctionnent gĂ©nĂ©ralement Ă  but non lucratif, et Ă©quiper les opĂ©rateurs de drones avec des machines d'une valeur supĂ©rieure Ă  1 000 000 de roubles est trop cher. De plus, il ne suffit pas de produire un avion, il faut en Ă©tablir la maintenance. Il est difficile pour les petites entreprises d'offrir des solutions au mĂȘme prix que celles de concurrents chinois coriaces.
  • L'orientation commerciale de nombreuses solutions. Il n'y a rien de mal avec les projets d'entreprise, mais trouver des personnes perdues dans la forĂȘt est une tĂąche assez spĂ©cifique; tous les dĂ©veloppements commerciaux ne peuvent pas y ĂȘtre intĂ©grĂ©s. Vous pouvez faire un merveilleux drone et y coller un neurone reconnaissant les cultures, mais un tel projet ne sera probablement pas utile pour trouver des gens dans la forĂȘt en utilisant des Ă©quipes de recherche bĂ©nĂ©voles: ici, vous avez besoin de la solution la moins chĂšre mais la plus efficace. Les camĂ©ras multicanaux coĂ»teuses ne conviennent pas ici. Seulement RVB, seulement hardcore. Pour les mĂȘmes raisons, les imageurs thermiques disparaissent Ă©galement, dont les modĂšles bon marchĂ© ont une trĂšs faible rĂ©solution. (Et en gĂ©nĂ©ral, les imageurs thermiques sont ici inefficaces, car une personne gelĂ©e dans la forĂȘt Ă©met trop peu de chaleur).
  • Les architectures de rĂ©seaux de neurones populaires utilisĂ©es dans les solutions connues - YOLO, SSD, VGG - ont des mesures de bonne qualitĂ© sur des ensembles de donnĂ©es publics comme ImageNet, mais ne fonctionnent pas bien sur les images dans notre domaine plutĂŽt spĂ©cifique. (À propos du choix de l'architecture du rĂ©seau neuronal, des options et fonctionnalitĂ©s Ă©prouvĂ©es utilisĂ©es Ă  la fin - ci-dessous).
  • Presque personne n'utilise les opportunitĂ©s pour optimiser les modĂšles d'infĂ©rence. Dans les zones de recherche, il n'y a souvent pas de connexion Internet, vous devez donc traiter les images reçues localement. La plupart des sauveteurs utilisent des ordinateurs portables avec des GPU de faible puissance, ou sans eux, exĂ©cutant des rĂ©seaux de neurones sur des processeurs conventionnels. Il est facile de calculer que si une moyenne de 10 secondes est consacrĂ©e au traitement d'une seule image, 1 000 images seront traitĂ©es en environ 3 heures. Ici, nous pouvons dire que chaque seconde est importante.
  • Fermeture des dĂ©veloppements existants. Toutes les solutions que nous connaissons sont fermĂ©es et propriĂ©taires. Mais le problĂšme est trop complexe pour ĂȘtre rĂ©solu par les forces d'une petite poignĂ©e de personnes, et pas toutes celles qui sont prĂȘtes Ă  aider. Par consĂ©quent, nous dĂ©veloppons une solution entiĂšrement Open Source: il est Ă©trange de penser qu'un sujet qui attire autant de bĂ©nĂ©voles travaillant «sur le terrain» ne sera pas tout aussi intĂ©ressant pour les informaticiens.
  • Absence de libertĂ© de distribution. Les OSP volontaires ne sont souvent pas centralisĂ©s, les approches de travail et les applications sont transfĂ©rĂ©es de main en main, les logiciels avec des copies sous licence ne fonctionneront pas ici. C'est pourquoi nous avons, entre autres, choisi une stratĂ©gie open source et de distribution ouverte afin que chacun puisse tĂ©lĂ©charger notre solution et l'utiliser. Nous sommes pour l'open science et l'open source!

Préparation des données


Il semblerait que si chaque opĂ©ration de recherche utilisant des UAV apporte des milliers de photos, la gamme de donnĂ©es accumulĂ©es devrait ĂȘtre Ă©norme - prendre et former. Tout n'a pas Ă©tĂ© aussi simple, car:

  • Il n'y a pas de stockage centralisĂ© pour les donnĂ©es balisĂ©es. Les photos prises lors des opĂ©rations de recherche ne seront pas utilisĂ©es ou traitĂ©es Ă  l'avenir.
  • Les donnĂ©es obtenues sont trĂšs dĂ©sĂ©quilibrĂ©es. Dans un clichĂ© avec la personne retrouvĂ©e, il y a plusieurs milliers de photographies «vierges». Étant donnĂ© que les informations sur les images numĂ©risĂ©es ne sont enregistrĂ©es nulle part, afin de trouver celles qui sont nĂ©cessaires, un Ă©norme travail doit ĂȘtre effectuĂ© une deuxiĂšme fois - par les efforts d'une petite Ă©quipe qui n'a pas «d'yeux entraĂźnĂ©s».
  • Chaque image, en elle-mĂȘme, est Ă©galement «dĂ©sĂ©quilibrĂ©e»: la personne dĂ©sirĂ©e occupe une infime fraction de la zone d'image entiĂšre sur elle. De toute Ă©vidence, un bon rĂ©seau de neurones ne devrait pas seulement ĂȘtre en mesure de dire que, Ă  son avis, une personne est prĂ©sente dans l'image - il doit encercler un endroit spĂ©cifique (c'est-Ă -dire effectuer la tĂąche de dĂ©tecter des objets, pas de classer des images). Sinon, l'opĂ©rateur passera plus de temps et d'Ă©nergie Ă  la regarder, et il peut Ă©galement rejeter par erreur la photo souhaitĂ©e. Mais pour cela, le rĂ©seau neuronal doit apprendre des donnĂ©es balisĂ©es, sur les photographies, oĂč l'objet souhaitĂ© est marquĂ© Ă  l'aide d'un logiciel spĂ©cial. Personne ne le fera pendant une opĂ©ration de recherche - pas avant.
  • Les statistiques sur les poses dans lesquelles les personnes ont Ă©tĂ© trouvĂ©es, la pĂ©riode de l'annĂ©e, le type de terrain et d'autres caractĂ©ristiques des photos ne sont pas prises en compte. De telles donnĂ©es seraient trĂšs utiles pour crĂ©er des images d'entraĂźnement «synthĂ©tiques» Ă  l'aide de photographies mises en scĂšne, de monteurs photo ou de modĂšles gĂ©nĂ©ratifs - mais pour utiliser tout cela, vous devez comprendre Ă  quoi ressemble une photographie avec une personne vraiment perdue. Maintenant, lors de la reconstruction de telles photographies, il faut s'appuyer sur l'expĂ©rience subjective d'experts en sauvetage.
  • En plus des difficultĂ©s techniques, des obstacles juridiques sont possibles qui imposent des restrictions sur la propriĂ©tĂ© des images obtenues. Souvent, nos demandes d'aide pour la collecte de donnĂ©es restent totalement sans rĂ©ponse. En raison de l'absence de telles donnĂ©es, de problĂšmes juridiques ou d'une paresse courante - ce n'est pas clair.

Ainsi, des informations précieuses ne sont en aucun cas utilisées pour la formation de réseaux de neurones, étant perdues ou mortes quelque part sur des disques et des stockages cloud, au lieu d'améliorer le volume et la qualité de l'échantillon d'apprentissage. Nous écrivons un service qui nous permettra, entre autres, de télécharger de précieuses photos (à ce sujet également ci-dessous), mais il y a, comme toujours, plus de tùches que de personnes.

De plus, Ă  ce jour, le rĂ©seau a trĂšs peu de bons ensembles de donnĂ©es (ouverts) avec des images d'UAV. Le plus appropriĂ© que nous avons trouvĂ© est Stanford Drone Dataset (SDD) . Il s'agit d'une photographie d'une hauteur au-dessus du campus universitaire, avec des objets marquĂ©s de la classe "PiĂ©ton" (piĂ©ton), ainsi que des cyclistes, des bus et des voitures. MalgrĂ© un angle de prise de vue similaire, les piĂ©tons photographiĂ©s et l'environnement ont peu de choses en commun avec ce qui se passe sur nos photos. Les expĂ©riences menĂ©es sur cet ensemble de donnĂ©es ont montrĂ© que les mĂ©triques de qualitĂ© des dĂ©tecteurs formĂ©s sur lui sur nos donnĂ©es montrent un rĂ©sultat faible. En consĂ©quence, nous utilisons maintenant SDD pour former le soi-disant backbone, qui extrait les attributs de haut niveau, et les couches extrĂȘmes doivent ĂȘtre complĂ©tĂ©es sur les images de notre domaine.

C'est pourquoi nous avons d'abord communiquĂ© avec divers moteurs de recherche et sauveteurs pendant une longue pĂ©riode, essayant de comprendre Ă  quoi ressemble une personne perdue dans la forĂȘt sur une photo d'en haut. En consĂ©quence, nous avons collectĂ© des statistiques uniques sur 24 poses, dans lesquelles les personnes disparues sont le plus souvent trouvĂ©es. Nous avons filmĂ© et marquĂ© notre propre ensemble de donnĂ©es - Lacmus Drone Dataset (LaDD), qui dans la premiĂšre version comprenait plus de 400 images. La prise de vue a Ă©tĂ© rĂ©alisĂ©e principalement avec l'aide de DJI Mavic Pro et Phantom d'une hauteur de 50 Ă  100 mĂštres, la rĂ©solution des images Ă©tait de 3000x4000, la taille moyenne d'une personne Ă©tait de 50x100 px. À l'heure actuelle, nous avons dĂ©jĂ  la quatriĂšme version de l'ensemble de donnĂ©es avec 2 000 images, Ă  la fois rĂ©elles et «simulĂ©es». Nous continuons Ă  travailler sur la reconstitution de l'ensemble de donnĂ©es et la cinquiĂšme version est Ă  nos portes.

Au fur et Ă  mesure que nous reconstituons notre ensemble de donnĂ©es, nous en sommes venus Ă  la nĂ©cessitĂ© de sĂ©parer les images par saison. Le fait est qu'un modĂšle formĂ© aux photos d'hiver montre de meilleurs rĂ©sultats qu'un modĂšle formĂ© sur l'ensemble des donnĂ©es, soit en Ă©tĂ© soit au printemps sĂ©parĂ©ment. Peut-ĂȘtre que les signes sur fond neigeux sont mieux extraits que sur l'herbe bruyante.



Dans le mĂȘme temps, lorsque vous vous entraĂźnez uniquement sur des photos d'hiver, le nombre de faux positifs (faux positifs) augmente. Apparemment, les images de saisons diffĂ©rentes sont des paysages (domaines) trop diffĂ©rents et le rĂ©seau neuronal n'est pas en mesure de les gĂ©nĂ©raliser. Cela reste Ă  voir, et jusqu'Ă  prĂ©sent, nous voyons deux façons:

  • Faites beaucoup de «petites» grilles et apprenez-les sĂ©parĂ©ment pour diffĂ©rents domaines (un pour l'hiver, un autre pour l'Ă©tĂ© ... Outre les saisons, vous pouvez Ă©galement ventiler par zone: par exemple, un modĂšle pour la bande mĂ©diane et les plaines, un autre pour le sud, etc.) .
  • Augmentez Ă  plusieurs reprises nos donnĂ©es et essayez de former le modĂšle Ă  la fois sur tous les domaines. Sur la base de la solution d'un problĂšme similaire dans un article de Yandex, nous avons tendance Ă  essayer cette option particuliĂšre. Il est difficile de collecter un grand nombre de vraies photos avec des personnes perdues pour les raisons dĂ©jĂ  dĂ©crites, donc, peut-ĂȘtre, nous essaierons de recrĂ©er des exemples pĂ©dagogiques rĂ©alistes basĂ©s sur des images «vides» (il y en a beaucoup). Nous pourrons donc bientĂŽt avoir des GAN.

Processus d'apprentissage


La nature de nos images est considĂ©rablement diffĂ©rente des images d'ensembles de donnĂ©es populaires comme ImageNet, COCO, etc. Étant donnĂ© que les rĂ©seaux de neurones dĂ©veloppĂ©s pour de tels ensembles pouvaient ĂȘtre mal adaptĂ©s Ă  notre tĂąche, il Ă©tait nĂ©cessaire de mener une Ă©tude de l'applicabilitĂ© de diverses architectures. Pour ce faire, nous avons pris des modĂšles prĂ©-formĂ©s sur ImageNet, nous les avons recyclĂ©s sur le Stanford Drone Dataset, aprĂšs quoi nous avons «gelé» les dorsales, et les parties restantes des dĂ©tecteurs ont Ă©tĂ© formĂ©es directement sur nos images. Les meilleures mĂ©triques sont prĂ©sentĂ©es dans le tableau:
TapezmAP (hiver)mAP (été)Durée d'exécution pour l'image 3000x4000 px, c (CPU \ GPU)
SSD0,56-0,07 / 0,007
YOLOv30,720,230,07 / 0,009
DarkNet (ResneXt18)0,890,210,4 / 0,04
RetinaNet (mobileNetv2)0,670,220,03 / 0,003
RetinaNet (ResNet50)0,910,681,4 / 0,04


En plus des nombres dans le tableau ci-dessus, vous devez faire attention à une telle caractéristique des images du jeu de données du drone Lacmus comme un grand déséquilibre des classes: le rapport de la zone d'arriÚre-plan à la zone du rectangle (ancre) avec l'objet souhaité est de plusieurs milliers. Lors de la formation du détecteur, cela pose deux problÚmes:

  1. La plupart des régions avec un arriÚre-plan ne contiennent aucune information utile.
  2. Les régions avec des objets en raison de leur petit nombre ne contribuent pas non plus de maniÚre significative à la formation des poids.

Afin de contourner ces problÚmes, divers programmes de formation, paramÚtres réseau et exemples de formation ont été utilisés. L'une des architectures de réseaux de neurones que nous avons testées, RetinaNet, vise précisément à réduire les effets négatifs d'un déséquilibre de grande classe. Les créateurs de RetinaNet l'ont conçu pour augmenter la précision des détecteurs à un étage (couvrant l'image avec un réseau dense de rectangles-ancres prédéfinis puis affinant ceux qui couvrent le mieux l'objet) par rapport à des détecteurs à deux étages de meilleure qualité, mais plus lents (les élÚves apprennent à trouver les régions candidates en premier , puis précisez leur position). Du point de vue des auteurs de l'article sur RetinaNet, les détecteurs à un étage perdent précisément en raison du déséquilibre causé par un grand nombre d'ancres vides. Dans ce contexte, notre choix a été fait en faveur de RetinaNet avec le backbone ResNet50.

L'architecture de ce réseau a été introduite en 2017. La principale caractéristique de RetinaNet, qui vous permet de faire face aux effets négatifs des déséquilibres de classe lors de la formation, est la fonction de perte de perte focale d' origine:

FL(pt)=−(1−pt) gammalog(pt)pt= begincasesp, mboxify=1,1−p mboxsinon endcases


OĂč p est la probabilitĂ© estimĂ©e du contenu dans la rĂ©gion de l'objet souhaitĂ© estimĂ©e par le modĂšle (pour le dire simplement, la sortie du rĂ©seau neuronal si elle est rĂ©duite Ă  l'intervalle [0, 1]).

Dans d'autres domaines, la fonction de perte devrait, en rĂšgle gĂ©nĂ©rale, ĂȘtre rĂ©sistante aux instances atypiques (exemples concrets), qui sont trĂšs probablement des valeurs aberrantes; leur impact sur la musculation doit ĂȘtre rĂ©duit. Dans la perte focale, au contraire, l'influence d'un arriĂšre-plan frĂ©quent (inliers, exemples faciles) est rĂ©duite, et les objets rarement vus ont la plus grande influence lors de l'apprentissage des poids RetinaNet. Cela est dĂ» Ă  cette partie de la formule:

(1−pt) gamma


Coefficient  gammadans l'exposant dĂ©termine le «poids» des exemples durs dans la fonction de perte totale.

Au cours du processus de formation RetinaNet, la fonction de perte est calculée pour toutes les orientations considérées des zones candidates (ancres), à partir de tous les niveaux de mise à l'échelle de l'image. Au total, il y a environ 100k zones pour une image, ce qui est trÚs différent de l'approche d'échantillonnage heuristique (RPN) ou de la recherche d'instances rares (OHEM, SSD) avec un petit nombre de zones (environ 256) pour chaque mini-lot. La valeur de perte focale est calculée comme la somme des valeurs de fonction pour toutes les ancres, normalisée par le nombre d'ancres contenant les objets souhaités. La normalisation est effectuée uniquement sur eux, et non sur le nombre total, car la grande majorité des ancres sont un fond facilement identifiable, avec peu de contribution à la fonction de perte globale.

Structurellement, RetinaNet se compose d'un backbone et de deux définitions supplémentaires de sous-réseau de classification et de sous-réseau de régression de boßte.



En tant qu'Ă©pine dorsale, le rĂ©seau FPN, appelĂ© Feature Pyramid Network , qui fonctionne au-dessus de l'un des rĂ©seaux de neurones convolutifs couramment utilisĂ©s (par exemple, ResNet50), est utilisĂ©. FPN a des sorties latĂ©rales supplĂ©mentaires des couches cachĂ©es du rĂ©seau de convolution, formant des niveaux pyramidaux Ă  diffĂ©rentes Ă©chelles. Chaque niveau est complĂ©tĂ© par une «voie descendante», c'est-Ă -dire des informations de niveaux supĂ©rieurs qui sont plus petites, mais contiennent des informations sur des zones d'une plus grande zone. Cela ressemble Ă  une augmentation artificielle (par exemple, en rĂ©pĂ©tant simplement les Ă©lĂ©ments) d'une carte d'entitĂ©s plus «minimisĂ©e» Ă  la taille de la carte actuelle, en les ajoutant Ă©lĂ©ment par Ă©lĂ©ment et en les transfĂ©rant Ă  la fois aux niveaux infĂ©rieurs de la pyramide et Ă  l'entrĂ©e d'autres sous-rĂ©seaux (c'est-Ă -dire dans le sous-rĂ©seau de classification et Sous-rĂ©seau de rĂ©gression de boĂźte). Cela vous permet de sĂ©lectionner Ă  partir de l'image d'origine une pyramide de signes Ă  diffĂ©rentes Ă©chelles, sur laquelle des objets petits et grands peuvent ĂȘtre dĂ©tectĂ©s. Le FPN est utilisĂ© dans de nombreuses architectures, amĂ©liorant la dĂ©tection d'objets de diffĂ©rentes tailles: RPN, DeepMask, Fast R-CNN, Mask R-CNN, etc.

Vous pouvez en savoir plus sur FPN dans l' article d' origine.

Dans notre rĂ©seau, comme dans l'original, FPN avec 5 niveaux numĂ©rotĂ©s avec P3par P7. Niveau Pla la permission de 2lfois plus petit que l'image d'entrĂ©e (nous n'entrerons pas dans les dĂ©tails de quels points de ResNet ils viennent - cela cassera la jambe). Tous les niveaux de la pyramide ont le mĂȘme nombre de canaux C = 256 et le nombre d'ancres A environ 1000 (selon la taille des images).

Les ancres ont des zones de [16 x 16] à [256 x 256] pour chaque niveau de la pyramide de P3avant P7en conséquence, avec un pas de déplacement (foulées) [8 - 128] px. Cette taille vous permet d'analyser de petits objets et certains environs. Par exemple, une branche, si vous ne tenez pas compte de sa réalité environnante, ressemble beaucoup à une personne menteuse.

Le FPN d'origine utilise trois rapports d'aspect des ancres (1: 2, 1: 1, 2: 1); RetinaNet aspect ratio [ 20,21/3,22/3]. 9- , / 16 400 px.

Classification Subnet . (Fully ConvNet, FCN), FPN. , :

  • (W x H x C)
  • 33
  • ReLU
  • 33 ( ) ,
  • -

x A, K — . — Pedestrian.

Box Regression Subnet 4- . , FPN, Classification Subnet. , , (4 ) — :

(Δxmin,Δymin,Δxmax,Δymax)

, , IoU (Intersection over Union) > 0.5. yi1, 0. .

( ) forward . 1k , 0,05. , threshold = 0,5.

RetinaNet towardsdatascience .

, . OpenSource-, Github fizyr: keras-retinanet , .


, , 20-30 . , :


Et aussi ...

  • Nvidia Jetson
  • Corral Edge TPU

tensoflow 1.14 CPU AVX Intel nndl. AVX ( 2012 ) , Core 2 Duo! Albumentations .

:
Équipement3000x4000 px, c
i5-3337U (2x cores / 4x threads @ 1,80 Hz) AVX2.3
i5-6200U (2x cores / 4x threads @ 2,30 Hz) AVX21.7
i7-8750H (8x cores / 12x threads @ 2,20 Hz) AVX20.8
i7-9700 (8x cores / 8x threads @ 3.6z) AVX20,5
NVIDIA GeForce GTX 950M (2gb vRAM)0,3
NVIDIA GeForce GTX 2080Ti (11gb vRAM)0,02
Core 2 Duo E8400 (2x cores / 2x threads @ 3,0 Hz) no avx7

La production


docker


desktop- c , . Nvidia Cuda CuDNN TensorFlow — . , Python . - , . — Docker. web- . , docker-. GUI . GUI , , , , . Docker API, GUI, . , Docker , .

#


. 3 :


dotnext . «! - ! - ? », — ! GUI # AvaloniaUI, 64- Win10, Linux Mac.

AvaloniaUI — , . WPF, , . , 2D- , WPF. , WPF.

, SkiaSharp GTK ( Unix ). X11 . , , (!). .Net Core Bios', AvaloniaUI .

AvaloniaUI , , . , 2019 , . WPF C# — . ( electron), , .


...

, , issue. , , , . .

Pour une compréhension complÚte de ce concept, il convient de regarder la présentation de Nikita Tsukanov @kekekeks . Il est le développeur de ce framework, y est bien familiarisé et en .NET en général.

Backend


En plus de l'application de bureau, nous développons une infrastructure mlOps pour mener des expériences et trouver la meilleure architecture de réseau neuronal dans le cloud. En utilisant le cÎté serveur, nous voulons:

  • agrĂ©ger les donnĂ©es et les stocker de maniĂšre centralisĂ©e;
  • automatiser le processus d'apprentissage d'un rĂ©seau de neurones, crĂ©er un environnement pour la recherche et en donner accĂšs Ă  d'autres;
  • fournir un accĂšs au cloud aux Ă©quipes de recherche et de sauvetage afin qu'elles puissent Ă©galement utiliser les donnĂ©es accumulĂ©es si nĂ©cessaire;

L'architecture globale du systĂšme ressemble Ă  ceci:



Desktop-client peut fonctionner Ă  la fois avec la version locale du conteneur Docker et la derniĂšre version sur le serveur central, via l'API REST.

Le microservice d' identité fournit l'accÚs au serveur uniquement aux utilisateurs autorisés.

Le service de jeu de donnĂ©es est utilisĂ© pour stocker Ă  la fois les images elles-mĂȘmes et leur balisage.

Le service Predict vous permet de traiter rapidement un grand nombre d'images en présence d'un large canal pour les pilotes.

Un service de formation est nécessaire pour tester de nouveaux modÚles et recycler les modÚles existants à mesure que de nouvelles données arrivent.

La file d'attente des tùches est gérée à l'aide de RabbitMQ / Redis.

Recherche de capacités GPU


MalgrĂ© le fait que l'infĂ©rence du rĂ©seau neuronal peut fonctionner mĂȘme sur un simple ordinateur portable, un GPU est nĂ©cessaire pour former le modĂšle. Techniquement, vous pouvez l'entraĂźner sur le CPU, mais en pratique cela prend trop de temps. Toutes les personnes qui viennent dans l'Ă©quipe ne disposent pas d'un ordinateur adaptĂ© au Deep Learning, nous sommes donc Ă  la recherche de capacitĂ©s GPU centralisĂ©es.

En ce moment, nous négocions avec DTL et nous espérons que la coopération se développera. Le caractÚre unique des serveurs GPU DTL est l'utilisation du refroidissement par immersion: immersion des racks dans un fluide diélectrique spécial. Cela ressemble à ceci:




(Note du photographe: le bleu n’est pas une lueur Cherenkov. C’est un point culminant en eux).

Digression lyrique. "Connaissez-vous le réseau neuronal de Beeline?"


HonnĂȘtement, je ne veux pas vraiment toucher Ă  ce sujet (glissant), mais il continue de nous toucher, il est donc impossible de prĂ©tendre que nous sommes dans le rĂ©servoir. Oui, nous connaissons le rĂ©seau neuronal de Beeline. Selon les retours des pilotes coopĂ©rant avec nous, cela fonctionne moins bien que notre version et uniquement sur les plateformes haut de gamme. Selon les dĂ©veloppeurs de Beeline - le projet est gelĂ© et ne se dĂ©veloppe pas actuellement. Du point de vue du bon sens, les nouvelles dans l'esprit de Beeline ont Ă©tĂ© les premiĂšres en Russie Ă  dĂ©velopper un tel rĂ©seau de neurones, ce n'est guĂšre vrai. Peu de gens mettent mĂȘme en Ɠuvre des architectures conçues par des laboratoires comme Facebook Research ou Google Brain, encore moins en crĂ©er une. Le plus souvent, il s'agit simplement d'adapter une bibliothĂšque OpenSource publique aux besoins de votre domaine. La frĂ©quence Ă  laquelle les bibliothĂšques ouvertes sont utilisĂ©es dans les logiciels commerciaux russes est connue de tous ceux qui dĂ©veloppent ce logiciel. Pour la plupart, il n'y a mĂȘme pas de violation de la licence; mais laisser de cĂŽtĂ© les rĂ©alisations de l'OpenSource internationale dans son ensemble et faire des relations publiques bruyantes est au moins moche. Il semble que nos rĂ©alisations aient Ă©galement Ă©tĂ© utilisĂ©es: en particulier, dans notre gamification nos photos ont Ă©tĂ© Ă©clairĂ©es. Comparez avec la photo «hiver» de la section sur l'ensemble de donnĂ©es Lacmus:



Il y a d'autres raisons de croire que la question ne se limitait pas aux données ici.

Ce qui est mauvais pour nous en premier lieu, c'est que le rĂ©seau de neurones de Beeline est maintenant sans torsion Ă  l'impossibilitĂ©. Quand il est mentionnĂ©, il est impossible de comprendre s’il s’agit vraiment d’elle, ou de notre application, ou en gĂ©nĂ©ral de l’option de quelqu’un d’autre. Dans des conditions de dĂ©centralisation, de mauvaise contrĂŽlabilitĂ© de la MOC et d'un petit nombre de canaux de rĂ©troaction, toute information sur la prĂ©valence et la qualitĂ© du travail de Lacmus serait utile, ainsi que sur des dĂ©veloppements similaires - mais le battage mĂ©diatique autour de Beeline Ă©clipsait tout.

Nous prĂ©voyons de continuer Ă  surveiller la situation pour l'instant, mais notre demande Ă  la communautĂ© est, premiĂšrement, de dire «rĂ©seau de neurones Beeline» seulement quand ils sont sĂ»rs Ă  100% qu'il en est ainsi, et deuxiĂšmement, de lire les licences open source et d'indiquer honnĂȘtement la paternitĂ©.

Résumé


Au cours de l'année 2019, les membres de la Fondation Lacmus:

  • Nous avons tournĂ© et balisĂ© un ensemble de donnĂ©es unique, dont la derniĂšre version comprend plus de 2000 images;
  • essayĂ© plusieurs architectures de rĂ©seaux de neurones diffĂ©rentes et choisi la plus appropriĂ©e;
  • Nous avons sĂ©lectionnĂ© les meilleurs hyperparamĂštres du rĂ©seau neuronal et l'avons formĂ© sur nos propres donnĂ©es uniques pour la reconnaissance la plus prĂ©cise;
  • dĂ©veloppĂ© une application multiplateforme pour les opĂ©rateurs d'UAV avec la possibilitĂ© d'utiliser lorsqu'ils travaillent hors ligne;
  • optimisĂ© le travail de notre rĂ©seau de neurones pour travailler sur des ordinateurs portables Ă©conomiques et Ă  faible consommation;

À l'heure actuelle, les meilleurs indicateurs de la mĂ©trique mAP du rĂ©seau neuronal LAPMUS sont de 94%. Notre programme est prĂȘt Ă  ĂȘtre utilisĂ© dans de vĂ©ritables opĂ©rations de recherche et sauvetage et a Ă©tĂ© testĂ© sur des cycles gĂ©nĂ©raux. Dans les zones ouvertes de type "champ" et "brise-vent", tous les tests "perdus" ont Ă©tĂ© trouvĂ©s. DĂ©jĂ  maintenant, Lakmus est utilisĂ© par les Ă©quipes de secours et aide Ă  trouver des gens.

Et nous avons également reçu le prix du projet de l'année d'Open Data Science:



Cette année, nous prévoyons:

  • trouver un partenaire pour une infrastructure d'hĂ©bergement fiable;
  • implĂ©menter l'interface Web et mlOps;
  • former un grand ensemble de donnĂ©es synthĂ©tiques sur le moteur UE4 ou Ă  l'aide de GAN;
  • lancer un concours InClass Ă  Kaggle pour tous ceux qui souhaitent amĂ©liorer leurs compĂ©tences DL / CV et rechercher les meilleures solutions SOTA;
  • ajouter Ă  notre rĂ©tinanet encore plus d'implĂ©mentations de dorsales et de variations de cette architecture;

Nous manquons vraiment de travailleurs pour mettre en Ɠuvre ces plans, nous serons donc ravis de tous, quel que soit le niveau et l'orientation de la formation.
Si ensemble nous pouvons sauver au moins une personne de plus, alors tous les efforts ne seront pas vains.

Comment aider le projet


Nous sommes un projet OpenSource et nous accepterons volontiers tout le monde! Voici les liens vers nos dépÎts github:


Si vous ĂȘtes dĂ©veloppeur et que vous souhaitez rejoindre le projet, vous pouvez Ă©crire Ă  Perevozchikov Georgy Pavlovich, gosha20777 dans tous les rĂ©seaux sociaux, gosha20777@live.ru ou rejoindre le projet via le canal # ml4sg en slack ODS (si vous y ĂȘtes).
Nous avons besoin de:

  • DĂ©veloppeurs ML
  • DĂ©veloppeurs C # / go / python;
  • Travailleurs de premiĂšre ligne;
  • Beckers;
  • Juste des gens actifs de n'importe quelle direction! Nous serons toujours ravis de vous voir!

Si vous n'ĂȘtes pas impliquĂ© dans le dĂ©veloppement, vous pouvez Ă©galement aider le projet:

  • Vous pouvez nous aider Ă  rĂ©diger des articles;
  • Vous pouvez nous aider Ă  rĂ©diger la documentation utilisateur et un wiki (et corriger les erreurs de grammaire lĂ -bas)))
  • Vous pouvez rester dans le rĂŽle d'un chef de produit et effectuer des tĂąches dans trello;
  • Vous pouvez nous proposer une idĂ©e;
  • Vous pouvez distribuer ce message;

À propos de l'Ă©quipe


Chef de projet: Georgy Pavlovich Perevozchikov, gosha20777 .

Une liste incomplÚte des personnes impliquées (en fait, elle est beaucoup plus longue, si vous avez été injustement oublié, dites-le-moi et nous ajouterons):

  • Les participants ODS les plus actifs de la chaĂźne #proj_rescuer_la : Kseniia, balezz, ei-grad, Palladdiumm, sharov_am, dartov
  • Participants au projet en dehors des SAO: Martynova Viktoriya Viktorovna (organisation du projet, collecte et Ă©tiquetage des donnĂ©es), Denis Petrovich Shurankov (organisation de collecte des donnĂ©es), Daria Pavlovna Perevozchikova (taguĂ©e environ 30% de toutes les photos).
  • OpĂ©rateurs d'UAV de l'Ă©quipe de Liza Alert, qui ont aidĂ© avec les images et la formation de l'ensemble de donnĂ©es: Partyzan, Vanteyich, Sevych, Californie, Tarekon, Evgen, GB.

Remerciements spéciaux:

  • Aux programmeurs d'AvaloniaUI - le meilleur framework .NET: worldbeater , kekekeks , Larymar
  • Administrateurs ODS pour l'organisation de la communautĂ© la plus cool: natekin, Sasha, mephistopheies.

Cet article a été co-écrit avec balezz et gosha20777 habrozhitelami .

Tout le monde doit ĂȘtre ingĂ©nieux et ne jamais se perdre!

vidéo

Démonstration vidéo du travail pour le dessert. Version pré-early-alpha. Pour ceux qui ont lu jusqu'au bout. Février 2019.

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


All Articles