Tensorflow-lite - 从量化模型输出中获取位图
Posted
技术标签:
【中文标题】Tensorflow-lite - 从量化模型输出中获取位图【英文标题】:Tensorflow-lite - Getting bitmap from quantized model output 【发布时间】:2019-05-16 23:37:14 【问题描述】:我们正在使用 tensorflow-lite 开发 android 中的语义分割应用程序。使用的“.tflite”deeplabv3 模型具有 (ImageTensor) uint8[1,300,300,3] 类型的输入和 (SemanticPredictions) uint8[300,300] 类型的输出。在 tflite.run 方法的帮助下,我们成功地运行了模型并获得了 ByteBuffer 格式的输出。但是我们无法从 java 中的输出中提取图像。使用 pascal voc 数据集训练的模型是实际上从 TF 模型转换为 tflite 格式:'mobilenetv2_dm05_coco_voc_trainval'。
问题似乎类似于以下***问题:tensorflow-lite - using tflite Interpreter to get an image in the output
处理浮点数据类型转换的相同问题似乎已在 github 问题中得到修复:https://github.com/tensorflow/tensorflow/issues/23483
那么,我们如何才能正确地从 UINT8 模型输出中提取分割掩码?
【问题讨论】:
【参考方案1】:试试这个代码:
/**
* Converts ByteBuffer with segmentation mask to the Bitmap
*
* @param byteBuffer Output ByteBuffer from Interpreter.run
* @param imgSizeX Model output image width
* @param imgSizeY Model output image height
* @return Mono color Bitmap mask
*/
private Bitmap convertByteBufferToBitmap(ByteBuffer byteBuffer, int imgSizeX, int imgSizeY)
byteBuffer.rewind();
byteBuffer.order(ByteOrder.nativeOrder());
Bitmap bitmap = Bitmap.createBitmap(imgSizeX , imgSizeY, Bitmap.Config.ARGB_4444);
int[] pixels = new int[imgSizeX * imgSizeY];
for (int i = 0; i < imgSizeX * imgSizeY; i++)
if (byteBuffer.getFloat()>0.5)
pixels[i]= Color.argb(100, 255, 105, 180);
else
pixels[i]=Color.argb(0, 0, 0, 0);
bitmap.setPixels(pixels, 0, imgSizeX, 0, 0, imgSizeX, imgSizeY);
return bitmap;
它适用于具有单色输出的模型。
【讨论】:
【参考方案2】:类似的东西:
Byte[][] output = new Byte[300][300];
Bitmap bitmap = Bitmap.createBitmap(300,300,Bitmap.Config.ARGB_8888);
for (int row = 0; row < output.length ; row++)
for (int col = 0; col < output[0].length ; col++)
int pixelIntensity = output[col][row];
bitmap.setPixel(col,row,Color.rgb(pixelIntensity,pixelIntensity,pixelIntensity));
?
【讨论】:
我不得不在第一行使用“字节”而不是字节(因为它显示了一些数据类型错误)。此外,由于输出是图像掩码,像素位置的值是像素类值(0 -21 用于 PASCAL VOC)。所以,我必须相应地设置像素值!!!但是,由于其他一些问题,整体速度和准确性似乎较低以上是关于Tensorflow-lite - 从量化模型输出中获取位图的主要内容,如果未能解决你的问题,请参考以下文章