web-dev-qa-db-fra.com

Comment charger, étiqueter et alimenter des données JPEG dans Tensorflow?

J'ai essayé de charger des images 1750 * 1750 dans Tensorflow, mais je ne sais pas comment étiqueter et alimenter les données après avoir converti les images en Tensor à l'aide de la fonction tf.image.decode_jpeg ().

Actuellement, mon code est:

import tensorflow as tf
import numpy as np

import imageflow
import os, glob

sess = tf.InteractiveSession()

def read_jpeg(filename_queue):
 reader = tf.WholeFileReader()
 key, value = reader.read(filename_queue)

 my_img = tf.image.decode_jpeg(value)
 my_img.set_shape([1750, 1750, 1])
 print(value)
 return my_img

#####################################################
def read_image_data():
 jpeg_files = []
 images_tensor = []

 i = 1
 WORKING_PATH = "/Users/Zanhuang/Desktop/NNP/DATA"
 jpeg_files_path = glob.glob(os.path.join(WORKING_PATH, '*.jpeg'))

 for filename in jpeg_files_path:
    print(i)
    i += 1
    jpeg_files.append(filename)


 filename_queue = tf.train.string_input_producer(jpeg_files)

 mlist = [read_jpeg(filename_queue) for _ in range(len(jpeg_files))]

 init = tf.initialize_all_variables()

 sess = tf.Session()
 sess.run(init)

 images_tensor = tf.convert_to_tensor(images_tensor)


 sess.close()

Maintenant, comme je l'ai dit plus tôt, je dois alimenter et étiqueter les données. J'ai vu les fichiers du didacticiel CIFAR-10, mais ils ont stocké les étiquettes dans un fichier et je prévois de ne pas le faire.

Je suis assez nouveau sur Tensorflow, veuillez donc garder la réponse aussi détaillée que possible.

Merci!

11
Zan Huang

Selon ce que vous essayez de faire, il y a plusieurs directions à considérer.

  1. Si vous souhaitez simplement exécuter l'inférence sur un fichier JPEG arbitraire (c'est-à-dire que les étiquettes ne sont pas nécessaires), vous pouvez suivre l'exemple de classify_image.py qui alimente une image JPEG dans un réseau Inception pré-formé:

    github.com/tensorflow/models/blob/master/tutorials/image/imagenet/classify_image.py

  2. Si vous souhaitez entraîner (ou affiner) un modèle sur un petit ensemble de données personnalisé d'images JPEG, jetez un œil à cet exemple pour comment former un modèle à partir d'un petit ensemble d'images JPEG.

    github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py

  3. Si vous souhaitez former (ou affiner) un modèle sur un grand ensemble de données personnalisé d'images JPEG, alors la lecture de nombreux fichiers JPEG individuels sera formation inefficace et ralentir énormément.

Je suggère de suivre la procédure décrite dans la bibliothèque de création/modèle qui convertit un répertoire d'images JPEG en RecordIO fragmenté contenant des images JPEG sérialisées.

github.com/tensorflow/models/blob/master/research/inception/inception/data/build_image_data.py

Les instructions pour exécuter le script de conversion sont disponibles ici:

github.com/tensorflow/models/blob/master/research/inception/README.md#how-to-construct-a-new-dataset-for-retraining

Après avoir exécuté la conversion, vous pouvez ensuite utiliser/copier le pipeline de prétraitement d'image utilisé par la création/le modèle.

github.com/tensorflow/models/blob/master/research/inception/inception/image_processing.py

26
user5869947