introduction
Réseaux de neurones convolutifs (CNN): el concepto detrás de los avances y desarrollos recientes en el l'apprentissage en profondeurL'apprentissage en profondeur, Une sous-discipline de l’intelligence artificielle, s’appuie sur des réseaux de neurones artificiels pour analyser et traiter de grands volumes de données. Cette technique permet aux machines d’apprendre des motifs et d’effectuer des tâches complexes, comme la reconnaissance vocale et la vision par ordinateur. Sa capacité à s’améliorer continuellement au fur et à mesure que de nouvelles données lui sont fournies en fait un outil clé dans diverses industries, de la santé....
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:
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
- Utilisation de CNN pour classer les chiffres manuscrits dans l'ensemble de données MNIST
- Identification d'images à partir de l'ensemble de données CIFAR-10 à l'aide de CNN
- Catégorisation d'images de l'ensemble de données ImageNet à l'aide de CNN
- 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 (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), dividido en un conjunto de entraînementLa formation est un processus systématique conçu pour améliorer les compétences, connaissances ou aptitudes physiques. Il est appliqué dans divers domaines, Comme le sport, Éducation et développement professionnel. Un programme d’entraînement efficace comprend la planification des objectifs, Pratique régulière et évaluation des progrès. L’adaptation aux besoins individuels et la motivation sont des facteurs clés pour obtenir des résultats réussis et durables dans toutes les disciplines.... 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. Los pasos básicos para construir un modelo de clasificación de imágenes usando una neuronal rougeLes réseaux de neurones sont des modèles computationnels inspirés du fonctionnement du cerveau humain. Ils utilisent des structures appelées neurones artificiels pour traiter et apprendre des données. Ces réseaux sont fondamentaux dans le domaine de l’intelligence artificielle, permettant des avancées significatives dans des tâches telles que la reconnaissance d’images, Traitement du langage naturel et prédiction de séries temporelles, entre autres. Leur capacité à apprendre des motifs complexes en fait des outils puissants.. fils:
- Aplatir les dimensions de l'image d'entrée en 1D (pixels de large x pixels de haut)
- Normaliser les valeurs des pixels de l'image (diviser par 255)
- One-Hot Encoder la colonne catégorielle
- Construire une architecture modèle (séquentiel) avec des couches denses
- 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.
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!
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
- Abandono agregado para régularisationLa régularisation est un processus administratif qui vise à formaliser la situation de personnes ou d’entités qui opèrent en dehors du cadre légal. Cette procédure est essentielle pour garantir les droits et les devoirs, ainsi que pour promouvoir l’inclusion sociale et économique. Dans de nombreux pays, La régularisation est appliquée dans les contextes migratoires, Droit du travail et fiscalité, permettre aux personnes en situation irrégulière d’accéder à des prestations et de se protéger d’éventuelles sanctions....
- Des couches plus denses ajoutées
Précision de la formation et de la validation à tous les âges:
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 est le base de donnéesUne base de données est un ensemble organisé d’informations qui vous permet de stocker, Gérez et récupérez efficacement les données. Utilisé dans diverses applications, Des systèmes d’entreprise aux plateformes en ligne, Les bases de données peuvent être relationnelles ou non relationnelles. Une bonne conception est essentielle pour optimiser les performances et garantir l’intégrité de l’information, facilitant ainsi la prise de décision éclairée dans différents contextes.... principal detrás del 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é, las imágenes en ImageNet tienen una résolutionLa "résolution" fait référence à la capacité de prendre des décisions fermes et d’atteindre les objectifs fixés.. Dans des contextes personnels et professionnels, Il s’agit de définir des objectifs clairs et d’élaborer un plan d’action pour les atteindre. La résolution est essentielle à la croissance personnelle et à la réussite dans divers domaines de la vie, car cela vous permet de surmonter les obstacles et de rester concentré sur ce qui compte vraiment.... decente (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é.
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.
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%.
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:
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)
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?
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.