2016-08-11 17 views
2

Я пытаюсь классифицировать изображения с помощью TensorFlow.Есть ли способ классифицировать партию изображений с предварительно подготовленной сетью Inception-v3?

В example code on GitHub что-то вроде этого:

predictions = sess.run(softmax_tensor, {'DecodeJpeg/contents:0': image_data}) 

Сейчас я ищу решение для классификации нескольких изображений на одном дыхании, потому что я хотел бы, чтобы вычислить классификацию на моем GPU, и Я не хочу перемещать изображения на GPU один за другим, так как это снижает производительность.

Петля на всех изображениях вокруг sess.run(...) не делала то, что я хотел: каждое изображение по-прежнему отправлялось на GPU индивидуально.

with tf.Session() as sess: 
    softmax_tensor = sess.graph.get_tensor_by_name('final_result:0') 
    for image in images: 
     predictions = sess.run(softmax_tensor, {'DecodeJpeg:0': image}) 

ответ

1

Так что после многих проб и ошибок я нашел решение, которое имеет правильное поведение для меня. Но я не уверен, что это самый элегантный.

pool = ThreadPool() 

def operation(sess, softmax, image, image_number): 
    prediction = sess.run(softmax, {'DecodeJpeg:0': image}) 
    return prediction, image_number 

with tf.Graph().as_default() as imported_graph: 
    tf.import_graph_def(graph_def, name='') 

with tf.Session(graph=imported_graph) as sess: 
    with tf.device("/gpu:0"): 
     softmax_tensor = sess.graph.get_tensor_by_name('final_result:0') 
     threads = [pool.apply_async(operation, args=(sess, softmax_tensor, np_images[image_number], image_number,)) for 
        image_number in range(len(np_images))] 
     result = [] 
     for thread in threads: 
      result.append(thread.get()) 

Ключ должен был использовать многопоточное решение.

3

Взгляните на github Google на свой Inception Deep CNN Classifier.

Следуя их руководству, я смог точно настроить сеть, чтобы классифицировать этикетки с бутылками для вина. Вы можете классифицировать множество изображений за один проход, просто установив размер больших партий.

Весь гид полезен, но вас, вероятно, особенно интересует Fine-Tuning a Pre-Trained Model .

+0

Да. Я просто укажу, что руководство [здесь] (https://www.tensorflow.org/versions/master/how_tos/image_retraining/index.html) (на сегодняшний день) использует более раннюю версию графика, где формы ops принимают только одно изображение за раз. Тар-мяч начала, упомянутый в руководстве @ alamost52, является более новым. –