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

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

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

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

Начать

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

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

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

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

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

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

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

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

Андроид

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

В приведенном ниже примере Android демонстрируется реализация обоих методов с использованием библиотеки задач и API-интерпретатора соответственно.

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

iOS

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

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

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

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

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

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

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

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

Предположим, что ожидаемое изображение имеет размер 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 потока для достижения наилучшего результата.

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

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

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

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

Оба сценария экспорта 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.