tenorflow-lite - использование интерпретатора tflite для получения изображения на выходе - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь использовать рабочий процесс учебника TFLite Tensorflow-for-poets-2, https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#6

Но вместо классификации изображений я пытаюсь перенести стиль. Это означает, что входные и выходные данные моей сети являются изображениями (по сравнению с исходным примером, где входные данные представляют собой изображение, а выходные данные представляют собой список результатов).

Одна из моих многочисленных проблем - получить обработанное на выходе изображение из вывода tflite:

После загрузки модели tflite у меня есть интерпретатор tflite tflite . С помощью этого интерпретатора я выполняю вывод:

tflite.run(imgData, Out_imgData);

где

imgData, Out_imgData

- это ByteBuffers, созданные так же, как в учебном пособии Tensorflow-for-poets-2 TFLite, https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#6.

Теперь у меня вывод вывода как ByteBuffer

Out_imgData

Я не могу найти пример, когда вывод вывода является изображением. Пожалуйста, помогите мне преобразовать плавающий ByteBuffer Out_imgData в растровое изображение. Или укажите мне на какой-нибудь пример.

визуальное описание проблемы: Используя интерпретатор tflite в Python, я получаю изображение: введите описание изображения здесь

Ответы [ 2 ]

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

Я столкнулся с аналогичной проблемой в моем проекте сегментации: почти все выходные пиксели были 255 с при выводе из файла tflite, но все было правильно при выводе с экспортированной моделью. Долгий поиск решения привел меня к этой связанной проблеме . Это говорит о том, что проблема в уровнях пакетной нормализации. Я удалил их, и мои результаты стали нормальными, но количество нейронных сетей резко упало без использования bn. Я попытался заменить tf.layer.batch_normalization на tf.keras.layers.BatchNormalization и tf.contrib.layers.batch_norm, но все равно. Наконец, я решил проблему, реализовав собственную нормализацию пакетов, например:

def my_moments(input_tensor):
    mean = tf.reduce_mean(input_tensor, axis=[0, 1, 2])
    dev = input_tensor - mean
    dev = dev * dev
    dev = tf.reduce_mean(dev, axis=[0, 1, 2])
    return mean, dev

def my_bn(input_tensor):
    mu = tf.Variable(tf.ones(input_tensor.shape[3]))
    beta = tf.Variable(tf.zeros(input_tensor.shape[3]))
    mean, dev = my_moments(input_tensor)
    return beta + mu * (input_tensor - mean) / (tf.sqrt(dev) + 0.001)

Обратите внимание, что это не буквальная реализация нормы партии (здесь скользящее среднее не используется), потому что для моего проекта требовался только режим поезда. Также обратите внимание, что мы не можем использовать tf.nn.moments для вычисления среднего и dev, потому что он не поддерживается tflite (поэтому нам нужно реализовать собственную функцию для моментов). После замены пакетной нормализации на предоставленные функции я смог обучить свою сеть, экспортировать ее в tflite и правильно использовать ее при выводе в tflite.

0 голосов
/ 04 ноября 2018

мое обновление: Визуальное описание проблемы: сравнение использования tflite Interpreter в Python и в Android: введите описание изображения здесь

...