Обнаружение объекта, Обнаружение объекта

При наличии изображения или видеопотока модель обнаружения объектов может определить, какие из известного набора объектов могут присутствовать, и предоставить информацию об их позициях на изображении.

Например, на этом снимке экрана примерного приложения показано, как были распознаны два объекта и аннотированы их положения:

Скриншот примера Android

Начать

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

Если вы используете платформу, отличную от Android или iOS, или если вы уже знакомы с API- интерфейсами TensorFlow Lite , вы можете загрузить нашу начальную модель обнаружения объектов и соответствующие метки.

Скачать начальную модель с метаданными

Дополнительные сведения о метаданных и связанных полях (например labels.txt ) см. в разделе Чтение метаданных из моделей .

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

Для следующих случаев использования вы должны использовать другой тип модели:

  • Прогнозирование того, какую метку наиболее вероятно представляет изображение (см. классификацию изображений ).
  • Прогнозирование композиции изображения, например, объекта по сравнению с фоном (см. Сегментация )

Примеры приложений и руководства

Если вы новичок в TensorFlow Lite и работаете с Android или iOS, мы рекомендуем изучить следующие примеры приложений, которые помогут вам начать работу.

Андроид

Вы можете использовать готовый API из библиотеки задач TensorFlow Lite , чтобы интегрировать модели обнаружения объектов всего в несколько строк кода. Вы также можете создать собственный настраиваемый конвейер вывода с помощью Java API TensorFlow Lite Interpreter .

Пример Android ниже демонстрирует реализацию обоих методов как lib_task_api и lib_interpreter соответственно.

Посмотреть пример Android

iOS

Интегрировать модель можно с помощью TensorFlow Lite Interpreter Swift API . См. пример iOS ниже.

Посмотреть пример для iOS

Описание модели

В этом разделе описывается сигнатура для моделей Single-Shot Detector , конвертированных в TensorFlow Lite из TensorFlow Object Detection API .

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

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

Входная подпись

Модель принимает изображение в качестве входных данных.

Предположим, что ожидаемое изображение имеет размер 300x300 пикселей с тремя каналами (красный, синий и зеленый) на пиксель. Это должно быть передано в модель в виде сглаженного буфера из 270 000 байтовых значений (300x300x3). Если модель квантована , каждое значение должно быть одним байтом, представляющим значение от 0 до 255.

Вы можете взглянуть на наш пример кода приложения, чтобы понять, как выполнить эту предварительную обработку на Android.

Выходная подпись

Модель выводит четыре массива, отображаемых на индексы 0-4. Массивы 0, 1 и 2 описывают N обнаруженных объектов, причем каждому объекту соответствует один элемент в каждом массиве.

Индекс Имя Описание
0 Места Многомерный массив из [N][4] значений с плавающей запятой от 0 до 1, внутренние массивы представляют ограничивающие прямоугольники в форме [верх, лево, низ, право]
1 Классы Массив из N целых чисел (выводимых в виде значений с плавающей запятой), каждое из которых указывает индекс метки класса из файла меток.
2 Результаты Массив N значений с плавающей запятой от 0 до 1, представляющих вероятность обнаружения класса.
3 Количество обнаружений Целое значение N

Например, представьте, что модель обучена обнаруживать яблоки, бананы и клубнику. При предоставлении изображения будет выведено заданное количество результатов обнаружения — в этом примере 5.

Учебный класс Счет Расположение
Яблоко 0,92 [18, 21, 57, 63]
Банан 0,88 [100, 30, 180, 150]
Клубника 0,87 [7, 82, 89, 163]
Банан 0,23 [42, 66, 57, 83]
Яблоко 0,11 [6, 42, 31, 58]

Оценка достоверности

Чтобы интерпретировать эти результаты, мы можем посмотреть на оценку и местоположение каждого обнаруженного объекта. Оценка представляет собой число от 0 до 1, которое указывает на уверенность в том, что объект действительно обнаружен. Чем ближе число к 1, тем увереннее модель.

В зависимости от вашего приложения вы можете установить порог отсечения, ниже которого вы будете отбрасывать результаты обнаружения. Для текущего примера разумным пределом является оценка 0,5 (что означает 50%-ю вероятность того, что обнаружение действительно). В этом случае последние два объекта в массиве будут проигнорированы, поскольку эти оценки достоверности ниже 0,5:

Учебный класс Счет Расположение
Яблоко 0,92 [18, 21, 57, 63]
Банан 0,88 [100, 30, 180, 150]
Клубника 0,87 [7, 82, 89, 163]
Банан 0,23 [42, 66, 57, 83]
Яблоко 0,11 [6, 42, 31, 58]

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

Например, на следующем изображении груша (которая не является объектом, для обнаружения которого модель была обучена) была ошибочно идентифицирована как «человек». Это пример ложноположительного результата, который можно было бы игнорировать, выбрав соответствующую отсечку. В этом случае пороговое значение 0,6 (или 60%) удобно исключает ложноположительный результат.

Снимок экрана с примером Android, показывающим ложное срабатывание

Расположение

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

[ Топ, оставил, нижний, Правильно ]

Верхнее значение представляет собой расстояние от верхнего края прямоугольника до верхней части изображения в пикселях. Левое значение представляет собой расстояние от левого края до левого края входного изображения. Другие значения представляют нижний и правый края аналогичным образом.

Тесты производительности

Цифры эталонных показателей производительности для нашей начальной модели генерируются с помощью описанного здесь инструмента.

Название модели Размер модели Устройство графический процессор Процессор
COCO SSD MobileNet v1 27 Мб Пиксель 3 (Андроид 10) 22 мс 46 мс*
Пиксель 4 (Андроид 10) 20 мс 29 мс*
iPhone XS (iOS 12.4.1) 7,6 мс 11 мс**

* Использованы 4 нити.

** На iPhone используются 2 потока для наилучшего результата производительности.

Настройка модели

Предварительно обученные модели

Модели обнаружения, оптимизированные для мобильных устройств, с различными характеристиками задержки и точности можно найти в Зоопарке обнаружения . Каждый из них следует входным и выходным сигнатурам, описанным в следующих разделах.

Большинство загружаемых zip-архивов содержат файл model.tflite . Если его нет, с помощью этих инструкций можно создать плоский буфер TensorFlow Lite. Модели SSD из TF2 Object Detection Zoo также можно конвертировать в TensorFlow Lite по инструкции здесь . Важно отметить, что модели обнаружения не могут быть преобразованы напрямую с помощью конвертера TensorFlow Lite , поскольку для них требуется промежуточный этап создания исходной модели, удобной для мобильных устройств. Сценарии, указанные выше, выполняют этот шаг.

Оба скрипта экспорта TF1 и TF2 имеют параметры, которые могут включать большее количество выходных объектов или более медленную и точную постобработку. Пожалуйста, используйте --help со сценариями, чтобы увидеть исчерпывающий список поддерживаемых аргументов.

В настоящее время логический вывод на устройстве оптимизирован только для моделей SSD. Изучается возможность улучшения поддержки других архитектур, таких как CenterNet и EfficientDet.

Как выбрать модель для настройки?

Каждая модель имеет свою собственную точность (количественно определяемую значением mAP) и характеристики задержки. Вы должны выбрать модель, которая лучше всего подходит для вашего варианта использования и предполагаемого оборудования. Например, модели Edge TPU идеально подходят для получения выводов о Edge TPU от Google на Pixel 4.

Вы можете использовать наш эталонный инструмент для оценки моделей и выбора наиболее эффективного из доступных вариантов.

Тонкая настройка моделей на пользовательских данных

Предварительно обученные модели, которые мы предоставляем, обучены обнаруживать 90 классов объектов. Полный список классов смотрите в файле меток в метаданных модели .

Вы можете использовать технику, известную как перенос обучения, чтобы повторно обучить модель распознавать классы, которых нет в исходном наборе. Например, вы можете переобучить модель для обнаружения нескольких видов овощей, несмотря на то, что в исходных обучающих данных был только один овощ. Для этого вам понадобится набор обучающих изображений для каждой из новых меток, которые вы хотите обучить. Рекомендуемый способ — использовать библиотеку TensorFlow Lite Model Maker , которая упрощает процесс обучения модели TensorFlow Lite с использованием пользовательского набора данных с помощью нескольких строк кода. Он использует трансферное обучение, чтобы уменьшить количество необходимых обучающих данных и времени. Вы также можете узнать из Colab об обнаружении нескольких выстрелов в качестве примера тонкой настройки предварительно обученной модели с несколькими примерами.

Для тонкой настройки с большими наборами данных ознакомьтесь с этими руководствами по обучению собственных моделей с помощью API обнаружения объектов TensorFlow: TF1 , TF2 . После обучения их можно преобразовать в удобный для TFLite формат с помощью инструкций здесь: TF1 , TF2 .