À propos du traitement d'expansion des données pour l'apprentissage en profondeur

introduction

Cette fois, j'ai créé un programme qui effectue le traitement d'expansion des données d'image dans un lot à l'aide de python (en référence à celui géré par imageDataGenerator de keras). Nous aborderons également une brève explication et des notes sur le processus d'expansion des données. Le code source est ici.

Qu'est-ce que le traitement d'expansion des données?

Afin de créer un modèle de reconnaissance / classification d'images par Deep Learning, une grande quantité de données d'apprentissage de haute qualité est nécessaire. Cependant, dans la plupart des cas, vous serez confronté à une situation où la quantité de données d'entraînement est faible. Si les données d'entraînement sont petites, elles peuvent être augmentées par la force brute (comme tirer sur un objet à apprendre), mais cela prend beaucoup de temps et d'efforts. Le traitement d'expansion des données est une technique utile quand «il y a peu de données d'apprentissage». Plus précisément, nous augmenterons le nombre de données en appliquant un traitement d'inversion, d'agrandissement / réduction, etc. aux données d'entraînement d'origine.

Traitement d'expansion des données géré cette fois

Il existe actuellement différents types de traitement d'expansion des données, mais cette fois, nous traiterons du traitement suivant. Afin d'afficher le résultat de l'application du traitement étendu, à partir de "Commercial Free Photo Search", une image de chat ([One day YOMOGI by sabamiso](http://www.igosso.net/se.cgi?q=%E3%81%82%E3%82%8B%E6%97%A5%E3%81%AE%E3%82%88%E3% 82% 82% E3% 81% 8E & sa =% E6% A4% 9C% E7% B4% A2 & lid = 1 & lia = 1 & lib = 1 & lic = 1)) a été utilisé.

--Rotation C'est un processus de rotation à un angle arbitraire. Je pense que ce processus suppose que les angles des chats photographiés sont différents. cat.jpgrot.jpg

--Mouvement parallèle dans les directions horizontale et verticale Il s'agit d'un processus pour déplacer le sujet de l'image en parallèle dans les directions horizontale et verticale. Je pense que ce processus est censé se produire lorsque le chat photographié est à gauche ou au-dessus. cat.jpgshift.jpgheight.jpg

--Agrandir / Réduire Il s'agit du processus d'agrandissement ou de réduction du sujet de l'image. Je pense que ce processus est destiné à tirer sur des chats proches ou éloignés. cat.jpgscale.jpg

Comment utiliser le programme de traitement d'extension de données

En exécutant "main.py", le traitement listé dans "Traitement d'expansion des données géré cette fois" est combiné et appliqué pour créer une image d'apprentissage. Vous pouvez l'utiliser comme vous le souhaitez en définissant les variables dans le code source suivant.

main.Partie de py


# -------------------Ci-dessous, chaque variable spécifiée individuellement-------------------

input_dir = 'trainImg' #Nom du dossier contenant l'image originale de l'apprentissage
output_dir = "output" #Nom du dossier de sortie après le traitement d'expansion
num = 10 #Nombre d'images à agrandir

generator = ImageDataGenerator(
                rotation_range=90, #Réglez l'angle de rotation à 90 °
                width_shift_range=0.1, #Décaler horizontalement au hasard
                height_shift_range=0.1, #Décalage aléatoire dans la direction verticale
                zoom_range=0.3, #Plage pour agrandir / réduire
                channel_shift_range=50.0, #Ajouter une valeur aléatoire à la valeur du pixel
                horizontal_flip=False, #Retourné verticalement au hasard
                vertical_flip=True #Retourner horizontalement au hasard
                )
# -------------------Comme mentionné ci-dessus, chaque variable spécifiée individuellement-------------------

"Input_dir" contient 5 images d'apprentissage originales, et si vous exécutez "main.py" avec les variables ci-dessus, 5x10 images seront générées dans "output_dir".

Précautions pour le traitement d'expansion des données

Le traitement d'expansion des données n'a pas à être appliqué. Par exemple, lorsque vous envisagez de créer un modèle de reconnaissance de caractères pour un kana plat, une image de caractère (voir: [https://lab.ndl.go.jp/cms/hiragana73](https: //lab.ndl.go.) Lorsque le traitement d'extension de données est appliqué à jp / cms / hiragana73)), les problèmes suivants se produisent.

--Lorsque le traitement de rotation est appliqué au pseudonyme plat "i" (gauche: image originale, droite: image traitée)     1930_1175565_0024.png      test1.png Comme le montre le résultat ci-dessus, l'image traitée aura des caractères similaires à "ko", de sorte qu'elle peut être mal reconnue.

--Lorsque le traitement d'inversion gauche / droite est appliqué au pseudonyme plat "U" (gauche: image originale, droite: image traitée)     1930_1176246_0041.png      test.png Comme le montre le résultat ci-dessus, l'image traitée est un caractère inexistant, ce qui entraîne une diminution de la précision du modèle de reconnaissance de caractères (apprentissage sans signification).

Résumé

Dans cet article, j'ai donné une brève explication de la création d'un programme de traitement d'expansion de données à l'aide de python et de traitement d'expansion de données. Le traitement d'expansion des données peut être effectué facilement, et s'il se passe bien, cela entraînera une amélioration de la précision. Cependant, en fonction de la cible de l'image d'apprentissage, une image d'apprentissage sans signification peut être créée en appliquant le processus d'expansion de données. Par conséquent, je pense qu'il est nécessaire de considérer quelle conversion (rotation, etc.) doit être utilisée et quelle conversion (ou angle si rotation) doit être effectuée en fonction de la cible de l'image d'entraînement.

Recommended Posts

À propos du traitement d'expansion des données pour l'apprentissage en profondeur
[Français] Tutoriel scikit-learn 0.18 Tutoriel d'apprentissage statistique pour le traitement des données scientifiques
Ensemble de données pour l'apprentissage automatique
À propos de la gestion de projet de deep learning (DNN)
[AI] Apprentissage en profondeur pour le débruitage d'image
L'apprentissage en profondeur
Créez votre propre PC pour un apprentissage en profondeur
[Deep Learning from scratch] À propos de l'optimisation des hyper paramètres
Créez rapidement un environnement python pour le Deep Learning / Data Science (Windows)
[Français] didacticiel scikit-learn 0.18 Didacticiel d'apprentissage statistique pour le traitement des données scientifiques Mettre le tout ensemble
Ordre d'étude recommandé pour les débutants en apprentissage automatique / apprentissage en profondeur
[Français] scikit-learn 0.18 Tutorial Rechercher de l'aide pour des tutoriels d'apprentissage statistique pour le traitement des données scientifiques
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Lire et mettre en œuvre l'apprentissage résiduel profond pour la reconnaissance d'image
Python: apprentissage profond du traitement du langage naturel: principes de base
Apprentissage en profondeur Python
Apprentissage profond × Python
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
Histoire de l'analyse de données par apprentissage automatique
J'ai installé le framework Deep Learning Chainer
[Français] didacticiel scikit-learn 0.18 Didacticiel d'apprentissage statistique pour le traitement des données scientifiques Apprentissage non supervisé: recherche de représentation des données
[Français] didacticiel scikit-learn 0.18 Didacticiel d'apprentissage statistique pour le traitement des données scientifiques Apprentissage statistique: paramètres et objets d'estimation dans scikit-learn
Réflexion sur les tactiques de croissance de type attaque de groupe en utilisant l'apprentissage en profondeur
Organisation des procédures de base pour l'analyse des données et le traitement statistique (4)
Une histoire de prédiction du taux de change avec Deep Learning
Mémo d'auto-apprentissage «Deep Learning from scratch» (n ° 19) Augmentation des données
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
Organisation des procédures de base pour l'analyse des données et le traitement statistique (2)
Techniques pour comprendre la base des décisions d'apprentissage en profondeur
Deep Learning 2 from scratch 1.3 Traitement du langage naturel 1.3 Résumé
xgboost: modèle d'apprentissage automatique efficace pour les données de table
Méthodes de traitement des données pour les ingénieurs mécaniciens et les ingénieurs non informaticiens (Introduction 2)
Une scène où le GPU est utile pour le deep learning?
Méthodes de traitement des données pour les ingénieurs mécaniciens et les ingénieurs non informaticiens (Introduction 1)
À propos de Python for loop
[Français] scikit-learn 0.18 Tutorial Tutoriel d'apprentissage statistique pour le traitement des données scientifiques Sélection du modèle: sélection de l'estimateur et de ses paramètres
Apprentissage automatique sur le surapprentissage
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Deep learning 1 Pratique du deep learning
Renforcer l'apprentissage de la troisième ligne
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
À propos de Python, pour ~ (plage)
Première solution d'apprentissage en profondeur ~
[AI] Apprentissage métrique profond
J'ai essayé le deep learning
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
À propos du polymorphisme pour l'élimination des nids
Résumé de l'apprentissage RAPIDS
Fonction d'apprentissage profond / softmax
Conseils pour gérer les entrées de longueur variable dans le cadre d'apprentissage en profondeur
Traduction japonaise du matériel pédagogique public du diplôme nano d'apprentissage profond
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
Créez un environnement pour "Deep Learning from scratch" avec Docker