Преобразование .tflite в .pb - PullRequest
0 голосов
/ 07 декабря 2018

Проблема : Как я могу преобразовать .tflite (сериализованный плоский буфер) в .pb (замороженная модель)?Документация говорит только об одностороннем преобразовании.

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

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Я нашел ответ здесь

Мы можем использовать интерпретатор для анализа модели, и тот же код выглядит следующим образом:

import numpy as np
import tensorflow as tf

# Load TFLite model and allocate tensors.
interpreter = tf.lite.Interpreter(model_path="converted_model.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Test model on random input data.
input_shape = input_details[0]['shape']
input_data = np.array(np.random.random_sample(input_shape), dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)

interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
print(output_data)

Нетрон - лучший инструмент анализа / визуализации, который я нашел, он может понимать множество форматов, включая .tflite.

0 голосов
/ 14 июля 2019

Я сделал это с TOCO, используя tf 1.12

tensorflow_1.12/tensorflow/bazel-bin/tensorflow/contrib/lite/toco/toco -- 
output_file=coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.pb -- 
output_format=TENSORFLOW_GRAPHDEF --input_format=TFLITE -- 
input_file=coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.tflite -- 
inference_type=FLOAT --input_type=FLOAT --input_array="" --output_array="" -- 
input_shape=1,450,450,3 --dump_grapHviz=./

(вы можете удалить опцию dump_graphviz)

0 голосов
/ 12 декабря 2018

Я не думаю, что есть способ восстановить tflite обратно в pb, так как некоторая информация теряется после преобразования.Я нашел косвенный способ взглянуть на то, что находится внутри модели tflite, - прочитать каждый тензор.

interpreter = tf.contrib.lite.Interpreter(model_path=model_path)     
interpreter.allocate_tensors()

# trial some arbitrary numbers to find out the num of tensors
num_layer = 89 
for i in range(num_layer):
    detail = interpreter._get_tensor_details(i)
    print(i, detail['name'], detail['shape'])

, и вы увидите что-то вроде ниже.Поскольку в настоящее время поддерживаются только ограниченные операции, не составляет труда перестроить сетевую архитектуру.Я также поместил некоторые учебники на мой Github

0 MobilenetV1/Logits/AvgPool_1a/AvgPool [   1    1    1 1024]
1 MobilenetV1/Logits/Conv2d_1c_1x1/BiasAdd [   1    1    1 1001]
2 MobilenetV1/Logits/Conv2d_1c_1x1/Conv2D_bias [1001]
3 MobilenetV1/Logits/Conv2d_1c_1x1/weights_quant/FakeQuantWithMinMaxVars [1001    1    1 1024]
4 MobilenetV1/Logits/SpatialSqueeze [   1 1001]
5 MobilenetV1/Logits/SpatialSqueeze_shape [2]
6 MobilenetV1/MobilenetV1/Conv2d_0/Conv2D_Fold_bias [32]
7 MobilenetV1/MobilenetV1/Conv2d_0/Relu6 [  1 112 112  32]
8 MobilenetV1/MobilenetV1/Conv2d_0/weights_quant/FakeQuantWithMinMaxVars [32  3  3  3]
9 MobilenetV1/MobilenetV1/Conv2d_10_depthwise/Relu6 [  1  14  14 512]
10 MobilenetV1/MobilenetV1/Conv2d_10_depthwise/depthwise_Fold_bias [512]
11 MobilenetV1/MobilenetV1/Conv2d_10_depthwise/weights_quant/FakeQuantWithMinMaxVars [  1   3   3 512]
12 MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D_Fold_bias [512]
13 MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Relu6 [  1  14  14 512]
14 MobilenetV1/MobilenetV1/Conv2d_10_pointwise/weights_quant/FakeQuantWithMinMaxVars [512   1   1 512]
15 MobilenetV1/MobilenetV1/Conv2d_11_depthwise/Relu6 [  1  14  14 512]
16 MobilenetV1/MobilenetV1/Conv2d_11_depthwise/depthwise_Fold_bias [512]
17 MobilenetV1/MobilenetV1/Conv2d_11_depthwise/weights_quant/FakeQuantWithMinMaxVars [  1   3   3 512]
18 MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D_Fold_bias [512]
19 MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6 [  1  14  14 512]
20 MobilenetV1/MobilenetV1/Conv2d_11_pointwise/weights_quant/FakeQuantWithMinMaxVars [512   1   1 512]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...