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.
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.
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.
--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.
--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.
Changement de tonalité de couleur C'est un processus pour éclaircir ou assombrir l'ensemble. Je pense que ce processus suppose que l'environnement de prise de vue est clair ou sombre.
Retourner horizontalement C'est un processus pour inverser la gauche et la droite de l'image. Je pense que ce processus est destiné à photographier des chats orientés vers la gauche ou vers la droite.
Random Erasing C'est un processus pour masquer (recouvrir) une partie de l'image avec un rectangle. À ce moment, 1. s'il faut masquer ou non, 2. la taille du rectangle et 3. le rapport hauteur / largeur du rectangle sont déterminés de manière aléatoire.
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".
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) 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) 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).
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