Прикрепление визуализированных выходов от 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 ++? Комментарии обо всех актерах и поплавках/удвоениях. Я понимаю, что это может вызвать проблемы. Но они используются просто для расчета необходимых наборов для ввода. После всех предварительных обработок и литров, различия между вводом Python и входом C ++ незначительны 4
Код, который я получил свою версию C ++, доступен на официальной ультралитической Github здесь
Подробнее здесь: https://stackoverflow.com/questions/797 ... ifferences
Мобильная версия