Я столкнулся с аналогичной проблемой в моем проекте сегментации: почти все выходные пиксели были 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.