2017-12-12 13 views
2

私は、TensorFlowとlabel_image.pyの修正版を使用して、ラズベリーパイ3で画像分類プログラムを作成しようとしています。私は初めにhere.から得られMobileNetモデルを使用していループのTensorflowの 'Label_image.py'がますます遅い

、分類は約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

がどのように 'file_name'を定義していますか? 'label_image.py'で使われる' endswith() 'メソッドは' Tensor'変数ではなく 'str'を必要とします。 'Tensor'を' AttributeError'を説明する 'file_name'として渡している場合。 – dijksterhuis

+1

あなたがリンクしている質問に対する答えによれば、おそらくread_tensor_from_image_fileをループで呼びたくないでしょう---グラフが呼び出されるたびにグラフは大きくなります。代わりに、グラフを一度定義してから、それをループで実行する必要があります。 –

+0

@dijksteruis分では、 'file_name'はカメラが撮影した画像を指しています。 [ここ](https://stackoverflow.com/questions/46977868/running-label-image-py-in-a-loop)に投稿されたソリューションを試してみると、私は「AttributeError」を取得するだけです。 – pjjml

答えて

0

私のために働く解決策hereが見つかりました。 をread_tensor_from_image_file()機能の本体の周りに追加することで、私の分類は30分後でも1.20秒前後になります。

ので、私のread_tensor_from_image_file()関数は次のようになります。

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 
関連する問題