Computer vision, Machine Learning
27/06/2022

Comment choisir sa fonction de perte en Computer Vision ? - Partie 1


Auteur : Julian Le Gouic
Temps de lecture : 14 minutes
Quantmetry.com : Comment choisir sa fonction de perte en Computer Vision ? - Partie 1

Cet article s’inscrit dans une série d’articles dédiés aux fonctions de perte (loss function) dans le domaine de la Computer Vision. Au travers des deux premiers articles, nous vous accompagnerons dans le choix de la fonction de perte pour les cas d’usage les plus fréquents en Computer Vision. Un article subséquent traitera quant à lui de cas d’usage plus complexes.

Qu’est-ce que la fonction de perte ?

Objectif de la fonction de perte

Dans le cas de la Computer Vision, les modèles avec lesquels nous travaillons sont pour la plupart du temps des réseaux de neurones par convolution. Ce type de modèle, comme beaucoup d’autres modèles de Machine Learning, a pour objectif d’apprendre à faire correspondre des valeurs en sortie (ou prédiction) à des données en entrée au travers d’un apprentissage. Cet apprentissage résulte d’un algorithme d’optimisation (le plus souvent celui de la descente du gradient), visant à obtenir des poids optimaux pour chaque neurone (ou filtre de convolution dans notre cas). Lors de cette optimisation, une fonction particulière est utilisée afin d’évaluer la pertinence d’une prédiction donnée par le modèle à chaque itération d’entraînement ; il s’agit de la fonction objectif. Cette fonction peut être interprétée de deux façons : soit on cherche à maximiser son résultat, soit à le minimiser.

Quel niveau d’intervention ?

Dans le scénario d’une maximisation, on pourrait l’interpréter comme un objectif de maximiser la ressemblance entre la prédiction du modèle et la vérité. À l’inverse, lors d’un scénario de minimisation, on chercherait plutôt à réduire l’écart entre la prédiction et la vérité, autrement dit l’erreur. C’est en général ce dernier scénario qui est adopté car il est plus pertinent de diminuer l’erreur au maximum, plutôt que de maximiser sa réussite dans un contexte d’optimisation. Cette prise de position conduit à l’appellation si connue de « fonction de coût » ou « fonction de perte » (aussi appelée loss function).

Intérêt de la fonction de perte

La fonction de perte doit alors être capable de réduire toute la complexité de la prédiction du modèle en un seul nombre, interprétable par l’utilisateur, et permettant alors de classer une meilleure prédiction d’une moins bonne, afin d’aider le processus d’optimisation dans sa recherche de poids optimaux. Et c’est dans la façon dont la fonction va capturer les propriétés du problème et résumer l’erreur de prédiction que réside toute la difficulté du choix de cette fonction. Il est très important de choisir une fonction qui représente nos objectifs de modélisation et qui calcule l’erreur du modèle en concordance avec le cas d’usage qui nous intéresse.

Liste des cas d’usage dans la Computer Vision

En computer vision, il existe une multitude de cas d’usage, qui peuvent parfois s’imbriquer les uns dans les autres. Avant de plonger plus en détail dans les critères de choix d’une fonction de perte adaptée à chaque cas d’usage, nous allons rappeler les principaux cas d’usage dans la Computer Vision. Nous compléterons cette liste avec des cas d’usage plus spécifique et de fait, des fonctions de perte plus particulières dans un prochain article.

Terminologie

Avant de rentrer directement dans le vif du sujet, quelques rappels sur des concepts récurrents en Computer Vision :

  • Mono/Multi-classes : très répandu en Machine Learning, il n’en reste pas moins important de savoir dans quelle catégorie placer lorsque l’on commence une problématique supervisée – « A-t-on à faire à une seule ou plusieurs classes à prédire ? »
  • Mono/Multi-labels : concept plus spécifique à des domaines comme la Computer Vision ou le Natural Language Processing ; il fait référence au nombre d’entités à prédire sur une image, un texte, etc.

Une problématique multi-labels implique du multi-classes, l’inverse n’est pas vrai pour autant. Ces différences ont bel et bien un impact au niveau de la fonction de perte, c’est pourquoi il est primordial de bien savoir où se situer avant de choisir sa fonction.

La classification d’image

La classification d’image est probablement le cas d’usage le plus répandu et le plus connu de tous. Comme son nom l’indique, il s’agit de classifier des images en fonction de ce qu’elles contiennent. Par exemple, une image contenant un chat se verra attribuer le label « chat », une image de voiture se verra attribuer le label « voiture » et ainsi de suite. Un modèle peut être entraîné à reconnaître différents objets sur différentes images. En sortie, celui-ci fournit une probabilité à l’image d’appartenir à une classe cible.

La détection d’objets

Là encore un cas d’usage assez courant, la détection d’objets consiste à déterminer l’emplacement d’un ou plusieurs objets sur une image à l’aide d’une boîte de délimitation (ou plus communément appelée bounding box). La bounding box est un simple rectangle, souvent définie par quatre coordonnées (x, y, h, w), où x, y représentent les coordonnées sur l’image d’un coin de la bounding box (souvent le coin supérieur gauche) et h, w la hauteur et largeur en pixels de la bounding box. Plusieurs représentations sont possibles. Cette fois-ci, le modèle est entraîné pour fournir en sortie ces quatre coordonnées, et non pas une probabilité d’appartenir à une classe.

La segmentation sémantique

Dans ce troisième cas d’usage, nous commençons à sortir des sentiers battus, sans pour autant trop s’en éloigner. La segmentation sémantique est un peu moins connue du grand public, mais elle est pourtant présente dans notre quotidien. Ici, on se rapproche du premier cas d’usage, à la différence que la classification d’image sera plutôt à l’échelle « macro », tandis que la segmentation sémantique, elle, sera à l’échelle « micro ». Il s’agit d’attribuer un label, non pas à l’image entière, mais à chaque pixel. À première vue, cela ne semble pas très équivoque et pourtant, cette technique est utilisée dans les voitures autonomes, l’industrie de la mode, l’analyse d’images médicales, et bien d’autres domaines.

La segmentation d’instance

Enfin, notre dernier cas d’usage pour cet article : la segmentation d’instance. Ce cas d’usage est de loin le plus compliqué des quatre présentés, du moins au niveau de la structure des modèles utilisés. Dans la segmentation d’instance, en plus de déterminer l’emplacement de chaque objet à prédire sur l’image, les objets sont également segmentés à l’échelle du pixel et donc classifiés ! Pour dire les choses simplement, c’est un peu comme si on avait à faire à la fusion des trois cas d’usage précédents.

Cas d’usage n°1 : classifier une image de chat

Présentation du cas d’usage

Pour ce cas d’usage, laissez-nous vous introduire notre ami Kitty, sur lequel nous nous proposons de faire de la classification d’image.

Ici c’est très simple, il n’y a qu’un chat sur l’image, de ce fait, on attend du modèle qu’il détermine qu’il s’agisse bien d’un chat sur cette image. En réalité, ce dernier fournira une probabilité à l’image d’appartenir à la classe « chat ». Les différentes couches de convolution vont permettre d’extraire des caractéristiques (ou features) de l’image, et une fois l’information suffisamment condensée, le modèle procèdera à l’étape de classification et fournira la probabilité, d’appartenir à la classe « chat », comprise entre 0 et 1. Si elle est suffisamment élevée (i.e. au-dessus d’un seuil fixé par avance), on peut considérer que l’image appartient à la classe.

Choisir sa fonction

Entropie croisée binaire (Binary Cross-entropy)

Pour un tel cas, nous entrons dans le cadre d’une classification binaire. Pourquoi binaire ? Il suffit d’essayer de répondre à la problématique que nous nous sommes fixés au départ : « Est-ce un chat ? Oui ou non. », soit deux issues possibles. Par conséquent, la fonction de perte la plus adaptée est la binary cross-entropy ou « entropie croisée binaire ». Issue de l’entropie croisée, elle renvoie une mesure de la dissimilarité entre deux probabilités afin de pouvoir quantifier la différence entre celles-ci. La BCE (binary cross-entropy) est en réalité un cas particulier de la cross-entropy. Soit la formule de la cross-entropy :

    \[CE = \sum\limits_{i} p_i\log q_i\]

Avec p_i la probabilité que l’évènement i se produise et q_i la probabilité prédite que l’évènement i se produise. En définissant y comme la probabilité que notre image appartienne à la classe « chat », et \widehat{y} comme la probabilité prédite par notre modèle que notre image appartienne à la classe « chat », on a alors :

    \[CE = -(y\log\widehat{y} + (1 - y)\log(1-\widehat{y})) = BCE\]

Et où 1-\widehat{y} définit la probabilité selon notre modèle de ne pas appartenir à la classe cible. Et 1-y la vraie probabilité de ne pas y appartenir. On retrouve nos deux évènements de notre formule originale de la cross-entropy « appartenir à la classe chat » et « ne pas appartenir à la classe chat ». Dès lors, on peut généraliser la formule pour l’entièreté de nos N images dans notre jeu de données d’entraînement avec la formule suivante :

    \[BCE = -\frac{1}{N}\sum\limits_{n=1}^N [y_n\log\widehat{y_n} + (1 - y_n)\log(1 - \widehat{y_n})]\]

NB : À savoir que lorsque l’on parle de la « vraie probabilité » y, on fait référence au label de l’image. Cette probabilité est donc soit 1 (l’image est celle d’un chat), soit 0 (l’image n’est pas celle d’un chat). Cela sera valable pour l’ensemble des explications à venir.

Dans le cas multi-classes

Entropie croisée catégorielle (ou Categorical Cross-Entropy)

Pour une problématique multi-classes, il est plutôt convenu d’utiliser non pas la binary cross-entropy mais la categorical cross-entropy. En repartant de notre définition précédente de la cross-entropy on obtient la nouvelle formule :