Как вы можете определить имя входа и выхода на графике тензорной доски, подобном изображенному на рисунках, прикрепленных к этому сообщению?

Я использовал модель тензорного потока MobileNet_v1_1.0_224 для обнаружения объектов. Теперь у меня есть собственный замороженный график (файл .pb), который мне нужно преобразовать в расширение tflite, чтобы я мог использовать свою модель для мобильных устройств.

Может ли кто-нибудь помочь мне определить имена входа и выхода на этом графике тензорной доски? Мне нужно, чтобы они использовались в качестве входных и выходных параметров для преобразования моего замороженного графа (файл .pb) в файл tensorflow lite (.tflite).

график из тензорной таблицы

тот же график


person EE2017    schedule 15.09.2018    source источник


Ответы (2)


Вы можете использовать этот код:

import tensorflow as tf
gf = tf.GraphDef()   
m_file = open('frozen_inference_graph.pb','rb')
gf.ParseFromString(m_file.read())

with open('somefile.txt', 'a') as the_file:
    for n in gf.node:
        the_file.write(n.name+'\n')

file = open('somefile.txt','r')
data = file.readlines()
print ("\noutput name = ")
print (data[len(data)-1])

print ("Input name = ")
file.seek ( 0 )
print (file.readline())

В моем случае у меня было

output name: SemanticPredictions
input name: ImageTensor
person Ajinkya    schedule 19.04.2019
comment
Спасибо, я использовал графический инструмент (тензорную доску), чтобы визуализировать это - person EE2017; 19.04.2019
comment
Как мне получить форму входных и выходных параметров? также? вместе с именами? @Ajinkya - person Sundeep Pidugu; 28.08.2019
comment
@SundeepPidugu использует saved_model_cli show --all --dir <model_dir>. получить формы - person Ajinkya; 16.04.2020
comment
@Ajinkya, это было быстро;) - person Sundeep Pidugu; 16.04.2020

Вам нужен инструмент summarize_graph. Запустите summarize_graph --in_graph=your_graph.pb, и он выведет. Если вы используете докер, вы можете найти summarize_graph на любом tensorflow/tensorflow изображении с тегом devel. Например:

wget http://download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz
tar xvf mobilenet_v1_1.0_224.tgz
docker run --rm -it -v $PWD:/data tensorflow/tensorflow:1.10.1-devel-py3

# Inside docker
cd /tensorflow
bazel build tensorflow/tools/graph_transforms:summarize_graph # This may take a while, use --jobs 4
./bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=/data/mobilenet_v1_1.0_224_frozen.pb

Результатом будет:

Found 1 possible inputs: (name=input, type=float(1), shape=[?,224,224,3]) 
No variables spotted.
Found 1 possible outputs: (name=MobilenetV1/Predictions/Reshape_1, op=Reshape) 
Found 4254891 (4.25M) const parameters, 0 (0) variable parameters, and 0 control_edges
Op types used: 138 Const, 138 Identity, 27 FusedBatchNorm, 27 Relu6, 15 Conv2D, 13 DepthwiseConv2dNative, 2 Reshape, 1 AvgPool, 1 BiasAdd, 1 Placeholder, 1 Shape, 1 Softmax, 1 Squeeze
To use with tensorflow/tools/benchmark:benchmark_model try these arguments:
bazel run tensorflow/tools/benchmark:benchmark_model -- --graph=/data/mobilenet_v1_1.0_224_frozen.pb --show_flops --input_layer=input --input_layer_type=float --input_layer_shape=-1,224,224,3 --output_layer=MobilenetV1/Predictions/Reshape_1
person Juliano S Assine    schedule 21.09.2018
comment
Это похоже на то, что мне нужно, но я использую Anaconda вместо Bazel. Я пробовал, но Anaconda не распознает команду summarize_graph. У вас есть идеи о том, как суммировать график (предложенный с помощью bazel) для Anaconda? - person EE2017; 21.09.2018
comment
Bazel - это система сборки, такая как CMake, а summarize_graph - исполняемый файл, написанный на C ++ (я думаю). Вы можете вызвать исполняемый файл из Python и проанализировать ответ. Если вам нужно сделать это исключительно на python, я предлагаю вам проверить график перед его замораживанием с помощью тензорного потока (не знаю, как это будет зависеть от вашего кода) - person Juliano S Assine; 21.09.2018
comment
Спасибо. В Github я обнаружил, что мне нужно установить тензорный поток из исходного кода, чтобы я мог использовать библиотеку C ++ с Bazel. Спасибо еще раз, - person EE2017; 21.09.2018