2016-08-11 4 views
2

TensorFlow로 이미지를 분류하려고합니다. 나는 내 GPU에 분류를 계산하고 싶습니다 때문에, 한 번에 여러 이미지를 분류하기위한 솔루션을 찾고 있어요, 지금Pretrained Inception-v3 네트워크로 이미지 묶음을 분류하는 방법이 있습니까?

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

하고, 다음 example code on GitHub에서

이 같은 것입니다 성능을 떨어 뜨리기 때문에 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

Inception 딥 CNN 분류기에 대한 Google의 github을 살펴보십시오.

안내에 따라 와인 병 레이블을 분류하기 위해 네트워크를 미세 조정할 수있었습니다. 더 큰 배치 크기를 설정하면 한 번에 많은 이미지를 분류 할 수 있습니다.

전체 가이드가 유용하지만, 아마도 Fine-Tuning a Pre-Trained Model 에 특히 관심이 있습니다.

+0

예. 나는 여기서 지침서 (here) (https://www.tensorflow.org/versions/master/how_tos/image_retraining/index.html) (현재)가 구버전의 그래프를 사용한다는 것을 지적하겠다. ops의 모양은 한 번에 하나의 이미지 만 가져옵니다. @ alamost52 가이드에 언급 된 초기의 타볼은 새로운 것입니다. –

관련 문제