【问题标题】:Use inception v3 with batch of images in tensorflow在张量流中使用带有一批图像的 inception v3
【发布时间】:2017-10-29 10:21:36
【问题描述】:

在我的一个计算机视觉项目中,我使用公共预训练的 inception-v3 可在此处获得:http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz。这个网络位于我的分类链的开头(很多东西都是在网络产生的 logits 上执行的)。我想为这个网络提供一批图像(而不是顺序处理图像),以使其更快。 但是,提供的网络已被“冻结”,一次只能处理一张图像。

是否有任何解决方案可以“解冻”图表并对其进行调整,以便我可以在批量图像上使用它?

(N.B :我在互联网上找到了相关主题,但他们都建议使用更新的网络,例如这里: http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gz。这不是我想做的,因为很多东西已经在冻结模型的输出上进行了调整。)

【问题讨论】:

  • 我设法找到了一个解决方案(通过比较两个图中的所有运算符)并用适当的权重重建一个图。如果有人遇到类似问题,我可以分享我的代码(或者只是我修改过的冻结初始模型)。
  • 我有同样的问题,我想知道你是否能详细说明你是如何解决它或分享你的代码

标签: tensorflow classification batch-processing


【解决方案1】:

不确定是否为时已晚,但这是我使用的代码 sn-p:

# First loan model into and old graph 
proto_file = ...  # downloaded inception protofile 
graph_def = tf.GraphDef.FromString(open(proto_file, 'rb').read())
to_delete = {“DecodeJpeg", "Cast", "ExpandDims", "pool_3/_reshape", "softmax"}
graph_def = delete_ops_from_graph(graph_def, to_delete)

new_graph = tf.Graph()
with new_graph.as_default():
    x = tf.placeholder(tf.uint8, [None, None, None, 3], name="batched_inputs")
    x_cast = tf.cast(x, dtype=tf.float32)
    y = tf.import_graph_def(graph_def, input_map={"ExpandDims:0": x_cast}, return_elements=["pool_3:0"],name="")

...

现在new_graph 是具有批量维度的图(采用 4d 张量 NHWC)。请注意,如果您想使用 inception-2015-12-05.tgz 作为特征提取器,这很好。你需要从output = new_graph.get_tensor_by_name("pool_3:0")获取输出

delete_ops_from_graph的定义见Tensorflow: delete nodes from graph

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2017-11-15
    相关资源
    最近更新 更多