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

OSCHINA-MIRROR/duping812-jetson-inference

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

Назад | Вперед | Содержание
Настройка системы

# Сборка проекта из исходного кода В репозитории предоставлена библиотека ускоренных с помощью TensorRT глубоких нейронных сетей для распознавания изображений, детекции объектов с локализацией (то есть с использованием ограничивающих прямоугольников) и семантического сегментирования. Эта библиотека инференса (`libjetson-inference`) предназначена для запуска на Jetson и включает поддержку как для C++, так и для Python. Различные предобученные модели DNN автоматически загружаются для быстрого запуска.

Последний исходный код или Docker контейнер можно использовать на вашем Jetson после того, как устройство было загружено с помощью JetPack или настроено с помощью предзаполненного образа SD-карты. Вы можете запустить предзагруженный Docker контейнер без необходимости собирать проект или самостоятельно устанавливать PyTorch.### Быстрое руководство Если вы не используете Docker контейнер, вот сжатая форма команд для сборки/установки проекта напрямую на вашем Jetson:

$ sudo apt-get update
$ sudo apt-get install git cmake libpython3-dev python3-numpy
$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ mkdir build
$ cd build
$ cmake ../
$ make -j$(nproc)
$ sudo make install
$ sudo ldconfig

Далее мы рассмотрим каждый шаг и обсудим различные варианты сборки по пути.### Клонирование репозитория Чтобы скачать код, перейдите в папку вашего выбора на Jetson. Сначала убедитесь, что установлены git и cmake:

$ sudo apt-get update
$ sudo apt-get install git cmake

Затем клонируйте проект jetson-inference:

$ git clone https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ git submodule update --init

Помните, что нужно выполнить шаг git submodule update --init (или клонировать с помощью флага --recursive).

Пакеты разработки Python

Функциональность Python этого проекта реализована через модули расширения Python, которые предоставляют привязки к исходному коду C++ с использованием Python C API. При настройке проекта, репозиторий ищет версии Python, для которых на системе установлены пакеты разработки, и затем создает привязки для каждой версии Python, присутствующей в системе (например, Python 2.7, 3.6 и 3.7). Также он создает привязки numpy для версий numpy, которые установлены.

По умолчанию, Ubuntu поставляется с предустановленными пакетами libpython-dev и python-numpy (для Python 2.7). Хотя интерпретатор Python 3.6 предустановлен Ubuntu, пакеты разработки Python 3.6 (libpython3-dev) и python3-numpy не установлены. Эти пакеты разработки необходимы для создания привязок с использованием Python C API.Поэтому, если вы хотите, чтобы проект создавал привязки для Python 3.6, установите эти пакеты перед продолжением:

$ sudo apt-get install libpython3-dev python3-numpy

Установка этих дополнительных пакетов позволит репозиторию создать расширения привязок для Python 3.6, а также для Python 2.7 (который уже предустановлен). После завершения процесса сборки, пакеты jetson.inference и jetson.utils будут доступны для использования в ваших Python-окружениях.### Настройка с помощью CMake Следующим шагом является создание каталога сборки внутри проекта и запуск cmake для настройки сборки. Когда запускается cmake, запускается скрипт (CMakePreBuild.sh), который устанавливает все необходимые зависимости и загружает DNN-модели для вас.

$ cd jetson-inference    # пропустить, если текущий рабочий каталог уже jetson-inference/
$ mkdir build
$ cd build
$ cmake ../

Примечание: этот командный запрос запускает скрипт CMakePreBuild.sh, который запрашивает права sudo при установке некоторых предварительных пакетов на Jetson. Скрипт также загружает предобученные сети с веб-сервисов.### Загрузка моделей Проект включает в себя множество предобученных сетей, которые вы можете выбрать для загрузки и установки с помощью инструмента Model Downloader (download-models.sh). По умолчанию, не все модели изначально выбраны для загрузки, чтобы сэкономить место на диске. Вы можете выбрать модели, которые вам нужны, или запустить инструмент позже, чтобы загрузить больше моделей в другой раз. При первоначальной настройке проекта, cmake автоматически запустит инструмент загрузки для вас:

> **Примечание**: для пользователей, которые не могут подключиться к Box.com для загрузки моделей, предоставляется зеркальная копия здесь: >              [`https://github.com/dusty-nv/jetson-inference/releases`](https://github.com/dusty-nv/jetson-inference/releases) Чтобы запустить инструмент загрузки моделей позже, вы можете использовать следующие команды: ```bash $ cd jetson-inference/tools $ ./download-models.sh ``` ### Установка PyTorch Если вы используете JetPack 4.2 или более новую версию, запустится другой инструмент, который может опционально установить PyTorch на вашем Jetson, если вы хотите переобучить сети с использованием [переносного обучения](pytorch-transfer-learning.md) позже в руководстве.Этот шаг является необязательным, и если вы не хотите выполнять шаги переносного обучения, вам не нужно устанавливать PyTorch и вы можете пропустить этот шаг. Если требуется, выберите версии пакетов PyTorch для Python 2.7 и/или Python 3.6, которые вы хотите установить, и нажмите `Enter`, чтобы продолжить. В противном случае, оставьте опции не выбранными, и установка PyTorch будет пропущена. > **Примечание**: автоматический инструмент установки PyTorch требует JetPack 4.2 (или более новую версию) >           для других версий, см. [`http://eLinux.org/Jetson_Zoo`](https://elinux.org/Jetson_Zoo#PyTorch_.28Caffe2.29) для сборки из исходного кода. Вы также можете запустить этот инструмент позже, если решите установить PyTorch в другой раз: ``` bash $ cd jetson-inference/build $ ./install-pytorch.sh ``` Запуск этих команд предложит вам тот же диалог, как показано выше. ### Сборка проекта Убедитесь, что вы все еще находитесь в директории `jetson-inference/build`, созданной выше в шаге #3. Затем запустите `make` и `sudo make install`, чтобы собрать библиотеки, Python-расширения и примеры кода: ``` bash $ cd jetson-inference/build # пропустите, если рабочая директория уже build/ из выше $ make $ sudo make install $ sudo ldconfig ``` Проект будет собран в `jetson-inference/build/aarch64` с следующей структурой директорий: ``` |-build \aarch64 \bin где создаются образцы исполняемых файлов ``` \networks где хранятся модели нейронных сетей \images где хранятся тестовые изображения \include где находятся заголовочные файлы \lib где создаются библиотеки ``` В структуре сборки вы можете найти исполняемые файлы в `build/aarch64/bin/`, заголовочные файлы в `build/aarch64/include/`, а также библиотеки в `build/aarch64/lib/`. Эти файлы также устанавливаются в `/usr/local/` во время шага `sudo make install`. Python-биндинги для модулей [`jetson.inference`](https://rawgit.com/dusty-nv/jetson-inference/python/docs/html/python/jetson.inference.html) и [`jetson.utils`](https://rawgit.com/dusty-nv/jetson-inference/python/docs/html/python/jetson.utils.html) также устанавливаются во время шага `sudo make install` в директорию `/usr/lib/python*/dist-packages/`. Если вы обновите код, не забудьте повторно запустить его. ### Исследование кода См. документацию по **[API Reference](../README.md#api-reference)** для примитивов визуализации в `libjetson-inference`, включая `imageNet` для распознавания изображений, `detectNet` для локализации объектов и `segNet` для семантической сегментации. Изучите C++ или Python-версии этих объектов в зависимости от предпочитаемого языка. #### C++ Ниже приведен частичный список класса C++ [`imageNet`](../c/imageNet.h), который мы будем использовать в последующих шагах руководства: ```c++ class imageNet : public tensorNet { public: /** * Перечисление выбора сети. */ enum NetworkType { CUSTOM, /**< Пользовательская модель, предоставленная пользователем */ ALEXNET, /**< AlexNet, обученная на 1000-классном ILSVRC12 */ GOOGLENET, /**< GoogleNet, обученная на 1000-классном ILSVRC12 */ GOOGLENET_12, /**< GoogleNet, обученная на 12-классном подмножестве ImageNet ILSVRC12 из руководства */ RESNET_18, /**< ResNet-18, обученная на 1000-классном ILSVRC15 */ RESNET_50, /**< ResNet-50, обученная на 1000-классном ILSVRC15 */ RESNET_101, /**< ResNet-101, обученная на 1000-классном ILSVRC15 */ RESNET_152, /**< ResNet-152, обученная на 1000-классном ILSVRC15 */ VGG_16, /**< VGG-16, обученная на 1000-классном ILSVRC14 */ VGG_19, /**< VGG-19, обученная на 1000-классном ILSVRC14 */ ``` INCEPTION_V4, /**< Inception-v4, обученная на 1000-классном ILSVRC12 */ }; /** * Загрузить новый экземпляр сети */ static imageNet* Create( NetworkType networkType=GOOGLENET, uint32_t maxBatchSize=DEFAULT_MAX_BATCH_SIZE, precisionType precision=TYPE_FASTEST, deviceType device=DEVICE_GPU, bool allowGPUFallback=true ); /** * Загрузить новый экземпляр сети * @param prototxt_path Путь к файлу с описанием сети (deployable network prototxt) * @param model_path Путь к файлу с моделью (caffemodel) * @param mean_binary Путь к файлу с бинарным прототипом среднего значения (может быть NULL) * @param class_labels Путь к файлу со списком меток классов * @param input Имя слоя входных данных * @param output Имя слоя выходных данных * @param maxBatchSize Максимальный размер пакета, который поддерживает и оптимизирована сеть */ static imageNet* Create( const char* prototxt_path, const char* model_path, const char* mean_binary, const char* class_labels, const char* input=IMAGENET_DEFAULT_INPUT, const char* output=IMAGENET_DEFAULT_OUTPUT, uint32_t maxBatchSize=DEFAULT_MAX_BATCH_SIZE, precisionType precision=TYPE_FASTEST, deviceType device=DEVICE_GPU, bool allowGPUFallback=true ); /** * Определить класс изображения с максимальной вероятностью. * Эта функция выполняет предварительную обработку изображения (вычитание среднего значения и преобразование в формат NCHW), @see PreProcess() * @param rgba Входное изображение в формате float4 в памяти устройства CUDA. * @param width Ширина входного изображения в пикселях. * @param height Высота входного изображения в пикселях. * @param confidence Необязательный указатель на float, заполненный значением уверенности. * @returns Индекс максимального класса, или -1 при ошибке. */ int Classify( float* rgba, uint32_t width, uint32_t height, float* confidence=NULL ); /** * Получить количество классов распознавания изображений (обычно Yöntem 1000) */ inline uint32_t GetNumClasses() const { return mOutputClasses; } /** * Получить описание определенного класса. */ inline const char* GetClassDesc( uint32_t index ) const { return mClassDesc[index].c_str(); } }; ``` Все объекты DNN в репозитории наследуются от общего класса [`tensorNet`](./c/tensorNet.h) объект, который содержит общие TensorRT коды. #### Python Ниже приведен упрощенный вывод pydoc для Python объекта [`imageNet`](https://rawgit.com/dusty-nv/jetson-inference/python/docs/html/python/jetson.inference.html#imageNet) из пакета [`jetson.inference`](https://rawgit.com/dusty-nv/jetson-inference/python/docs/html/python/jetson.inference.html): ``` jetson.inference.imageNet = class imageNet(tensorNet) | Объект распознавания изображений DNN - классифицирует изображение | | __init__(...) | Загружает модель распознавания изображений. | | Параметры: | * model: Строка, указывающая путь к файлу модели. | * labels: Строка, указывающая путь к файлу меток. | * input_blob: Строка, указывающая имя входного буфера. | * output_blob: Строка, указывающая имя выходного буфера. | * topK: Целое число, указывающее количество верхних классов для отображения. | * threshold: Число, указывающее порог вероятности. | * backend: Строка, указывающая бэкенд (TensorRT или ONNX). | * device: Строка, указывающая устройство (CPU или GPU). | * cudnn_batch_size: Целое число, указывающее размер пакета для CUDNN. | * cudnn_preload: Логическое значение, указывающее, следует ли загружать данные в память CUDNN. | * cudnn_preload_size: Целое число, указывающее размер предзагрузки для CUDNN. | * cudnn_preload_threshold: Число, указывающее порог предзагрузки для CUDNN. | * cudnn_preload_interval: Число, указывающее интервал предзагрузки для CUDNN. | * cudnn_preload_wait: Число, указывающее время ожидания предзагрузки для CUDNN. | * cudnn_preload_max: Число, указывающее максимальное количество предзагрузок для CUDNN. | * cudnn_preload_min: Число, указывающее минимальное количество предзагрузок для CUDNN. | * cudnn_preload_step: Число, указывающее шаг предзагрузки для CUDNN. | * cudnn_preload_scale: Число, указывающее масштаб предзагрузки для CUDNN. | * cudnn_preload_offset: Число, указывающее смещение предзагрузки для CUDNN. | * cudnn_preload_seed: Число, указывающее seed предзагрузки для CUDNN. | * cudnn_preload_rng: Строка, указывающая тип генератора случайных чисел для CUDNN. | * cudnn_preload_rng_seed: Число, указывающее seed генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state: Строка, указывающая состояние генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_size: Число, указывающее размер состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_seed: Число, указывающее seed состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng: Строка, указывающая тип генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_seed: Число, указывающее seed генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state: Строка, указывающая состояние генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_size: Число, указывающее размер состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_seed: Число, указывающее seed состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng: Строка, указывающая тип генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_seed: Число, указывающее seed генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state: Строка, указывающая состояние генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_size: Число, указывающее размер состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_seed: Число, указывающее seed состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng: Строка, указывающая тип генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_seed: Число, указывающее seed генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state: Строка, указывающая состояние генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_size: Число, указывающее размер состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_seed: Число, указывающее seed состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng: Строка, указывающая тип генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_seed: Число, указывающее seed генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state: Строка, указывающая состояние генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_size: Число, указывающее размер состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_seed: Число, указывающее seed состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng: Строка, указывающая тип генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_seed: Число, указывающее seed генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state: Строка, указывающая состояние генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_size: Число, указывающее размер состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_seed: Число, указывающее seed состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng: Строка, указывающая тип генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng_seed: Число, указывающее seed генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state: Строка, указывающая состояние генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_size: Число, указывающее размер состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_seed: Число, указывающее seed состояния генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng: Строка, указывающая тип генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng_state_rng_seed: Число, указывающее seed генератора случайных чисел для CUDNN. | * cudnn_preload_rng_state_rng_state_rng_state_rng_state_rng_state_rng | network (строка) -- имя встроенной сети для использования | допустимые значения: 'alexnet', 'googlenet', 'googlenet-12', 'resnet-18' и т. д. | по умолчанию 'googlenet' | | argv (строки) -- аргументы командной строки, переданные imageNet, | для загрузки пользовательской модели или пользовательских настроек | | Classify(. . . ) | Классифицирует RGBA изображение и возвращает индекс класса объекта и уверенность. | | Параметры: | image (капсула) -- капсула CUDA памяти | width (int) -- ширина изображения (в пикселях) | height (int) -- высота изображения (в пикселях) | | Возвращает: | (int, float) -- кортеж, содержащий индекс класса объекта и уверенность | | GetClassDesc(. . . ) | Возвращает текстовое описание класса для данного объекта. | | Параметры: | (int) -- индекс класса, между [0, GetNumClasses()] | | Возвращает: | (строка) -- текстовое описание класса объекта | | GetNumClasses(. . . ) | Возвращает количество классов объектов, которые может классифицировать эта модель. | | Параметры: (нет) | | Возвращает: | (int) -- количество классов объектов, которые поддерживает модель --------------------------------------------------------------------- ``` Затем мы будем использовать объект `imageNet` для выполнения распознавания изображений на Python или C++. ##

Далее | Классификация изображений с помощью ImageNet
Назад | Запуск контейнера Docker

© 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