Évaluation comparative de VoteNet et 3DETR pour la détection d'objets dans des nuages de points
La plupart des applications de vision par ordinateur fonctionnent aujourd'hui avec des images bidimensionnelles "plates", comme celles que vous trouverez dans ce billet de blog, et ce avec beaucoup de succès. Le monde n'est cependant pas plat, et l'ajout d'une troisième dimension promet non seulement d'accroître les performances, mais aussi de rendre possibles des applications entièrement nouvelles. Les données 3D étant de plus en plus largement disponibles, il se pourrait bien que ce moment soit venu. Certains smartphones sont désormais équipés de capteurs Lidar (acronyme de "light detection and ranging", parfois appelé "laser scanning"), tandis que d'autres appareils photo utilisent des caméras RVB-D (une image RVB-D est la combinaison d'une image RVB standard et de sa "carte de profondeur" associée), comme Kinect ou Intel RealSense. Les données 3D permettent une représentation spatiale riche de l'environnement du capteur et trouvent des applications dans la robotique, les appareils domestiques intelligents, les voitures sans conducteur, l'imagerie médicale et bien d'autres secteurs.
Dans ce billet, nous explorons 3DETR de Meta (Facebook) et son prédécesseur Votenet qui présentent une approche intelligente de la reconnaissance d'objets dans un nuage de points 3D d'une scène (voir [1], [2] et [3] pour les articles de recherche). Ces méthodes vont plus loin que les méthodes existantes en ce sens qu'elles prennent pleinement en compte les informations de profondeur disponibles sans augmenter les coûts de calcul de manière prohibitive. L'objectif des modèles est d'utiliser des nuages de points (prétraités à partir d'images RVB-D) et d'estimer des boîtes de délimitation 3D orientées ainsi que des classes sémantiques d'objets.
Plusieurs formats sont disponibles pour les données 3D : images RVB-D, maillages de polygones, voxels et nuages de points. Un nuage de points est simplement un ensemble non ordonné de triplets de coordonnées (x, y, z). Ce format est devenu très populaire car il préserve toutes les informations 3D d'origine et n'utilise aucune discrétisation ou projection 2D. Fondamentalement, les méthodes basées sur la 2D ne peuvent pas fournir d'informations précises sur la position en 3D, ce qui est problématique pour de nombreuses applications critiques telles que la robotique et la conduite autonome.
L'application de techniques d'apprentissage automatique directement aux nuages de points est donc très intéressante : elle permet d'éviter la perte d'informations géométriques qui se produit lorsque des projections 2D ou des voxélisations sont effectuées. Grâce aux riches représentations de caractéristiques inhérentes aux données 3D, l'apprentissage profond sur les nuages de points a suscité beaucoup d'intérêt au cours des dernières années.
Il y a cependant des défis à relever. La dimensionnalité élevée et la nature non structurée des données, ainsi que la petite taille des ensembles de données disponibles et leur niveau de bruit, posent des difficultés. En outre, les nuages de points sont par nature occultés et épars : certaines parties des objets 3D sont tout simplement cachées au capteur ou le signal peut être manqué ou bloqué. En outre, les nuages de points sont par nature irréguliers, ce qui rend la convolution 3D très différente de la convolution 2D.
Pour réaliser nos tests, nous avons choisi l'ensemble de données SUN RGB-D. Il comprend 10 335 images RVB-D de scènes d'intérieur (chambres à coucher, magasins de meubles, bureaux, salles de classe, salles de bain, laboratoires, salles de conférence, ...). Ces scènes ont été annotées avec 64 595 boîtes de délimitation 3D orientées autour de 37 types d'objets, dont des chaises, des bureaux, des coussins, des canapés, ... (voir [4], [5], [6] et [7] pour plus de détails sur les différentes sources de l'ensemble de données et les méthodologies utilisées pour le créer).
La conversion des images RVB-D en points du nuage se fait par une transformation linéaire des coordonnées 2D et des valeurs de profondeur à des coordonnées données de l'image, tout en tenant compte des caractéristiques intrinsèques de la caméra. Des considérations trigonométriques de base conduisent à la formulation mathématique de cette transformation linéaire (voir [8] pour une explication plus détaillée). L'image suivante illustre l'opération. Le prétraitement peut être effectué à l'aide de fonctions Matlab comme dans le code de l'équipe Facebook (quelques modifications du code sont nécessaires pour le faire fonctionner avec la version gratuite d'Octave, qui ralentit considérablement le prétraitement) ou à l'aide de la bibliothèque Open3D open-source (voir [9] pour un lien vers la page d'accueil de la bibliothèque).
La première méthodologie VoteNet [1] utilise Pointnet++ [3] comme colonne vertébrale (tous deux par Charles R. Qi). Pointnet++ prend un nuage de points en entrée et produit un sous-ensemble du nuage d'entrée, mais chaque point a plus de caractéristiques et est enrichi d'un contexte sur les modèles géométriques locaux. Cette méthode est similaire à celle des réseaux neuronaux convolutionnels, sauf que le nuage d'entrée est sous-échantillonné en fonction des données : le voisinage d'un point particulier est défini par une distance métrique et le nombre de points dans ce voisinage est variable. L'image suivante (extraite de [3]) illustre l'architecture de Pointnet++.
Les couches de Pointnet sur cette image créent des abstractions de chaque région locale (définie par un rayon fixe). Chaque région locale est transformée en un vecteur composé de son centroïde et de caractéristiques enrichies créant une représentation abstraite du voisinage. Dans notre cas particulier, le nuage de points d'entrée brut est constitué d'un nombre variable (20 000 ou 40 000) de triplets (x, y, z), la sortie de l'épine dorsale Pointnet++ est un ensemble de 1 024 points de dimension 3+256. Chaque couche de Pointnet dans l'épine dorsale est simplement un perceptron multicouche (1 ou 2 couches cachées chacune).
La méthodologie VoteNet pour la détection d'objets en 3D utilise la sortie de Pointnet++ et applique le "Deep Hough Voting", une méthode illustrée par l'image suivante (extrait de [1]).
Chaque point (avec ses caractéristiques enrichies) produit par l'épine dorsale est introduit dans un perceptron multicouche partagé pour générer un vote (le "module de vote") : ce réseau neuronal de vote produit un triplet de déplacement entre un point (son entrée) et le centroïde de l'objet auquel il appartient (s'il y en a un). Il est entraîné à minimiser la norme de ce déplacement et ajoute quelques caractéristiques supplémentaires censées faciliter l'agrégation des votes.
Comme le montre l'image ci-dessus, les votes sont ensuite regroupés. Chaque groupe est transmis à un "module de proposition et de classification" (deux perceptrons multicouches dans la pratique) qui produit un vecteur de prédiction comprenant : un score d'objectivité, les paramètres de la boîte englobante et les scores de classification sémantique. Chacun de ces trois éléments contribue à une fonction de perte (donc 4 au total si l'on ajoute la perte de régression de vote mentionnée ci-dessus) : une perte d'entropie croisée de l'objet, une perte d'estimation de la boîte englobante et une perte de prédiction de la classe.
La méthode 3DETR (décrite dans [2]) est une approche purement basée sur les transformateurs, avec pratiquement aucune modification par rapport à l'architecture de transformateur vanille, ce qui est tout à fait remarquable. L'architecture 3DETR est décrite dans l'image suivante (extrait de [6]).
Le codeur transformateur reçoit des entrées d'une couche de sous-échantillonnage + agrégation d'ensembles comme dans l'épine dorsale de Pointnet++ décrite ci-dessus, sauf que l'opération n'est appliquée qu'une seule fois dans ce cas au lieu de plusieurs fois dans Pointnet++. Le transformateur codeur applique ensuite plusieurs couches d'auto-attention et de projections non linéaires (dans notre cas, 3 couches d'attention multi-têtes avec 8 têtes chacune). Il n'est pas nécessaire d'intégrer la position, car cette information est déjà incluse dans les entrées. Le mécanisme d'auto-attention est invariant par rapport à la permutation et permet la représentation de dépendances à long terme. Ceci étant dit, les couches d'auto-attention dans le codeur peuvent être modifiées avec un masque afin de se concentrer sur les modèles locaux plutôt que sur les modèles globaux.
Le décodeur est donc composé de plusieurs blocs transformateurs (8 dans notre cas). Il reçoit des requêtes et prédit des boîtes de délimitation 3D. Les requêtes sont générées en échantillonnant certains points (128 dans notre cas) du nuage d'entrée et en les introduisant dans une couche d'intégration positionnelle suivie d'un perceptron multicouche.
L'augmentation des données est utilisée pendant la formation en appliquant un sous-échantillonnage aléatoire, un retournement, une rotation et une mise à l'échelle aléatoire du nuage de points.
Il s'agit d'un exemple d'image RVB-D provenant de l'ensemble de données RVB-D de SUN.
L'image est ensuite prétraitée en un nuage de points de 20 000 ou 80 000 points. Vous pouvez utiliser MeshLab pour visualiser toutes sortes de données 3D, y compris des nuages de points.
L'algorithme VoteNet ou 3DETR peut maintenant prédire les boîtes de délimitation (et les classes d'objets).
La mesure la plus utilisée pour évaluer les performances des techniques de détection d'objets 3D est la précision moyenne (mAP) : la précision moyenne (AP) est l'aire sous la courbe de précision-rappel et la précision moyenne (mAP) est sa moyenne sur toutes les classes d'objets. Un seuil IoU (Intersection over Union) est fixé à 0,25 ou 0,5, ce qui nous donne les mesures AP25 ou AP50. Ce seuil permet de contrôler le chevauchement souhaité entre les boîtes de délimitation prédites et les boîtes de délimitation de la vérité terrain.
Nous avons entraîné le modèle VoteNet pendant 180 époques (comme le suggèrent les auteurs de [5]) sur l'ensemble d'entraînement SUN RGB-D et avons obtenu un AP25 de 57 % sur l'ensemble de test (similaire à [5]). Notre modèle VoteNet est de taille raisonnable, avec environ 1 million de paramètres entraînables.
Le modèle 3DETR est plus grand, avec 7 millions de paramètres entraînables, et il doit être entraîné pendant 360 époques pour atteindre un AP25 de 57 % sur l'ensemble de données SUN RGB-D. Cela aurait pris plusieurs jours. Cela aurait nécessité plusieurs jours d'entraînement. Heureusement, les auteurs de [6] ont rendu public un modèle qui a été pré-entraîné pendant 1080 époques sur SUN RGB-D. Nous l'avons testé et avons obtenu le même résultat. Nous l'avons testé et avons obtenu le même AP25 que VoteNet, c'est-à-dire 57%. Une version du modèle 3DETR avec une auto-attention masquée dans l'encodeur est également disponible et obtient une performance légèrement meilleure. Il convient de noter que, selon les auteurs de [6], le gain de performance est plus important sur un autre ensemble de données (ScanNetV2 - voir plus de détails sur cet ensemble de données ci-dessous).
Une considération importante est la capacité d'affiner les modèles pré-entraînés tels que ceux fournis par les auteurs de [5] et [6] sur les données de nos clients. Ceci est particulièrement important dans le cas de la détection d'objets en 3D où les données sont difficiles à annoter, occultées et bruitées.
Nous avons testé la transférabilité d'un VoteNet formé sur l'ensemble de données ScanNetV2 à l'ensemble de données SUN RGB-D. ScanNetV2 (voir [10] pour plus de détails) est un ensemble de données annotées de 1 200 maillages 3D reconstruits à partir de scènes d'intérieur. Il comprend 18 catégories d'objets. Bien que SUN RGB-D et ScanNetV2 appartiennent tous deux à un domaine similaire de scènes d'intérieur, ils sont en fait très différents : les scènes de ScanNetV2 couvrent de plus grandes surfaces, sont plus complètes et contiennent plus d'objets. Les sommets de l'ensemble de données ScanNetV2 sont échantillonnés pour créer des nuages de points en entrée.
Nous avons utilisé un modèle VoteNet pré-entraîné sur ScanNetV2 pendant 180 époques. Nous avons conservé autant que possible ce modèle : le module de base, le module de vote et tous les modules de proposition et de classification, à l'exception de la dernière couche de sortie. Il est intéressant de noter qu'il n'a fallu que 30 époques de réglage fin sur SUN RGB-D pour que ce modèle atteigne les mêmes performances que le même modèle VoteNet entraîné à partir de zéro sur SUN RGB-D pendant 180 époques.
Ce résultat encourageant nous permet de penser que nos modèles pré-entraînés peuvent être facilement transférés aux données des clients de ML6 provenant d'autres types de domaines intérieurs, sans qu'il soit nécessaire de disposer de grands ensembles de données annotées.
Liens
[1] Vote de Hough profond pour la détection d'objets 3D dans les nuages de points
[3] PointNet++ : Apprentissage hiérarchique profond sur des ensembles de points dans un espace métrique
[4] NYU Depth Dataset V2 - Nathan Silberman
[5] Ensemble de données de Berkeley sur les objets 3D
[7] SUN RGB-D