TFLM auf Bare Metal ausführen und ein Ausgangspflicht aufnehmenC++

Programme in C++. Entwicklerforum
Anonymous
 TFLM auf Bare Metal ausführen und ein Ausgangspflicht aufnehmen

Post by Anonymous »

Ich habe mein eigenes, trainiertes TFLite -Modell, das ich trainiert und in eine C ++ - Quelldatei umgewandelt habe. Im Rahmen des Projekts soll es auf einem Zync-7000 laufen, und ich mache es mit einer Bare-Metal-Implementierung. Ich konnte das Modell erfolgreich ausführen und weiß, weil die Erkennung mit der Ausgabe des Modells übereinstimmt, wenn ich es auf Python teste. Die Begrenzungsboxen sind jedoch geringfügig ausgeschaltet.DEBUG: Detection 0 raw: score=0.8013, class=0.2714, box=[0.1784, 0.1757, 0.0000, 0.0000]
DEBUG: Detection 1 raw: score=0.5003, class=0.2192, box=[0.0000, 0.0000, 0.9921, 0.4017]
DEBUG: Detection 2 raw: score=0.3077, class=0.1971, box=[0.0039, 0.0133, 0.9910, 0.1075]
DEBUG: Detection 3 raw: score=0.2803, class=0.1810, box=[0.9604, 0.0426, 0.9986, 0.0785]
DEBUG: Detection 4 raw: score=0.2714, class=0.1784, box=[0.9536, 0.0270, 0.9939, 0.0553]
DEBUG: Detection 5 raw: score=0.2192, class=0.1757, box=[0.0408, 0.0082, 1.0023, 0.2196]
DEBUG: Detection 6 raw: score=0.1971, class=0.0000, box=[0.7465, 0.1062, 1.0030, 0.4046]
DEBUG: Detection 7 raw: score=0.1810, class=0.0000, box=[0.5294, 0.0006, 0.6696, 0.0322]
DEBUG: Detection 8 raw: score=0.1784, class=0.0000, box=[0.1593, 0.4119, 0.5908, 0.5678]
DEBUG: Detection 9 raw: score=0.1757, class=0.0000, box=[0.4822, 0.0018, 0.6665, 0.0422]
< /code>
Pythonergebnisse (Entschuldigung für das unterschiedliche Format): < /p>
arr0_(scores) = [[0.8013255 0.5003249 0.30769435 0.28034142 0.27137667 0.219202
0.19714184 0.1809863 0.17840956 0.17565072]]
arr1_(boxes) = [[
[0.1093 0.2193 1.0176 0.7862]
[0.7530 0.2164 0.9921 0.4017]
[0.0039 0.0133 0.9910 0.1075]
[0.9604 0.0426 0.9986 0.0785]
[0.9536 0.0270 0.9939 0.0553]
[0.0408 0.0082 1.0023 0.2196]
[0.7465 0.1062 1.0030 0.4046]
[0.5294 0.0006 0.6696 0.0322]
[0.1593 0.4119 0.5908 0.5678]
[0.4822 0.0018 0.6665 0.0422]
]]
arr2_num_detections = [10.]
arr3_class = [[0. 3. 0. 0. 0. 0. 0. 0. 0. 0.]]
< /code>
Wie Sie sehen können, ist die Ausgabe für die Bewertungen gleich, aber die ersten beiden Begrenzungsbox -Werte (die ersten 6 Koordinaten) sind unterschiedlich und der Rest ist korrekt.tensor_score->data.f: 0x2654670
tensor_boxes->data.f: 0x2654690
tensor_count->data.f: 0x2654660
tensor_class->data.f: 0x2654680
< /code>
Ich stütze diese Annahme aus den Ausgabedetails, die ich beim Laufen in Python erhalten habe. < /p>
interpreter = tf.lite.Interpreter(model_path=TFLITE_MODEL_PATH)
interpreter.allocate_tensors()

output_details = interpreter.get_output_details()

for i, detail in enumerate(output_details):
print(f"Output {i}: Name={detail['name']}, Shape={detail['shape']}, Type={detail['dtype']}")
< /code>
die folgende Ausgaben ausgibt: < /p>
Output 0: Name=StatefulPartitionedCall:1, Shape=[ 1 10], Type=
Output 1: Name=StatefulPartitionedCall:3, Shape=[ 1 10 4], Type=
Output 2: Name=StatefulPartitionedCall:0, Shape=[1], Type=
Output 3: Name=StatefulPartitionedCall:2, Shape=[ 1 10], Type=
< /code>
Diese Formen ergeben eine Elementanzahl von 10, 40, 1 bzw. 10. Und wenn ihr Typ float32 ist, was 4 Bytes für jedes Element bedeutet, würde dies mindestens 40, 160, 4 und 40 Bytes erfordern. Und wenn Sie sich die Ausgabe für die Klasse in den Board -Ergebnissen ansehen, können Sie ein Beispiel für die Überlappung sehen, da die ersten 6 Werte der Klasse mit den letzten 6 Werten der Punktzahl übereinstimmen, und die ersten beiden Grenzbox -Koordinaten stimmen auch den letzten beiden Werten des Punktzahl überein. um herauszufinden, wohin zu gehen ist.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post