将预训练的 inception_resnet_v2 与 Tensorflow 结合使用

Posted

技术标签:

【中文标题】将预训练的 inception_resnet_v2 与 Tensorflow 结合使用【英文标题】:Using pre-trained inception_resnet_v2 with Tensorflow 【发布时间】:2017-01-27 16:56:33 【问题描述】:

我一直在尝试使用 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)在 tensorflow 中加载模型,如下所示[下载提取检查点文件并下载示例图像 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 类)。有人可以帮助我了解我哪里出错了吗?

【问题讨论】:

可能需要Imagenet预处理? 顺便说一句,你的代码input_tensor 是什么? 不要直接喂图片,试试喂这个:im = np.array(im) - np.mean(np.array(im)) 【参考方案1】:

Inception 网络期望输入图像具有从 [-1, 1] 缩放的颜色通道。如here所见。

您可以使用现有的预处理,或者在您的示例中只是自己缩放图像:im = 2*(im/255.0)-1.0,然后再将它们提供给网络。

如果不进行缩放,输入 [0-255] 比网络预期的要大得多,并且所有偏差都可以非常强烈地预测类别 918(漫画书)。

【讨论】:

@alemi,为什么使用im = 2*(im/255.0)-1.0 而不是im = im/255.0 进行规范化? 因为零比较特殊,因为第一个运算是矩阵乘法,黑色比较常见。

以上是关于将预训练的 inception_resnet_v2 与 Tensorflow 结合使用的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow:如何将预训练模型已经嵌入的数据输入到 LSTM 模型中?

InceptionV4

PyTorch:将预训练模型从 3 个 RGB 通道更改为 4 个通道后,出现“ValueError:无法优化非叶张量”

论文泛读199将预训练的 Transformers 微调为变分自动编码器

论文泛读199将预训练的 Transformers 微调为变分自动编码器

将预计算的 chi2 内核与 libsvm (matlab) 一起使用时结果不佳