Стандартная модель обнаружения объектов TFlite не работает в MLKit

#tensorflow #tensorflow-lite #google-mlkit

#tensorflow #tensorflow-lite #google-mlkit

Вопрос:

Если я использую предварительно подготовленную модель обнаружения объектов TFLite в MLKit, я получаю следующую ошибку:

  CalculatorGraph::Run() failed in Run: 
    Calculator::Open() for node "BoxClassifierCalculator" failed: #vk Unexpected number of dimensions for output index 0: got 3D, expected either 2D (BxN with B=1) or 4D (BxHxWxN with B=1, W=1, H=1).
  

Есть идеи, что я могу делать неправильно?

Ответ №1:

В настоящее время ML Kit не поддерживает пользовательскую модель обнаружения объектов. В настоящее время ML Kit позволяет разработчикам использовать только пользовательские модели классификации изображений. Здесь перечислены все модели TFLite, совместимые с ML Kit:

https://tfhub.dev/ml-kit/collections/image-classification/1

Если вы хотите выполнить обнаружение объектов, вы можете попробовать API обнаружения объектов ML Kit: https://developers.google.com/ml-kit/vision/object-detection

Если вы хотите использовать пользовательскую модель обнаружения объектов, вы можете попробовать библиотеку задач TFLite:

https://www.tensorflow.org/lite/inference_with_metadata/task_library/overview .

Комментарии:

1. Как скоро в будущем будет поддерживаться пользовательская модель tflite для API обнаружения объектов mlkit?

2. У меня такая же проблема, я использую developers.google.com/ml-kit/vision/object-detection/… предполагается, что она поддерживает пользовательские модели. Есть идеи?

3. Он поддерживает совместимые пользовательские модели классификации, перечисленные здесь: tfhub.dev/ml-kit/collections/image-classification/1 , но не пользовательские модели обнаружения или другие произвольные пользовательские модели.

4. Нет ближайшего плана поддержки пользовательской модели обнаружения.

5. Тогда что делает это обнаружение пользовательской модели? developers.google.com/ml-kit/vision/object-detection /…

Ответ №2:

Ну, поскольку я узнал об этом из этого сообщения здесь, на SO, я продолжил искать другие варианты. И учебное пособие, размещенное здесь: Tensor Flow Lite OBJ detection, отлично справилось с задачей.

Прежде всего, добавлен

 implementation 'org.tensorflow:tensorflow-lite-task-vision:0.2.0'
  

Для build.gradle, и этот простой код сработал как шарм. Очевидно, мне нужно внести некоторые изменения, чтобы отразить мои конкретные потребности, но он обнаруживает без ошибок.

 val image = TensorImage.fromBitmap(bitmap)
val options = ObjectDetector.ObjectDetectorOptions.builder()
    .setMaxResults(5)
    .setScoreThreshold(0.5f)
    .build()
val detector = ObjectDetector.createFromFileAndOptions(
    this, // the application context
    "model.tflite", // must be same as the filename in assets folder
    options
)
  

В этой ссылке приведено более подробное объяснение, слишком много, чтобы его можно было сюда добавить.
Надеюсь, это поможет кому-то еще.

Ответ №3:

Теперь вы можете создавать пользовательские модели MLKit с помощью облачного сервиса Vertex AI / AutoML от Google, и он хорошо работает с API CameraX с помощью ImageAnalysis Analyzer . Следуйте приведенному здесь руководству, чтобы создать и обучить модель TFLite с вашими собственными изображениями через браузер (или используйте облачный интерфейс командной строки Google, если вам нужно загрузить их много). После этого в этом руководстве вы узнаете практически все, что вам нужно для добавления модели в ваш проект, а также о том, как обнаруживать и помечать объекты с помощью MLKit.