J'utilise posenet (qui est un CNN) sur Android avec tflite.
Le modèle a plusieurs tableaux de sortie avec les dimensions suivantes:
1x14x14x17, 1x14x14x34, 1x14x14x32, 1x14x14x32
Par conséquent, exécuter l'interpréteur java tflite avec
import org.tensorflow.lite.Interpreter; Interpreter tflite; ... tflite.runForMultipleInputsOutputs(inputs,outputs)
je peux accéder aux quatre tenseurs de sortie avec tflite.getOutputTensor (i)
ou avec outputs.get (i)
(avec i el. [0,3]) comme sorties
est un HashMap
rempli d'objets java.nio.HeapByteBuffer
.
Comment puis-je convertir ces sorties ou tenseurs tflite en tableaux multidimensionnels Java (quelque chose comme float [] [] [] [];
) pour pouvoir effectuer des calculs mathématiques dessus?
3 Réponses :
La définition des sorties comme suit vous permet de travailler avec des tableaux Java natifs, ce que je voulais:
out1 = new float[1][14][14][17]; out2 = new float[1][14][14][34]; out3 = new float[1][14][14][32]; out4 = new float[1][14][14][32]; Map<Integer, Object> outputs = new HashMap<>(); outputs.put(0, out1); outputs.put(1, out2); outputs.put(2, out3); outputs.put(3, out4);
Object[] inputs = { your_regular_input }; tflite.runForMultipleInputsOutputs(inputs, outputProbabilityBuffers);
Résultat: https://www.tensorflow.org/lite/models / object_detection / overview # output
val locations = outputs.getValue(0).asFlowArray(), val classes = outputs.getValue(1).asFlowArray(), val scores = outputs.getValue(2).asFlowArray(), val detections = outputs.getValue(3).asFlowArray()