SegNet est une architecture de réseau de neurones profonde conçue pour la segmentation sémantique, une tâche de vision par ordinateur qui attribue une étiquette de classe à chaque pixel d'une image. Elle a été introduite en 2015 par des chercheurs de l'Université de Cambridge, notamment Vijay Badrinarayanan, Alex Kendall et Roberto Cipolla. SegNet est remarquable pour sa structure encodeur-décodeur, qui capture des caractéristiques sémantiques de haut niveau tout en préservant la résolution spatiale grâce à un mécanisme qui transfère les indices de max-pooling de l'encodeur au décodeur. Cette conception la rend efficace en termes de mémoire et de calcul par rapport aux approches antérieures, et elle a été largement utilisée dans des applications telles que la conduite autonome et la compréhension de scènes.
L'architecture se compose d'un réseau encodeur qui réduit progressivement la résolution de l'image d'entrée à travers des couches convolutionnelles et de pooling, et d'un réseau décodeur correspondant qui suréchantillonne les cartes de caractéristiques jusqu'à la résolution d'origine. L'innovation clé réside dans l'utilisation des indices de pooling : lors du max-pooling dans l'encodeur, les emplacements des valeurs maximales sont enregistrés et transmis au décodeur, qui les utilise pour placer les valeurs suréchantillonnées aux positions correctes. Cela élimine le besoin de couches de suréchantillonnage apprenables et réduit le nombre de paramètres, rendant SegNet plus efficace que des alternatives comme U-Net dans certains contextes.
Architecture et entraînement
L'encodeur de SegNet est basé sur les couches convolutionnelles du réseau VGG16, pré-entraîné sur ImageNet, mais il supprime les couches entièrement connectées pour réduire le nombre de paramètres. L'encodeur se compose de 13 couches convolutionnelles, chacune suivie d'une normalisation par lots et d'une activation ReLU, et est organisé en cinq étapes avec un max-pooling entre elles. Le décodeur reflète cette structure avec 13 couches convolutionnelles, mais il utilise des couches de suréchantillonnage qui prennent les indices de pooling de l'étape correspondante de l'encodeur. La couche finale est un classifieur softmax qui produit une distribution de probabilité sur les classes pour chaque pixel.
L'entraînement est effectué de bout en bout en utilisant une descente de gradient stochastique avec une fonction de perte d'entropie croisée. Les auteurs ont rapporté que l'utilisation des poids de l'encodeur pré-entraîné accélérait la convergence et améliorait la précision. Ils ont également employé des techniques de augmentation de données telles que le recadrage aléatoire et le retournement pour augmenter la robustesse. Le modèle a été entraîné sur le jeu de données CamVid, qui contient des scènes routières avec 11 classes, puis évalué sur d'autres références comme SUN RGB-D et Cityscapes.
Performance et comparaison
Dans l'article original, SegNet a atteint une intersection sur union (IoU) moyenne de 60,1 % sur l'ensemble de test CamVid, surpassant des méthodes antérieures telles que FCN (Fully Convolutional Network) et DeconvNet. Elle était particulièrement efficace pour capturer des détails fins comme les bords de route et les petits objets, grâce au mécanisme d'indices de pooling qui préserve les informations de contour. Cependant, elle avait une utilisation mémoire plus élevée lors de l'inférence que certaines architectures ultérieures, et sa précision a ensuite été dépassée par des modèles avec des mécanismes d'attention plus sophistiqués ou des convolutions dilatées.
Comparée à U-Net, développée à peu près à la même époque pour la segmentation d'images biomédicales, SegNet utilise une stratégie de suréchantillonnage différente. U-Net concatène les caractéristiques de l'encodeur avec celles du décodeur via des connexions de saut, tandis que SegNet ne transfère que les indices de pooling. Cela rend SegNet plus efficace en mémoire pendant l'entraînement, mais potentiellement moins précise dans les tâches où les détails spatiaux fins sont critiques. Le choix entre elles dépend souvent de l'application spécifique et des contraintes de calcul.
Applications et impact
SegNet a été appliquée dans divers domaines, notamment la conduite autonome, où elle est utilisée pour segmenter les scènes routières en catégories comme route, véhicule, piéton et bâtiment. Elle a également été utilisée en robotique pour la compréhension de scènes, en télédétection pour la classification de l'occupation des sols, et en imagerie médicale pour la segmentation d'organes ou de tumeurs. Son efficacité la rendait adaptée aux applications en temps réel sur des dispositifs embarqués, et elle a influencé les architectures encodeur-décodeur ultérieures dans le apprentissage profond.
L'article « SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation » a été publié dans IEEE Transactions on Pattern Analysis and Machine Intelligence en 2017, et le code a été publié sous une licence open-source. L'architecture a été citée des milliers de fois et reste un point de référence pour la recherche en segmentation sémantique.
Limites et évolution
Malgré ses forces, SegNet présente des limites. Le mécanisme d'indices de pooling, bien qu'efficace, peut perdre certaines informations spatiales car il n'enregistre que l'emplacement de la valeur maximale, et non la carte de caractéristiques complète. Cela peut entraîner des contours flous dans certains cas. De plus, la structure fixe encodeur-décodeur n'intègre pas le contexte multi-échelle aussi efficacement que des modèles ultérieurs comme PSPNet ou DeepLab, qui utilisent un pooling pyramidal ou des convolutions atreuses.
Des recherches ultérieures ont bâti sur les idées de SegNet, comme l'utilisation de connexions de saut pour combiner des caractéristiques de bas et de haut niveau, ou l'emploi de mécanismes d'attention pour affiner les cartes de segmentation. Les architectures modernes comme les variantes de U-Net et les transformeurs ont largement supplanté SegNet en termes de précision, mais ses principes restent fondamentaux. Au milieu des années 2020, SegNet est encore utilisée comme référence dans les comparaisons académiques et dans les applications où l'efficacité computationnelle est prioritaire par rapport à la précision de pointe.
Références et héritage
La contribution de SegNet réside dans la démonstration qu'un encodeur-décodeur avec transfert d'indices de pooling peut atteindre des résultats de segmentation compétitifs avec une empreinte mémoire relativement faible. Elle a été intégrée dans plusieurs cadres et boîtes à outils de apprentissage automatique, et sa conception a inspiré de nombreuses variantes. L'implémentation originale est disponible sur GitHub, et l'article est largement cité dans la littérature en vision par ordinateur. Son héritage est évident dans l'utilisation continue des structures encodeur-décodeur dans les modèles de segmentation modernes, y compris ceux basés sur les transformeurs et les approches de IA générative.