Comment comptons-nous les personnes utilisant la vision par ordinateur

image
Photos provenant de sources ouvertes

Les rassemblements de masse de personnes créent des problèmes dans divers domaines (commerce de détail, services publics , banques, développeurs). Les clients doivent combiner et surveiller les informations sur le nombre de personnes dans de nombreux endroits: dans les bureaux de service, les bâtiments administratifs, sur les chantiers de construction, etc.

Les tâches de comptage des personnes ont des solutions toutes faites, par exemple, l'utilisation de caméras avec des analyses intégrées. Cependant, dans de nombreux cas, il est important d'utiliser un grand nombre de caméras précédemment installées dans différents services. De plus, une solution qui prend en compte les spécificités d'un client particulier sera meilleure pour lui.

Nos noms sont Tatyana Voronova et Elvira Dyaminova, nous sommes engagés dans l'analyse des données au Centre 2M. Bien que le sujet semble être le plus simple de ce qui est actuellement considéré dans les problèmes de vision par ordinateur, même dans ce problème, en ce qui concerne la pratique (mise en œuvre), de nombreuses sous-tâches complexes et non triviales doivent être résolues. Le but de notre article est de montrer la complexité et les approches de base des problèmes de vision par ordinateur en utilisant l'exemple de la résolution d'un des problèmes de base. Pour les matériaux suivants, nous voulons attirer des collègues: devops, ingénieur, chefs de projet sur l'analyse vidéo, afin qu'ils parlent des ressources informatiques impliquées, des mesures de vitesse, des nuances de communication avec les clients et des histoires de mise en œuvre de projet. Nous nous concentrerons sur certaines des méthodes d'analyse de données utilisées.

Commençons par la déclaration suivante: vous devez afficher le nombre de personnes dans la file d'attente au bureau de service. Si la file d'attente, selon les règles internes de l'entreprise cliente, est jugée critique, le scénario interne commencera à être élaboré:
  • notification de la nécessité d'ouvrir une entrée / caisse supplémentaire;
  • appel du gestionnaire;
  • informer sur la nécessité de rediriger les flux de personnes vers d'autres caisses (plus gratuites).

Ainsi, notre travail sauvera beaucoup de nerfs aux clients.

Modèles d'apprentissage automatique utilisés


Détection de silhouettes de personnes


Dans un premier temps, nous avons décidé d'utiliser un modèle déjà formé pour détecter les personnes (silhouettes), car de telles tâches ont des solutions assez bonnes, par exemple, la définition des silhouettes .

Ainsi, dans la bibliothèque TensorFlow, il existe un grand nombre de modèles pré-formés .

Après avoir effectué les tests, nous avons d'abord opté pour deux architectures: Faster R-CNN et YOLO v2. Plus tard, après l'apparition de la nouvelle version, nous avons ajouté YOLO v3.

Description des modèles .

Un exemple de résultat de reconnaissance pour YOLO v2 (ci-après, les images sont tirées de sources gratuites - nous ne pouvons pas publier de trames à partir des caméras des clients):

image

Un exemple de résultat de reconnaissance pour Faster R-CNN:

image

L'avantage de YOLO est que le modèle répond plus rapidement, et dans certaines tâches, cela est important. Cependant, dans la pratique, nous avons découvert que s'il n'est pas possible d'utiliser une version pré-formée du modèle et qu'un recyclage est requis sur votre ensemble de formation spécialisé, il est plus correct d'utiliser Faster R-CNN. Si la caméra a été installée suffisamment loin des personnes (la hauteur de la silhouette est inférieure à 100 pixels pour une résolution de 1920 par 1080) ou s'il a été nécessaire de reconnaître en plus un équipement de protection individuelle sur une personne: casques, attaches, éléments de vêtements de protection, dans de telles situations la qualité du résultat de la formation sur votre propre jeu de données (jusqu'à 10 mille objets différents) pour YOLO v2 nous n'étions pas satisfaits.

YOLO v3 a montré des résultats acceptables, cependant, les tests de vitesse n'ont pas donné un avantage significatif pour YOLO v3 par rapport à Faster R-CNN. De plus, nous avons trouvé un moyen d'augmenter la vitesse de reconnaissance en utilisant un traitement par lots (traitement groupé des images), une analyse sélective des images (voir ci-dessous).

Pour tous les types de modèles, nous avons amélioré la précision en utilisant le post-traitement des résultats: nous avons supprimé les valeurs aberrantes, pris les valeurs les plus courantes pour un ensemble de trames consécutives. Une seconde d'une caméra correspond généralement à 25-50 images. Bien sûr, pour améliorer les performances (avec un nombre croissant de caméras), nous n'analysons pas chaque image, mais il est souvent possible de donner une réponse finale sur un intervalle de plusieurs secondes, c'est-à-dire d'utiliser plusieurs images. Cette décision peut être prise de manière dynamique, en tenant compte du nombre total de caméras (flux vidéo à traiter) et de la puissance de calcul disponible.

Un exemple d'utilisation du modèle Faster R-CNN, formé sur notre propre ensemble de données:

image

Nous effectuons maintenant des tests avec le modèle SSD-300. Nous espérons que cela nous donnera une augmentation de la productivité tout en maintenant une qualité de reconnaissance acceptable.

Création de votre propre jeu de données d'entraînement


Dans les cas où vous souhaitez créer votre propre ensemble d'apprentissage, nous avons développé pour nous-mêmes la procédure suivante:
  • nous collectons des clips vidéo avec les objets requis: vidéos des clients, vidéos du domaine public (vidéos présentées, caméras de surveillance);
  • nous coupons et filtrons des fragments vidéo afin que l'ensemble de données résultant soit équilibré entre divers objets de reconnaissance;
  • Nous répartissons les cadres entre les marqueurs pour mettre en évidence les objets nécessaires. Un exemple d'outil de balisage ;
  • vérifier sélectivement les résultats des marqueurs;
  • si nécessaire, nous effectuons une augmentation: généralement nous ajoutons des virages, de la réflexion, modifions la netteté (forment un ensemble de données marqué étendu).

Utilisation de zones de détection


L'un des problèmes du comptage de personnes en ligne est l'intersection des zones de visibilité de plusieurs caméras. Plusieurs caméras peuvent être installées dans une pièce; il est donc important de préserver la zone de chevauchement des images et lorsqu'une personne entre dans le champ de vision de plusieurs caméras, elle doit être prise en compte une fois.

Dans certaines situations, les personnes doivent être détectées uniquement dans une certaine zone de la pièce (près des fenêtres de service) ou de la plate-forme (près de l'équipement).

Pour des raisons évidentes, il est faux de vérifier que le rectangle de bordure (cadre / cadre), restreignant la personne entière, tombe dans la zone (polygone). Dans cette situation, le bas (tiers / moitié) du rectangle est divisé en points - nœuds (une grille de 10 par 10 nœuds est prise) et la chute dans la zone des nœuds individuels sélectionnés est vérifiée. Les nœuds «significatifs» sont attribués par l'administrateur système en fonction de la géométrie de la pièce (les valeurs par défaut sont également sélectionnées - si le paramètre d'une pièce particulière n'est pas entré).

image

De plus, l'application de l'architecture Mask R-CNN pour nos tâches est en cours de test . La méthode vous permet de déterminer le contour de la silhouette - cela vous permettra de vous éloigner de l'utilisation d'un rectangle de bordure lors de l'analyse de l'intersection avec une zone .

image

Une autre approche: la détection de la tête (formation sur modèle)


La qualité n'est pas toujours obtenue en choisissant un modèle, en augmentant / modifiant l'ensemble de formation et d'autres méthodes purement ML. Parfois, une amélioration décisive ne peut être obtenue qu'en changeant toute la formulation du problème (par exemple, dans notre problème). Dans ces files d'attente, les gens s'entassent et se superposent donc, la qualité de reconnaissance est donc souvent insuffisante pour n'utiliser cette méthode qu'en conditions réelles.

Prenez l'image ci-dessous. Nous fermons les yeux sur le fait que la photo a été prise au téléphone, et l'angle de son inclinaison ne correspond pas à l'angle d'inclinaison des caméras CCTV. Il y a 18 personnes sur le cadre, et le modèle de détection de silhouette a identifié 11 personnes:

image

Pour améliorer les résultats, nous sommes passés de la définition des silhouettes à la définition des objectifs. Pour cela, le modèle Faster R-CNN a été formé sur un ensemble de donnéeslien (l'ensemble de données comprend des cadres avec un nombre différent de personnes, y compris de grands groupes, parmi lesquels il y a des personnes de races et d'âges différents).

De plus, nous avons enrichi le jeu de données avec des images du matériel (des caméras) du client d'environ un tiers (principalement en raison du fait que le jeu de données d'origine avait peu de têtes en chapeaux). Un didacticiel a été utile pour l'auto-apprentissage d'un modèle .

Les principaux problèmes rencontrés sont la qualité de l'image et l'échelle des objets. Les têtes ont des tailles différentes (comme on peut le voir sur l'image ci-dessus), et les cadres des caméras du client avaient une résolution de 640x480, pour cette raison, des objets intéressants (capuchons, boules de Noël, dossiers de chaises) sont parfois détectés comme des têtes.

Par exemple, dans l'ensemble de données de formation, nous avons étiqueté les têtes:

image- ce sont des têtes dans un ensemble de données;

image- et c'est le dossier de la chaise, mais le modèle veut croire que c'est la tête.

Cependant, en général, ce modèle s'adapte assez bien dans les cas où il y a une concentration massive de personnes. Ainsi, dans le cadre ci-dessus, notre modèle a identifié 15 personnes:

image

Ainsi, dans cette image, le modèle n'a pu trouver que trois têtes, qui étaient considérablement bloquées par des objets étrangers.

Pour améliorer la qualité du modèle, vous pouvez remplacer les caméras actuelles par des caméras avec une résolution plus élevée et collecter et marquer en outre le jeu de données d'entraînement.

Néanmoins, il convient de noter qu'avec un petit nombre de personnes, la méthode de détection par silhouettes plutôt que par têtes est plus appropriée, car la silhouette est plus difficile à chevaucher complètement ou à confondre avec des objets étrangers. Cependant, s'il y a une foule, il n'y a pas d'issue, donc pour compter les gens en ligne, il a été décidé d'utiliser deux modèles en parallèle - pour les têtes et les silhouettes - et de combiner la réponse.

Silhouettes et têtes, un exemple de résultat de reconnaissance:

image

Indice de précision


Lors du test du modèle, des cadres ont été sélectionnés qui n'ont pas participé à la formation (ensemble de données avec un nombre différent de personnes sur le cadre, sous différents angles et différentes tailles), pour évaluer la qualité du modèle, nous avons utilisé le rappel et la précision.

Rappel - l'exhaustivité montre quelle proportion d'objets qui appartiennent réellement à la classe positive, nous avons prédit correctement.

Précision - la précision montre quelle proportion d'objets reconnus comme des objets d'une classe positive, nous avons prédit correctement.

Sur les cadres des caméras sur les sites de test (les images dans ces salles étaient sur le jeu de données) métriques:

image

Sur les cadres des nouvelles caméras (ces salles n'étaient pas sur le jeu de données):

image

Lorsque le client avait besoin d'un chiffre, une combinaison d'exactitude et d'exhaustivité, nous avons fourni une moyenne harmonique , ou mesure F :
image

Rapports


Les statistiques constituent une partie importante du service. Avec des cadres individuels (et des personnes dédiées comptées par eux), les clients veulent voir les résultats sous la forme de rapports prêts à l'emploi (tableaux de bord) avec une occupation moyenne / maximale pour différents intervalles de temps. Le résultat est souvent intéressant sous la forme de graphiques et de tableaux caractérisant la répartition du nombre de personnes dans le temps.

Par exemple, dans notre solution pour le cadre, le nombre de personnes pour les deux modèles (silhouettes et têtes) est calculé et le maximum est sélectionné. S'il y a plusieurs caméras dans la pièce, la zone de chevauchement d'images (prédéfinie via l'interface) est enregistrée, et lorsqu'une personne entre dans le champ de plusieurs caméras, elle n'est prise en compte qu'une seule fois.
Ensuite, la valeur du nombre de personnes dans la file d'attente est formée pour plusieurs trames consécutives - pour l'intervalle Δt . En une heure, les valeurs de plusieurs de ces intervalles sont déchargées pour chaque pièce.

La taille de l'intervalle de temps et le nombre d'intervalles sont déterminés en fonction du nombre de pièces et de la puissance de calcul utilisée. Pour chaque intervalle, un tableau de valeurs est formé avec le nombre de personnes dans la pièce.

La valeur la plus courante (mode) est sélectionnée. S'il y a plusieurs valeurs avec la même fréquence, le maximum est sélectionné.

La valeur résultante est le nombre de personnes dans la file d'attente au temps timmédiatement après l'intervalle en question. En une heure seulement, un ensemble de valeurs est obtenu pour différents intervalles - c'est-à-dire des valeurs aux instants t_1, t_2 .... t_n .

Plus loin pour t_1, t_2 .... t_n, les valeurs maximales et moyennes du nombre de personnes sont calculées - ces valeurs sont affichées dans le rapport sous forme de charges de pointe et moyennes pour une heure donnée.

Diagramme de la répartition des personnes par temps pour la charge maximale (exemple simple):

image

Diagramme de la répartition des personnes par temps pour la charge moyenne (exemple simple):

image

Foules


En conclusion, pour être complet sur le sujet, je voudrais mentionner les cas de foules très importantes, par exemple, des foules dans les stades, dans des lieux de trafic humain intense.

Ces tâches consistent à estimer la taille de la foule: s'il s'agit d'une foule de 300 personnes, une réponse de 312 ou 270 est considérée comme acceptable.

Dans la pratique, nous n'avons pas eu à résoudre de tels problèmes à l'aide de l'analytique vidéo (s'il s'agit d'un événement organisé, il est plus facile pour chaque personne d'émettre une étiquette). Cependant, nous avons effectué des tests. Pour ces tâches, des méthodes distinctes sont utilisées, une vue d'ensemble des méthodes .

Le résultat du modèle de la revue (modèle pré-formé sur CSRNet) a été reproduit:

image

L'angle est important pour les paramètres de ce modèle, c'est-à-dire que si le lieu de prise de vue est fixe, le résultat sera meilleur que lorsqu'il est appliqué à des images diverses. De manière générale, il est possible de recycler ce modèle - la qualité peut être améliorée pendant le fonctionnement du modèle, lorsque la vraie vidéo des caméras installées est activée.

Auteurs de l'article: Tatyana Voronova (tvoronova), Elvira Dyaminova (elviraa)

All Articles