Un guide 2021 de la segmentation sémantique

Nœud source: 872271

Introduction

L'apprentissage en profondeur a été très efficace lorsque l'on travaille avec des images sous forme de données et est actuellement à un stade où il fonctionne mieux que les humains sur plusieurs cas d'utilisation. Les problèmes les plus importants que les humains se sont intéressés à résoudre avec la vision par ordinateur sont classification d'images, détection d'objets et segmentation dans l'ordre croissant de leur difficulté.

Dans la simple tâche ancienne de classification d'images, nous souhaitons simplement obtenir les étiquettes de tous les objets présents dans une image. Dans la détection d'objets, nous allons plus loin et essayons de savoir avec quels objets sont présents dans une image, l'emplacement où les objets sont présents à l'aide de boîtes englobantes. La segmentation d'image l'amène à un nouveau niveau en essayant de découvrir avec précision la limite exacte des objets dans l'image.

Source http://cs224d.stanford.edu/index.html

Dans cet article, nous passerons en revue ce concept de segmentation d'image, discuterons des cas d'utilisation pertinents, des différentes architectures de réseau neuronal impliquées dans l'obtention des résultats, des métriques et des ensembles de données à explorer.

Qu'est-ce que la segmentation d'image

Nous savons qu'une image n'est rien d'autre qu'une collection de pixels. La segmentation d'image est le processus de classification de chaque pixel d'une image appartenant à une certaine classe et peut donc être considérée comme un problème de classification par pixel. Il existe deux types de techniques de segmentation

Source http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf
  1. Segmentation sémantique : - La segmentation sémantique est le processus de classification de chaque pixel appartenant à une étiquette particulière. Cela ne diffère pas selon les instances du même objet. Par exemple, s'il y a 2 chats dans une image, la segmentation sémantique donne la même étiquette à tous les pixels des deux chats
  2. Segmentation d'instance : - La segmentation d'instance diffère de la segmentation sémantique en ce sens qu'elle donne une étiquette unique à chaque instance d'un objet particulier dans l'image. Comme on peut le voir sur l'image ci-dessus, les 3 chiens se voient attribuer des couleurs différentes, c'est-à-dire des étiquettes différentes. Avec la segmentation sémantique, tous auraient reçu la même couleur.

Nous allons donc maintenant arriver au point où aurions-nous besoin de ce type d'algorithme

Cas d'utilisation de la segmentation d'image

Reconnaissance de l'écriture manuscrite : - Junjo et tous ont montré comment la segmentation sémantique est utilisée pour extraire des mots et des lignes de documents manuscrits dans leur Document de recherche 2019 pour reconnaître les caractères manuscrits

Identifier

Mode portrait Google : - Il existe de nombreux cas d'utilisation où il est absolument indispensable de séparer le premier plan de l'arrière-plan. Par exemple, en mode portrait de Google, nous pouvons voir l'arrière-plan flou tandis que le premier plan reste inchangé pour donner un effet cool

Source: - https://ai.googleblog.com/2018/03/mobile-real-time-video-segmentation.html

Histoires YouTube : - Google a récemment publié une fonctionnalité d'histoires YouTube permettant aux créateurs de contenu d'afficher différents arrière-plans tout en créant des histoires.

Source: - https://ai.googleblog.com/2018/03/mobile-real-time-video-segmentation.html

Maquillage virtuel : - L'application du rouge à lèvres virtuel est désormais possible à l'aide de la segmentation d'image

Source: - https://www.theverge.com/2017/3/16/14946086/sephora-virtual-assistant-ios-app-update-ar-makeup

4. essai virtuel : - L'essai virtuel de vêtements est une fonctionnalité intéressante qui était disponible dans les magasins en utilisant du matériel spécialisé qui crée un modèle 3D. Mais avec l'apprentissage en profondeur et la segmentation d'image, la même chose peut être obtenue en utilisant juste une image 2D

Source: - https://arxiv.org/pdf/1807.07688.pdf

Recherche d'images visuelles : - L'idée de segmenter les vêtements est également utilisée dans les algorithmes de récupération d'images dans le commerce électronique. Par exemple, Pinterest / Amazon vous permet de télécharger n'importe quelle image et d'obtenir des produits similaires en effectuant une recherche d'image basée sur la segmentation de la partie du tissu

Source: - https://github.com/paucarre/tiefvision

les voitures sans conducteur : - Les voitures autonomes ont besoin d'une compréhension complète de leur environnement à un niveau parfait au pixel près. Par conséquent, la segmentation d'image est utilisée pour identifier les voies et autres informations nécessaires

Source: - https://medium.com/intro-to-artificial-intelligence/semantic-segmentation-udaitys-self-driving-car-engineer-nanodegree-c01eb6eaf9d

Nanonets aide les entreprises du Fortune 500 à offrir de meilleures expériences client à grande échelle grâce à la segmentation sémantique.

Méthodes et techniques

Avant l'avènement du deep learning, des techniques classiques d'apprentissage automatique telles que SVM, Random Forest, K-means Clustering étaient utilisées pour résoudre le problème de la segmentation d'image. Mais comme pour la plupart des énoncés de problèmes liés à l'image, l'apprentissage en profondeur a fonctionné globalement mieux que les techniques existantes et est devenu une norme maintenant lorsqu'il s'agit de segmentation sémantique. Passons en revue les techniques utilisées pour résoudre le problème

Réseau entièrement convolutif

L'architecture générale d'un CNN se compose de quelques couches convolutives et de regroupement suivies de quelques couches entièrement connectées à la fin. L'article de Fully Convolutional Network publié en 2014 soutient que la couche finale entièrement connectée peut être considérée comme faisant une convolution 1 × 1 qui couvre toute la région.

Source: - https://arxiv.org/abs/1411.4038

Par conséquent, les couches denses finales peuvent être remplacées par une couche de convolution obtenant le même résultat. Mais maintenant, l'avantage de faire cela est que la taille de l'entrée n'a plus besoin d'être fixée. Lorsqu'il s'agit de couches denses, la taille de l'entrée est limitée et, par conséquent, lorsqu'une entrée de taille différente doit être fournie, elle doit être redimensionnée. Mais en remplaçant une couche dense par convolution, cette contrainte n'existe pas.

De même, lorsqu'une plus grande taille d'image est fournie en entrée, la sortie produite sera une carte de caractéristiques et pas seulement une sortie de classe comme pour une image de taille d'entrée normale. Le comportement observé de la carte des caractéristiques finale représente également la carte thermique de la classe requise, c'est-à-dire que la position de l'objet est mise en évidence dans la carte des caractéristiques. Étant donné que la sortie de la carte des caractéristiques est une carte thermique de l'objet requis, il s'agit d'informations valides pour notre cas d'utilisation de segmentation.

Étant donné que la carte des caractéristiques obtenue au niveau de la couche de sortie est sous-échantillonnée en raison de l'ensemble des convolutions effectuées, nous souhaitons la suréchantillonner à l'aide d'une technique d'interpolation. L'échantillonnage bilinéaire fonctionne mais l'article propose d'utiliser l'échantillonnage appris avec déconvolution qui peut même apprendre un échantillonnage ascendant non linéaire.

La partie d'échantillonnage vers le bas du réseau est appelée un codeur et la partie d'échantillonnage ascendant est appelée un décodeur. C'est un modèle que nous verrons dans de nombreuses architectures, c'est-à-dire réduire la taille avec un encodeur puis sur échantillonner avec un décodeur. Dans un monde idéal, nous ne voudrions pas réduire l'échantillon en utilisant la mise en commun et conserver la même taille partout, mais cela conduirait à une énorme quantité de paramètres et serait irréalisable d'un point de vue informatique.

Source: - https://arxiv.org/abs/1411.4038

Bien que les résultats obtenus aient été corrects, le rendement observé est approximatif et non régulier. La raison en est la perte d'informations au niveau de la couche d'entités finale due à un sous-échantillonnage de 32 fois à l'aide de couches de convolution. Il devient maintenant très difficile pour le réseau d'effectuer un suréchantillonnage 32x en utilisant ces petites informations. Cette architecture s'appelle FCN-32

Pour résoudre ce problème, le document propose 2 autres architectures FCN-16, FCN-8. Dans le FCN-16, les informations de la couche de regroupement précédente sont utilisées avec la carte des caractéristiques finale et, par conséquent, la tâche du réseau est maintenant d'apprendre un échantillonnage 16x supérieur, ce qui est meilleur par rapport au FCN-32. FCN-8 essaie de le rendre encore meilleur en incluant les informations d'une autre couche de regroupement précédente.

Unet

U-net s'appuie sur le réseau entièrement convolutif d'en haut. Il a été construit à des fins médicales pour détecter des tumeurs dans les poumons ou le cerveau. Il se compose également d'un codeur qui sous-échantillonne l'image d'entrée en une carte de caractéristiques et du décodeur qui échantillonne la carte de caractéristiques à la taille d'image d'entrée en utilisant des couches de déconvolution apprises.

Source: - https://arxiv.org/abs/1505.04597

La principale contribution de l'architecture U-Net réside dans les connexions de raccourci. Nous avons vu ci-dessus dans FCN que depuis que nous sous-échantillonnons une image dans le cadre de l'encodeur, nous avons perdu beaucoup d'informations qui ne peuvent pas être facilement récupérées dans la partie encodeur. FCN tente de résoudre ce problème en prenant les informations des couches de regroupement avant la couche d'entités finale.

U-Net propose une nouvelle approche pour résoudre ce problème de perte d'informations. Il propose d'envoyer des informations à chaque couche d'échantillonnage ascendante dans le décodeur à partir de la couche d'échantillonnage descendante correspondante dans le codeur comme on peut le voir sur la figure ci-dessus, capturant ainsi des informations plus fines tout en maintenant le calcul à un niveau bas. Étant donné que les couches au début du codeur auraient plus d'informations, elles renforceraient l'opération d'échantillonnage ascendant du décodeur en fournissant des détails fins correspondant aux images d'entrée, améliorant ainsi beaucoup les résultats. Le document a également suggéré l'utilisation d'une nouvelle fonction de perte dont nous parlerons ci-dessous.

Laboratoire profond

Deeplab, d'un groupe de chercheurs de Google, a proposé une multitude de techniques pour améliorer les résultats existants et obtenir des résultats plus fins à des coûts de calcul inférieurs. Les 3 principales améliorations suggérées dans le cadre de la recherche sont

1) Atreuses circonvolutions
2) Regroupement pyramidal spatial atro
3) Utilisation des champs aléatoires conditionnels pour améliorer la sortie finale
Discutons de tout cela

Convolution atroce

L'un des problèmes majeurs de l'approche FCN est la réduction excessive des effectifs due à des opérations de mise en commun consécutives. En raison de la série de regroupements, l'image d'entrée est sous-échantillonnée de 32x qui est à nouveau échantillonnée pour obtenir le résultat de la segmentation. Le sous-échantillonnage de 32x entraîne une perte d'informations qui est très cruciale pour obtenir une sortie fine dans une tâche de segmentation. La déconvolution pour augmenter l'échantillon de 32x est également une opération coûteuse en calcul et en mémoire, car il y a des paramètres supplémentaires impliqués dans la formation d'un échantillonnage appris.

Le papier propose l'utilisation de la convolution Atrous ou de la convolution de trous ou de la convolution dilatée qui aide à comprendre le grand contexte en utilisant le même nombre de paramètres.

Source:- https://www.mdpi.com/1424-8220/19/24/5361/htm

La convolution dilatée fonctionne en augmentant la taille du filtre en ajoutant des zéros (appelés trous) pour combler l'espace entre les paramètres. Le nombre de trous / zéros remplis entre les paramètres du filtre est appelé par un terme taux de dilatation. Lorsque le taux est égal à 1, ce n'est rien d'autre que la convolution normale. Lorsque le taux est égal à 2, un zéro est inséré entre tous les autres paramètres, ce qui donne au filtre l'apparence d'une convolution 5 × 5. Maintenant, il a la capacité d'obtenir le contexte de la convolution 5 × 5 tout en ayant des paramètres de convolution 3 × 3. De même pour le taux 3, le champ réceptif passe à 7 × 7.

Dans Deeplab, les dernières couches de regroupement sont remplacées pour avoir un pas de 1 au lieu de 2, ce qui maintient le taux d'échantillonnage à 8x seulement. Ensuite, une série d'atroces circonvolutions sont appliquées pour capturer le contexte plus large. Pour l'apprentissage, le masque étiqueté de sortie est sous-échantillonné de 8x pour comparer chaque pixel. Pour l'inférence, l'échantillonnage bilinéaire vers le haut est utilisé pour produire une sortie de la même taille, ce qui donne des résultats suffisamment décents à des coûts de calcul / mémoire inférieurs, car l'échantillonnage bilinéaire supérieur ne nécessite aucun paramètre par opposition à la déconvolution pour l'échantillonnage.

PAES

La mise en commun pyramidale spatiale est un concept introduit dans SPPNet pour capturer des informations multi-échelles à partir d'une carte de caractéristiques. Avant l'introduction des images d'entrée SPP à différentes résolutions sont fournies et les cartes de caractéristiques calculées sont utilisées ensemble pour obtenir les informations multi-échelles, mais cela prend plus de calcul et de temps. Avec Spatial Pyramidal Pooling, les informations multi-échelles peuvent être capturées avec une seule image d'entrée.

Source: - http://kaiminghe.com/eccv14sppnet/index.html

Avec le module SPP, le réseau produit 3 sorties de dimensions 1 × 1 (ie GAP), 2 × 2 et 4 × 4. Ces valeurs sont concaténées par conversion en un vecteur 1d capturant ainsi les informations à plusieurs échelles. Un autre avantage de l'utilisation de SPP est que des images d'entrée de toute taille peuvent être fournies.

ASPP prend le concept de fusion d'informations de différentes échelles et l'applique aux convolutions Atrous. L'entrée est convoluée avec différents taux de dilatation et les sorties de ceux-ci sont fusionnées ensemble.

Source: - http://liangchiehchen.com/projects/DeepLab.html

Comme on peut le voir, l'entrée est convoluée avec des filtres 3x3 de taux de dilatation 6, 12, 18 et 24 et les sorties sont concaténées ensemble puisqu'elles sont de même taille. Une sortie de convolution 1 × 1 est également ajoutée à la sortie avec fusible. Pour fournir également les informations globales, la sortie GAP est également ajoutée ci-dessus après l'échantillonnage. La sortie fusionnée de 3 × 3 sorties dilatées variées, 1 × 1 et la sortie GAP passe par une convolution 1 × 1 pour obtenir le nombre requis de canaux.

Étant donné que l'image requise à segmenter peut être de n'importe quelle taille dans l'entrée, les informations multi-échelles d'ASPP aident à améliorer les résultats.

Amélioration de la sortie avec CRF

Le pooling est une opération qui aide à réduire le nombre de paramètres dans un réseau de neurones mais qui apporte également une propriété d'invariance. L'invariance est la qualité d'un réseau de neurones non affecté par de légères traductions en entrée. En raison de cette propriété obtenue avec la mise en commun, la sortie de segmentation obtenue par un réseau de neurones est grossière et les limites ne sont pas définies concrètement.

Source: - http://liangchiehchen.com/projects/DeepLab.html

Pour résoudre ce problème, l'article propose l'utilisation du modèle graphique CRF. Le champ aléatoire conditionnel exécute une étape de post-traitement et tente d'améliorer les résultats produits pour définir les limites du shaper. Cela fonctionne en classant un pixel en fonction non seulement de son étiquette, mais également en fonction d'autres étiquettes de pixel. Comme on peut le voir sur la figure ci-dessus, la frontière grossière produite par le réseau neuronal devient plus affinée après avoir traversé le CRF.

Deeplab-v3 a introduit la normalisation des lots et le taux de dilatation suggéré multiplié par (1,2,4) à l'intérieur de chaque couche dans un bloc Resnet. L'ajout de fonctionnalités au niveau de l'image au module ASPP qui a été discuté dans la discussion ci-dessus sur ASPP a été proposé dans le cadre de ce document

Source: - https://arxiv.org/pdf/1706.05587.pdf

Deeplab-v3 + a suggéré d'avoir un décodeur au lieu d'un simple échantillonnage bilinéaire 16x. Le décodeur prend un indice du décodeur utilisé par des architectures comme U-Net qui prennent des informations des couches de codeur pour améliorer les résultats. La sortie du codeur est échantillonnée 4x en utilisant un échantillonnage bilinéaire et concaténée avec les caractéristiques du codeur qui est à nouveau échantillonné 4x après avoir effectué une convolution 3 × 3. Cette approche donne de meilleurs résultats qu'un échantillonnage direct 16x vers le haut. Une architecture Xception modifiée est également proposée pour être utilisée à la place de Resnet dans le cadre du codeur et des convolutions séparables en profondeur sont maintenant utilisées au-dessus des convolutions Atrous pour réduire le nombre de calculs.

Réseau mondial de convolution

Source: - https://arxiv.org/pdf/1703.02719.pdf

La segmentation sémantique consiste à effectuer deux tâches simultanément

i) Classement
ii) Localisation

Les réseaux de classification sont créés pour être invariants à la translation et à la rotation, ne donnant ainsi aucune importance aux informations de localisation, tandis que la localisation implique l'obtention de détails précis par rapport à la localisation. Par conséquent, ces deux tâches sont intrinsèquement contradictoires. La plupart des algorithmes de segmentation accordent plus d'importance à la localisation, c'est-à-dire au second dans la figure ci-dessus et perdent ainsi de vue le contexte global. Dans ce travail, l'auteur propose un moyen de donner de l'importance à la tâche de classification tout en ne perdant pas les informations de localisation

Source: - https://arxiv.org/pdf/1703.02719.pdf

L'auteur propose d'y parvenir en utilisant de gros noyaux dans le cadre du réseau permettant ainsi des connexions denses et donc plus d'informations. Ceci est réalisé à l'aide d'un bloc GCN comme le montre la figure ci-dessus. Le bloc GCN peut être considéré comme un filtre de convolution akxk où k peut être un nombre supérieur à 3. Pour réduire le nombre de paramètres, le filtre akxk est divisé en blocs 1 xk et kx 1, kx1 et 1xk qui sont ensuite additionnés. Ainsi, en augmentant la valeur k, un contexte plus large est capturé.

De plus, l'auteur propose un bloc Boundary Refinement qui est similaire à un bloc résiduel vu dans Resnet consistant en une connexion de raccourci et une connexion résiduelle qui se résument pour obtenir le résultat. On observe que le fait d'avoir un bloc de raffinement des limites a entraîné une amélioration des résultats à la limite de la segmentation.

Les résultats ont montré que le bloc GCN améliorait la précision de classification des pixels plus proches du centre de l'objet, indiquant l'amélioration causée en raison de la capture du contexte à longue portée, tandis que le bloc de raffinement des limites permettait d'améliorer la précision des pixels plus proches de la limite.

En voir plus d'une fois - KSAC pour la segmentation sémantique

La famille Deeplab utilise ASPP pour permettre à plusieurs champs récepteurs de capturer des informations en utilisant différents taux de convolution atreuse. Bien que l'ASPP ait été très utile pour améliorer la segmentation des résultats, il existe certains problèmes inhérents dus à l'architecture. Il n'y a pas d'informations partagées entre les différentes couches parallèles dans ASPP, affectant ainsi le pouvoir de généralisation des noyaux dans chaque couche. De plus, étant donné que chaque couche s'adresse à différents ensembles d'échantillons d'apprentissage (des objets plus petits à un taux d'atre plus petit et des objets plus gros à des taux d'atre plus importants), la quantité de données pour chaque couche parallèle serait moins affectant ainsi la généralisabilité globale. De plus, le nombre de paramètres dans le réseau augmente linéairement avec le nombre de paramètres et peut donc conduire à un surajustement.

Source: - https://arxiv.org/pdf/1908.09443.pdf

Pour gérer tous ces problèmes, l'auteur propose une nouvelle structure de réseau appelée Kernel-Sharing Atrous Convolution (KSAC). Comme on peut le voir sur la figure ci-dessus, au lieu d'avoir un noyau différent pour chaque couche parallèle est ASPP, un seul noyau est partagé, améliorant ainsi la capacité de généralisation du réseau. En utilisant KSAC au lieu d'ASPP, 62% des paramètres sont sauvegardés lorsque des taux de dilatation de 6,12, 18 et XNUMX sont utilisés.

Un autre avantage de l'utilisation d'une structure KSAC est que le nombre de paramètres est indépendant du nombre de taux de dilatation utilisés. Ainsi, nous pouvons ajouter autant de taux que possible sans augmenter la taille du modèle. ASPP donne les meilleurs résultats avec des taux 6,12,18 mais la précision diminue avec 6,12,18,24 indiquant un possible surajustement. Mais la précision KSAC s'améliore encore considérablement indiquant la capacité de généralisation améliorée.

Cette technique de partage de noyau peut également être considérée comme une augmentation de l'espace des fonctionnalités puisque le même noyau est appliqué sur plusieurs débits. De même que l'augmentation des entrées donne de meilleurs résultats, l'augmentation des fonctionnalités effectuée dans le réseau devrait aider à améliorer la capacité de représentation du réseau.

Segmentation vidéo

Pour les cas d'utilisation tels que les voitures autonomes, la robotique, etc., il est nécessaire de segmenter en temps réel la vidéo observée. Les architectures évoquées jusqu'à présent sont à peu près conçues pour la précision et non pour la vitesse. Donc, s'ils sont appliqués image par image sur une vidéo, le résultat viendrait à très faible vitesse.

De plus, généralement dans une vidéo, il y a beaucoup de chevauchement dans les scènes sur des images consécutives qui pourraient être utilisées pour améliorer les résultats et la vitesse qui ne viendront pas en image si l'analyse est effectuée sur une base par image. À l'aide de ces indices, discutons des architectures spécialement conçues pour les vidéos

STFCN

Spatio-Temporal FCN propose d'utiliser FCN avec LSTM pour effectuer la segmentation vidéo. Nous savons déjà comment FCN peut être utilisé pour extraire des fonctionnalités de segmentation d'une image. Les LSTM sont une sorte de réseaux neuronaux qui peuvent capturer des informations séquentielles au fil du temps. STFCN combine la puissance du FCN avec le LSTM pour capturer à la fois les informations spatiales et temporelles

Source: - https://arxiv.org/abs/1608.05971

Comme on peut le voir sur la figure ci-dessus, STFCN consiste en un FCN, module spatio-temporel suivi d'une déconvolution. La carte des caractéristiques produite par un FCN est envoyée au module Spatio-Temporal qui a également une entrée du module de la trame précédente. Le module basé sur ces deux entrées capture les informations temporelles en plus des informations spatiales et les envoie à travers lesquelles sont échantillonnées à la taille d'origine de l'image en utilisant une déconvolution similaire à la façon dont cela se fait dans FCN

Étant donné que FCN et LSTM travaillent ensemble dans le cadre de STFCN, le réseau peut être entraîné de bout en bout et surpasse les approches de segmentation de trame unique. Il existe des approches similaires où LSTM est remplacé par GRU mais le concept est le même de capturer les informations spatiales et temporelles

CNN vidéo sémantique grâce à la déformation de représentation

Cet article propose l'utilisation du flux optique sur des images adjacentes comme entrée supplémentaire pour améliorer les résultats de segmentation

Source: - https://arxiv.org/abs/1708.03088

L'approche suggérée peut être intégrée à n'importe quelle architecture standard en tant que plug-in. L'ingrédient clé qui est en jeu est le module NetWarp. Pour calculer la carte de segmentation, le flux optique entre la trame actuelle et la trame précédente est calculé, c'est-à-dire Ft et est passé à travers un FlowCNN pour obtenir Λ (Ft). Ce processus est appelé transformation de flux. Cette valeur est passée à travers un module de distorsion qui prend également en entrée la carte de caractéristiques d'une couche intermédiaire calculée en passant par le réseau. Cela donne une carte d'entités déformée qui est ensuite combinée avec la carte d'entités intermédiaires de la couche actuelle et l'ensemble du réseau est formé de bout en bout. Cette architecture a obtenu des résultats SOTA sur les jeux de données de référence vidéo CamVid et Cityscapes.

Convnets Clockwork pour la segmentation sémantique vidéo

Cet article propose d'améliorer la vitesse d'exécution d'un réseau de neurones pour une tâche de segmentation sur des vidéos en tirant parti du fait que les informations sémantiques d'une vidéo changent lentement par rapport aux informations au niveau des pixels. Ainsi, les informations dans les couches finales changent à un rythme beaucoup plus lent par rapport aux couches de départ. Le papier suggère des moments différents

Source: - https://arxiv.org/abs/1608.03609

La figure ci-dessus représente le taux de comparaison de changement pour un pool de couches de niveau intermédiaire4 et une couche profonde fc7. Sur la gauche, nous voyons que, comme il y a beaucoup de changements dans les images, les deux couches montrent un changement, mais le changement pour pool4 est plus élevé. Sur la droite, nous voyons qu'il n'y a pas beaucoup de changement dans les cadres. Par conséquent, pool4 montre un changement marginal alors que fc7 montre un changement presque nul.

La recherche utilise ce concept et suggère que dans les cas où il n'y a pas beaucoup de changement entre les trames, il n'est pas nécessaire de calculer à nouveau les caractéristiques / sorties et les valeurs mises en cache de la trame précédente peuvent être utilisées. Étant donné que le taux de changement varie avec les couches, différentes horloges peuvent être définies pour différents ensembles de couches. Lorsque l'horloge tourne, les nouvelles sorties sont calculées, sinon les résultats mis en cache sont utilisés. Le taux de ticks d'horloge peut être fixé statiquement ou peut être appris dynamiquement

Source: - https://arxiv.org/abs/1608.03609

Segmentation sémantique vidéo à faible latence

Cet article améliore la discussion ci-dessus en sélectionnant de manière adaptative les cadres pour calculer la carte de segmentation ou pour utiliser le résultat mis en cache au lieu d'utiliser une minuterie fixe ou une heuristique.

Source: - https://arxiv.org/abs/1804.00389

Le document propose de diviser le réseau en 2 parties, des fonctionnalités de bas niveau et des fonctionnalités de haut niveau. Le coût de calcul des fonctionnalités de bas niveau dans un réseau est bien moindre par rapport aux fonctionnalités supérieures. La recherche suggère d'utiliser les caractéristiques du réseau de bas niveau comme indicateur du changement de la carte de segmentation. Dans leurs observations, ils ont trouvé une forte corrélation entre le changement des caractéristiques de bas niveau et le changement de la carte de segmentation. Donc, pour comprendre s'il est nécessaire de calculer si les caractéristiques supérieures doivent être calculées, la différence de caractéristiques inférieure sur 2 images est trouvée et est comparée si elle dépasse un seuil particulier. L'ensemble de ce processus est automatisé par un petit réseau de neurones dont la tâche est de prendre les caractéristiques inférieures de deux trames et de donner une prédiction quant à savoir si les caractéristiques supérieures doivent être calculées ou non. Etant donné que la décision de réseau est basée sur les trames d'entrée, la décision prise est dynamique par rapport à l'approche ci-dessus.

Segmentation pour les nuages ​​de points

Les données provenant d'un capteur tel que le lidar sont stockées dans un format appelé nuage de points. Le nuage de points n'est rien d'autre qu'une collection d'un ensemble non ordonné de points de données 3D (ou de toute dimension). Il s'agit d'une représentation éparse de la scène en 3D et CNN ne peut pas être directement appliqué dans un tel cas. De plus, toute architecture conçue pour traiter les nuages ​​de points doit prendre en compte le fait qu'il s'agit d'un ensemble non ordonné et peut donc avoir de nombreuses permutations possibles. Le réseau doit donc être invariant par permutation. Les points définis dans le nuage de points peuvent également être décrits par la distance qui les sépare. Les points plus proches en général portent des informations utiles qui sont utiles pour les tâches de segmentation

PointNet

PointNet est un article important dans l'histoire de la recherche sur les nuages ​​de points utilisant l'apprentissage profond pour résoudre les tâches de classification et de segmentation. Étudions l'architecture de Pointnet

Source: - https://arxiv.org/abs/1612.00593

L'entrée du réseau pour n points est une matrice nx 3. La matrice nx 3 est mappée sur nx 64 en utilisant une couche multi-perceptron partagée (réseau entièrement connecté) qui est ensuite mappée sur nx 64, puis sur nx 128 et nx 1024. La mise en commun maximale est appliquée pour obtenir un vecteur 1024 qui est converti en k sorties en passant par des MLP de tailles 512, 256 et k. Enfin, les sorties de classe k sont produites de la même manière que n'importe quel réseau de classification.

La classification ne traite que des fonctionnalités globales, mais la segmentation nécessite également des fonctionnalités locales. Ainsi, les caractéristiques locales de la couche intermédiaire à nx 64 sont concaténées avec des caractéristiques globales pour obtenir une matrice x 1088 qui est envoyée via mlp de 512 et 256 pour atteindre nx 256 puis via des MLP de 128 et m pour donner m classes de sortie pour chaque point dans un nuage de points.

Le réseau implique également une transformation d'entrée et une transformation de fonction dans le cadre du réseau dont la tâche est de ne pas changer la forme de l'entrée mais d'ajouter l'invariance aux transformations affines, c'est-à-dire la translation, la rotation, etc.

A-CNN

Source: - https://arxiv.org/abs/1904.08017

A-CNN propose l'utilisation de convolutions annulaires pour capturer des informations spatiales. Nous savons de CNN que les opérations de convolution capturent les informations locales qui sont essentielles pour comprendre l'image. A-CNN a conçu une nouvelle convolution appelée convolution annulaire qui est appliquée aux points de voisinage dans un nuage de points.

L'architecture prend en entrée nx 3 points et trouve pour eux des normales qui sont utilisées pour l'ordre des points. Un sous-échantillon de points est pris en utilisant l'algorithme FPS résultant en ni x 3 points. Sur ces convolution annulaire est appliquée pour augmenter à 128 dimensions. La convolution annulaire est effectuée sur les points de voisinage qui sont déterminés à l'aide d'un algorithme KNN.

Un autre ensemble des opérations ci-dessus est effectué pour augmenter les dimensions à 256. Ensuite, un mlp est appliqué pour modifier les dimensions en 1024 et le regroupement est appliqué pour obtenir un vecteur global de 1024 similaire à un nuage de points. Cette partie entière est considérée comme l'encodeur. Pour la classification, la sortie globale du codeur est passée par mlp pour obtenir des sorties de classe c. Pour la tâche de segmentation, les entités globales et locales sont considérées comme similaires à PointCNN et sont ensuite transmises via un MLP pour obtenir m sorties de classe pour chaque point.

Métrique

Discutons des métriques généralement utilisées pour comprendre et évaluer les résultats d'un modèle.

Précision des pixels

La précision des pixels est la métrique la plus basique qui peut être utilisée pour valider les résultats. La précision est obtenue en prenant le rapport des pixels correctement classés par rapport au nombre total de pixels

Précision = (TP + TN) / (TP + TN + FP + FN)

Le principal inconvénient de l'utilisation d'une telle technique est que le résultat peut sembler bon si une classe l'emporte sur l'autre. Disons par exemple que la classe d'arrière-plan couvre 90% de l'image d'entrée, nous pouvons obtenir une précision de 90% en classant simplement chaque pixel comme arrière-plan

Intersection sur union

IOU est défini comme le rapport de l'intersection de la vérité terrain et des sorties de segmentation prévues sur leur union. Si nous calculons pour plusieurs classes, l'IOU de chaque classe est calculée et leur moyenne est prise. C'est une meilleure métrique par rapport à la précision des pixels car si chaque pixel est donné comme arrière-plan dans une entrée de classe 2, la valeur IOU est (90/100 + 0/100) / 2 soit 45% IOU, ce qui donne une meilleure représentation par rapport à 90 % de précision.

Source: - https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection

IOU pondérée en fréquence

Il s'agit d'une extension de l'IOU moyenne dont nous avons discuté et qui est utilisée pour lutter contre le déséquilibre de classe. Si une classe domine la plupart des images dans un ensemble de données comme par exemple l'arrière-plan, elle doit être alourdie par rapport aux autres classes. Ainsi, au lieu de prendre la moyenne de tous les résultats de classe, une moyenne pondérée est prise en fonction de la fréquence de la région de classe dans l'ensemble de données.

Score F1

La métrique couramment utilisée dans la classification F1 Score peut être utilisée pour la tâche de segmentation ainsi que pour traiter le déséquilibre de classe.

Source: - https://en.wikipedia.org/wiki/F1_score

Précision moyenne

La zone située sous la courbe Précision - Rappel pour une moyenne seuil IOU choisie sur différentes classes est utilisée pour valider les résultats.

Fonctions de perte

La fonction de perte est utilisée pour guider le réseau neuronal vers l'optimisation. Discutons de quelques fonctions de perte populaires pour la tâche de segmentation sémantique.

Perte d'entropie croisée

Une simple moyenne de la perte de classification par entropie croisée pour chaque pixel de l'image peut être utilisée comme fonction globale. Mais cela souffre à nouveau du déséquilibre de classe que FCN propose de corriger en utilisant des poids de classe

UNet essaie d'améliorer cela en donnant plus de poids aux pixels près de la frontière qui font partie de la frontière par rapport aux pixels internes, car cela permet au réseau de se concentrer davantage sur l'identification des frontières et de ne pas donner une sortie grossière.

Perte focale

La perte focale a été conçue pour que le réseau se concentre sur des exemples concrets en donnant plus de poids-âge et également pour faire face au déséquilibre de classe extrême observé dans les détecteurs d'objets à un étage. La même chose peut être appliquée dans les tâches de segmentation sémantique

Perte de dés

La fonction de dés n'est rien d'autre que le score F1. Cette fonction de perte essaie directement d'optimiser le score F1. De même, le score IOU direct peut également être utilisé pour exécuter l'optimisation

Perte de Tversky

C'est une variante de la perte de dés qui donne un âge de poids différent à FN et FP

Distance de Hausdorff

Il s'agit d'une technique utilisée pour mesurer la similitude entre les limites de la vérité terrain et des prévisions. Il est calculé en trouvant la distance maximale entre n'importe quel point d'une frontière et le point le plus proche de l'autre. La réduction directe de la fonction de perte de limite est une tendance récente et il a été démontré qu'elle donne de meilleurs résultats, en particulier dans des cas d'utilisation tels que la segmentation d'images médicales où l'identification de la limite exacte joue un rôle clé.

L'avantage d'utiliser une perte de limite par rapport à une perte basée sur une région comme IOU ou Dice Loss est qu'elle n'est pas affectée par un déséquilibre de classe puisque la région entière n'est pas considérée pour l'optimisation, seule la limite est considérée.

Source https://en.wikipedia.org/wiki/Hausdorff_distance

Les deux termes considérés ici sont pour deux frontières à savoir la vérité terrain et la prédiction de sortie.

Étiquetez-moi :-

Outil d'annotation d'images écrit en python.
Prend en charge l'annotation de polygone.
Open Source et gratuit.
Fonctionne sur Windows, Mac, Ubuntu ou via Anaconda, Docker
Lien :- https://github.com/wkentaro/labelme

Source: - https://github.com/wkentaro/labelme

Outil d'annotation de vision par ordinateur: -

Outil d'annotation vidéo et image développé par Intel
Gratuit et disponible en ligne
Fonctionne sur Windows, Mac et Ubuntu
Lien :- https://github.com/opencv/cvat

Annotateur d'image Vgg: -

Outil gratuit d'annotation d'images open source
Page HTML simple <200 Ko et peut s'exécuter hors ligne
Prend en charge l'annotation et les points de polygone.
Lien :- https://github.com/ox-vgg/via

Source: - https://github.com/ox-vgg/via

Rectlabel: -

Outil d'annotation payant pour Mac
Peut utiliser des modèles de base ML pour pré-annoter les images
Prend en charge les polygones, cubic-bezier, les lignes et les points
Lien :- https://github.com/ryouchinsa/Rectlabel-support

Boîte à étiquettes: -

Outil d'annotation payant
Prend en charge l'outil stylo pour une annotation plus rapide et précise
Lien :- https://labelbox.com/product/image-segmentation

Jeux de données

Dans le cadre de cette section, discutons de divers ensembles de données populaires et variés disponibles dans le public que l'on peut utiliser pour commencer la formation.

Contexte Pascal

Cet ensemble de données est une extension de l'ensemble de données Pascal VOC 2010 et va au-delà de l'ensemble de données d'origine en fournissant des annotations pour toute la scène et contient plus de 400 classes de données réelles.

Source: - https://cs.stanford.edu/~roozbeh/pascal-context/
Source: - https://cs.stanford.edu/~roozbeh/pascal-context/

Lien :- https://cs.stanford.edu/~roozbeh/pascal-context/

Ensemble de données COCO

L'ensemble de données COCO contient 164 172 images de l'ensemble de données COCO d'origine avec des annotations au niveau des pixels et constitue un ensemble de données de référence commun. Il couvre 80 classes: 91 classes d'objets, 1 classes d'objets et XNUMX classe `` sans étiquette ''

Source: - http://cocodataset.org/#home

Lien :- http://cocodataset.org/

Ensemble de données Cityscapes

Cet ensemble de données comprend des vérités de segmentation au sol pour les routes, les voies, les véhicules et les objets sur la route. L'ensemble de données contient 30 classes et 50 villes collectées dans différentes conditions environnementales et météorologiques. Possède également un ensemble de données vidéo d'images finement annotées qui peuvent être utilisées pour la segmentation vidéo. KITTI ainsi que CamVidéo sont des types d'ensembles de données similaires qui peuvent être utilisés pour entraîner les voitures autonomes.

Source: - https://www.cityscapes-dataset.com/

Lien :- https://www.cityscapes-dataset.com/

Ensemble de données Lits

L'ensemble de données a été créé dans le cadre d'un défi visant à identifier les lésions tumorales à partir de tomodensitométries hépatiques. L'ensemble de données contient 130 tomodensitogrammes des données d'entraînement et 70 tomodensitométries des données de test.

Source: - https://competitions.codalab.org/competitions/17094

Lien :- https://competitions.codalab.org/competitions/17094

Ensemble de données CCP

Cloth Co-Parsing est un ensemble de données qui est créé dans le cadre du document de recherche Clothing Co-Parsing by Joint Image Segmentation and Labeling. L'ensemble de données contient plus de 1000 images avec des annotations au niveau des pixels pour un total de 59 balises.

Source: - https://github.com/bearpaw/clothing-co-parsing

La source :- https://github.com/bearpaw/clothing-co-parsing

Ensemble de données Pratheepan

Un ensemble de données créé pour la tâche de segmentation de la peau à partir d'images de Google contenant 32 photos de visage et 46 photos de famille

Source: - http://cs-chan.com/downloads_skin_dataset.html

Lien :- http://cs-chan.com/downloads_skin_dataset.html

Étiquetage des images aériennes Inria

Un ensemble de données de cartes de segmentation aérienne créées à partir d'images du domaine public. A une couverture de 810 km2 et dispose de XNUMX classes de construction et non de construction.

Source: - https://project.inria.fr/aerialimagelabeling/
Source: - https://project.inria.fr/aerialimagelabeling/

Lien :- https://project.inria.fr/aerialimagelabeling/

S3DIS

Cet ensemble de données contient les nuages ​​de points de six pièces intérieures à grande échelle dans 3 bâtiments avec plus de 70000 images.

Source: - http://buildingparser.stanford.edu/dataset.html

Lien :- http://buildingparser.stanford.edu/dataset.html

Résumé

Nous avons discuté d'une taxonomie de différents algorithmes qui peuvent être utilisés pour résoudre le cas d'utilisation de la segmentation sémantique que ce soit sur des images, des vidéos ou des nuages ​​de points ainsi que leurs contributions et leurs limites. Nous avons également examiné les moyens d'évaluer les résultats et les ensembles de données pour commencer. Cela devrait donner une compréhension globale de la segmentation sémantique en tant que sujet en général.

Pour obtenir une liste de ressources supplémentaires pour la segmentation sémantique, commencez avec https://github.com/mrgloom/awesome-semantic-segmentation.

Lectures complémentaires


Vous pourriez être intéressé par nos derniers articles sur:

Mettre à jour:
Ajout de matériel de lecture supplémentaire.

Source : https://nanonets.com/blog/semantic-image-segmentation-2020/

Horodatage:

Plus de AI et apprentissage automatique