Преобразование модели FCN Keras (несколько входных размеров, рваные?) В Tensorflow RT - PullRequest
0 голосов
/ 08 января 2020

моя проблема в том, что у меня есть FCN с несколькими входами размера изображения (но вход ограничен квадратом изображений с формой (2 ^ n, 2 ^ n)) .

def down_block(x, filters, kernel_size=(3, 3), padding="same", strides=1):
    c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(x)
    c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(c)
    p = keras.layers.MaxPool2D((2, 2), (2, 2))(c)
    return c, p

def up_block(x, skip, filters, kernel_size=(3, 3), padding="same", strides=1):
    us = keras.layers.UpSampling2D((2, 2))(x)
    concat = keras.layers.Concatenate()([us, skip])
    c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(concat)
    c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(c)
    return c

def bottleneck(x, filters, kernel_size=(3, 3), padding="same", strides=1):
    c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(x)
    c = keras.layers.Conv2D(filters, kernel_size, padding=padding, strides=strides, activation="relu")(c)
    return c

def UNet():
    f = [16, 32, 64, 128, 256]
    inputs = keras.layers.Input((None,None, 3))

    p0 = inputs
    c1, p1 = down_block(p0, f[0]) #128 -> 64
    c2, p2 = down_block(p1, f[1]) #64 -> 32
    c3, p3 = down_block(p2, f[2]) #32 -> 16
    c4, p4 = down_block(p3, f[3]) #16->8

    bn = bottleneck(p4, f[4])

    u1 = up_block(bn, c4, f[3]) #8 -> 16
    u2 = up_block(u1, c3, f[2]) #16 -> 32
    u3 = up_block(u2, c2, f[1]) #32 -> 64
    u4 = up_block(u3, c1, f[0]) #64 -> 128

    outputs = keras.layers.Conv2D(1, (1, 1), padding="same", activation="sigmoid")(u4)
    model = keras.models.Model(inputs, outputs)
    return model

Компиляция, обучение и вывод с помощью keras в tf.version 1.15 просто отлично работает, если я не пытаюсь преобразовать модель hdf5 в граф вывода с помощью:

Если я пытаюсь загрузить файл hdf5 и сохраните его как файл savemodel:

from keras import backend as K

# This line must be executed before loading Keras model.
K.set_learning_phase(0)

from keras.models import load_model
model = model
print(model.outputs)
# [<tf.Tensor 'dense_2/Softmax:0' shape=(?, 10) dtype=float32>]
print(model.inputs)   

, чем я получаю без ошибок, но информация:

[<tf.Tensor 'conv2d_246/Sigmoid:0' shape=(?, ?, ?, 1) dtype=float32>]
[<tf.Tensor 'input_13:0' shape=(?, ?, ?, 3) dtype=float32>]

, если я попытаюсь использовать эту модель сохранения для использования TensorflowRT:

import tensorflow.contrib.tensorrt as trt
trt.create_inference_graph(
    input_saved_model_dir = "/content/path to savedmodel",
    output_saved_model_dir = "/content/path to new model")

Чем я получаю сообщение об ошибке:

TypeError: create_inference_graph() missing 2 required positional arguments: 'input_graph_def' and 'outputs'

Спасибо за вашу помощь, ребята

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...