Tflite Python API против C ++ API различияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Tflite Python API против C ++ API различия

Сообщение Anonymous »

Я замечаю большие расхождения между Python и C ++ Tflite API. Используя ту же (квантованную) модель для обнаружения объектов и тех же шагов предварительной обработки, я замечаю большую разницу в выходах. Например, на одном изображении обнаружения были бы почти идентичны, в то время как на других совершенно разные. < /P>
Прикрепление визуализированных выходов от Python (2 обнаружения, как при 90% ACC), так и CPP (3 обнаружения). < /P>

/> версии < /strong> < /p>

tflite версия: 2.14.0 (скомпилированная Tflite LIB из источника) < /li>
Ультралитичная версия: 8.3.171 < /li>
python 3.10 < /li>
< /ul>
pryphond prython 3.10 < /li>
< /ul>

python 3.10 < /li>

python 3.10. YOLO8 и преобразовал его в Tflite, используя конверт Ultralytics. Так что в основном эти две строки. < /P>

Код: Выделить всё

from ultralytics import YOLO

model = YOLO("yolov8n.pt")  # Load a pre-trained YOLOv8 model
model.export(format='tflite', int8=True, imgsz=320, nms=True, data='coco8.yaml', fraction=1.0)
< /code>
 то, что я проверял до сих пор < /strong>: < /p>

 (необработанные, пиксовые) входные данные почти идентичны - случайные ошибки в вводной закруглении. Тип выхода модели < /li>
 Параметры квантования и вычисления являются правильными < /li>
 (необработанные, элементные) выходы имеют большие различия < /li>
< /ul>
необработанные разницы в разнице Python и CPP-вхождение Pythis-ppyspise и C-ppinppisp-ppypis-pypy-ppyspis-pyphis-pypis-pyty-pypis-топ- (квантовая) "src =" https://i.sstatic.net/qslw7cpn.png "/> 
необработанная разница между выходом Python и CPP (до выхода De-Quantaz src = "https://i.sstatic.net/o9rpfli1.png"/> 
CPP -код я использую для проверки вывода CPP.  
#include 

#include 
#include 
#include 
#include 
#include 
#include 

#include "tensorflow/lite/interpreter.h"
#include "tensorflow/lite/kernels/register.h"
#include "tensorflow/lite/model.h"

int main(){
tflite::ops::builtin::BuiltinOpResolver  _resolver;
std::unique_ptr  _interpreter;

TfLiteTensor* _input_tensor  = nullptr;
TfLiteTensor* _output_tensor = nullptr;

uint _input_height;
uint _input_width;
uint _input_channels;
uint _input_type;

float _input_scale;
int _input_zero_point;

std::unique_ptr  _model = tflite::FlatBufferModel::BuildFromFile("/src/yolov8n_full_integer_quant.tflite");
tflite::InterpreterBuilder builder(*_model, _resolver);
builder(&_interpreter);
_interpreter->AllocateTensors();

int input_index  = _interpreter->inputs()[0];
int output_index = _interpreter->outputs()[0];

_input_tensor   = _interpreter->tensor(input_index);
_output_tensor  = _interpreter->tensor(output_index);
_input_width    = _input_tensor->dims->data[2];
_input_height   = _input_tensor->dims->data[1];
_input_channels = _input_tensor->dims->data[3];

_input_scale = _input_tensor->params.scale;
_input_zero_point = _input_tensor->params.zero_point;

float _output_scale = _output_tensor->params.scale;
int _output_zero_point = _output_tensor->params.zero_point;

uint input_data_type = _input_tensor->type;
_input_type = (input_data_type == kTfLiteFloat32) ? CV_32FC3 : CV_8UC3; // tensor type to cv type

if (input_data_type == kTfLiteFloat32) {
std::cout outputs()[0])->data.int8;

//std::cout 
g++  src/infer_yolo.cpp -o out.so -I/usr/local/tensorflow/include -L/usr/local/tensorflow/lib -ltensorflowlite -I/usr/local/include/opencv4/ -L/usr/local/lib/ -lopencv_core -lopencv_imgproc -lopencv_imgcodecs
Код не самый красивый, и у меня нет лучших инструкций по настройке среды C ++, чем следовать официальным инструкциям Tensorflow в контейнере Docker.
Кто -нибудь испытал что -то подобное или мог бы увидеть, что я не так в коде C ++? Комментарии обо всех актерах и поплавках/удвоениях. Я понимаю, что это может вызвать проблемы. Но они используются просто для расчета необходимых наборов для ввода. После всех предварительных обработок и литров, различия между вводом Python и входом C ++ незначительны 4
Код, который я получил свою версию C ++, доступен на официальной ультралитической Github здесь

Подробнее здесь: https://stackoverflow.com/questions/797 ... ifferences
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»