RSVP для вашего местного мероприятия TensorFlow Everywhere сегодня!
Эта страница переведена с помощью Cloud Translation API.
Switch to English

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

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

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

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

Начать

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

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

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

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

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

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

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

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

Android

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

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

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

iOS

Вы можете интегрировать модель с помощью API Swift интерпретатора TensorFlow Lite . См. Пример 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, показывающий ложное срабатывание

Место расположения

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

[ верх, оставили, Нижний, верно ]

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

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

Показатели производительности для нашей стартовой модели генерируются с помощью описанного здесь инструмента.

Название модели Размер модели Устройство GPU ЦПУ
COCO SSD MobileNet v1 27 Мб Pixel 3 (Android 10) 22 мс 46 мс *
Pixel 4 (Android 10) 20 мс 29 мс *
iPhone XS (iOS 12.4.1) 7,6 мс 11 мс **

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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