Создание и развертывание приложения для распознавания лицевых масок с использованием коллекций из каталога NGC
Ахил Докка, Крис Парсонс (NVIDIA)
Оригинал статьи: здесь.
Рабочие процессы машинного обучения достаточно сложны. Создание масштабируемого ИИ-приложения – нетривиальная задача, поскольку для его разработки и развертывания нужны различные специалисты с экспертными знаниями в различных предметных областях. Специалистам по работе с данными и разработчикам необходим простой доступ к стандартным блокам ПО, таким как модели и контейнеры, которые не только безопасны и высокопроизводительны, но и имеют необходимую базовую архитектуру для разработки ИИ-моделей. После того, как приложение создано, DevOps-инженерам и системным администраторам нужны инструменты, которые помогут им развернуть эти приложения и управлять ими — как на локальных серверах, так и в облаке или на оконечных устройствах.
Чтобы упростить и ускорить рабочие процессы за счет облегчения доступа к ПО, оптимизированному для выполнения на GPU — контейнеризированным приложениям, обученным моделям, ML-фреймворкам, Helm-диаграммам и т. п. — в NVIDIA был разработан каталог NGC.
В этой статье показано, как можно использовать каталог NGC и его основные элементы, такие как коллекции, частный реестр NGC и стандартные блоки для работы с ИИ, чтобы создать и развернуть приложение для распознавания лицевых масок в качестве примера организации рабочего процесса — от разработки до развертывания.
Оптимизация пользовательского пути
Запустив коллекции NGC, компания NVIDIA упростила взаимодействие с пользователем и объединила в одном месте все необходимые контейнеры, модели, образцы кода и Helm-диаграммы, чтобы не нужно было искать отдельные блоки по всему каталогу и увязывать их друг с другом.
В каталоге можно найти коллекции для решения специализированных задач, таких как автоматическое распознавание речи или классификация изображений, а также отраслевые SDK, такие как NVIDIA Clara или Transfer Learning Toolkit (TLT, набор инструментов для переноса обучения). Если нужно создать приложение для распознавания объектов, достаточно найти соответствующую коллекцию в каталоге, и все необходимые ресурсы будут в одном месте.
Предварительные условия
До начала разработки приложения необходимо выполнить следующие действия:
- Настроить экземпляр GPU в одном из вариантов:
- На локальном сервере;
- Через поставщика услуг облачных вычислений (Cloud Service Provider, CSP);
- Установить и настроить среду выполнения Docker;
- Установить и настроить интерфейс командной строки NGC CLI.
На Рисунке 1 приведен высокоуровневый обзор рабочего процесса для воссоздания всего примера. Процесс начинается с поиска необходимой коллекции NGC, далее следует загрузка соответствующих моделей и контейнеров, дообучение и оптимизация модели, а затем развертывание приложения с помощью Helm-диаграмм.
Рисунок 1. Упрощенный процесс работы с коллекциями NGC
Выгрузка и запуск контейнера TLT
Как уже описано выше, коллекции NGC превращают разработку ИИ в тщательно отлаженный процесс. Все программные средства для глубокого обучения, соответствующие модели и образцы кода собраны в одном удобном месте, чтобы можно было легко и быстро найти все необходимое.
Коллекция TLT содержит подробное описание, что такое TLT, как пользоваться этим набором инструментов и с чего начать работу. На вкладке Entities (“Сущности”) также перечислены все элементы NGC, которые могут помочь при работе с TLT: контейнеры, модели, Helm-диаграммы и прочие ресурсы.
Первый шаг – выгрузить контейнер TLT из NGC на экземпляр GPU. Для более подробной информации об установке и настройке Docker см. раздел Orientation and setup («Начало работы и установка»). Чтобы получить более подробную информации о самом контейнере TLT, на вкладке Entities в коллекции TLT выберите контейнер Transfer Learning Toolkits For Streaming Video Analytics («TLT для аналитики потокового видео»).
На странице контейнера есть вся необходимая информация, включая зависимости и вводную документацию. В области, содержащей метаданные верхнего уровня, вы найдете блок кода с командой Docker, которую необходимо выполнить, чтобы выгрузить этот контейнер на ваш экземпляр GPU.
Рисунок 2. Страница TLT для аналитики потокового видео в каталоге NGC
Скопируйте и вставьте команду Docker в окно терминала, чтобы скачать на свой компьютер последнюю версию контейнера TLT, оптимизированного для выполнения на GPU:
На странице контейнера также есть команды, необходимые для запуска контейнера в интерактивном сеансе терминала. В этом случае HTTP-запросы перенаправляются с порта 80:8888 в Jupyter Notebook, а на экземпляре GPU монтируется локальный каталог с доступом к набору данных для переноса обучения:
$ docker run --gpus all -it -v "/path/to/dir/on/host":"/path/to/dir/in/docker" \
-p 80:8888 nvcr.io/nvidia/tlt-streamanalytics:v2.0_py3 /bin/bash
Контейнер TLT поставляется с предустановленным командно-строковым интерфейсом NGC CLI для упрощения работы с моделями и кодом из каталога. Вы можете использовать командную строку, чтобы скачать пример блокнота Jupyter, прилагаемый к этой статье. Чтобы получить все необходимые инструкции и код, используйте следующую команду:
Контейнер TLT поставляется с предустановленным командно-строковым интерфейсом NGC CLI для упрощения работы с моделями и кодом из каталога. Вы можете использовать командную строку, чтобы скачать пример блокнота Jupyter, прилагаемый к этой статье. Чтобы получить все необходимые инструкции и код, используйте следующую команду:
Запустите Jupyter Notebook и откройте блокнот в браузере:
Загрузка скриптов предобработки данных с GitHub
Так как TLT требует, чтобы набор данных имел формат KITTI, исходные данные необходимо преобразовать с использованием вспомогательных скриптов из примера. Пример доступен на странице TLT в GitHub. Выполните следующую команду:
Она устанавливает на компьютер вспомогательные скрипты. Следующий шаг – установка зависимостей:
# Исправляем проблему работы pip на Ubuntu
!curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
!python3 get-pip.py --force-reinstall
# Устанавливаем зависимости
!cd face-mask-detection && python3 -m pip install -r requirements.txt
Загрузка наборов данных
Демо-версия приложения для распознавания лицевых масок использует четыре разных набора данных:
- Лица с масками:
- Набор данных Kaggle Mask
- MAFA – MAsked FAces (пароль: 4fz6)
- Лица без масок:
Для корректной работы примера необходимо, чтобы расположение загруженных наборов соответствовало определенной структуре дерева данных. После того, как наборы данных загружены на компьютер в соответствии с необходимой структурой, измените следующую команду, чтобы скопировать данные на GPU-кластер:
Подготовка набора данных
Чтобы использовать наборы данных с пакетом TLT, их нужно сначала преобразовать в формат KITTI. Скачанный ранее репозиторий GitHub содержит вспомогательные скрипты для преобразования каждого из четырех наборов данных.
Вот шаблон команды, которую нужно для этого выполнить:
python3 data2kitti.py --kaggle-dataset-path <kaggle dataset absolute directory path> \
--mafa-dataset-path <mafa dataset absolute directory path> \
--fddb-dataset-path < FDDB dataset absolute directory path> \
--widerface-dataset-path <widerface dataset absolute directory path> \
--kitti-base-path < Out directory for storing KITTI formatted annotations > \
--category-limit < Category Limit for Masked and No-Mask Faces > \
--tlt-input-dims_width < tlt input width > \
--tlt-input-dims_height <tlt input height > \
--train < for generating training dataset >
Задайте полные (абсолютные) пути. Если соблюдена структура из предыдущей команды SCP, то больше ничего менять не потребуется. Свойства TLT_INPUT_DIMS зависят от модели; в примере используются значения по умолчанию для модели DetectNet-V2. Для более подробной информации см. Распознавание объектов с помощью DetectNetv2. Найдите нужную архитектуру модели и обновите значения в соответствии с ней.
Преобразование данных для модели DetectNet_v2
- Размер входных данных: C * W * H (где C = 1 или 3, W > =960, H >=544 и W, H кратны 16);
- Формат изображений: JPG, JPEG, PNG;
- Формат меток: KITTI detection.
Чтобы преобразовать наборы данных в формат KITTI, воспользуйтесь следующими командами:
!python3 /workspace/face-mask-detection/data2kitti.py --kaggle-dataset-path $KAGGLE_DATASET_PATH \
--mafa-dataset-path $MAFA_DATASET_PATH \
--fddb-dataset-path $FDDB_DATASET_PATH \
--widerface-dataset-path $WIDERFACE_DATASET_PATH \
--kitti-base-path $KITTI_BASE_PATH \
--category-limit $CATEGORY_LIMIT \
--tlt-input-dims_width $TLT_INPUT_DIMS_WIDTH\
--tlt-input-dims_height $TLT_INPUT_DIMS_HEIGHT \
--train
Подготовка файла TFrecords из набора данных формата KITTI
После обработки данных необходимо сформировать файл TFRecords — это будет последним шагом перед обучением модели. Следующие команды обновляют файл спецификации TFRecords, чтобы создать файлы TFRecords из набора данных формата KITTI с помощью команды tlt-dataset-convert.
Для начала нужно переместить загруженные с GitHub шаблоны файлов спецификаций в директорию /Spec:
!mkdir detectnet_v2
!mkdir $SPECS_DIR
!mv face-mask-detection/tlt_specs/* $SPECS_DIR
!ls $SPECS_DIR
Далее отредактируйте файл $SPECS_DIR/detectnet_v2_tfrecords_kitti_trainval.txt, чтобы он содержал путь к преобразованным изображениям. Следующая команда обновляет файл спецификации, чтобы он соответствовал сценарию использования для распознавания лицевых масок:
%env KITTI_CONFIG=kitti_config {\
root_directory_path: "/workspace/converted_datasets/train/"\
image_dir_name: "images"\
label_dir_name: "labels"\
image_extension: ".jpg"\
partition_mode: "random"\
num_partitions: 2\
val_split: 20\
num_shards: 10 }
Теперь можно использовать функцию преобразования набора данных TLT, чтобы сгенерировать файлы TFRecords, необходимые для дообучения модели:
!tlt-dataset-convert -d $SPECS_DIR/detectnet_v2_tfrecords_kitti_trainval.txt \
-o $DATA_DOWNLOAD_DIR/tfrecords/kitti_trainval/
Загрузка предварительно обученной модели
Подготовка почти закончена. Для дообучения с использованием TLT выберите в каталоге NGC последнюю версию модели для распознавания объектов или модели DetectNet.
Стоит отметить, что в модели DetectNet_v2 предполагается нормализация входных данных в диапазоне [0, 1] и порядок каналов RGB. Поэтому для наилучшего результата загрузите модели, в названии которых есть пометка *_detectnet_v2. Все остальные модели предполагают предобработку входных данных путем вычитания среднего и расположение каналов в порядке BGR, поэтому использование их предобученных весов может привести к неоптимальному выполнению задачи.
Командно-строковой интерфейс NGC CLI можно использовать для вывода списка всех моделей DetectNet в каталоге:
Создайте директорию для хранения предварительно обученной модели:
Далее скачайте модель из каталога NGC:
!ngc registry model download-version nvidia/tlt_pretrained_detectnet_v2:resnet18 \
--dest $USER_EXPERIMENT_DIR/pretrained_resnet18
Цикл “обучение — редукция — повторное обучение” для модели распознавания лицевых масок в TLT
Обучение модели для распознавания лицевых масок проходит в три этапа:
- Применение TLT для дообучения предобученной модели из каталога NGC с использованием пользовательского набора данных;
- Редукция модели для удаления ненужных весов;
- Повторное обучение редуцированной модели для обеспечения необходимой точности
Подготовка файла спецификации для обучения модели
Для запуска процесса дообучения обязательным шагом является подготовка соответствующего файла спецификации для TLT. Файл спецификации содержит следующую информацию:
- TFRecords для обучающих наборов данных;
- Чтобы использовать только что созданный файл TFRecords, обновите в файле спецификации параметр dataset_config;
- Обновите число групп (fold number), на которые будут разделяться данные для оценки качества модели. В случае произвольного разделения данных укажите 0;
- В случае упорядоченного разделения можно использовать любое число групп, полученное при преобразовании наборов данных;
- Ссылки на предварительно обученные модели;
- Параметры для динамического дополнения данных (on-the-fly data augmentation);
- Прочие (гипер)параметры обучения, такие как размер пакета (batch size), количество эпох (number of epochs), скорость обучения и т.д.
Обновите файл спецификации detectnet_v2_train_resnet18_kitti.txt, чтобы он содержал путь к весам модели, загруженной из каталога NGC:
Параметр | Значение |
---|---|
tfrecords_path | /workspace/data/tfrecords/kitti_trainval/* |
image_directory_path | /workspace/converted_datasets/train |
pretrained_model_file |
/workspace/detectnet_v2/pretrained_resnet18/tlt_pretrained_detectnet_v2_vresnet18/resnet18.hdf5 |
Таблица 1. Обновленные параметры файла detectnet_v2_train_resnet18_kitti.txt
Запуск обучения в TLT
Чтобы начать обучение модели, необходимо предоставить следующие данные:
- Файл спецификации обучения (рассмотрено выше);
- Местоположение конечной директории для повторно обученной модели;
- Установленный ранее ключ API (см. блокнот);
- Тип нейронной сети, используемой для обучения.
Обучение может занять несколько часов. Пример, описанный в этой статье, выполнялся на одном GPU; время обучения можно существенно сократить за счет использования нескольких GPU или кластерных систем на их базе.
!tlt-train detectnet_v2 -e $SPECS_DIR/detectnet_v2_train_resnet18_kitti.txt \
-r $USER_EXPERIMENT_DIR/experiment_dir_unpruned \
-k $KEY \
-n resnet18_detector
Оценка обученной модели
После того, как перенос обучения завершен, можно использовать TLT для оценки качества модели на тестовых данных. Параметры команды:
- -e — экспериментальные данные из файла спецификации;
- -m — повторно обученная модель;
- -k — установленный ранее ключ API.
!tlt-train detectnet_v2 -e $SPECS_DIR/detectnet_v2_train_resnet18_kitti.txt \
-r
$USER_EXPERIMENT_DIR/experiment_dir_unpruned \
-k $KEY \
-n resnet18_detector
Редукция обученной модели
Редукция модели является необходимым шагом, так как она позволяет оптимизировать модель и избавиться от ненужных весов, минимизируя тем самым время выполнения инференса, что принципиально важно в случае работы с потоковым видео. Параметры команды:
- -m — повторно обученная модель, готовая к редукции;
- -eq — критерий выравнивания, применимый для моделей ResNet и MobileNet;
- -pth — порог отсечения малозначащих весов. Для моделей detectnet_v2 можно начать с 0.01;
- -k — ключ для сохранения/загрузки модели;
- -o — конечная директория для редуцированной модели.
Следующий код выполняет редукцию модели:
!tlt-prune -m $USER_EXPERIMENT_DIR/experiment_dir_unpruned/weights/resnet18_detector.tlt \
-o $USER_EXPERIMENT_DIR/experiment_dir_pruned/resnet18_nopool_bn_detectnet_v2_pruned.tlt \
-eq union \
-pth 0.8 \
-k $KEY
Повторное обучение редуцированной модели
Редуцированную нейронную сеть необходимо повторно обучить, чтобы скомпенсировать потерю точности, связанную с редукцией. Для начала нужно обновить файл с экспериментальными данными и в файле model_config установить для параметра load_graph значение “true”. Затем необходимо обновить файл спецификации обучения, чтобы использовать предобученные веса из редуцированной модели.
Если модель демонстрирует снижение усредненной средней точности (mAP), это может означать, что после первоначального обучения модель редуцировали слишком сильно. Попробуйте понизить порог отсечения в предыдущем шаге, уменьшая таким образом долю отсекаемых весов, и используйте новую модель для повторного обучения.
Далее, нужно отредактировать файл detectnet_v2_retrain_resnet18_kitti.txt, изменив следующие параметры:
Параметр | Значение |
---|---|
tfrecords_path | /workspace/data/tfrecords/kitti_trainval/* |
image_directory_path | /workspace/converted_datasets/train |
pretrained_model_file |
/workspace/detectnet_v2/experiment_dir_pruned/resnet18_nopool_bn_detectnet_v2_pruned.tlt |
Таблица 2. Новые значения параметров для файла detectnet_v2_retrain_resnet18_kitti.txt.
Для повторного обучения редуцированной модели используйте следующую команду:
# Повторное обучение с использованием предобученных весов из редуцированной модели
!tlt-train detectnet_v2 -e $SPECS_DIR/detectnet_v2_retrain_resnet18_kitti.txt \
-r $USER_EXPERIMENT_DIR/experiment_dir_retrain \
-k $KEY \
-n resnet18_detector_pruned
Оценка редуцированной модели
Для оценки качества редуцированной и повторно обученной модели можно воспользоваться командой tlt-evaluate и изучить результаты распознавания лиц:
!tlt-evaluate detectnet_v2 -e $SPECS_DIR/detectnet_v2_retrain_resnet18_kitti.txt \
-m $USER_EXPERIMENT_DIR/experiment_dir_retrain/weights/resnet18_detector_pruned.tlt \
-k $KEY
Экспорт модели TLT для дальнейшего использования
Последний шаг – это экспортировать модель из TLT для выполнения инференса с помощью фреймворка DeepStream, который обеспечит ее практическое использование в приложении распознавания масок. Используйте утилиту tlt-export, чтобы экспортировать веса:
!mkdir -p $USER_EXPERIMENT_DIR/experiment_dir_final_pruned
# Удаляем предыдущую копию etlt, если она существует
import os
output_file=os.path.join(os.environ['USER_EXPERIMENT_DIR'],
"experiment_dir_final/resnet18_detector_pruned.etlt")
if os.path.exists(output_file):
os.system("rm {}".format(output_file))
!tlt-export detectnet_v2 \
-m
$USER_EXPERIMENT_DIR/experiment_dir_retrain/weights/resnet18_detector_pruned.tlt \
-o
$USER_EXPERIMENT_DIR/experiment_dir_final_pruned/resnet18_detector_pruned.etlt \
-k $KEY
Подготовка файлов конфигурации DeepStream
Для успешного использования модели в составе приложения NVIDIA DeepStream необходимо обновить файлы конфигурации, чтобы они соответствовали заново обученной модели. Обновите следующие параметры:
- tlt-encoded-model — относительный путь к модели, развернутой в контейнере DeepStream. Если вы следуете инструкциям в блокноте, правильное значение этого параметра — ./resnet18_detector_pruned.etlt;
- labelfile-path — относительный путь к файлу меток для вашего блокнота: ./labels.txt;
- input-dims — параметр должен соответствовать установленным ранее значениям: 960×544;
- model-engine — путь, аналогичный пути к файлу модели, но с расширением .engine;
- network-mode — режим работы нейронной сети. Так как используется потоковое видео, следует установить значение 2.
Вносить какие-либо изменения в файл меток не нужно, так как вы используете те же классы, что и в примере с GitHub:
- mask — положительный класс, на лицо надета маска;
- no-mask — отрицательный класс, человек на видео без маски;
- default — значение по умолчанию для модели DetectNet.
Вам также понадобится файл конфигурации DeepStream, который доступен в самом контейнере DeepStream, но так как для развертывания приложения используется Helm, вам нужно будет создать этот файл самостоятельно. Пример можно скачать с GitHub и доработать для своего сценария использования.
Для настройки DeepStream потребуется установить два параметра:
- RTSP Stream Location—URL-адрес видеотрансляции;
- DeepStream Inference Config—путь к конфигурации инференса обновленной модели.
Так как конфигурация уже была обновлена ранее, больше никаких действий не требуется.
На этом шаге мы использовали TLT, чтобы дообучить модель DetectNet для распознавания в потоковом видео людей, носящих маски. Финальный этап нашего рабочего процесса — развертывание приложения с использованием Helm-диаграммы.
Публикация модели в частном реестре NGC
Итоговую модель можно загрузить в частный реестр NGC, чтобы остальные члены вашей команды могли воспользоваться ею для своих нужд. Однако это не является обязательным требованием, и вы также можете развернуть модель из собственного внутреннего репозитория. После окончания загрузки вы увидите свою модель включенной в частный реестр NGC (Рисунок 3).
Рисунок 3. Модель загружена в частный реестр NGC
На Рисунке 4 представлены версии модели в NGC.
Рисунок 4. Список различных версий модели на вкладке Version History
Упаковка приложения с помощью Helm
Каталог NGC содержит полноценный реестр Helm, который можно использовать для управления пакетами Helm, а также каталог доступных Helm-диаграмм. Вы можете доработать диаграмму для DeepStream, представленную в каталоге NGC, чтобы разработать схему упаковки и развертывания приложения для распознавания масок.
Скачивание и установка Helm и надстроек
Во-первых, нужно скачать и установить Helm в вашем окружении. Это позволит скачивать и публиковать диаграммы в частном реестре NGC. Необходимо установить следующие компоненты:
- Helm — инструмент для управления диаграммами;
- Helm Push Plugin — надстройка для публикации диаграмм в NGC.
Для установки Helm воспользуйтесь следующими командами:
!curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
!chmod 700 get_helm.sh
!./get_helm.sh
Для установки надстройки используйте команду:
Подключение к реестру Helm в NGC
В документации к каталогу NGC представлены пошаговые инструкции для настройки рабочей среды Helm. Для аутентификации можно использовать ключ API, полученный ранее через NGC CLI. Необходимо добавить два репозитория: общедоступный каталог, чтобы можно было получить исходную диаграмму для DeepStream, и частный реестр NGC для коллективного использования и доработки диаграммы.
Авторизуйтесь в каталоге NGC и в частном реестре:
!helm repo add ngc-catalog https://helm.ngc.nvidia.com/nvidia
# Отредактируйте имя/URL-адрес репозитория, чтобы они соответствовали вашему частному реестру
!helm repo add ngc-privatereg https://helm.ngc.nvidia.com/ngcvideos --username=\$oauthtoken --password=$NGC_KEY
Скачивание Helm-диаграммы DeepStream
Скачайте диаграмму DeepStream из каталога NGC и доработайте ее для сценария распознавания масок. Чтобы найти эту диаграмму в каталоге NGC, воспользуйтесь интерфейсом командной строки Helm:
Выберите диаграмму в каталоге NGC и извлеките ее в свое локальное окружение. Благодаря пользовательскому интерфейсу NGC, сделать это очень просто. По аналогии с тем, как извлекается модель или контейнер, воспользуйтесь командой «fetch» в окне пользователя (Рисунок 5).
Рисунок 5. Helm-диаграмма DeepStream в каталоге NGC
Доработка диаграммы для использования модели
После того, как диаграмма скачана из каталога NGC, ее нужно модифицировать для работы с моделью распознавания масок. Для этого:
- Переименуйте диаграмму для частного реестра;
- Распакуйте архив с диаграммой;
- Отредактируйте диаграмму, чтобы она ссылалась на модель;
- Упакуйте диаграмму.
В файле конфигурации values.yaml отредактируйте следующие параметры из блока ngcModel, чтобы связать диаграмму с моделью распознавания лиц:
- getModel — команда NGC CLI для загрузки модели из частного реестра;
- Name — наименование модели;
- Filename — имя файла модели;
- modelConfig — файл конфигурации модели.
Отредактируйте параметр camera, чтобы добавить в файл конфигурации ссылку на ваш видеопоток:
- camera1 — ссылка на RTSP-поток камеры.
Можно также настроить дополнительные камеры, добавляя новые строки, например, camera2 && camera3 и т.д.
В нашем примере мы указываем в файле values.yaml следующие значения параметров:
Параметр | Значение |
---|---|
getModel |
wget --content-disposition https://api.ngc.nvidia.com/v2/models/ngcvideos/facemaskdetector/versions/maskdetect-inference/zip -O facemaskdetector_maskdetect-inference.zip |
name | facemaskdetector |
filename | resnet18_detector_unpruned.etlt |
modelConfig |
/opt/nvidia/deepstream/deepstream5.0/samples/configs/tlt_pretrained_models/config_infer_primary_detectnet_v2.txt |
camera1 | rtsp://admin:password@IPAddress/Streaming/Channels/101 |
Таблица 3. Обновленные значения параметров для файла values.yaml
Чтобы посмотреть, как выглядит готовый файл values.yaml, запустите код из примера.
Далее обновите файл chart.yaml, чтобы актуализировать наименование, описание и версию измененной диаграммы:
- name — наименование упакованной диаграммы;
- description — краткое описание;
- version — семантическая версия (SemVer) диаграммы.
Обновленные значения должны быть следующими:
Параметр | Значение |
---|---|
name | ds-face-mask-detection |
description | A Helm chart for DeepStream face mask detection |
version | 1.0.0 |
Таблица 4. Обновленные значения параметров для файла chart.yaml
Рисунок 6. Доработанный файл Chart.yaml, который извлекает Helm-диаграмму DeepStream из каталога NGC
Публикация диаграммы в частном реестре NGC
После завершения редактирования параметров диаграммы ее можно упаковать и опубликовать в частном реестре. Первый шаг – упаковка диаграммы с помощью команды helm package:
Следующая команда помещает диаграмму в частный реестр:
Для развертывания можно использовать гибридную облачную платформу NVIDIA Fleet Command или запустить команду helm install. После того как приложение развернуто и подключено к RTSP-потоку камеры, оно в режиме реального времени может определять, надета на человеке маска или нет.
Выводы
В этой статье от начала и до конца показан процесс, как с помощью коллекций NGC можно создать приложение для распознавания лиц, используя такие стандартные блоки, как контейнеры, предварительно обученные модели и Helm-диаграммы. Вы также можете использовать другие коллекции из каталога NGC для разработки собственных ИИ-приложений, адаптированных под конкретные нужды.
Для более подробной информации о том, как начать работу над вашим собственным приложением для распознавания масок, см. блокнот NGC GTC Fall 2020 Notebook.ipynb