Как преобразовать входные и выходные имена модели .pb из даркнета

Я обучил модель в даркнете по модели YOLOv3-SPP. Мне нужно иметь возможность использовать эту модель в моем приложении для iPhone, поэтому мне нужно преобразовать ее в CoreML. Я начал с преобразования файла .weights в файл .pb. Теперь я пытаюсь преобразовать его из TensorFlow в CoreML с помощью tfcoreml. Однако я не могу определить свои имена тензоров ввода и вывода. Я попытался использовать тензорную доску для визуализации модели и определения входных и выходных данных, но поскольку я новичок в TensorFlow, я не могу понять, что использовать. Я использую этот скрипт для преобразования модели из TensorFlow в CoreML:

import tfcoreml
import os
import tensorflow as tf

frozen_model_file = os.path.abspath('frozen_darknet_yolov3_model.pb')
input_tensor_shapes = {"input/placeholder:0": [1, 32, 32, 9]}
# Output CoreML model path
coreml_model_file = './model.mlmodel'
output_tensor_names = ['output/prediction:0']
def convert():
    # Read the pb model
    with tf.gfile.GFile(frozen_model_file, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
    # Then, we import the graph_def into a new Graph
    tf.import_graph_def(graph_def, name="")
    # Convert
    tfcoreml.convert(
        tf_model_path=frozen_model_file,
        mlmodel_path=coreml_model_file,
        input_name_shape_dict=input_tensor_shapes,
        output_feature_names=output_tensor_names)
convert()

Вот как выглядит моя тензорная доска:

введите здесь описание изображения

Что мне также следует установить input_tensor_shapes и output_tensor_names, чтобы я не получал сообщения об ошибке, что мой график TensorFlow не содержит тензора с таким именем.


person coder    schedule 02.02.2020    source источник


Ответы (1)


Я предлагаю использовать Netron для просмотра файла TensorFlow. Это значительно упрощает понимание графика.

person Matthijs Hollemans    schedule 02.02.2020
comment
@Matthihs Hollemans Я установил Netron и открыл с его помощью свой файл .pb. Я обнаружил, что мое имя входа должно быть входом, но я все еще пытаюсь найти имя выхода. Есть что-то, что я должен искать? Я даю лучшее предположение, основываясь на диаграмме netron (детектор / yolo-v3 / Detections), но я получил эту ошибку: ValueError: output name: detector/yolo-v3/detections, was provided, but the Tensorflow graph does not contain a tensor with this name. - person coder; 02.02.2020
comment
Обычно это вещь внизу. :-) Возможно, вам понадобится добавить :0 к имени. - person Matthijs Hollemans; 03.02.2020