Issue
Я не могу получить правильные значения изображения из вывода логического вывода TensorFlow Lite.
Использование bitmapOut.copyPixelsFromBuffer
возвращает неправильные значения.
Для пример - если я попытаюсь сэмплировать первый пиксель из bitmapIn
, используя getPixel
(сразу после bitmapIn = getMyInBitmap();
строки), я получу значение -4718617
. Сэмплируя первый пиксель из bitmapOut
(после bitmapOut.copyPixelsFromBuffer(outBuffer.rewind());
), я получаю значение 1040252927
.
Также, не нормализуя изображение с помощью NormalizeOp
, получаются все значения 0
. Так что в настоящее время - я использую NormalizeOp
, и после вывода я «денормализую» вывод один за другим - но это действительно очень долго.
Как мне эффективно ввести одно изображение в интерпретатор TensorFlow Lite и получить обратно одно изображение ?
Info
- Я управляю выводом TensorFlow Lite на Android (Java ).
- Модель TensorFlow Lite принимает изображение RGB 700x700
{1, 700, 700, 3}
в качестве входных данных и выдает только синее изображение 700x700 {1, 700, 700, 1}
в качестве выходных данных. - Входные и выходные данные модели оба типа
FLOAT32
.
Вот мой код для применения этого вывода к изображению:
Bitmap bitmapIn, bitmapOut;
ByteBuffer inBuffer, outBuffer;
int[] inShape = tfliteInterpreter.getInputTensor(0).shape()
DataType inDataType = tfliteInterpreter.getInputTensor(0).dataType();
int[] outShape = tfliteInterpreter.getOutputTensor(0).shape()
DataType outDataType = tfliteInterpreter.getOutputTensor(0).dataType();
inTensorImage = new TensorImage(inDataType);
outTensorBuffer = TensorBuffer.createFixedSize(outShape, outDataType);
imageProcessor = new ImageProcessor.Builder()
.add(new NormalizeOp(0.0f, 255.0f))
.build();
bitmapIn = getMyInBitmap();
inTensorImage.load(bitmapIn);
imageProcessor.process(inTensorImage);
inBuffer = inTensorImage.getBuffer();
outBuffer = outTensorBuffer.getBuffer();
tfliteInterpreter.run(inBuffer, outBuffer);
bitmapOut.copyPixelsFromBuffer(outBuffer.rewind());