Classification des images CNN | Classification d'images à l'aide de CNN

Contenu

introduction

Réseaux de neurones convolutifs (CNN): le concept derrière les récents progrès et développements en apprentissage en profondeur.

CNN a brisé le moule et est monté sur le trône pour devenir la dernière technologie. vision par ordinateur technique. Parmi les différents types de Les réseaux de neurones (d'autres incluent des réseaux de neurones récurrents (RNN), mémoire à court terme à long terme (LSTM), réseaux de neurones artificiels (ANN), etc.), Les CNN sont facilement les plus populaires.

Ces modèles de réseaux de neurones convolutifs sont omniprésents dans l'espace des données d'image. Ils fonctionnent incroyablement bien sur des tâches de vision par ordinateur comme la classification d'images, détection d'objets, reconnaissance d'images, etc.

Ensuite, Où pouvez-vous pratiquer vos compétences CNN? Bon, Vous êtes au bon endroit!

Il existe plusieurs ensembles de données que vous pouvez exploiter pour appliquer des réseaux de neurones convolutifs. Voici trois ensembles de données populaires:

mnist-1-3907316

Dans cet article, nous allons créer des modèles de classification d'images en utilisant CNN sur chacun de ces ensembles de données. C'est correct! Nous allons explorer MNSIT, CIFAR-10 et ImageNet pour comprendre, d'une manière pratique, comment CNN fonctionne pour la tâche de classification d'images.

Vous pouvez tout savoir sur les réseaux de neurones convolutifs (CNN) dans ce cours gratuit: Réseaux de neurones convolutifs (CNN) à partir de zéro

Mon inspiration pour écrire cet article est d'aider la communauté à appliquer les connaissances théoriques de manière pratique. C'est un exercice très important, car cela vous aide non seulement à développer une compréhension plus profonde du concept sous-jacent, il vous apprendra également des détails pratiques qui ne peuvent être appris que par la mise en œuvre du concept.

Si vous êtes nouveau dans le monde des réseaux de neurones, CNN, classement d'images, Je vous recommande de suivre ces excellents tutoriels détaillés:

Et si vous cherchez à apprendre la vision par ordinateur et le deep learning en profondeur, vous devriez consulter nos cours populaires:

Table des matières

  1. Utilisation de CNN pour classer les chiffres manuscrits dans l'ensemble de données MNIST
  2. Identification d'images à partir de l'ensemble de données CIFAR-10 à l'aide de CNN
  3. Catégorisation d'images de l'ensemble de données ImageNet à l'aide de CNN
  4. Où aller en partant d'ici?

Noter: J'utiliserai Keras pour démontrer la classification d'images à l'aide de CNN dans cet article. Keras est un excellent cadre pour apprendre lorsque vous débutez dans le deep learning..

Utilisation de CNN pour classer les chiffres manuscrits dans l'ensemble de données MNIST

mnist-8721761

MNIST (Institut national modifié des normes et de la technologie) est un ensemble de données bien connu qui est utilisé dans Vision par ordinateur qui a été construit par Yann Le Cun et. Alabama. Il est composé d'images chiffres manuscrits (0-9), divisé en un ensemble de formation de 50,000 photos et un jeu de test de 10,000 où chaque image a 28 X 28 largeur et hauteur des pixels.

Cet ensemble de données est souvent utilisé pour mettre en pratique tout algorithme créé pour la classification d'images., puisque l'ensemble de données est assez facile à conquérir. Donc, Je recommande que ce soit votre premier ensemble de données si vous ne faites que barboter sur le terrain.

MNIST est livré avec Keras par défaut et vous pouvez simplement charger les fichiers de train et de test en utilisant quelques lignes de code:

à partir de keras.datasets importer mnist

# chargement du jeu de données
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# imprimons la forme de l'ensemble de données
imprimer("Forme X_train", X_train.shape)
imprimer("forme y_train", y_train.shape)
imprimer("X_test forme", X_test.shape)
imprimer("y_test forme", y_test.shape)

Voici la forme X (fonctionnalités) et et (objectif) pour les données de formation et de validation:

Forme X_train (60000, 28, 28) 
forme y_train (60000,) 
X_test forme (10000, 28, 28) 
y_test forme (10000,)

Avant de former un modèle CNN, construisons un modèle de base Réseau de neurones entièrement connecté pour l'ensemble de données. Les étapes de base pour construire un modèle de classification d'images à l'aide d'un réseau de neurones sont:

  1. Aplatir les dimensions de l'image d'entrée en 1D (pixels de large x pixels de haut)
  2. Normaliser les valeurs des pixels de l'image (diviser par 255)
  3. One-Hot Encoder la colonne catégorielle
  4. Construire une architecture modèle (séquentiel) avec des couches denses
  5. Entraîner le modèle et faire des prédictions

Ensuite, nous vous montrons comment créer un modèle de réseau de neurones pour MNIST. J'ai commenté les parties pertinentes du code pour une meilleure compréhension:

Après avoir exécuté le code ci-dessus, réalisé que nous obtenons une bonne précision de validation d'environ 97% facilement.

Modifions le code ci-dessus pour créer un CNN maquette.

L'un des principaux avantages de l'utilisation de CNN sur NN est qu'il n'est pas nécessaire d'aplatir les images d'entrée en 1D, car ils peuvent travailler avec des données d'image 2D. Cela permet de conserver les propriétés “spatial” des images.

Voici le code complet du modèle CNN:

Bien que notre précision de validation maximale à l'aide d'un modèle de réseau neuronal simple était d'environ 97%, Le modèle de CNN est capable d'obtenir plus de 98% avec une seule couche de convolution.

dwd-5880365

Vous pouvez continuer et ajouter plus de couches Conv2D, et aussi jouer avec les hyperparamètres du modèle CNN.

Identification d'images à partir de l'ensemble de données CIFAR-10 à l'aide de CNN

MNIST est un jeu de données convivial pour les débutants en vision par ordinateur. Il est facile d'obtenir un score de plus de 90% en validation en utilisant un modèle CNN. Mais, Que faire si vous êtes au-delà d'un débutant et avez besoin de quelque chose de stimulant pour mettre vos concepts en pratique?

C'est là que le Ensemble de données CIFAR-10 entre en scène!

1_sgochnlz-qfesdyjadgxnw-5399297

Voici comment les développeurs du CIFAR (Institut canadien de recherches avancées) décrire l'ensemble de données:

L'ensemble de données CIFAR-10 se compose de 60.000 images en couleur de 32 X 32 dans 10 cours, avec 6.000 images par classe. Il y a 50.000 images de formation et 10.000 images de test.

Les points importants qui distinguent cet ensemble de données du MNIST sont:

  • Les images sont colorées dans CIFAR-10 par rapport à la texture noir et blanc du MNIST
  • Chaque image est de 32 X 32 pixels
  • 50.000 images de formation et 10.000 images de test

À présent, Ces photos sont prises dans différentes conditions d'éclairage et sous différents angles, et comme ce sont des images colorées, vous verrez qu'il existe de nombreuses variations dans la couleur elle-même d'objets similaires (par exemple, la couleur de l'eau de mer). Si vous utilisez le simple CNN architecture que nous avons vue dans l'exemple MNIST ci-dessus, vous obtiendrez une faible précision de validation d'environ 60%.

C'est l'une des principales raisons pour lesquelles je recommande CIFAR-10 comme un bon ensemble de données pour mettre en pratique vos compétences de réglage des hyperparamètres pour CNN.. Ce qui est bien c'est que, comme MNIST, CIFAR-10 est également facilement disponible à Keras.

Vous pouvez simplement charger l'ensemble de données en utilisant le code suivant:

à partir de keras.datasets importer cifar10
# chargement du jeu de données 
(X_train, y_train), (X_test, y_test) = cifar10.load_data()

Ensuite, nous vous montrons comment vous pouvez construire un modèle CNN décent (autour du 78-80% en validation) pour CIFAR-10. Remarquez comment les valeurs des formes ont été mises à jour à partir de (28, 28, 1) une (32, 32, 3) selon la taille des images:

C'est ce que j'ai changé dans le modèle:

  • Augmentation du nombre de couches Conv2D pour créer un modèle plus profond
  • Plus grand nombre de filtres pour connaître plus de fonctions
  • Abandon ajouté pour régularisation
  • Des couches plus denses ajoutées

Précision de la formation et de la validation à tous les âges:

capture d

Vous pouvez facilement surpasser cette performance en ajustant l'ancien modèle. Une fois que vous maîtrisez CIFAR-10, il y a aussi CIFAR-100 disponible à Keras que vous pouvez utiliser pour pratiquer plus. Puisqu'il a 100 cours, Ce ne sera pas une tâche facile à accomplir!

Catégoriser les images ImageNet à l'aide de CNN

Maintenant que vous maîtrisez MNIST et CIFAR-10, prenons ce problème à un niveau supérieur. Ici, nous allons jeter un œil au célèbre jeu de données ImageNet.

imagenet-title-pic-6861924

ImageNet est la principale base de données derrière le Défi de reconnaissance à grande échelle ImageNet (ILSVRC). C'est comme les Jeux Olympiques Vision par ordinateur. C'est la compétition qui a fait CNN populaire pour la première fois et chaque année, les meilleures équipes de recherche des industries et des universités rivalisent avec leurs meilleurs algorithmes sur des tâches de vision par ordinateur.

À propos de l'ensemble de données ImageNet

L'ensemble de données ImageNet a plus de 14 millions d'images, étiqueté à la main dans 20.000 catégories.

En outre, contrairement aux ensembles de données MNIST et CIFAR-10 dont nous avons déjà discuté, les images sur ImageNet ont une résolution décente (224 X 224) et c'est ce qui nous interpelle: 14 millions d'images, chacun des 224 pour 224 pixels. Traiter un ensemble de données de cette taille nécessite une grande puissance de calcul en termes de CPU, GPU et RAM.

Le désavantage: c'est peut-être trop pour un ordinateur portable de tous les jours. Ensuite, Quelle est la solution de contournement? Comment un passionné peut-il travailler avec l'ensemble de données ImageNet?

C'est là qu'intervient le jeu de données Imagenette de Fast.ai.

Imagenette est un ensemble de données qui est tiré de la grande collection d'images d'ImageNet. La raison du lancement d'Imagenette est que les chercheurs et les étudiants peuvent s'exercer avec des images de niveau ImageNet sans avoir besoin d'autant de ressources informatiques..

Dans les mots de Jeremy Howard lui-même:

"Je (Jérémy Howard, c'est-à-dire) J'ai principalement créé Imagenette parce que je voulais un petit ensemble de données de vision que je pourrais utiliser pour voir rapidement si mes idées d'algorithmes avaient une chance de fonctionner. Ils ne le font généralement pas, mais les tester sur Imagenet me prend beaucoup de temps pour le comprendre, d'autant plus que je m'intéresse aux algorithmes qui fonctionnent particulièrement bien dans le fin de la formation.

Mais je pense que cela peut aussi être un ensemble de données utile pour d'autres “.

Et c'est ce que nous allons également utiliser pour pratiquer!

1. Télécharger le jeu de données Imagenette

Voici comment vous pouvez obtenir l'ensemble de données (commandes pour votre terminal):

$ wget https://s3.amazonaws.com/fast-ai-imageclas/imagenette2.tgz
$ tar -xf imagenette2.tgz

Une fois que vous avez téléchargé l'ensemble de données, vous remarquerez que vous avez deux dossiers: “former” Oui “val”. Ceux-ci contiennent respectivement l'ensemble d'apprentissage et de validation. Dans chaque dossier, il y a des dossiers séparés pour chaque classe. Voici la cartographie des classes:

Ces classes ont le même ID dans l'ensemble de données ImageNet d'origine. Chacune des classes a environ 1000 images, Pour ce que, en général, est un ensemble de données équilibré.

jj-6836177

2. Chargement d'images avec ImageDataGenerator

Keras a cette fonctionnalité utile pour charger de grandes images (comme celui que nous avons ici) sans maximiser la RAM, le faire par petits lots. ImageDataGenerator en combinaison avec fit_générateur fournit cette fonctionnalité:

L'ImageDataGenerator lui-même déduit les étiquettes de classe et le nombre de classes à partir des noms de dossier.

capture d

3. Création d'un modèle CNN de base pour la classification des images

Construisons un modèle CNN de base pour notre jeu de données Imagenette (dans le but de classer les images):

Quand on compare la précision de validation du modèle précédent, se rendra compte que, bien qu'il s'agisse d'une architecture plus profonde que celle que nous avons utilisée jusqu'à présent, nous ne pouvons obtenir qu'une précision de validation de l'ordre du 40-50%.

mmm-7938868

Il peut y avoir plusieurs raisons à cela, car notre modèle n'est pas assez complexe pour apprendre les motifs sous-jacents des images, ou peut-être que les données d'entraînement sont trop petites pour être généralisées avec précision entre les classes.

Intensifier: transférer l'apprentissage.

4. Utilisation de l'apprentissage par transfert (VGG16) pour améliorer la précision

VGG16 est une architecture CNN qui a été le premier finaliste dans le 2014 Défi ImageNet. Il est conçu par Visual Graphics Group à Oxford et a 16 couches au total, avec 13 couches convolutives. Nous allons charger les poids précédemment formés de ce modèle afin que nous puissions utiliser les fonctionnalités utiles que ce modèle a apprises pour notre tâche..

Téléchargement des poids VGG16

à partir de keras.applications importer VGG16

# inclure le haut doit être False pour supprimer la couche softmax
modèle_préformé = VGG16(include_top=Faux, poids="imagenet")
pretrained_model.summary()

Voici l'architecture du modèle:

mmm-1-7044075

Générer des fonctions à partir de VGG16

Extrayons les fonctionnalités utiles que VGG16 connaît déjà des images de notre ensemble de données:

de keras.utils importer vers_categorical
# extraire les caractéristiques train et val
vgg_features_train = pretrained_model.predict(former)
vgg_features_val = pretrained_model.predict(val)
# Colonne cible OHE
train_target = to_categorical(train.labels)
val_target = to_categorical(val.labels)
Une fois les fonctions ci-dessus prêtes, nous pouvons les utiliser pour former une base entièrement connectée Neuronal rouge et Keras:

Remarquez à quelle vitesse votre modèle commence à converger. En solo 10 époques, a une précision de validation de plus de 94%. N'est-ce pas incroyable?

capture d

Si vous maîtrisez le jeu de données Imagenette, fastai a également publié deux variantes qui incluent des classes que vous aurez du mal à classer:

  • Imagewoof: 10 sortes de races de chiens, un problème plus difficile à classer
  • Réseau d'images (“wang”): Une combinaison d'Imagenette et Imagewoof et quelques astuces qui compliquent le problème

Où aller en partant d'ici?

En plus des ensembles de données que nous avons mentionnés ci-dessus, Vous pouvez également utiliser les ensembles de données suivants pour créer vision par ordinateur algorithmes. En réalité, considérez cela comme un défi. Pouvez-vous appliquer vos connaissances de CNN pour battre le score de référence dans ces ensembles de données?

  • Mode MNIST – Ensemble de données similaire à MNIST pour les vêtements et les vêtements. Au lieu de chiffres, les photos montrent un type de vêtement (T-shirt, pantalon, Sac à main, etc.)
  • Caltech 101 – Un autre jeu de données difficile que j'ai trouvé pour la classification d'images

Je suggère également qu'avant d'opter pour l'apprentissage par transfert, essayez d'améliorer vos modèles CNN de base. Vous pouvez apprendre des architectures VGG16, ZFNet, etc. pour quelques indices sur le réglage des hyperparamètres et vous pouvez utiliser le même ImageDataGenerator pour agrandir vos images et augmenter la taille du jeu de données.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.