Помогают защитить Большой Барьерный Риф с TensorFlow на Kaggle Присоединяйтесь вызов

Интегрируйте детекторы объектов

Детекторы объектов могут идентифицировать, какой из известного набора объектов может присутствовать, и предоставлять информацию об их положениях в данном изображении или видеопотоке. Детектор объектов обучен обнаруживать присутствие и расположение нескольких классов объектов. Например, модель может быть обучен с изображениями , которые содержат различные кусочки фруктов, вместе с меткой , которая определяет класс фруктов они представляют (например , яблоко, банан или клубника), а также данные , определяющие , где появляется каждый объект изображение. См введения обнаружения объекта для получения дополнительной информации о детекторах объекта.

Использование задач библиотеки ObjectDetector API для развертывания пользовательских детекторов объектов или pretrained те , в мобильных приложениях.

Ключевые особенности ObjectDetector API

  • Обработка входного изображения, включая поворот, изменение размера и преобразование цветового пространства.

  • Отметьте язык карты.

  • Порог оценки для фильтрации результатов.

  • Результаты обнаружения Top-k.

  • Отметьте список разрешенных и денилистов.

Поддерживаемые модели детекторов объектов

Следующие модели гарантированно будут совместимы с ObjectDetector API.

Выполнить вывод в Java

См Object Detection ссылочного приложения для примера того , как использовать ObjectDetector в Android приложении.

Шаг 1. Импортируйте зависимость Gradle и другие настройки

Скопируйте .tflite файл модели в каталоге ресурсов в Android модуля , в котором будет запущена модель. Указывает , что файл не должен быть сжат, и добавить библиотеку TensorFlow Lite для модуля build.gradle файла:

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency (NNAPI is included)
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.3.0'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.3.0'
}

Шаг 2: Использование модели

// Initialization
ObjectDetectorOptions options =
    ObjectDetectorOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
ObjectDetector objectDetector =
    ObjectDetector.createFromFileAndOptions(
        context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

Смотрите исходный код и Javadoc для большего количества опций для настройки ObjectDetector .

Выполнить вывод в C ++

// Initialization
ObjectDetectorOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

// Run inference
const DetectionResult result = object_detector->Detect(*frame_buffer).value();

Смотрите исходный код для более опций для настройки ObjectDetector .

Примеры результатов

Ниже приведен пример результатов обнаружения SSD MobileNet v1 от TensorFlow Hub.

собаки

Results:
 Detection #0 (red):
  Box: (x: 355, y: 133, w: 190, h: 206)
  Top-1 class:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1 (green):
  Box: (x: 103, y: 15, w: 138, h: 369)
  Top-1 class:
   index       : 17
   score       : 0.73047
   class name  : dog

Отрисовываем ограничительные рамки на входном изображении:

выход обнаружения

Попробуйте простой CLI демонстрационного инструмента для ObjectDetector с вашими собственными моделью и тестовыми данными.

Требования к совместимости моделей

ObjectDetector API ожидает , что модель TFLite с обязательным TFLite модели метаданных . Смотрите примеры создания метаданных для детекторов объектов с использованием Writer API TensorFlow Lite метаданных .

Совместимые модели детекторов объектов должны соответствовать следующим требованиям:

  • Тензор входного изображения: (kTfLiteUInt8 / kTfLiteFloat32)

    • входное изображение размера [batch x height x width x channels] .
    • пакетный вывод не поддерживается ( batch требуется , чтобы быть 1).
    • Только RGB входы поддерживаются ( channels требуется , чтобы быть 3).
    • если тип - kTfLiteFloat32, параметры NormalizationOptions должны быть прикреплены к метаданным для нормализации ввода.
  • Выходные тензоры должны быть 4 выходов в DetectionPostProcess оп, а именно:

    • Тензор положений (kTfLiteFloat32)
      • тензор размера [1 x num_results x 4] , внутренний массив , представляющий ограничивающие коробки в виде [сверху, слева, справа, снизу].
      • BoundingBoxProperties должны быть присоединены к метаданным и должны указать type=BOUNDARIES и `coordinate_type = RATIO.
    • Тензор классов (kTfLiteFloat32)

      • тензор размера [1 x num_results] , каждое значение , представляющее целочисленное значение индекса класса.
      • необязательные (но рекомендуемые) карты меток могут быть присоединены как AssociatedFile-s с типом TENSOR_VALUE_LABELS, содержащим по одной метке в строке. Смотрите файл Пример этикетки . Первый такой AssociatedFile (если таковые имеются) используется для заполнения class_name поле результатов. display_name поле заполняется из AssociatedFile (если таковые имеются) , чьи локаль соответствует display_names_locale поле из ObjectDetectorOptions , используемых при создании ( «эн» по умолчанию, то есть английский язык). Если ни один из них не доступны, только index поля результатов будут заполнены.
    • Тензор очков (kTfLiteFloat32)

      • тензор размера [1 x num_results] , каждое значение , представляющее оценку обнаруженного объекта.
    • Номер тензора обнаружения (kTfLiteFloat32)

      • целочисленное num_results как тензор размера [1] .