3
votes

Comment gérer le résultat de org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs ()

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?


0 commentaires

3 Réponses :


0
votes

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);


0 commentaires

3
votes
Object[] inputs = { your_regular_input };
tflite.runForMultipleInputsOutputs(inputs, outputProbabilityBuffers);

0 commentaires

0
votes

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()


0 commentaires