Les optimisations réalisées
Pour parvenir à leurs fins, les ingénieurs de Google sont partis d’un réseau de neurones totalement convolutif couramment utilisé pour des tâches de segmentation sémantique.
Pour obtenir un résultat de qualité, il faut fournir à l’algorithme des données d’apprentissage de qualité. Une grosse partie du travail a donc consisté à annoter plusieurs milliers d’images de manière précise. Pour chacune d’elles, tous les éléments d’avant-plan ont ainsi été localisés, le reste de l’image étant donc catégorisé comme élément d’arrière-plan.

Exemple d'annotation (source)
Grâce au jeu de données créé, il est alors possible à l’algorithme, à partir d’une image fournie en entrée, de générer un masque de celle-ci en regroupant tous les éléments détectés sous une même catégorie (avant-plan), et tous le reste de l’image sous une autre catégorie (arrière-plan).
Afin de profiter de la consistance temporelle entre les images successives, l’idée des ingénieurs de Google a été de fournir en entrée de l’algorithme le masque généré sur l’image précédente, en plus de l’image courante. L’algorithme a alors été entraîné à générer le masque d’une image non plus uniquement en fonction de l’image fournie en entrée, mais également en fonction du masque précédent, ce qui permet à l’application de fournir une continuité temporelle d’une image à l’autre.
Masque précédant utilisé en entrée de l'algorithme
Enfin, différentes améliorations ont été apportées à l’architecture du réseau de neurones afin d’optimiser un peu plus ses performances en termes de précision et de vitesse d’exécution :
- Utilisation de noyaux de convolution avec des pas importants sur l’image d’entrée
- Utilisation de connexions « skip » entre la phase d’encodage et de décodage
- Réduction importante du nombre de noyaux dans les goulots d’étranglement
- Ajout de couches de type « DenseNet » à la fin du réseau
Toutes les modifications et améliorations décrites permettent à l’algorithme de Google de s’exécuter en temps réel sur Smartphone, opérant ainsi plus de 100 images par seconde sur un iPhone 7, ou encore 40 images par seconde sur un Pixel 2.