2017-12-12 9 views
2

TensorFlow와 label_image.py의 수정 버전을 사용하여 Raspberry Pi 3에서 이미지 분류 프로그램을 만들려고합니다.Tensorflow의 'Label_image.py'루프가 점점 느려짐

나는 here.에서 얻은 MobileNet 모델을 사용하고 있습니다. 처음에는 분류가 약 3 초가 걸리지 만 시간이 지남에 따라 증가합니다 (10 분 후 최대 7 초). 이유는 알 수 없습니다. 이 일이 일어나고 있습니다.

while True: 

    startTime = datetime.now() 

    t = read_tensor_from_image_file(file_name, 
           input_height=input_height, 
           input_width=input_width, 
           input_mean=input_mean, 
           input_std=input_std) 

    input_name = "import/" + input_layer 
    output_name = "import/" + output_layer 
    input_operation = graph.get_operation_by_name(input_name); 
    output_operation = graph.get_operation_by_name(output_name); 

    results = sess.run(output_operation.outputs[0], 
        {input_operation.outputs[0]: t}) 
    results = np.squeeze(results) 

    top_k = results.argsort()[-5:][::-1] 
    labels = load_labels(label_file) 
    for i in top_k: 
    print(labels[i], results[i]) 

    print(datetime.now() - startTime) 

TensorFlow 세션이 그래프의 로딩과 함께 루프 전에 시작 : 여기

내 루프 내에서 코드입니다.

저는 Python 3.4.2와 TensorFlow 1.3.0을 사용하고 있습니다.

동일한 문제가있는 StackOverflow에서 다른 question을 발견했습니다. 거기에 게시 된 솔루션을 시도했지만 "AttributeError : 'Tensor'개체에 'endswith'속성이 없습니다."라는 오류가 표시됩니다.

+0

? 'label_image.py'에서 사용되는'endswith()'메소드는'Tensor' 변수가 아닌'str'을 필요로합니다. 'Tensor'를'AttributeError'를 설명하는'file_name'으로 전달한다면 말입니다. – dijksterhuis

+1

링크 된 질문에 대한 답변에 따라 루프에서 read_tensor_from_image_file을 호출하고 싶지 않을 것입니다. 그래프가 호출 될 때마다 그래프가 커집니다. 대신 그래프를 한 번 정의한 다음 루프로 실행해야합니다. –

+0

@dijksteruis 분 'file_name'은 카메라가 찍은 이미지를 가리키고 있습니다. 나는 [AttributedError] 메소드를 시도 할 때만 AttributeError를 얻는다 (https://stackoverflow.com/questions/46977868/running-label-image-py-in-a-loop). – pjjml

답변

0

나에게 맞는 해결책은 here입니다. 을 read_tensor_from_image_file() 함수 본문에 추가하면 30 분 후에도 분류가 1.20 초가됩니다.

는 나의 read_tensor_from_image_file() 기능은 다음과 같습니다 : 당신은 어떻게`file_name`를 정의

def read_tensor_from_image_file(file_name, input_height=192, input_width=192, 
          input_mean=0, input_std=255): 
    with tf.Graph().as_default(): 
    input_name = "file_reader" 
    output_name = "normalized" 
    file_reader = tf.read_file(file_name, input_name) 
    if file_name.endswith(".png"): 
     image_reader = tf.image.decode_png(file_reader, channels = 3, 
            name='png_reader') 
    elif file_name.endswith(".gif"): 
     image_reader = tf.squeeze(tf.image.decode_gif(file_reader, 
               name='gif_reader')) 
    elif file_name.endswith(".bmp"): 
     image_reader = tf.image.decode_bmp(file_reader, name='bmp_reader') 

    else: 
     image_reader = tf.image.decode_jpeg(file_reader, channels = 3, 
            name='jpeg_reader') 
    float_caster = tf.cast(image_reader, tf.float32) 
    dims_expander = tf.expand_dims(float_caster, 0); 
    resized = tf.image.resize_bilinear(dims_expander, [input_height, 
    input_width]) 
    normalized = tf.divide(tf.subtract(resized, [input_mean]),[input_std]) 

    result = sess.run(normalized) 

    return result