1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/duping812-jetson-inference

Клонировать/Скачать
detectnet-console-2.md 17 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.06.2025 15:38 5e07e18

Назад | Далее | Содержание
Обнаружение объектов

# Обнаружение объектов с помощью DetectNet В предыдущих примерах распознавания выводились вероятности классов, представляющие собой всю входную изображение. Теперь мы сосредоточимся на **обнаружении объектов** и нахождении местоположения различных объектов в кадре путем извлечения их ограничивающих прямоугольников. В отличие от классификации изображений, сети для обнаружения объектов способны обнаруживать множество различных объектов на одном кадре. Объект [`detectNet`](../c/detectNet.h) принимает изображение в качестве входных данных и выводит список координат обнаруженных ограничивающих прямоугольников вместе с их классами и значениями уверенности. Объект [`detectNet`](../c/detectNet.h) доступен для использования из [Python](https://rawgit.com/dusty-nv/jetson-inference/python/docs/html/python/jetson.inference.html#detectNet) и [C++](../c/detectNet.h). См. ниже для различных [предварительно обученных моделей обнаружения](#предварительно-обученные-модели-обнаружения) доступных для загрузки. По умолчанию используется модель [91-классная](../data/networks/ssd_coco_labels.txt).txt) SSD-Mobilenet-v2, обученная на наборе данных MS COCO, которая обеспечивает реальное время производительность инференса на Jetson с использованием TensorRT. В качестве примеров использования класса `detectNet` мы предоставляем образцы программ для C++ и Python: - [`detectnet.cpp`](../examples/detectnet/detectnet.cpp) (C++) - [`detectnet.py`](../python/examples/detectnet.py) (Python) Эти образцы способны обнаруживать объекты в изображениях, видео и потоках с камеры. Для получения дополнительной информации о различных типах входных/выходных потоков, поддерживаемых, см. страницу [Потоковое вещание с камеры и мультимедиа](aux-streaming.md). ### Обнаружение объектов на изображениях Сначала попробуем использовать программу `detectnet` для обнаружения объектов на статических изображениях. В дополнение к путям входных/выходных данных, есть некоторые дополнительные опции командной строки: - необязательный флаг `--network`, который изменяет [модель обнаружения](detectnet-console-2.md#предварительно-обученные-модели-обнаружения) (по умолчанию используется SSD-Mobilenet-v2). - необязательный флаг `--overlay`, который может быть комбинацией, разделённой запятыми, значений `box`, `labels`, `conf` и `none` - По умолчанию используется `--overlay=box,labels,conf`, что отображает рамки, метки и значения уверенности. - необязательный параметр `--alpha`, который устанавливает значение альфа-смешивания, используемое при наложении (по умолчанию `120`).- необязательный параметр `--threshold`, который устанавливает минимальный порог для обнаружения (по умолчанию `0.5`). Если вы используете [Docker-контейнер](aux-docker.md), рекомендуется сохранять выходные изображения в смонтированном каталоге `images/test`. Эти изображения будут легко доступны на вашем устройстве по пути `jetson-inference/data/images/test` (для дополнительной информации см. [Смонтированные данные](aux-docker.md#mounted-data-volumes)). Ниже приведены примеры обнаружения пешеходов на изображениях с использованием по умолчанию модели SSD-Mobilenet-v2: ```bash # C++ $ ./detectnet --network=ssd-mobilenet-v2 images/peds_0.jpg images/test/output.jpg # --network флаг необязателен # Python $ ./detectnet.py --network=ssd-mobilenet-v2 images/peds_0.jpg images/test/output.jpg # --network флаг необязателен ``` ```bash # C++ $ ./detectnet images/peds_1.jpg images/test/output.jpg # Python $ ./detectnet.py images/peds_1.jpg images/test/output.jpg ``` > **Примечание**: в первый раз, когда вы запускаете каждую модель, TensorRT может занять несколько минут для оптимизации сети. > Оптимизированная сеть затем кэшируется на диске, поэтому будущие запуски с использованием модели будут загружаться быстрее. Ниже приведены дополнительные примеры обнаружения, выводимые консольными программами. [91-классовый](../data/networks/ssd_coco_labels.txt)txt) набор данных MS COCO, на котором были обучены модели на основе SSD, включает людей, транспортные средства, животных и различные типы домашних предметов для обнаружения. Различные изображения находятся в каталоге `images/` для тестирования, таких как `cat_*.jpg`, `dog_*.jpg`, `horse_*.jpg`, `peds_*.jpg`, и т. д. ### Обработка каталога или последовательности изображений Если у вас есть несколько изображений, которые вы хотите обработать одновременно, вы можете запустить программу `detectnet` с путем к директории, содержащей изображения, или с использованием шаблонного выражения: ```bash # C++ ./detectnet "images/peds_*.jpg" images/test/peds_output_%i.jpg # Python ./detectnet.py "images/peds_*.jpg" images/test/peds_output_%i.jpg ``` > **Примечание:** при использовании шаблонных выражений всегда заключайте их в кавычки (`"*.jpg"`). В противном случае операционная система автоматически расширит последовательность и изменит порядок аргументов на командной строке, что может привести к перезаписи одного из входных изображений выходным. Для получения дополнительной информации о загрузке/сохранении последовательностей изображений, см. страницу [Трансляция с камеры и мультимедиа](aux-streaming.md#sequences). ### Обработка видеофайлов Вы также можете обрабатывать видео с диска. Некоторые тестовые видео находятся на вашем Jetson в директории `/usr/share/visionworks/sources/data` ```bash # C++ ./detectnet /usr/share/visionworks/sources/data/pedestrians.mp4 images/test/pedestrians_ssd.mp4 # Python . /detectnet.py /usr/share/visionworks/sources/data/pedestrians.mp4 images/test/pedestrians_ssd.mp4 ``` ```bash # C++ . /detectnet /usr/share/visionworks/sources/data/parking.avi images/test/parking_ssd.avi # Python . /detectnet.py /usr/share/visionworks/sources/data/parking.avi images/test/parking_ssd.avi ``` Помните, что вы можете использовать параметр `--threshold` для изменения чувствительности детекции (по умолчанию значение равно 0.5). ### Доступные предобученные модели детекции Ниже приведена таблица предобученных моделей детекции объектов, доступных для [скачивания](building-repo-2.md#downloading-models), и соответствующего параметра `--network` для `detectnet` для загрузки предобученных моделей: | Модель | CLI аргумент | NetworkType enum | Классы объектов | | ------------------------|--------------------|--------------------|----------------------| | SSD-Mobilenet-v1 | `ssd-mobilenet-v1` | `SSD_MOBILENET_V1` | 91 ([COCO classes](../data/networks/ssd_coco_labels.txt)) | | SSD-Mobilenet-v2 | `ssd-mobilenet-v2` | `SSD_MOBILENET_V2` | 91 ([COCO classes](../data/networks/ssd_coco_labels.txt)) | | SSD-Inception-v2 | `ssd-inception-v2` | `SSD_INCEPTION_V2` | 91 ([COCO classes](../data/networks/ssd_coco_labels.txt)) | | DetectNet-COCO-Dog | `coco-dog` | `COCO_DOG` | собаки | | DetectNet-COCO-Bottle | `coco-bottle` | `COCO_BOTTLE` | бутылки | | DetectNet-COCO-Chair | `coco-chair` | `COCO_CHAIR` | стулья | | DetectNet-COCO-Airplane | `coco-airplane` | `COCO_AIRPLANE` | самолеты | | ped-100 | `pednet` | `PEDNET` | пешеходы | | multiped-500 | `multiped` | `PEDNET_MULTI` | пешеходы, багаж | | facenet-120 | `facenet` | `FACENET` | лица | > **Примечание**: для загрузки дополнительных сетей запустите [инструмент загрузки моделей](building-repo-2.md#downloading-models)
>              `$ cd jetson-inference/tools`
>              `$ ./download-models.sh`
### Запуск различных моделей обнаружения Вы можете указать, какую модель загрузить, установив флаг `--network` на командной строке одним из соответствующих аргументов CLI из таблицы выше. По умолчанию загружается SSD-Mobilenet-v2, если не указано опциональное значение флага `--network`. Например, если вы выбрали загрузку SSD-Inception-v2 с помощью [инструмента загрузки моделей](building-repo-2.md#downloading-models), вы можете использовать его следующим образом: ```bash # C++ $ ./detectnet --network=ssd-inception-v2 input.jpg output.jpg # Python $ ./detectnet.py --network=ssd-inception-v2 input.jpg output.jpg ``` ### Исходный код Для справки ниже приведен исходный код для [`detectnet.py`](../python/examples/detectnet.py): ```python import jetson.inference import jetson.utils import argparse import sys # разбор командной строки parser = argparse.ArgumentParser(description="Определение объектов в потоке видеокамеры в реальном времени с помощью DNN для обнаружения объектов.") parser.add_argument("input_URI", type=str, default="", nargs='?', help="URI входного потока") parser.add_argument("--network", type=str, default="ssd-mobilenet-v2", help="Модель DNN для использования (default: ssd-mobilenet-v2)") parser.add_argument("--threshold", type=float, default=0.5, help="Порог вероятности для отображения объектов (default: 0.5)") args = parser.parse_args() ``````markdown add_argument("output_URI", type=str, default="", nargs='? ', help="URI адреса выходного потока") parser.add_argument("--network", type=str, default="ssd-mobilenet-v2", help="загружаемая предварительно обученная модель (см. ниже для вариантов)") parser.add_argument("--overlay", type=str, default="box,labels,conf", help="флаги накладываемого слоя обнаружения (например, --overlay=box,labels,conf)\nдопустимые комбинации: 'box', 'labels', 'conf', 'none'") parser.add_argument("--threshold", type=float, default=0.5, help="минимальный порог обнаружения для использования") try: opt = parser.parse_known_args()[0] except: print("") parser.print_help() sys.exit(0) # загружаем сеть обнаружения объектов net = jetson.inference.detectNet(opt.network, sys.argv, opt.threshold) # создаем источники видео и выходы input = jetson.utils.videoSource(opt.input_URI, argv=sys.argv) output = jetson.utils.videoOutput(opt.output_URI, argv=sys.argv) # обрабатываем кадры до тех пор, пока пользователь не выйдет while True: # захватываем следующий кадр img = input.Capture() # обнаруживаем объекты на изображении (с накладыванием слоя) detections = net.Detect(img, overlay=opt.overlay) # выводим обнаруженные объекты print("обнаружено {:d} объектов на изображении".format(len(detections))) for detection in detections: print(detection) # рендерим изображение output.Render(img) # обновляем строку состояния output.SetStatus("{:s} | Сеть {:.0f} FPS".format(opt.network, net.GetNetworkFPS())) # выводим информацию о производительности net.PrintProfilerTimes() # выходим при достижении конца потока входных/выходных данных if not input.IsStreaming() or not output.IsStreaming(): break ``` Далее мы выполним обнаружение объектов на потоке видеокамеры в реальном времени. ##

Далее | Запуск демонстрации обнаружения объектов на потоке видеокамеры в реальном времени
Назад | Запуск демонстрации распознавания объектов на потоке видеокамеры в реальном времени

© 2016-2019 NVIDIA | Содержание

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/duping812-jetson-inference.git
git@api.gitlife.ru:oschina-mirror/duping812-jetson-inference.git
oschina-mirror
duping812-jetson-inference
duping812-jetson-inference
master