Я обучил модель yolov8 с пользовательским набором данных, содержащим 26 классов, но когда я конвертировал модель в tflite, я заметил, что она выдает на выходе [1,30,8400], и это вызвало у меня ошибки при использовании моей модели с флаттером.
Ошибка
E/AndroidRuntime(18479): Caused by: java.lang.IllegalArgumentException: Cannot copy from a TensorFlowLite tensor (Identity) with shape [1, 30, 8400] to a Java object with shape [1, 26].
как я могу изменить выходную форму моей модели?
вот как тренировалась моя модель:
from ultralytics import YOLO
model = YOLO('yolov8s.pt')
results = model.train(data='/kaggle/input/my-
dataset/my_dataset/data.yaml', epochs=100, imgsz=640)
и это содержимое файла data.yaml
train: /kaggle/input/dataset-asl/ASL/train/images
val: /kaggle/input/dataset-asl/ASL/valid/images
nc: 26
names: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z']
и вот как преобразовать мою модель в формат tflite:
from ultralytics import YOLO
# Load a model
model = YOLO('best.pt')
# Export the model
model.export(format='tflite')
и это выводится после преобразования:
Ultralytics YOLOv8.2.4 Python-3.9.0 torch-2.2.1+cpu CPU (Intel
Core(TM) i5-7300U 2.60GHz)
Model summary (fused): 168 layers, 3010718 parameters, 0
gradients, 8.1 GFLOPs
PyTorch: starting from 'best.pt' with input shape (1, 3, 640, 640)
BCHW and output shape(s) (1, 30, 8400) (6.0 MB)
TensorFlow SavedModel: starting export with tensorflow 2.15.0...
WARNING tensorflow<=2.13.1 is required, but tensorflow==2.15.0 is
currently installed
https://github.com/ultralytics/ultralytics/issues/5161
ONNX: starting export with onnx 1.15.0 opset 17...
ONNX: simplifying with onnxsim 0.4.36...
ONNX: export success 1.8s, saved as 'best.onnx' (11.7 MB)
TensorFlow SavedModel: starting TFLite export with onnx2tf
1.17.5...
TensorFlow SavedModel: export success 14.3s, saved as
'best_saved_model' (29.5 MB)
TensorFlow Lite: starting export with tensorflow 2.15.0...
TensorFlow Lite: export success 0.0s, saved as
'best_saved_model\best_float32.tflite' (11.7 MB)
Export complete (16.8s)
Results saved to C:\Users\Bachir\Desktop\api\tflite
Predict: yolo predict task=detect
model=best_saved_model\best_float32.tflite imgsz=640
Validate: yolo val task=detect
model=best_saved_model\best_float32.tflite imgsz=640
data=/kaggle/input/my-dataset/my_dataset/data.yaml
Visualize: https://netron.app
'best_saved_model\\best_float32.tflite'
emphasized text
@Farmaker Я добавил свой код выше, проверьте его.





Выходная форма вашей модели правильная. 30 в выходной форме означают, что [4 местоположения ограничивающей рамки + 26 оценок за класс]. 8400 означает, что существует 8400 возможных ограничивающих рамок. Tensorflow lite не имеет немаксимального подавления. Поэтому вам нужно будет объединить некоторые из этих блоков, чтобы получить оптимальные результаты.
Спасибо за ответ. Можете ли вы рассказать мне, как объединить эти коробки, чтобы получить оптимальные результаты?
Поскольку вы используете модель yolo, используйте пакет flutter_vision. Это будет проще. pub.dev/packages/flutter_vision
спасибо, я использовал pub.dev/packages/flutter_vision и исправил ошибку
Для этого требуется дополнительная информация, фрагменты кода о том, как вы создаете модель, и код о том, как вы ее конвертируете.