Если файл .tflite сгенерирован без ошибок, не имеет значения, называется ли модель L enet или что-то еще. Также квантование будет иметь небольшое снижение точности, но не будет большой разницы, как вы утверждаете. Я бы посмотрел, как вы делаете байтовый буфер, чтобы вставить его в интерпретатор. Если вы используете изображения в градациях серого, вам нужно разделить на 3/255 ... для цветных изображений только / 255. Если во время обучения вы не использовали нормализацию пикселей, не используйте / 255 во время битовой карты в байтовый буфер. Таким образом, ваш код будет выглядеть так:
private ByteBuffer convertBitmapToByteBuffer(Bitmap bitmap) {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(ModelConfig.MODEL_INPUT_SIZE);
byteBuffer.order(ByteOrder.nativeOrder());
int[] pixels = new int[ModelConfig.INPUT_WIDTH * ModelConfig.INPUT_HEIGHT];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
for (int pixel : pixels) {
float rChannel = (pixel >> 16) & 0xFF;
float gChannel = (pixel >> 8) & 0xFF;
float bChannel = (pixel) & 0xFF;
float pixelValue = (rChannel + gChannel + bChannel);
byteBuffer.putFloat(pixelValue);
}
return byteBuffer;
}
, а не:
private ByteBuffer convertBitmapToByteBuffer(Bitmap bitmap) {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(ModelConfig.MODEL_INPUT_SIZE);
byteBuffer.order(ByteOrder.nativeOrder());
int[] pixels = new int[ModelConfig.INPUT_WIDTH * ModelConfig.INPUT_HEIGHT];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
for (int pixel : pixels) {
float rChannel = (pixel >> 16) & 0xFF;
float gChannel = (pixel >> 8) & 0xFF;
float bChannel = (pixel) & 0xFF;
float pixelValue = (rChannel + gChannel + bChannel) / 255.f;
byteBuffer.putFloat(pixelValue);
}
return byteBuffer;
}