我有一个保存的tflite模型,其输入和输出详细信息如下:
>
输入:[{“name”:“dense_4_Input”,“index”:0,“shape”:数组([1100],dtype=int32),“shape_signature':数组([1],100],dtype=int 32),'dtype':,'量化':(0.0,0),'量化_parameters”:{“scales”:数组]
输出 : [{'name': 'Identit', '索引': 22, 'shape': 数组([ 1, 28, 28, 1], dtype=int32), 'shape_signature': 数组([ 1, 28, 28, 1], dtype=int32), 'dtype': , '量化': (0.0, 0), 'quantization_parameters': {'scales': 数组([], dtype=float32), 'zero_points': 数组([], dtype=int32), 'quantized_dimension': 0}, 'sparsity_parameters': {}}]
如何使用Java和Tensorflow解释器在android应用程序上将输出显示为图像?
import android.content.res.AssetManager
import android.graphics.Bitmap
import android.util.Log
import org.tensorflow.lite.Interpreter
import org.tensorflow.lite.Tensor
import java.io.FileInputStream
import java.lang.StringBuilder
import java.nio.ByteBuffer
import java.nio.ByteOrder
import java.nio.channels.FileChannel
class ImgPredictor(val assetManager: AssetManager, modelFilename: String) {
private var tflite: Interpreter
private var input: ByteBuffer
private var output: ByteBuffer
init {
val tfliteOptions = Interpreter.Options()
val fd = assetManager.openFd(modelFilename)
val inputStream = FileInputStream(fd.fileDescriptor)
val fileChannel: FileChannel = inputStream.channel
val startOffset: Long = fd.startOffset
val declaredLength: Long = fd.declaredLength
val mbb = fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength)
tflite = Interpreter(mbb, tfliteOptions)
Log.i("ImgPredictor", "interpreter: ${tflite.detail()}")
input = ByteBuffer.allocate(100 * Int.SIZE_BYTES)
input.order(ByteOrder.nativeOrder())
output = ByteBuffer.allocate(1 * 28 * 28 * 1 * Int.SIZE_BYTES)
output.order(ByteOrder.nativeOrder())
}
fun predict(data: IntArray): Bitmap {
val startTs = System.currentTimeMillis();
input.clear()
output.clear()
input.rewind()
for (i in 0 until 100) {
input.putInt(data[i])
}
tflite.run(input, output)
val bitmap = Bitmap.createBitmap(28, 28, Bitmap.Config.ARGB_8888);
// vector is your int[] of ARGB
bitmap.copyPixelsFromBuffer(output)
return bitmap
}
}
fun Tensor.detail(): String {
return "[shape: ${this.shape().toList()} dataType: ${this.dataType()}, bytes: ${this.numBytes()}]"
}
fun Interpreter.detail(): String {
val sb = StringBuilder("interpreter: \n")
sb.append("input: { \n")
for (i in 0 until this.inputTensorCount) {
sb.append(" ").append(this.getInputTensor(i).detail()).append("\n")
}
sb.append("}, \n")
sb.append("output: { \n")
for (i in 0 until this.outputTensorCount) {
sb.append(" ").append(this.getOutputTensor(i).detail()).append("\n")
}
sb.append("}")
return sb.toString()
}
您可以在此处查看官方教程以了解更多详细信息:对象检测解释器的示例。
但以下是您应该注意的一些点:
1.保持实现'org.tensorflow: tenorflow-lite: x. x'
与您的PC尽可能相同的版本,因为某些操作在较低版本中可能不起作用。
2.使用一些详细的func来打印解释器输入/输出。
3.检查输入输出数据缓冲区顺序endian。
我已经将一个Yolo模型转换为.tflite,以便在Android中使用。在python中就是这样使用的-- 我使用netron https://github.com/lutzroeder/netron可视化模型。输入描述为name:inputs,类型:float32[1,416,416,3],quantization:0≤q≤255,位置:399,输出描述为name:output_boxs,类型
我目前正在从事一个股票市场项目,教学生如何与股票市场互动。我现在正在研究的一个问题围绕着效率和记忆力的问题。我在Adobe illustrator中制作了所有2D图标(例如设置图标,投资组合图标等),我将这些文件导出为png文件,并将它们放入我的程序中。我目前使用 JavaFX,JavaFX 的一个功能是所谓的图像视图,这是一种处理图像打开和查看的方法。 假设用户想在游戏中按下设置图标,当用户悬停
我想在Tensorflow中将整数量化的tflite模型转换为冻结图(.pb)。我通读并尝试了许多有关StackOverflow的解决方案,但没有一个有效。具体来说,toco不起作用(输出格式不能是TENSORFLOW\u GRAPHDEF)。 我的最终目标是通过tf2onnx获得量化的ONNX模型,但tf2onnx不支持tflite作为输入(只支持保存的_模型、检查点和图形_定义)。但是,在使用
我已经使用tensorflow后端训练了一个DNN,我想在FireBase中托管它。训练好的模型被保存为.meta文件,我尝试使用下面的代码将模型转换为tflite,但我遇到了一些错误。那么我如何将这个模型转换成Tensorflow Lite呢?
型号名称: ssd_mobilenet_v1_ppn_coco https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md 我尝试使用此命令将模型转换为tflite pb: ValueError:只有第1维度支持无。张量“image_Tensor”的形
我正在使用ML Vision api从FaceNet模型创建嵌入,然后比较两个嵌入之间的余弦距离。Android版本和Python的输出有很大不同。Python版本的性能比android版本好得多。可能是什么问题?我在两者中都使用FaceNet模型。 我正在使用ML工具包进行推理 https://firebase.google.com/docs/ml-kit/android/use-custom-