У меня есть моя собственная обученная модель Tflite, которую я обучил и преобразовал в исходный файл C ++. В рамках проекта он предназначен для работы на Zync-7000, и я делаю это с реализацией голого металла. Я смог успешно запустить модель, и я знаю, потому что оценки обнаружения совпадают с выводом модели, когда я тестирую ее на Python; Однако ограничивающие ящики немного выключены. < /p>
Результаты платы: < /p>
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>
Результаты Python (извините за другой формат): < /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>
Как вы можете видеть, вывод для результатов одинаковы, но первые два значения ограничивающих поле (первые 6 координат) различаются, а остальные верны.tensor_score->data.f: 0x2654670
tensor_boxes->data.f: 0x2654690
tensor_count->data.f: 0x2654660
tensor_class->data.f: 0x2654680
< /code>
Я основываю это предположение из данных вывода, которые я получил от модели при запуске в Python. < /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>
, который выведет следующее: < /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>
Эти формы дают количество элементов 10, 40, 1 и 10 соответственно. И с их типом Float32, что означает 4 байта для каждого элемента, для этого потребуется не менее 40, 160, 4 и 40 байтов. И если вы посмотрите на вывод для результатов класса в результатах платы, я думаю, что вы сможете увидеть пример перекрытия, поскольку первые 6 значений класса соответствуют последним 6 значениям оценки, а первые два координаты ограничительных коробок также соответствуют двум последним значениям оценки. < /P>
. выяснить, куда идти.
Подробнее здесь: https://stackoverflow.com/questions/795 ... nsor-issue
Запуск TFLM на головом металле и переживание выхода из выходного тензора ⇐ C++
Программы на C++. Форум разработчиков
1743510071
Anonymous
У меня есть моя собственная обученная модель Tflite, которую я обучил и преобразовал в исходный файл C ++. В рамках проекта он предназначен для работы на Zync-7000, и я делаю это с реализацией голого металла. Я смог успешно запустить модель, и я знаю, потому что оценки обнаружения совпадают с выводом модели, когда я тестирую ее на Python; Однако ограничивающие ящики немного выключены. < /p>
Результаты платы: < /p>
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>
Результаты Python (извините за другой формат): < /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>
Как вы можете видеть, вывод для результатов одинаковы, но первые два значения ограничивающих поле (первые 6 координат) различаются, а остальные верны.tensor_score->data.f: 0x2654670
tensor_boxes->data.f: 0x2654690
tensor_count->data.f: 0x2654660
tensor_class->data.f: 0x2654680
< /code>
Я основываю это предположение из данных вывода, которые я получил от модели при запуске в Python. < /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>
, который выведет следующее: < /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>
Эти формы дают количество элементов 10, 40, 1 и 10 соответственно. И с их типом Float32, что означает 4 байта для каждого элемента, для этого потребуется не менее 40, 160, 4 и 40 байтов. И если вы посмотрите на вывод для результатов класса в результатах платы, я думаю, что вы сможете увидеть пример перекрытия, поскольку первые 6 значений класса соответствуют последним 6 значениям оценки, а первые два координаты ограничительных коробок также соответствуют двум последним значениям оценки. < /P>
. выяснить, куда идти.
Подробнее здесь: [url]https://stackoverflow.com/questions/79547587/running-tflm-on-bare-metal-and-experiencing-an-output-tensor-issue[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия