Назад | Вперед | Содержание
Распознавание изображений
# Классификация изображений с помощью ImageNet
Существует множество типов глубоких нейронных сетей, включая распознавание, обнаружение/локализацию и семантическую сегментацию. Первым глубоким нейронным способом, который мы рассматриваем в этом руководстве, является **распознавание изображений**, используя классификационные сети, обученные на больших наборах данных для идентификации сцен и объектов.

Объект [`imageNet`](../c/imageNet.h) принимает входное изображение и выводит вероятность для каждого класса. Будучи обученным на наборе данных ImageNet ILSVRC, содержащем **[1000 классов](../data/networks/ilsvrc12_synset_words.txt)**, модели GoogleNet и ResNet-18 были автоматически загружены во время этапа сборки. См. [ниже](#загрузка-других-классификационных-моделей) для других классификационных моделей, которые можно загрузить и использовать.
В качестве примера использования класса [`imageNet`](../c/imageNet.h) мы предоставляем образцы программ на C++ и Python:
- [`imagenet.cpp`](../examples/imagenet/imagenet.cpp) (C++)
- [`imagenet.py`](../python/examples/imagenet.py) (Python)
Эти образцы могут классифицировать изображения, видео и потоки с камеры.Для получения дополнительной информации о различных типах входных/выходных потоков, поддерживаемых, см. страницу [Потоковое видео с камеры и мультимедиа](aux-streaming.md).
### Использование программы ImageNet на Jetson
Сначала попробуем использовать программу `imagenet` для тестирования распознавания изображений на примерах. Она загружает изображение (или изображения), использует TensorRT и класс `imageNet` для выполнения инференса, затем накладывает результат классификации и сохраняет выходное изображение. Проект включает образцы изображений для вас, расположенные в директории `images/`.
После [сборки](building-repo-2.md) проекта, убедитесь, что ваш терминал находится в директории `aarch64/bin`:
```bash
$ cd jetson-inference/build/aarch64/bin
```
Далее, классифицируем примерное изображение с помощью программы `imagenet`, используя либо [C++](../examples/imagenet/imagenet.cpp), либо [Python](../python/examples/imagenet.py) варианты. Если вы используете [Docker-контейнер](aux-docker.md), рекомендуется сохранять отсортированные изображения в отмонтированную директорию `images/test`. Эти изображения будут легко доступны на вашем устройстве в директории `jetson-inference/data/images/test` (для получения дополнительной информации см. [Отмонтированные данные](aux-docker.md#mounted-data-volumes)).
```bash
# C++
$ ./imagenet images/orange_0.jpg images/test/output_0.jpg # (по умолчанию используется сеть googlenet)
# Python
$ ./imagenet.py images/orange_0.jpg images/test/output_0.jpg # (по умолчанию используется сеть googlenet)
```> **Примечание**: при первом запуске каждого из моделей TensorRT затрачивается несколько минут на оптимизацию сети.
> оптимизированная сеть сохраняется на диске, поэтому последующие запуски будут быстрее.

```bash
# C++
$ . /imagenet images/strawberry_0. jpg images/test/output_1. jpg
# Python
$ . /imagenet. py images/strawberry_0. jpg images/test/output_1. jpg
```

В дополнение к загрузке отдельных изображений, вы можете загружать директорию или последовательность изображений, а также видеофайлы. Для получения дополнительной информации см. страницу [Трансляция с камеры и мультимедиа](aux-streaming. md) или запустите приложение с флагом `--help`.### Загрузка других моделей классификации
По умолчанию проект загружает сети GoogleNet и ResNet-18 во время этапа сборки.
Также доступны другие предобученные модели, которые вы можете использовать, если решите [загрузить](building-repo-2.md#downloading-models) их:
| Сеть | CLI аргумент | NetworkType enum |
|------------|----------------|------------------|
| AlexNet | `alexnet` | `ALEXNET` |
| GoogleNet | `googlenet` | `GOOGLENET` |
| GoogleNet-12 | `googlenet-12` | `GOOGLENET_12` |
| ResNet-18 | `resnet-18` | `RESNET_18` |
| ResNet-50 | `resnet-50` | `RESNET_50` |
| ResNet-101| `resnet-101` | `RESNET_101` |
| ResNet-152| `resnet-152` | `RESNET_152` |
| VGG-16 | `vgg-16` | `VGG_16` |
| VGG-19 | `vgg-19` | `VGG_19` |
| Inception-v4 | `inception-v4` | `INCEPTION_V4` |
> **Примечание**: для загрузки дополнительных сетей запустите [инструмент загрузки моделей](building-repo-2.md#downloading-models)
>
> `$ cd jetson-inference/tools`
>
> `$ ./download-models.sh`
>
Обычно более сложные сети могут иметь большую точность классификации, с увеличенным временем выполнения.
### Использование различных моделей классификации
Вы можете указать, какую модель загрузить, установив флаг `--network` на командной строке одним из соответствующих аргументов CLI из таблицы выше. По умолчанию загружается GoogleNet, если не указано опциональное значение флага `--network`.
Ниже приведены примеры использования модели ResNet-18:
```bash
# C++
$ ./imagenet --network=resnet-18 images/jellyfish.jpg images/test/output_jellyfish.jpg
# Python
$ ./imagenet
```py --network=resnet-18 images/jellyfish.jpg images/test/output_jellyfish.jpg
```

``` bash
# C++
$ ./imagenet --network=resnet-18 images/stingray.jpg images/test/output_stingray.jpg
# Python
$ ./imagenet.py --network=resnet-18 images/stingray.jpg images/test/output_stingray.jpg
```

``` bash
# C++
$ ./imagenet --network=resnet-18 images/coral.jpg images/test/output_coral.jpg
# Python
$ ./imagenet.py --network=resnet-18 images/coral.jpg images/test/output_coral.jpg
```

Пожалуйста, экспериментируйте с использованием различных моделей и увидите, как различаются их точность и производительность — вы можете загрузить больше моделей с помощью [инструмента загрузки моделей](building-repo-2.md#downloading-models). Также есть различные тестовые изображения, расположенные в папке `images/`
### Обработка видео
Страница [Трансляция с камеры и мультимедиа](aux-streaming.md) показывает различные типы потоков, которые может обрабатывать программа `imagenet`.
Вот пример выполнения программы на видео с диска:
``` bash
# Загрузка тестового видео (спасибо jell.yfish.us)
$ wget https://nvidia.box.com/shared/static/tlswont1jnyu3ix2tbf7utaekpzcx4rc.mkv -O jellyfish.mkv
# C++
$ ./imagenet --network=resnet-18 jellyfish.mkv images/test/jellyfish_resnet18.mkv
# Python
$ ./imagenet.py --network=resnet-18 jellyfish.mkv images/test/jellyfish_resnet18.mkv
```

Далее мы рассмотрим шаги по написанию собственной программы распознавания изображений с нуля, сначала на Python, а затем на C++.
##
Далее | Написание собственной программы распознавания изображений (Python)
Назад | Конструкция репозитория из исходного кода
© 2016-2019 NVIDIA | Содержание
Опубликовать ( 0 )