画像分割セマンティック - 1枚の画像を用いた予測DeeplabV3 +

訓練は良いDeeplabV3 +モデルである場合には、生成する、本当のシーンを予測する一般的な方法をモデルを使用して、次の希望を.ckptファイルを生成し.pbファイルを。これの利点は:定数、縮小モデルに1変数は、他の2つの言語(.pbファイルは、C / C ++ / Javaの/ NodeJSが、等を読み取る直接であってもよい)を呼び出す容易にします。

export_model.py生成モデルを実行します

Export_model.pyは予測するファイルを使用し、公式frozen_inference_graph.pbファイルを使用してコードファイルを生成しました。コードを見ることで得ることができ、入力と出力のモデルを、知っている必要があります。ことに留意すべきです。

python export_model.py \
  --checkpoint_path="./checkpoint_1/model.ckpt-518495" \  # 训练得到的ckpt文件
  --export_path="./output_model/frozen_inference_graph.pb" \  # 需要导出的模型名称
  --model_variant="xception_65" \
  --atrous_rates=6 \
  --atrous_rates=12 \
  --atrous_rates=18 \
  --output_stride=16 \
  --decoder_output_stride=4 \
  --num_classes=3 \
  --crop_size=1440 \  # 需要预测图片的大小,如果预测的图像大小比该值大,将报错
  --crop_size=1440 \
  --inference_scales=1.0

ソースが明確に示していますinput_nameは「ImageTensor」で、形状は[1、なし、なし、3]、データの種類があるtf.uint8は、あなたがここにデータの種類を変更することができ、output_nameは「SemanticPredictions」です。入力とOUTPを知って、それを予測することができます。

# export_model.py部分代码

# Input name of the exported model.
_INPUT_NAME = 'ImageTensor'

# Output name of the exported model.
_OUTPUT_NAME = 'SemanticPredictions'


def _create_input_tensors():
  """Creates and prepares input tensors for DeepLab model.

  This method creates a 4-D uint8 image tensor 'ImageTensor' with shape
  [1, None, None, 3]. The actual input tensor name to use during inference is
  'ImageTensor:0'.
  """
  # input_preprocess takes 4-D image tensor as input.
  input_image = tf.placeholder(tf.uint8, [1, None, None, 3], name=_INPUT_NAME)

単一の画像を予測します

生成されたを使用して.Pbファイルには、新しい絵を予測しました:

1.画像を読み取るとにuint8に変換し、形状は[1、なし、なし、3]の形式です。

2. .pbファイルを読んで、入力と出力を指定します。

ブラックスポットように前記要求出力、ラベル出力は、... 0、1、2です。

4.結果処理後、このステップは、個人になります

import tensorflow as tf
from keras.preprocessing.image import load_img, img_to_array

img = load_img(img_path)  # 输入预测图片的url
img = img_to_array(img)  
img = np.expand_dims(img, axis=0).astype(np.uint8)  # uint8是之前导出模型时定义的

# 加载模型
sess = tf.Session()
with open("frozen_inference_graph.pb", "rb") as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    output = tf.import_graph_def(graph_def, input_map={"ImageTensor:0": img},
                                     return_elements=["SemanticPredictions:0"])
    # input_map 就是指明 输入是什么;
    # return_elements 就是指明输出是什么;两者在前面已介绍

result = sess.run(output) 
print(result[0].shape)  # (1, height, width)

結果は:

サーバーにデプロイ40代、0.4秒:私の条件が遅くを予測、個人のノートブック上で、画像1040X868を入力して、3-分類問題です。

Tips-注TFバージョン:

予測すると、問題は、多くの場合、メモリ不足が生じるが、このモデルは、メモリは16ギガバイトで、解決されていないかもしれないだけで157メガバイトを持っています。オリジナルTensorflowは、バージョン9.1でローカルGithubに、CUDAからダウンロードし、1.8.0です。その後、公式Tensorflow1.8.0をダウンロードし、CUDA 9.0のサポート、私はCUDAを再インストールする必要がありました、メモリオーバーフローの問題が消えます。だから、:正式なチャンネルからソフトウェアをダウンロードしてください。

 

 

おすすめ

転載: blog.csdn.net/weixin_41713230/article/details/84146087