Я пытаюсь проверить, правильно ли конвертирован мой файл tflite, сделав простой вывод.
Я использовал данные поезда из Deeplab с набором данных PASCAL VO C. https://github.com/tensorflow/models/tree/master/research/deeplab
Теперь я могу сделать вывод без ошибки, но все, что я получаю в ответ, это массив нулей. Я не уверен, что мой процесс преобразования неверен или мой процесс вывода неверен.
Что я сделал
Сделал файл pb в коллаборации Google
Я клонировал tf / models и запустил local_test_mobilenetv2.sh
. https://github.com/tensorflow/models/blob/master/research/deeplab/local_test_mobilenetv2.sh
Эта часть экспортируется в сценарии.
python "${WORK_DIR}"/export_model.py \
--logtostderr \
--checkpoint_path="${CKPT_PATH}" \
--export_path="${EXPORT_PATH}" \
--model_variant="mobilenet_v2" \
--num_classes=21 \
--crop_size=513 \
--crop_size=513 \
--inference_scales=1.0
преобразование в tflite
!tflite_convert \
--graph_def_file=/content/models/research/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set_mobilenetv2/export/frozen_inference_graph.pb \
--output_file=/content/models/research/deeplab/datasets/pascal_voc_seg/exp/train_on_trainval_set_mobilenetv2/export/frozen_inference_graph.tflite \
--output_format=TFLITE \
--input_shape=1,513,513,3 \
--input_arrays="MobilenetV2/MobilenetV2/input" \
--change_concat_input_ranges=true \
--output_arrays="ArgMax"
вывод
from PIL import Image
import numpy
import sys
import cv2
# load tflite
interpreter = tf.lite.Interpreter(model_path="/frozen_inference_graph.tflite")
interpreter.allocate_tensors()
# get input/output details
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# check the input/output format
print('input/output format')
print(input_details)
print(output_details)
# get input shape
input_shape = input_details[0]['shape']
print('input shape')
print(input_shape)
# test image
test_img = "/content/deeplab_sample/bicycle513x513.jpg"
image = Image.open(test_img)
image = image.convert("RGB")
image = image.resize((513, 513))
img_data = np.asarray(image, dtype=np.uint8)
# reshape test image
reshaped_img = img_data.reshape(input_shape)
print('input data')
print(reshaped_img)
interpreter.set_tensor(input_details[0]['index'], reshaped_img)
# inference
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
print('output data')
print(output_data)
print(np.count_nonzero(output_data)) # number of nonzero elements
вывод
input/output format
[{'name': 'MobilenetV2/MobilenetV2/input', 'index': 6, 'shape': array([ 1, 513, 513, 3], dtype=int32), 'shape_signature': array([ 1, 513, 513, 3], dtype=int32), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}]
[{'name': 'ArgMax', 'index': 0, 'shape': array([ 1, 513, 513], dtype=int32), 'shape_signature': array([ 1, 513, 513], dtype=int32), 'dtype': <class 'numpy.int64'>, 'quantization': (0.0, 0), 'quantization_parameters': {'scales': array([], dtype=float32), 'zero_points': array([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}]
input shape
[ 1 513 513 3]
input data
[[[[239. 247. 250.]
[239. 247. 250.]
[238. 246. 249.]
...
[244. 247. 252.]
[244. 247. 252.]
[244. 248. 251.]]
[[239. 247. 250.]
[238. 246. 249.]
[237. 245. 248.]
...
[244. 247. 252.]
[244. 247. 252.]
[244. 248. 251.]]
[[238. 245. 251.]
[237. 244. 250.]
[236. 243. 249.]
...
[244. 248. 251.]
[244. 248. 251.]
[244. 248. 251.]]
...
[[112. 120. 45.]
[102. 111. 44.]
[105. 112. 58.]
...
[127. 113. 64.]
[115. 101. 52.]
[108. 88. 37.]]
[[109. 126. 0.]
[111. 128. 16.]
[105. 118. 26.]
...
[135. 121. 72.]
[132. 118. 69.]
[132. 112. 61.]]
[[128. 135. 65.]
[104. 111. 43.]
[ 94. 100. 36.]
...
[145. 124. 71.]
[152. 131. 78.]
[143. 126. 72.]]]]
output data
[[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]]
0
Я попробовал пару разных изображений и получил тот же результат.