Yolov3-tiny-416.tflite — это tflite-модель для крошечной модели yolov3, созданная из yolov3-tiny.weights. Я пытался использовать это из модуля ML kit Vision, предоставленного Google в Android. В репозитории: https://github.com/googlesamples/mlkit/tree/master/android/vision-quickstart
Именно так я загружаю и выбираю параметры обнаружения для крошечной модели tflite yolo v3.
LocalModel localModel = new LocalModel.Builder()
.setAssetFilePath("yolov3-tiny-416.tflite")
.build();
CustomObjectDetectorOptions customObjectDetectorOptions = PreferenceUtils.getCustomObjectDetectorOptionsForLivePreview(this,localModel);
cameraSource.setMachineLearningFrameProcessor(new ObjectDetectorProcessor(this,customObjectDetectorOptions));
Теперь я столкнулся с ошибкой, которая говорит:
E/MobileVisionBase: Error preloading model resource
b.a.d.a.a: Failed to initialize detector. Input tensor has type kTfLiteFloat32: it requires specifying NormalizationOptions metadata to preprocess input images.
Как я знаю из ошибки, мне нужно указать метаданные NormalizationOptions для обработки изображения. Итак, как можно решить проблему? любое предложение?
Вот требования к пользовательской модели для обнаружения и отслеживания пользовательских объектов ML Kit. https://developers.google.com/ml-kit/custom-models Если вы проверите раздел «Метаданные» внизу страницы, в нем есть некоторые инструкции по добавлению метаданных NormalizationOptions.
Однако самым основным требованием для обнаружения и отслеживания пользовательских объектов ML Kit является то, что модель должна быть моделью классификации изображений, а yolov3 — нет.
Если вы хотите классифицировать больше объектов с помощью ML Kit, вы можете попробовать одну из пользовательских моделей классификатора изображений с тегом ML Kit на TFHub. https://tfhub.dev/ml-kit/collections/image-classification/1 или обучите собственный классификатор с помощью AutoML или TFLite ModelMaker (см. https://developers.google.com/ml-kit/ custom-models#automl_vision_edge).
Лучший,
Следуя инструкциям по приведенной выше ссылке, вы сможете попасть сюда: ️️developers.google.com/ml-kit/custom-models#metadata , где приведены инструкции по «Добавлению метаданных в модель TensorFlow Lite».
Эта ссылка бесполезна. Он пытается отредактировать файл с именем metadata_schema.fbs, которого нет в моем проекте (я даже не слышал о файлах *.fbs). Как я уже сказал, я не создаю файл *.tflite, я просто использую его. Если нормализация означает редактирование файла *.tflite, то как именно мне это сделать (хотя я не ожидал, что это нужно будет сделать)? Я предположил, что самое большее, что мне нужно сделать, это передать соответствующие параметры, иначе почему я получаю файл *.tflite из внешнего источника?
Я не делал этого сам, но вы должны иметь возможность прикреплять метаданные к существующей модели tflite. Будет проще, если вы можете связаться с владельцем модели, чтобы сделать это, если вы не знакомы с этой частью.
Отступая назад... модель, о которой вы говорите, это йоло. Если я правильно понимаю, это не модель классификации, а модель однократного обнаружения объектов, верно? См. документацию для разработчиков здесь: ️developers.google.com/ml-kit/custom-models ML Kit поддерживает только пользовательскую модель классификации в конвейере обнаружения объектов.
Библиотека задач TFLite предоставляет собственное решение для обнаружения объектов. Я никогда не пробовал это сам, но вы можете посмотреть, не связано ли это больше: tensorflow.org/lite/inference_with_metadata/task_library/…
Я просмотрел tensorflow.org/lite/models/convert/… Но нигде не смог найти ObjectDetectorWriter
в пакетах NuGet для Xamarin.Android. Где взять ObjectDetectorWriter
?
Я получаю файл model.tflite из Microsoft Azure Custom Vision и использую следующее в Xamarin.Android, что дает мне ошибку, упомянутую в OP:
ObjectDetector.ObjectDetectorOptions objoptions = ObjectDetector.ObjectDetectorOptions.InvokeBuilder().SetScoreThreshold(0.6f).Build(); ObjectDetector objdetector = ObjectDetector.CreateFromFileAndOptions(Application.Context, "model.tflite", objoptions);
Как мне сделатьObjectDetectorOptions
, чтобы указатьNormalizationOptions
?