2016-03-18 29 views
7

Ho cercato di alimentare le immagini 1750 * 1750 in Tensorflow, ma non so come etichettare e alimentare i dati dopo aver convertito le immagini in un tensore usando la funzione tf.image.decode_jpeg().Come caricare, etichettare e caricare i dati jpeg in Tensorflow?

Attualmente, il mio codice è:

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() 

Ora, come ho detto prima, ho bisogno di nutrire ed etichettare i dati. Ho visto i file tutorial CIFAR-10, ma hanno memorizzato le etichette in un file e ho intenzione di non farlo in quel modo.

Sono abbastanza nuovo a Tensorflow quindi si prega di mantenere la risposta il più dettagliata possibile.

Grazie!

+0

ne dite di usare lo stesso formato di MINST_data e l'utilizzo di input_data.py a leggerlo? – ERed

risposta

22

A seconda di cosa si sta tentando di fare, ci sono diverse direzioni da considerare.

  1. Se hai appena desidera eseguire l'inferenza su un file JPEG arbitraria (vale a dire le etichette non sono necessarie), allora si può seguire l'esempio di classify_image.py che alimenta un'immagine JPEG in in una rete pre-addestrato Inception :

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

  2. Se desiderate addestrare (o mettere a punto) un modello su un piccolo insieme di dati personalizzata delle immagini JPEG, allora date un'occhiata a questo esempio per come addestrare un modello da una piccola serie di immagini JPEG.

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

  3. Se desiderate addestrare (o mettere a punto) un modello su un grande insieme di dati personalizzata delle immagini JPEG, allora la lettura di molti file singoli JPEG sarà inefficiente e rallentare la formazione tremendamente .

vorrei suggerire seguendo la procedura descritta di nascita nella biblioteca/modello che converte una directory di immagini JPEG in RecordIO sharded contenente immagini JPEG serializzati.

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

Istruzioni per l'esecuzione dello script di conversione sono disponibili qui:

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

Dopo aver eseguito la conversione, si può quindi utilizzare/copiare la pipeline immagine pre-elaborazione utilizzata dalla nascita/modello.

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

+0

Gli approcci qui introdotti sono quelli generici che possono essere usati per qualsiasi altro modello di tensorflow invece di una rete iniziale? Grazie. – user297850

+0

Sì, questi sono approcci generici anche se gli script di cui sopra sono più orientati verso problemi basati sul riconoscimento di immagini. – user5869947