Modèle de classification d'images de pratique de formation pratique base zéro basé sur le modèle de la Dharma Academy

Pratique de formation pratique base zéro : modèle de classification d'images

-Basé sur le modèle de la Dharma Academy

Introduction : Le modèle de classification d'images est la tâche de vision par ordinateur la plus simple et la plus basique, et elle est largement utilisée. Cet article présentera étape par étape le processus pratique du modèle de classification d'images de formation base zéro. L'article présente principalement comment affiner le modèle sur la base de l'ensemble de données étiquetées, afin que le modèle puisse réadapter une nouvelle tâche de classification sur les nouvelles données.

Après avoir lu cet article, vous comprendrez comment utiliser le modèle ViT pour effectuer un entraînement de réglage fin pour la classification sur 14 ensembles de données de fleurs, puis comprendrez le processus de réglage fin pour la plupart des tâches de classification.

Tout d’abord, ouvrez le site officiel de ModelScope ( https://www.modelscope.cn/home ) et entrez dans la bibliothèque de modèles.

Sur la page de la bibliothèque de modèles, vous pouvez constater qu'il existe de nombreux modèles différents. Nous choisissons : Vision par ordinateur - Classification visuelle - Classification générale. Il existe de nombreux modèles à usage général dans la bibliothèque de modèles. Ces modèles sont relativement classiques, et certains sont actuellement des modèles open source populaires. Tout le monde peut les essayer. Cet article utilise principalement le modèle de classification d'images ViT-Chinois-objets quotidiens comme exemple pour montrer comment affiner la tâche de classification. ​​​​​​​​

Ouvrez d’abord cette tâche. Étant donné que le notebook sera utilisé ultérieurement pour la formation, vous devez vous connecter. L’enregistrement d’un nouvel utilisateur donnera 100 heures de puissance de calcul GPU.

La tâche présente d'abord les bases de l'ensemble du modèle : un aperçu du modèle de classification des objets quotidiens, une brève description du modèle et un exemple de code de raisonnement.

L'utilisation de l'exemple de code est très simple : en plus de citer le package de dépendances, seules deux lignes de code sont nécessaires pour appeler le modèle afin de tester la tâche de classification. Il existe également une expérience de modèle en ligne en haut à droite de la page, qui visualise le processus de raisonnement. Vous pouvez choisir de télécharger des images par vous-même ou de tester avec des exemples d'images, et vous pouvez voir les résultats en cliquant sur Exécuter le test. Ce sera un peu lent au début de l'exécution, car il faut télécharger le modèle, et ensuite ce sera plus rapide.

Deuxièmement, il y a quelques introductions aux données du modèle, au processus de formation du modèle, à l'évaluation des données et aux résultats.

Vient ensuite l’exemple de code pour la formation de modèles, qui fait également l’objet de cet article. L'exemple de code utilise un ensemble de données légèrement plus petit, mini_imagenet100, un exemple de 100 catégories pour un entraînement précis, qui est encore relativement volumineux pour la démonstration. Nous allons donc modifier ce code pour l'adapter à un ensemble de données plus petit, et nous expliquerons les paramètres du modèle plus en détail plus tard.

Voici l'exemple de code pour l'évaluation du modèle, montrant comment le modèle évalue l'ensemble de validation dans l'ensemble de données, qui sera expliqué en détail plus tard. Il s'agit du contenu général de l'ensemble de la page de tâches.

L'expérience en ligne ci-dessus a obtenu un résultat de test, voici le résultat top5, et le numéro un est Shiba Inu, donc le résultat de classification de cette image est Shiba Inu.

Afin de faciliter l'expérience, nous ouvrons d'abord le cahier. Notebook propose deux options, l'une est PAI-DSW et l'autre est Alibaba Cloud Elastic Computing. Nous choisissons la deuxième option, en utilisant des ressources GPU gratuites pour le calcul. Après la sélection, cliquez sur Lancement rapide. Ce démarrage prendra un peu plus de temps, vous pouvez le laisser démarrer en arrière-plan.

Ensuite, nous expliquerons quelques informations de base sur le modèle. Le modèle est une application du modèle de transformateur en vision, nous l'appelons ViT en abrégé. Le modèle ViT est un travail pionnier du modèle de transformateur dans le domaine du langage naturel en vision par ordinateur. Le modèle sur ModelScope adopte la structure ViT-Base basée sur un transformateur, et sur cette base, le jeton de distillation est ajouté pour la distillation des connaissances, c'est-à-dire que la méthode de formation de distillation des connaissances DeiT est adoptée.

Nos données de formation sont recherchées et organisées à partir d'une grande quantité de données open source, et certains objets courants à haute fréquence sont conservés, y compris plus de 1 300 types d'objets quotidiens, tels que certains animaux, plantes, meubles et aliments courants, etc. À l'heure actuelle, le modèle peut reconnaître plus de 1 300 types d'objets quotidiens. Vous pouvez visualiser le code open source via le lien du modèle, et vous pouvez également visualiser l'article en détail via le lien de l'article.

Vous pouvez également trouver le modèle que nous avons configuré dans le Centre de documentation sur notre site officiel - Explication du modèle - Modèle de vision par ordinateur. Voici une introduction très détaillée, comprenant l'explication détaillée du document. Ceci est une brève introduction au modèle ViT que nous allons utiliser pour les expériences aujourd'hui, je ne le présenterai donc pas en détail ici.

De plus, concernant les ensembles de données que nous souhaitons utiliser, vous pouvez cliquer sur Dataset-Image-Image Classification dans la barre de menu supérieure, et vous verrez de nombreux ensembles de données qui peuvent être utilisés pour des expériences.

 L'ensemble de données que nous utilisons ici est l'ensemble de données de classification des fleurs. Cet ensemble de données contient 14 types d'images de fleurs, telles que des types de fleurs courants tels que l'herbe à vent, le pissenlit et le chrysanthème. L'ensemble des données ne fait que 200 Mo, relativement petit, adapté à la démonstration de notre processus de réglage fin de la formation en ligne. Utilisez un petit ensemble de données de 14 sortes de fleurs pour affiner le modèle ViT qui vient d'être introduit, afin que le modèle puisse reconnaître ces 14 sortes de fleurs.

Le format de l'ensemble de données est principalement divisé en ensemble d'apprentissage et ensemble de vérification. Voici la description du format associé : il est classé en fonction des dossiers de train et valides. Il y a 2 dossiers au total. Les images avec la même étiquette de catégorie sont dans le même dossier et le format de l'image est Les deux sont au format JPG et il existe un fichier d'étiquette classname.txt.

Dans l'aperçu des données, vous pouvez voir l'étiquetage des données. Par exemple, dans l'ensemble de vérification, le côté gauche est l'image des données et le côté droit est l'étiquette correspondante. Il en va de même pour l'ensemble de formation.

 Le fichier de l'ensemble de données est le fichier de l'ensemble de données, qui comprend le fichier d'étiquette de l'ensemble de validation au format csv, le fichier d'étiquette de l'ensemble de formation et flowers14.json.

 Le fichier Flowers14.json décrit la relation entre l'ensemble des données. Par exemple, dans l'ensemble d'entraînement, méta est le fichier d'étiquette et file est le fichier compressé de l'image utilisée pour l'entraînement. Il en va de même pour l'ensemble de vérification. Dans le fichier classname.txt, les noms de classes correspondant aux balises sont répertoriés dans l'ordre.

 À l’intérieur du fichier de données se trouve un fichier de données compressé.

 Le chargement de l’ensemble de données est également très simple, une seule ligne de code. Après avoir introduit le package de dépendances, chargez l’ensemble de données. Pour charger un ensemble de données, vous devez renseigner le nom et l'espace de noms de l'ensemble d'entraînement, qui sont les petits caractères situés sous le nom des données correspondant.

 flowers14 correspond au nom de l'ensemble de données et tany0699 correspond à l'espace de noms. Lors du chargement de l'ensemble de formation, split sélectionne le train, et lors du chargement de l'ensemble de vérification, split sélectionne la validation. Voici quelques faits de base sur l’ensemble de données.

Revenez à la page de formation du modèle et ouvrez le bloc-notes que vous avez démarré plus tôt. ​​​​​​​​

 Après le saut, vous devez vous connecter au compte lié à ModelScope et Alibaba Cloud.

 Ouvrez un fichier Python3, vous pouvez choisir de renommer le fichier, nous devons principalement recycler le nouvel ensemble de données. Revenez à l'interface du modèle tout à l'heure et copiez l'exemple de code de réglage fin.

 Une fois le code copié, nous modifions ces paramètres. Tout d'abord, importez les packages de dépendances dans ModelScope. Si vous disposez d'un GPU local, vous pouvez également effectuer une formation localement. Pour une formation locale, la bibliothèque ModelScope doit être pré-installée. Le document officiel décrit comment l'installer.

Après l'installation, nous pouvons expérimenter le cahier en ligne gratuit. Tout d'abord, model_id correspond à l'adresse du modèle sur le Model Hub , qui n'a pas changé pour notre tâche. Après cela, l'ensemble de données est chargé, ce qui consiste à charger respectivement l'ensemble d'entraînement et l'ensemble de vérification. La méthode de chargement des données a déjà été introduite. Copiez et remplacez simplement l'exemple de code de la méthode de chargement des données de notre nouvel ensemble de données.

L'étape suivante consiste à modifier le fichier de configuration du modèle. Le fichier de configuration contiendra une variété de contenus de configuration et seuls quelques éléments doivent être modifiés. La première est la taille du lot, qui est principalement définie en fonction de la taille des données d'entraînement et de la taille de la mémoire GPU ; la deuxième ligne est le nombre de travailleurs pour charger l'ensemble de données ; le nombre maximum d'entraînements. epochs est le nombre d'itérations pour l'ensemble des données, qui est défini ici. Il est de 1, principalement en raison de la relation temporelle, une seule itération est entraînée. Les trois lignes suivantes correspondent au nombre de catégories, qui doivent être remplacées par le nombre de catégories correspondant à l'ensemble de données, alors remplacez-les par 14 ici. Le taux d'apprentissage ici, parce que nous n'itérons qu'une seule fois, pour une convergence meilleure et plus rapide, nous pouvons le modifier en une valeur légèrement plus grande. Vous pouvez modifier cet hyperparamètre en fonction de vos temps d'entraînement réels. Le nombre de pré-formation est également fixé à 1 ; l'indice d'évaluation, pour la tâche de classification, nous utilisons maintenant la précision pour évaluer, et la précision inclut top1 et top5, et ces deux indices doivent être réévalués.

Ensuite, construisez l'entraîneur. Le formateur utilise l'interface de build_trainer ; le nom est le type de classification, ici est image_classification, qui signifie classification d'images. La principale chose que nous devons changer est le paramètre kwargs. Les paramètres incluent principalement model_id, qui est l'adresse du modèle mentionnée précédemment ; word_dir, le répertoire de travail, est le répertoire dans lequel les poids du modèle générés après l'entraînement sont enregistrés. L'exemple utilise un répertoire temporaire, qui peut être remplacé par un répertoire réel, tel que vit_base_flower ; train_dataset définit l'ensemble d'entraînement chargé ; eval_dataset définit l'ensemble de validation chargé ; cfg_modify_fn est la fonction de rappel du fichier de configuration ; model_revision La version du modèle peut correspondre au fichier modèle (bouton maître).Vous pouvez choisir une version à volonté, comme 1.0.2, pour que l'entraîneur de modèle soit construit.

Utilisez ensuite trainer.train() pour vous entraîner. Une fois la formation terminée, vous pouvez utiliser trainer.evaluate() pour évaluer et imprimer le résultat après évaluation. Appuyez ensuite sur Maj + Entrée pour exécuter le code et laisser le modèle commencer l'entraînement.

 Cela sera lent au début, car l'ensemble de données et les poids pré-entraînés du modèle doivent d'abord être téléchargés.

 Regardons à nouveau le fichier modèle. Le fichier modèle est également relativement simple. Il se compose de deux parties principales. L'une est le poids pré-entraîné avec un nom fixe (pytorch_model.pt) ; l'autre est le fichier de configuration de l'ensemble du modèle (configuration.json), qui définit principalement comment configurer l'ensemble du modèle, comment former et comment évaluer.

 Dans le fichier de configuration, la formation étant basée sur pytorch, l'architecture reste inchangée. La tâche est la classification des images, le nom du pipeline reste également le même et le type de modèle de définition reste le même. mm_model est le fichier de configuration du modèle compatible avec la classification mm, le backbone définit VisionTransformer, la structure est deit-base, la taille de l'image d'entrée est de 224, la taille de patch_size est de 16, etc. Ces paramètres restent inchangés. Head est VisionTransformerClsHead. Le nombre par défaut de catégories num_classes est 1296, qui est le nombre de catégories d'objets quotidiens. Ici, nous devons le changer à 14, car le nouvel ensemble de données comporte 14 catégories. La perte utilise LabelSmoothLoss. Certains paramètres d'initialisation peuvent également être modifiés. Les méthodes de formation et d'amélioration utilisent Mixup et CutMix, et ces paramètres peuvent également être définis.

De retour au processus de formation, le nombre d'époques, le taux d'apprentissage actuel, le temps restant estimé, la mémoire vidéo utilisée et la perte peuvent tous être imprimés.

 Retour au fichier de configuration.

Le type dans le préprocesseur reste inchangé ; le processus de formation, tel que le chargement des images, la mise à l'échelle aléatoire et la taille de recadrage 224, le retournement aléatoire et l'amélioration des données, etc. peuvent être définis dans le fichier, et enfin la normalisation ; il en va de même pour la vérification. définir, recadrer l'image, redimensionner à 256, puis recadrer à 224 et enfin normaliser.

Le nombre de batch_size utilisé dans le processus de formation, le nombre de travailleurs, le nombre maximum d'itérations et l'évaluation est effectuée toutes les quelques itérations pendant l'évaluation (ici 1 fois), en utilisant la précision pour l'évaluation et en enregistrant le poids du modèle une fois. à chaque itération, le nombre maximum de poids enregistrés est de 20 et les paramètres de l'optimiseur, y compris le type d'optimisation, le taux d'apprentissage et d'autres paramètres, peuvent être modifiés dans le fichier. La stratégie de taux d'apprentissage peut être utilisée CosineAnnealing, et certains paramètres associés peuvent également être définis. Enfin, la configuration de l'évaluation peut également être définie, comme la taille de batch_size lors de l'évaluation, le nombre de travailleurs, la méthode de précision utilisée pour l'évaluation et la méthode d'évaluation de top1 ou top5.

 La formation est terminée et vous pouvez voir que les résultats ont été imprimés : la précision de top1 est de 87,75 et la précision de top5 est de 98,97. Il faut environ 3 minutes pour s'entraîner une fois.

 Les poids qui viennent d'être entraînés ont été enregistrés dans le répertoire de travail. Il y a deux fichiers journaux dans le répertoire, qui sont les journaux du processus de formation, qui sont exactement les mêmes que les résultats qui viennent d'être imprimés. Il existe un fichier de configuration modèle, qui est exactement le même que le fichier de configuration que nous venons de mentionner. Par exemple, le nombre de catégories que nous venons de modifier a été modifié à 14, car la fonction de rappel vient d'être utilisée et les paramètres directement modifiés sont également enregistrés dans le fichier. Il y a aussi le poids économisé pour chaque époque, qui n'est entraîné qu'une seule fois maintenant, il n'y a donc qu'une seule époque_1. Il existe également des connexions logicielles avec les derniers poids enregistrés et un ensemble de validation pour enregistrer les meilleurs poids de modèle pendant l'entraînement.

Une fois le modèle formé, il doit être évalué. Les performances du modèle entraîné sur l'ensemble de validation peuvent être évaluées. Nous pouvons directement copier l'exemple de code pour l'évaluation du modèle.De même, l'ensemble de données peut être modifié en l'ensemble de vérification chargé dans l'expérience tout à l'heure, qui est l'évaluation du nouvel ensemble de vérification. L'ancien model_id est le modèle dans Model Hub, et il est désormais remplacé par le répertoire de travail dans lequel la formation est enregistrée. Mais notez que le nom du fichier de poids du modèle dans le répertoire du modèle est fixe pytorch_model.pt, vous devez donc renommer le fichier de poids en pytorch_model.pt. Le répertoire de travail peut utiliser un répertoire de travail temporaire et l'ensemble de vérification est l'ensemble de données qui doit être évalué. Une fois le formateur construit, appelez trainer.evaluate() pour évaluer et imprimez le résultat après évaluation. Exécutez le code en appuyant sur Shift+Entrée pour démarrer l’évaluation.

Le processus d'évaluation est relativement rapide. D'après les résultats imprimés, on peut voir que le résultat de top1 est de 87,75 et le résultat de top5 est de 98,97, ce qui est exactement le même que le résultat de l'entraînement.

 Une fois le modèle entraîné, l'inférence peut être effectuée et le code d'inférence peut être copié directement à partir de la page des tâches du modèle.

Pour utiliser le modèle entraîné, chargez d’abord le package de dépendances, puis utilisez le pipeline pour créer le pipeline d’inférence. Le type de tâche saisi ici reste inchangé et le modèle est remplacé par le chemin du modèle qui vient d'être entraîné : vit_base_flower. L'adresse de l'image peut être une URL accessible ou un chemin d'image local. Vous pouvez désormais télécharger une image à volonté, comme une image de tournesol, nommée test.webp. Après le téléchargement local, vous pouvez directement faire glisser l'image dans l'interface pour la télécharger, puis copier le nom de l'image. Remplacez l'adresse de l'image par le chemin local ./test.webp et vous pourrez classer et tester cette image.

Les 5 premiers résultats sont affichés dans les résultats d'inférence, et le tournesol se classe en premier, donc le résultat de la classification et de la prédiction de cette image est le tournesol. Cependant, les probabilités correspondantes sont très faibles, ce qui indique que la formation n'est pas particulièrement suffisante. Puisqu’une seule itération est entraînée, il reste encore beaucoup à faire. Vous pouvez ajuster les hyperparamètres et essayer l'entraînement. Par exemple, le nombre maximum d'époques peut être augmenté et le taux d'apprentissage peut être diminué. Plus d'entraînement peut donner de meilleurs résultats.

Ceci conclut le processus de pré-formation de l’ensemble du modèle de classification.

Il existe de nombreux autres modèles de classification dans ModelScope, et le processus de formation des autres modèles est similaire au processus de tâches de la formation actuelle. Par exemple, le modèle général de classification d'images ViT est exactement le même que le modèle qui vient d'être entraîné, mais l'ensemble de données pré-entraîné est différent. Le modèle objet quotidien utilise notre ensemble de données auto-construit et le modèle général utilise l'ensemble de données public ImageNet 1k. De plus, il existe un modèle NextViT de classification en temps réel plus pratique, qui est plus adapté à l'industrie en raison de sa vitesse rapide et de son bon effet de classification. Vous pouvez également consulter d’autres modèles, comme la classification des déchets. Il existe également le BEiT récemment populaire, qui est la version v2, et vous pouvez également le peaufiner. Chaque tâche aura une introduction au modèle, une description du modèle et quelques liens, ainsi qu'un code d'inférence, un code de formation de réglage fin et un code d'évaluation, qui peuvent être copiés et exécutés directement.

C'est la fin du tutoriel de formation pour la mise au point de la classification d'images. Si vous êtes intéressé, vous pouvez vous rendre sur le site officiel de ModelScope ( https://www.modelscope.cn/home ) pour en savoir plus et essayer.

Remarque : S'il s'agit d'une application publique de modèle/d'espace de création public, le code d'autorisation suivant n'est pas requis dans le code :

from modelscope.hub.api import HubApi

YOUR_ACCESS_TOKEN = '请从ModelScope个人中心->访问令牌获取'
api = HubApi()
api.login(YOUR_ACCESS_TOKEN)

Je suppose que tu aimes

Origine blog.csdn.net/tantanweiwei/article/details/130139458
conseillé
Classement