Изменение размера тензорных изображений с неизвестным размером

1

У меня есть сеть с тензором в стиле UNET. В настоящее время я указываю входные и целевые изображения следующим образом:

self.inputTensors = tf.placeholder(tf.float32, [None, opt.inputHeight, opt.inputWidth, opt.inputChannels], name='inputTensors')
self.targetColors = tf.placeholder(tf.float32, [None, opt.inputHeight, opt.inputWidth, opt.outputChannels], name='targetColors')

Но я бы хотел, чтобы он мог работать с изображениями переменной ширины и высоты, т.е.

self.inputTensors = tf.placeholder(tf.float32, [None, None, None, opt.inputChannels], name='inputTensors')
self.targetColors = tf.placeholder(tf.float32, [None, None, None, opt.outputChannels], name='targetColors')

И выведите ширину и высоту промежуточных слоев. Это отлично работает для моих слоев объединения или слоев свернутой свертки, но для слоев с повышающей выборкой я использую tf.image.resize_bilinear (хотя вопрос действительно для любого из tf.image.resize_images.) В настоящее время мой билинейный код размера выглядит так:

def unpool2xBilinear(inputs, name = 'unpool2xBilinear'):
    sh = inputs.get_shape().as_list()
    newShape = (sh[1] * 2, sh[2] * 2)
    return tf.image.resize_bilinear(inputs, newShape)

Однако это не может обрабатывать неизвестные формы ввода, давая

TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

Есть ли способ разрешить изменение размеров изображений для входных зависимых размеров? Или мне нужно построить совершенно новый график для каждого размера входного изображения?

Теги:
tensorflow
deep-learning

1 ответ

1
Лучший ответ

tf.shape этого используйте tf.shape:

def unpool2xBilinear(inputs, name = 'unpool2xBilinear'):
    sh = tf.shape(inputs)
    newShape = 2 * sh[1:3]
    return tf.image.resize_bilinear(inputs, newShape)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню