[PYTHON] Préparation du chargement du jeu de données d'origine

Lorsque vous faites du Deep Learning, vous voudrez bientôt charger non seulement l'exemple de jeu de données, mais votre propre jeu de données. Je parviens à collecter des images, mais que dois-je faire après cela? Alors, j'ai laissé une note selon la procédure qui semble facile à comprendre.

Lisez le dossier

Utilisez les fonctions TensorFlow pour lire le fichier. Sélectionnez "tf.read_file ()".

L'utilisation est comme ça.

image_r = tf.read_file(fname)

fname est le nom du fichier que vous souhaitez lire. Si le japonais est inclus, une erreur se produira sauf s'il s'agit de UTF-8. (Peut-être que le code de caractère peut être changé ^^;)

Charger l'image

Utilisez les fonctions TensorFlow pour charger l'image. Pour le moment, il prend en charge les formats PNG et JPEG.

En outre, il existe également une fonction pratique qui peut lire l'un des deux types ci-dessus.

Cependant, je ne peux pas lire BMP ou TIF.

L'utilisation est comme ça.

image_r = tf.read_file(fname)
image = tf.image.decode_image(image_r, channels=3)

Le flux consiste à lire d'abord le fichier et à le décoder selon le format. Le résultat de la lecture est un tableau de (vertical, horizontal, channel). Plus précisément, dans le cas d'une image 2x2xRGB [[[R, G, B] # (x, y) = (0,0) en haut à gauche [R, G, B]] # (x, y) = (1,0) En haut à droite [[R, V, B] # (x, y) = (0,1) En bas à gauche [R, V, B]]] # (x, y) = (1,1) En bas à droite Ce sera de l'ordre de.

[De côté] En fait, je peux lire des GIF, mais il semble que le résultat après décodage soit pour (cadre, vertical, horizontal, canal) et GIF animé. Je vais vous dire que je ne peux pas lire les GIF car les données sont légèrement différentes des autres (explosion)

Spécifiez le fichier à lire

Lorsque vous lisez réellement l'ensemble de données, vous explorez probablement le répertoire ou lisez le fichier de définition. Pour le moment, décrivez la procédure de lecture du fichier de définition.

On suppose que le fichier de définition est décrit comme un fichier texte (tel que CSV). Par exemple, comme ça.

c:\work\image\image1.png
c:\work\image\image2.png
c:\work\image\image3.png

Puisqu'il s'agit de Deep Learning, ce sera comme ça si vous ajoutez un numéro d'étiquette.

c:\work\image0\image1.png, 0
c:\work\image0\image2.png, 0
c:\work\image1\image3.png, 1

Pour lire ce CSV, nous utilisons également la fonction TensorFlow. (Tout est pratique et pratique!)

Tout d'abord, préparez une file d'attente pour récupérer ligne par ligne. Cette fonction est "tf.train.string_input_producer ()". Ensuite, une classe appelée "tf.TextLineReader" est préparée pour lire le fichier texte ligne par ligne, et en spécifiant la file d'attente mentionnée précédemment dans cette fonction "read ()", les données d'une ligne sont réellement préparées. Sera lu. Après cela, il analyse selon le format CSV, et cette fois il se décompose en noms de fichiers et en étiquettes.

Le code ressemble à ceci.

fname_queue = tf.train.string_input_producer([csvfile])
reader = tf.TextLineReader()
key, val = reader.read(fname_queue)
fname, label = tf.decode_csv(val, [["aa"], [1]])

csvfile est le nom du fichier CSV à lire, key est le nom du fichier CSV et le numéro de ligne, val est la chaîne de caractères de cette ligne, fname est la première colonne (nom de fichier) et label est la deuxième colonne (numéro d'étiquette). .. Les données d'image seront lues en utilisant ce fname.

Il est difficile de comprendre la file d'attente, mais si vous pouvez imaginer lire le CSV ligne par ligne à chaque fois au lieu de lire le CSV à la fois, j'ai l'impression de pouvoir le saisir d'une manière ou d'une autre. (Il semble que lorsque la clé ou la valeur est accédée, elle sera comptée pour lire la ligne suivante)

Ainsi, grâce à ce CSV, il sera possible de gérer la structure dans laquelle le fichier image est enregistré. Cependant, il est difficile de créer ce fichier CSV, je voudrais donc écrire du code pour explorer le répertoire et créer CSV.

Exécuter

En fait, le code jusqu'à présent ne lit pas réellement le fichier. Le point de TensorFlow est que le graphe est construit en premier, puis exécuté. En d'autres termes, cette fois aussi, la partie jusqu'à présent était la partie construction du graphe, et la partie exécution n'était pas écrite.

Par conséquent, pour l'exécuter réellement, le code suivant est requis.

sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
tf.train.start_queue_runners(sess)
x = sess.run(image)

Créez une session, initialisez-la, démarrez une file d'attente et exécutez-la. Veuillez noter que si vous oubliez ce "tf.train.start_queue_runners ()", la file d'attente ne bougera pas et aucun fichier ne sera lu. (Non seulement il ne bouge pas, mais il gèle aussi et ne peut pas être arrêté ...) Le résultat final x correspond aux données d'image lues (pour tous les fichiers).

prime

Voici le code que j'ai essayé, tous ensemble.

import sys
import tensorflow as tf

def read_csv(csvfile):
    fname_queue = tf.train.string_input_producer([csvfile])
    reader = tf.TextLineReader()
    key, val = reader.read(fname_queue)
    fname, label = tf.decode_csv(val, [["aa"], [1]])
    return read_img(fname)

def read_img(fname):
    img_r = tf.read_file(fname)
    return tf.image.decode_image(img_r, channels=3)

def main():
    argv = sys.argv
    argc = len(argv)
    if (argc < 2):
        print('Usage: python %s csvfile' %argv[0])
        quit()

    image = read_csv(argv[1])

    sess = tf.Session()
    init = tf.initialize_all_variables()
    sess.run(init)
    tf.train.start_queue_runners(sess)
    x = sess.run(image)

    print(x)

if __name__ == '__main__':
    main()

Le nom du fichier CSV est passé en argument.

Bonus (2)

Afin de traiter avec Deep Learning, il est difficile d'obtenir tous les fichiers écrits en CSV, donc je pense qu'il est nécessaire de le modifier pour qu'il obtienne tous les quelques fichiers. De plus, c'est un problème s'ils sont amenés dans l'ordre écrit dans le fichier CSV, il est donc nécessaire d'inclure un mécanisme de mélange. (Il semble être dans tf.train.string_input_producer ()) De plus, j'ai l'impression de vouloir gonfler, faire pivoter ou déplacer l'image acquise, ou effectuer un traitement pour gonfler le nombre d'images.

Je voudrais étudier ce domaine ensuite.

Recommended Posts

Préparation du chargement du jeu de données d'origine
Comment lire l'ensemble de données SNLI
Téléchargez le jeu de données VGG Face2 directement sur le serveur
Renvoie la quantité d'entités encodées à chaud à la valeur de catégorie d'origine
Ajouter le context_processor d'origine
La route vers Pythonista
La route vers Djangoist
Je veux utiliser le jeu de données R avec python
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Transmettez les données OpenCV de la bibliothèque C ++ d'origine à Python
Récupérez la source de la page à charger indéfiniment avec python.
Comment utiliser le générateur
Point selon l'image
La route pour télécharger Matplotlib
Comment utiliser le décorateur
Comment augmenter l'axe
Comment démarrer la première projection
Extraire l'index de la set list d'origine correspondant à la liste des sous-ensembles.
J'ai essayé de visualiser l'ensemble de données de préférence de boisson par décomposition tenseur.