Использование каталога NVIDIA NGC

Создание и развертывание приложения для распознавания лицевых масок​ с использованием коллекций из каталога​ NGC

Ахил Докка, Крис Парсонс (NVIDIA)

Оригинал статьи: здесь.

Рабочие процессы машинного обучения достаточно сложны. Создание масштабируемого ИИ-приложения – нетривиальная задача, поскольку для его разработки и развертывания нужны различные специалисты с экспертными знаниями в различных предметных областях. Специалистам по работе с данными и разработчикам необходим простой доступ к стандартным блокам ПО, таким как модели и контейнеры, которые не только безопасны и высокопроизводительны, но и имеют необходимую базовую архитектуру для разработки ИИ-моделей. После того, как приложение создано, DevOps-инженерам и системным администраторам нужны инструменты, которые помогут им развернуть эти приложения и управлять ими  —  как на локальных серверах, так и в облаке или на оконечных устройствах.

Чтобы упростить и ускорить рабочие процессы за счет облегчения доступа к ПО, оптимизированному для выполнения на GPU  —  контейнеризированным приложениям, обученным моделям, ML-фреймворкам, Helm-диаграммам и т. п.  —  в NVIDIA был разработан каталог NGC.

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

Оптимизация пользовательского пути

Запустив коллекции NGC, компания NVIDIA упростила взаимодействие с пользователем и объединила в одном месте все необходимые контейнеры, модели, образцы кода и Helm-диаграммы, чтобы не нужно было искать отдельные блоки по всему каталогу и увязывать их друг с другом.

В каталоге можно найти коллекции для решения специализированных задач, таких как автоматическое распознавание речи или классификация изображений, а также отраслевые SDK, такие как NVIDIA Clara или Transfer Learning Toolkit (TLT, набор инструментов для переноса обучения). Если нужно создать приложение для распознавания объектов, достаточно найти соответствующую коллекцию в каталоге, и все необходимые ресурсы будут в одном месте.

Предварительные условия

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

На Рисунке 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:

$ docker pull nvcr.io/nvidia/tlt-streamanalytics:v2.0_py3

На странице контейнера также есть команды, необходимые для запуска контейнера в интерактивном сеансе терминала. В этом случае 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, прилагаемый к этой статье. Чтобы получить все необходимые инструкции и код, используйте следующую команду:

$ ngc registry resource download-version "nvidia/gtcfallngcdemo:1.0.0"

Контейнер TLT поставляется с предустановленным командно-строковым интерфейсом NGC CLI для упрощения работы с моделями и кодом из каталога. Вы можете использовать командную строку, чтобы скачать пример блокнота Jupyter, прилагаемый к этой статье. Чтобы получить все необходимые инструкции и код, используйте следующую команду:

$ ngc registry resource download-version "nvidia/gtcfallngcdemo:1.0.0"

Запустите Jupyter Notebook и откройте блокнот в браузере:

$ jupyter notebook --ip 0.0.0.0 --port 8888 --allow-root

 Загрузка скриптов предобработки данных с GitHub

Так как TLT требует, чтобы набор данных имел формат KITTI, исходные данные необходимо преобразовать с использованием вспомогательных скриптов из примера. Пример доступен на странице TLT в GitHub. Выполните следующую команду:

!git clone https://github.com/NVIDIA-AI-IOT/face-mask-detection.git

Она устанавливает на компьютер вспомогательные скрипты. Следующий шаг – установка зависимостей:

# Исправляем проблему работы 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

 Загрузка наборов данных

Демо-версия приложения для распознавания лицевых масок использует четыре разных набора данных:

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

scp -r <downloaded_data> </home/workspace>

Подготовка набора данных 

Чтобы использовать наборы данных с пакетом 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 registry model list nvidia/tlt_pretrained_detectnet_v2:*

Создайте директорию для хранения предварительно обученной модели:

!mkdir -p $USER_EXPERIMENT_DIR/pretrained_resnet18/

Далее скачайте модель из каталога NGC:

!ngc registry model download-version nvidia/tlt_pretrained_detectnet_v2:resnet18 \
    --dest $USER_EXPERIMENT_DIR/pretrained_resnet18

Цикл “обучение  —  редукция  —   повторное обучение” для модели распознавания лицевых масок в TLT 

Обучение модели для распознавания лицевых масок проходит в три этапа:

  1. Применение TLT для дообучения предобученной модели из каталога NGC с использованием пользовательского набора данных;
  2. Редукция модели для удаления ненужных весов;
  3. Повторное обучение редуцированной модели для обеспечения необходимой точности

Подготовка файла спецификации для обучения модели

Для запуска процесса дообучения обязательным шагом является подготовка соответствующего файла спецификации для 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:

workspace/detectnet_v2/specs/detectnet_v2_train_resnet18_kitti.txt

 

Параметр Значение
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, изменив следующие параметры:

workspace/detectnet_v2/specs/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 необходимо обновить файлы конфигурации, чтобы они соответствовали заново обученной модели. Обновите следующие параметры:

 /workspace/face-mask-detection/ds_configs/config_infer_primary_masknet_gpu.txt
  • 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 plugin install https://github.com/chartmuseum/helm-push.git

Подключение к реестру 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:

!helm search repo video-analytics-demo

Выберите диаграмму в каталоге NGC и извлеките ее в свое локальное окружение. Благодаря пользовательскому интерфейсу NGC, сделать это очень просто. По аналогии с тем, как извлекается модель или контейнер, воспользуйтесь командой «fetch» в окне пользователя (Рисунок 5).

Рисунок 5. Helm-диаграмма DeepStream в каталоге NGC

Доработка диаграммы для использования модели  

После того, как диаграмма скачана из каталога NGC, ее нужно модифицировать для работы с моделью распознавания масок. Для этого:

  1. Переименуйте диаграмму для частного реестра;
  2. Распакуйте архив с диаграммой;
  3. Отредактируйте диаграмму, чтобы она ссылалась на модель;
  4. Упакуйте диаграмму.

В файле конфигурации  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:

!helm package video-analytics-demo

Следующая команда помещает диаграмму в частный реестр:

!helm push ds-face-mask-detection-1.0.0.tgz ngc-privatereg

Для развертывания можно использовать гибридную облачную платформу NVIDIA Fleet Command или запустить команду helm install. После того как приложение развернуто и подключено к RTSP-потоку камеры, оно в режиме реального времени может определять, надета на человеке маска или нет.

Выводы 

В этой статье от начала и до конца показан процесс, как с помощью коллекций NGC можно создать приложение для распознавания лиц, используя такие стандартные блоки, как контейнеры, предварительно обученные модели и Helm-диаграммы. Вы также можете использовать другие коллекции из каталога NGC для разработки собственных ИИ-приложений, адаптированных под конкретные нужды.

Для более подробной информации о том, как начать работу над вашим собственным приложением для распознавания масок, см. блокнот NGC GTC Fall 2020 Notebook.ipynb