Невозможно скопировать из тензора TensorFlowLite (Identity) с формой [1, 30, 8400] в объект Java с формой [1, 26]

Я обучил модель 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 12.05.2024 05:30

@Farmaker Я добавил свой код выше, проверьте его.

Bachir ZEKRAOUI 12.05.2024 10:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Спасибо за ответ. Можете ли вы рассказать мне, как объединить эти коробки, чтобы получить оптимальные результаты?

Bachir ZEKRAOUI 12.05.2024 16:20

Поскольку вы используете модель yolo, используйте пакет flutter_vision. Это будет проще. pub.dev/packages/flutter_vision

Chathura Chamikara 12.05.2024 20:02

спасибо, я использовал pub.dev/packages/flutter_vision и исправил ошибку

Bachir ZEKRAOUI 12.05.2024 23:25

Другие вопросы по теме

Преобразование TFlite не работает для модели GPT2
Внутренняя ошибка: невозможно создать интерпретатор: не найдена операция для встроенного кода операции «FULLY_CONNECTED» версии «9» с комплектом Firebase ml и tensorflow-lite
Реализация пользовательской модели для моего imgLabelin ОШИБКА I/tflite (8933): замена 71 узла (узлов) узлом делегата (TfLiteXNNPackDelegate), yieldin
Преобразование TensorFlow в ONNX: текущая реализация RFFT или FFT позволяет только ComplexAbs в качестве потребителя, а не {'Imag', 'Real'}
Пакет Tensorflow Lite Micro на пользовательской платформе MCU Keil
Что случилось с документацией TensorFlow Lite для класса Interpreter
Использование моего собственного встроенного классификатора сверточной нейронной сети в Google Coral Devboard и Jetson Nano
Ошибки при преобразовании модели Tensorflow в модель Tensorflow Lite
Как использовать мою пользовательскую модель (tflite) для запуска в Android Studio?
ValueError: Не удалось найти операцию для встроенного кода операции «RESIZE_BILINEAR» версии «3». Регистрация не удалась