magicplan-AI, un voyage dans le merveilleux monde de l'apprentissage profond (Partie 1/3)

À l'intérieur de magicplan

5 minutes de lecture

diagramme de plan magique montrant les différences entre les techniques de classification d'image et de segmentation d'objet
diagramme de plan magique montrant les différences entre les techniques de classification d'image et de segmentation d'objet
diagramme de plan magique montrant les différences entre les techniques de classification d'image et de segmentation d'objet

La vision par ordinateur subit une révolution spectaculaire grâce aux avancées de l'IA, notamment dans l'apprentissage profond. Chaque jour, un nouvel article montre des capacités que vous n'auriez pas pu imaginer il y a 5 ans. Que cela provienne des équipes GAFA ou des spin-offs des meilleurs laboratoires, il semble que l'IA pour la compréhension des images trouve sa place dans l'entreprise.
Mais qu'est-ce que cela signifie pour une petite entreprise dont la vision par ordinateur classique est au cœur de son produit?
Qu'est-ce qu'il faut pour plonger dans l'apprentissage profond ? Quelle est la robustesse de cette nouvelle approche face aux exigences de production telles que la précision et la vitesse sur une application smartphone ?

Je m'appelle Pierre Pontevia. Je suis fondateur et directeur de la recherche pour magicplan. Aujourd'hui, je voudrais partager avec vous notre parcours vers l'implémentation d'une fonctionnalité basée sur l'apprentissage profond dans notre application.

Dans cet article, nous ne discuterons pas de la Singularité, ni de battre un maître du Go ou des dernières avancées dans les Réseaux Génératifs. Nous partagerons plutôt les étapes pratiques nécessaires pour qu'une équipe d'ingénieurs extraira une fonctionnalité d'apprentissage profond du « laboratoire » et l'intègre dans une application utilisée par des millions de propriétaires de smartphones.

Introduction rapide à magicplan

magicplan est une application iOS et Android permettant à quiconque de créer un plan de sol de son domicile en quelques minutes et est aussi simple que de prendre une photo.

Avec plus de 16 millions de téléchargements, magicplan est la référence en matière de plans de sol et d'applications de rénovation.
Depuis le premier jour, notre application a mis en œuvre des capacités de capture de réalité basées sur la « vision par ordinateur » et de suivi de caméra, en faisant l'une des premières applications à offrir une véritable expérience de réalité augmentée sur un smartphone.
Mais aujourd'hui, cela ne suffit pas et nos clients demandent la possibilité d'extraire plus d'informations pendant le processus de capture.
C'est ici que le Deep Learning entre en jeu, offrant à magicplan une nouvelle dimension de compréhension des pièces, comme illustré dans cette vidéo :

Vous pouvez voir comment un utilisateur capture, en temps réel, l'emplacement et les dimensions des portes et fenêtres d'une pièce, littéralement juste en prenant des photos d'elles.
C'est comme ça que ça fonctionne : chaque fois qu'un utilisateur prend une photo d'un mur, magicplan traite l'image prise avec un type spécial de réseau de Deep Learning qui détecte, localise et cadre les fenêtres et les portes présentes n'importe où sur le cliché. Les avantages en termes de commodité et de gain de temps pour l'utilisateur sont énormes.

Dans ce blog, nous partageons notre expérience sur ce qu'il a fallu pour rendre cette vidéo une réalité. L'histoire est divisée en 3 parties principales, chacune décrivant une étape majeure de notre approche :

  • Développer un POC pour évaluer la faisabilité,

  • Itérer sur les données et le modèle pour atteindre une performance acceptable,

  • Intégrer la fonctionnalité dans un smartphone.

magicplan est une application iOS et Android permettant à quiconque de créer un plan de sol de son domicile en quelques minutes et est aussi simple que de prendre une photo.

Avec plus de 16 millions de téléchargements, magicplan est la référence en matière de plans de sol et d'applications de rénovation.
Depuis le premier jour, notre application a mis en œuvre des capacités de capture de réalité basées sur la « vision par ordinateur » et de suivi de caméra, en faisant l'une des premières applications à offrir une véritable expérience de réalité augmentée sur un smartphone.
Mais aujourd'hui, cela ne suffit pas et nos clients demandent la possibilité d'extraire plus d'informations pendant le processus de capture.
C'est ici que le Deep Learning entre en jeu, offrant à magicplan une nouvelle dimension de compréhension des pièces, comme illustré dans cette vidéo :

Vous pouvez voir comment un utilisateur capture, en temps réel, l'emplacement et les dimensions des portes et fenêtres d'une pièce, littéralement juste en prenant des photos d'elles.
C'est comme ça que ça fonctionne : chaque fois qu'un utilisateur prend une photo d'un mur, magicplan traite l'image prise avec un type spécial de réseau de Deep Learning qui détecte, localise et cadre les fenêtres et les portes présentes n'importe où sur le cliché. Les avantages en termes de commodité et de gain de temps pour l'utilisateur sont énormes.

Dans ce blog, nous partageons notre expérience sur ce qu'il a fallu pour rendre cette vidéo une réalité. L'histoire est divisée en 3 parties principales, chacune décrivant une étape majeure de notre approche :

  • Développer un POC pour évaluer la faisabilité,

  • Itérer sur les données et le modèle pour atteindre une performance acceptable,

  • Intégrer la fonctionnalité dans un smartphone.

Partie 1 - Développer un POC pour évaluer la faisabilité

En tant que responsable d'une petite équipe de recherche dans une petite startup, mon premier devoir est de m'assurer que nous travaillons sur quelque chose d'impactant pour le produit. Cela signifie que nous devons identifier rapidement et à un coût minimal si une technologie innovante potentielle vaut la peine d'être investiguée ou non.

Un prototype (POC) est essentiel pour y parvenir. Par POC, nous entendons traduire une approche / un algorithme / une solution décrite principalement dans des articles académiques en un code exécutable que nous allons exécuter pour évaluer les performances de l'algorithme dans des circonstances aussi proches que possible du cas final que nous souhaitons résoudre.

Plusieurs facteurs ont contribué à développer et évaluer rapidement le POC :

  • Presque tous les outils et frameworks utilisés pour effectuer de l'apprentissage profond sont open-source, abaissant considérablement la barrière d'accès à un environnement professionnel / fiable,

  • Le monde académique est très actif dans le domaine de “l'apprentissage profond pour la vision par ordinateur” et les chercheurs partagent ce qu'ils développent avec la communauté, simplifiant drastiquement le travail nécessaire pour traduire une idée en code,

  • Les GAFAs ont fait un travail monumental pour structurer et partager les modèles d'apprentissage profond les plus populaires avec la communauté IA, accélérant la tâche de tester un modèle particulièrement populaire sur un sous-domaine spécifique,

  • Les données sont essentielles dans l'apprentissage profond. Heureusement, il existe de grandes bases de données annotées et gratuites disponibles sur Internet pour entraîner des modèles,

  • L'apprentissage profond exige beaucoup de calculs. La bonne nouvelle est que le matériel d'apprentissage profond devient moins cher. En alternative, vous pouvez commencer à utiliser GPU dans le cloud et éviter les investissements au début (lorsque vous n'êtes pas sûr de la promesse de l'idée).

Aidés par ces facilitateurs, nous avons structuré le POC en 4 étapes principales :

  • identifier le domaine de recherche académique couvrant nos besoins,

  • se familiariser avec le framework d'apprentissage profond le plus populaire,

  • tirer parti des modèles pré-entraînés pertinents disponibles sur Internet,

  • les tester sur notre défi spécifique : la capture des portes et fenêtres.

En tant que responsable d'une petite équipe de recherche dans une petite startup, mon premier devoir est de m'assurer que nous travaillons sur quelque chose d'impactant pour le produit. Cela signifie que nous devons identifier rapidement et à un coût minimal si une technologie innovante potentielle vaut la peine d'être investiguée ou non.

Un prototype (POC) est essentiel pour y parvenir. Par POC, nous entendons traduire une approche / un algorithme / une solution décrite principalement dans des articles académiques en un code exécutable que nous allons exécuter pour évaluer les performances de l'algorithme dans des circonstances aussi proches que possible du cas final que nous souhaitons résoudre.

Plusieurs facteurs ont contribué à développer et évaluer rapidement le POC :

  • Presque tous les outils et frameworks utilisés pour effectuer de l'apprentissage profond sont open-source, abaissant considérablement la barrière d'accès à un environnement professionnel / fiable,

  • Le monde académique est très actif dans le domaine de “l'apprentissage profond pour la vision par ordinateur” et les chercheurs partagent ce qu'ils développent avec la communauté, simplifiant drastiquement le travail nécessaire pour traduire une idée en code,

  • Les GAFAs ont fait un travail monumental pour structurer et partager les modèles d'apprentissage profond les plus populaires avec la communauté IA, accélérant la tâche de tester un modèle particulièrement populaire sur un sous-domaine spécifique,

  • Les données sont essentielles dans l'apprentissage profond. Heureusement, il existe de grandes bases de données annotées et gratuites disponibles sur Internet pour entraîner des modèles,

  • L'apprentissage profond exige beaucoup de calculs. La bonne nouvelle est que le matériel d'apprentissage profond devient moins cher. En alternative, vous pouvez commencer à utiliser GPU dans le cloud et éviter les investissements au début (lorsque vous n'êtes pas sûr de la promesse de l'idée).

Aidés par ces facilitateurs, nous avons structuré le POC en 4 étapes principales :

  • identifier le domaine de recherche académique couvrant nos besoins,

  • se familiariser avec le framework d'apprentissage profond le plus populaire,

  • tirer parti des modèles pré-entraînés pertinents disponibles sur Internet,

  • les tester sur notre défi spécifique : la capture des portes et fenêtres.

Le domaine de la recherche académique

Dans notre cas, il était facile d'identifier « détection d'objet (ou localisation) » comme le domaine de recherche dans lequel nous voulions nous plonger. Fait intéressant, « localisation d'objet » n'est que le deuxième niveau dans l'échelle de complexité de ce que vous pouvez comprendre dans une image, comme décrit dans le tableau ci-dessous.

Dans notre cas, il était facile d'identifier « détection d'objet (ou localisation) » comme le domaine de recherche dans lequel nous voulions nous plonger. Fait intéressant, « localisation d'objet » n'est que le deuxième niveau dans l'échelle de complexité de ce que vous pouvez comprendre dans une image, comme décrit dans le tableau ci-dessous.

Cadres d'apprentissage profond

TensorFlow (propriété de Google) est le cadre de Deep Learning le plus utilisé aujourd'hui. Cela signifie qu'il y a de fortes chances que tout travail décrit dans un article ait été implémenté ou reproduit en utilisant TensorFlow. En note complémentaire sur la sélection de cadres, la popularité est un critère important mais pas le seul. La facilité d'utilisation et/ou la maturité des outils de production sont également importants.

Accéder aux modèles pré-entraînés

L'équipe TensorFlow maintient un Model Zoo dans un référentiel supplémentaire. Là, vous pouvez trouver plusieurs modules python offrant des API pour implémenter les modèles de Deep Learning les plus populaires, y compris les modèles de détection d'objets. Ces modèles sont fournis avec des configurations pré-entraînées. L'entraînement a été réalisé sur des ensembles de données disponibles tels que COCO. Cela nous a fait gagner du temps et des développements dans les premières étapes de l'évaluation.

l'implémentation de la 'détection d'objets' dans la bibliothèque offre la possibilité d'utiliser l'‘Apprentissage Transféré’ par le biais d'un affinage. Dans cette approche, vous commencez avec un modèle existant, pré-entraîné sur des millions d'images (tel que l'ensemble de données COCO), et vous le ré-entraînez sur un plus petit ensemble d'images (quelques centaines d'images sont suffisantes pour des tests préliminaires) de votre sous-domaine (images de fenêtres et de portes prises à l'intérieur dans notre cas).

Cette approche nous a épargné le fardeau de deux défis importants lors du POC :

  • le fait que, généralement, l'apprentissage profond a besoin de TONS de données pour généraliser correctement sur un problème donné. Et il est peu probable que vous disposiez de ce volume de données au début de votre enquête,

  • le fait que s'entraîner sur des millions d'images prend beaucoup de temps (et d'argent) si vous ne disposez pas des ressources matérielles adéquates. Cela est souvent le cas lorsque vous êtes un débutant dans le monde de l'apprentissage profond.

Le défi de trouver plusieurs milliers d'images de portes et de fenêtres déjà annotées a été surmonté grâce à la disponibilité de l'ensemble de données d'entraînement ImageNet.

ImageNet offre l'accès à plus de 16 millions d'images indexées avec un arbre sémantique de plus de 35 000 catégories différentes. En sélectionnant simplement les images contenant les mots-clés 'porte' ou 'fenêtre', nous avons pu rassembler environ 3500 images, suffisantes pour effectuer un entraînement basé sur

Tests sur notre cas d'utilisation

En tenant compte des contraintes temporelles du scénario de capture magicplan, nous avons choisi de commencer par un modèle simple et populaire appelé “SSD Inception V2” (plus de détails dans la partie suivante), pour voir à quel point il était capable de gérer la tâche.

Nous avons réentraîné le modèle avec 3300 images réparties en un ensemble d’entraînement et un ensemble de validation, comme recommandé pour un entraînement approprié. Les 200 images restantes ont été utilisées comme ensemble de test pour mesurer les progrès de nos différentes itérations.

En quelques semaines, nous avons pu atteindre un premier niveau de performance acceptable avec le modèle entraîné. Loin d'être parfait, les résultats étaient suffisamment bons pour prendre la décision d'investir plus de temps et de ressources dans la détection d'objets basée sur l'apprentissage profond pour les fenêtres et les portes.

Leçons apprises

La principale leçon de cette première étape est que, lorsqu'il s'agit de mettre en œuvre des fonctionnalités s'appuyant sur des techniques de Deep Learning validées (comme la détection d'objets), vous pouvez et devez utiliser toutes les ressources de Deep Learning existantes disponibles sur Internet pour maximiser l'efficacité du développement et des tests de votre prototype.

Cela dit, il est une chose d'avoir un prototype fonctionnel montrant le potentiel de l'approche. C'est une autre chose de le faire partie d'une application téléchargée par des millions d'utilisateurs chaque jour.

À venir prochainement

Dans la partie 2 de 3, nous décrirons plus en détail le travail nécessaire pour passer d'un prototype à une fonctionnalité utilisable en termes de performance.