web-dev-qa-db-ja.com

Tensorflowで事前トレーニング済みのinception_resnet_v2を使用する

Googleからリリースされた事前トレーニング済みのinception_resnet_v2モデルを使用しようとしています。私は彼らのモデル定義( https://github.com/tensorflow/models/blob/master/slim/nets/inception_resnet_v2.py )を使用しており、チェックポイント( http:// download.tensorflow.org/models/inception_resnet_v2_2016_08_30.tar.gz )以下のようにテンソルフローにモデルをロードします[チェックポイントファイルを抽出し、サンプルコードdog.jpgとpanda.jpgをダウンロードして、このコードをテストします]-

import tensorflow as tf
slim = tf.contrib.slim
from PIL import Image
from inception_resnet_v2 import *
import numpy as np

checkpoint_file = 'inception_resnet_v2_2016_08_30.ckpt'
sample_images = ['dog.jpg', 'panda.jpg']
#Load the model
sess = tf.Session()
arg_scope = inception_resnet_v2_arg_scope()
with slim.arg_scope(arg_scope):
  logits, end_points = inception_resnet_v2(input_tensor, is_training=False)
saver = tf.train.Saver()
saver.restore(sess, checkpoint_file)
for image in sample_images:
  im = Image.open(image).resize((299,299))
  im = np.array(im)
  im = im.reshape(-1,299,299,3)
  predict_values, logit_values = sess.run([end_points['Predictions'], logits], feed_dict={input_tensor: im})
  print (np.max(predict_values), np.max(logit_values))
  print (np.argmax(predict_values), np.argmax(logit_values))

ただし、このモデルコードからの結果は期待される結果を提供しません(クラス918は入力画像に関係なく予測されます)。誰かが私がどこで間違っているのか理解するのを手伝ってくれる?

14
dd.ai

Inceptionネットワークは、入力画像が[-1、1]からスケーリングされたカラーチャネルを持つことを期待しています。ご覧の通り こちら

既存の前処理を使用するか、例では画像を自分でスケーリングするだけです:im = 2*(im/255.0)-1.0をネットワークに送る前に。

スケーリングなしでは、入力[0-255]はネットワークが予想するよりもはるかに大きく、バイアスはすべてカテゴリ918(コミックブック)を非常に強く予測するように機能します。

14
alemi