PPC trends for 2018

Every year new technologies and trends emerge that impact the way we build, manage and optimize PPC campaigns. Some years, we see ourselves adapting to a series of small innovations. In 2018 the…

Smartphone

独家优惠奖金 100% 高达 1 BTC + 180 免费旋转




Comment identifier des personnes dans des images ?

Identifier des personnes dans des images ou des vidéos automatiquement ouvre les portes à beaucoup d’applications. Par exemple, la police peut faire appel à ces algorithmes pour connaître la trajectoire d’un individu filmé par plusieurs caméras de surveillance. Cette mission qui peut être plus ou moins facile pour un humain, n’est pas simple à automatiser.

Beaucoup de difficultés existent, on cite par exemple le changement du point de vue des caméras, la mauvaise résolution des images, les personnes qui portent des habits similaires, le changement de luminosité…
Le problème d’identification se reformule de la façon suivante: ayant une base de données contenant des images qui correspond à N personnes qu’on l’appelle “gallery” et une image à identifier appelé “query”, le but est de retourner une liste d’images de la gallery triée par ordre décroissant de similarité avec l’image query.

Plusieurs approches existent qui se basent sur différents principes et idées. Dans cet article on présente une méthode qui fait partie des approches appelées “patch based”.

Les méthodes de l’approche patch based se basent sur l’idée de trouver des “patches” similaires entre l’image query et les images de la gallery. Une de ces méthodes¹ consiste à diviser l’image en petits patches selon une dense grille en représentant chaque patch avec un descripteur.

L’image d’une personne sur laquelle est superposée la grille qui représente le centre des patches.

Avant tout traitement, l’image est convertie à l’espace de couleur LAB pour mieux capter l’information couleur. Le descripteur de chaque patch est composé de deux parties, une qui décrit la couleur et l’autre décrit la texture.

A gauche l’image en RGB, à droite l’image dans l’espace couleur LAB.

Le descripteur couleur est formé des histogrammes de couleurs pour chaque channel L, A et B comprenant chacun 32 compartiments.
Chaque histogramme est ensuite normalisé, pour pouvoir l’agréger avec d’autres descripteurs. Cela nous donne un vecteur de 32x3 éléments. Pour mieux capter l’information couleur, on fait le même traitement sur des images sous-échantillonnées, réduites en terme de taille, suivant un rapport de 0.75 et 0.5.

Sous-échantillonage de l’image pour construire la pyramide d’images.

Tous les histogrammes normalisés sont regroupés pour donner un vecteur de dimension 3x3x32= 288 éléments décrivant la couleur du patch.

Pour répondre au challenge de la différence de point de vue et la luminosité entre deux images, il faut ajouter un descripteur robuste à ces variations. Pour cela, le descripteur SIFT (Scale Invariant Feature Transform) est calculé sur tous les 3 channels de chaque patch pour donner un autre vecteur de dimension 384. Enfin, les deux descripteurs sont concaténés pour donner un vecteur de dimension 672 qui représente un patch.

Pour arriver à comparer deux images (l’image query et une image dans la gallery), il faut tout d’abord comparer les patches. Comparer chaque patch query avec tous les patches d’une image gallery serait trop coûteux en terme de calcul et peux donner de mauvais résultats. Par exemple, un patch de couleur bleu sur une chemise peut avoir un patch similaire de même couleur sur un pantalon.

Pour optimiser le temps de calcul et améliorer la performance globale, le patch le plus similaire doit apparaître au niveau de la même ligne du patch query. Par exemple, un patch qui contient une chaussure va toujours apparaître en bas de l’image.

On donne une marge de recherche à plus ou moins 2 lignes pour prendre en compte le désalignement qui peut être présent entre deux images. Ainsi, le patch ayant la distance la plus proche du patch query est choisi, et leur degré de similarité est calculé comme suit:

d(x,y) représente la distance entre les descripteurs x et y de deux patches, et où σ représente le paramètre de la fonction gaussienne.

Le même traitement est répété en cherchant le patch le plus similaire dans chaque image de la gallery avec le patch query.
On obtient alors une liste triée par ordre croissant de distance entre les patches. Ayant cette liste, on pourra avoir un degré qui représente la saillance de ce patch par rapport aux images de gallery : l’idée est qu’un patch “saillant” ne doit pas avoir beaucoup de patches semblables dans la gallery. On peut calculer un degré de saillance en se basant sur la distance (calculée entre deux patches précédemment) de l’élément qui se situe au milieu de la liste. Si ce nombre est grand, cela signifie qu’au moins la moitié des images dans la gallery n’ont pas de patches semblables. En faisant ce traitement, on obtient une représentation de la saillance des patches.

Après avoir calculé la similarité de chaque patch de l’image query, son degré de saillance et représenté la saillance de toutes les images dans la gallery, on peut calculer un degré de similarité entre deux images de la façon suivante:

où le score est le degré de saillance des patches (du patch query dans l’image A et du patch le plus semblable dans l’image B de la gallery), s est la similarité entre ces deux patches et α est un paramètre à régler. Le degré de similarité entre deux patches est bidirectionellement multiplié par les degrés de saillances des patches pour rendre la contribution des patches saillants plus importante et amortir la contribution des patches non saillants. De plus le degré de similarité final entre deux images sera pénalisé pour les patches dont la différence de degré saillance est grande. Ce qui est logique: le même patch dans deux images doit avoir le même degré de saillance. Le paramètre α contrôle l’importance de cette pénalisation

De gauche à droite, on voit l’image à identifier, puis les 5 premières images similaires retournées par l’algorithme. Les rectangles correspondent aux patches ayant contribués le plus à ce résultat.

On a essayé l’approche sur la base de données PRID² où une même personne est présente une seule fois dans la gallery, ce qui explique qu’on ne retrouve qu’une seule fois la même personne dans les résultats.

Cette méthode donne des performances qui pourraient être acceptables dans certains cas et domaines d’applications, surtout lorsque le nombre des gens dans la gallery n’est pas assez grand. Cependant d’autres méthodes existent, en particulier les méthodes basées sur le deep learning qui peuvent donner des performances beaucoup plus élevées.

Fawzi Khattar, docteur du Lab Appstud

Relecture : Jérémy Basso et Romuald Ribas

Add a comment

Related posts:

Legend is back. APOLLO new Airdrop very easy bounty

Very easy twitter bounty. “Legend is back. APOLLO new Airdrop very easy bounty” is published by Film Vakti Film izle.