NGC 컬렉션에서 마스크 착용 감지 애플리케이션 구축⋅배포하기

by NVIDIA Korea

AI의 워크플로우는 복잡합니다. AI 애플리케이션 구축은 결코 만만치 않은 일이죠. 규모에 맞는 애플리케이션의 개발과 배포에는 다양한 이해당사자들이 참여해 분야별 전문성을 발휘해야 합니다. 데이터 사이언티스트와 개발자는 모델이나 컨테이너 같은 소프트웨어 빌딩블록에 쉽게 액세스할 수 있어야 하는데, 이때의 빌딩블록들은 보안성과 우수한 성능뿐 아니라 해당 AI 모델의 구축에 필요한 기본 아키텍처 또한 갖추고 있어야 합니다. 일단 애플리케이션이 구축되면 DevOps와 IT 관리자는 온프레미스, 클라우드, 엣지에 위치한 여러 기기에서 해당 애플리케이션의 원활한 배포와 관리를 도와줄 툴이 필요하게 됩니다.

NVIDIA가 구축한 NGC Catalog는 컨테이너, 사전 훈련된 모델, 애플리케이션 프레임워크, AI 애플리케이션 구축에 필요한 헬름 차트(Helm chart) 등의 GPU 최적화 소프트웨어에 대한 접근성을 높여 AI 워크플로우의 간소화와 가속화를 지원합니다.

이번 포스팅에서는 NGC catalog와 그 기본 기능들, 예를 들어 각종 컬렉션과 NGC Private Registry, AI 빌딩블록 등의 핵심 기능을 소개하겠습니다. 마스크 착용 감지 애플리케이션의 구축과 배포를 예제로 삼아 개발에서 배포까지의 파이프라인을 살펴보도록 하겠습니다.

사용자 여정의 간소화

NVIDIA NGC Collections가 출시되면서 사용자 경험 일체가 간소화되고 관련 컨테이너, 모델, 코드, 헬름 차트가 한곳에 통합되어 이제 여러분은 NGC catalog에서 다양한 빌딩블록을 일일이 찾아내어 조정할 필요가 없습니다.

Video 1. NGC Collections.

NGC Collections에서는 자동 음성 인식이나 이미지 분류 등의 특수 워크로드, NVIDIA Clara나 Transfer Learning Toolkits(TLT) 같은 산업용 SDK들을 찾을 수 있습니다. 오브젝트 감지용 애플리케이션을 구축하려는 경우 NGC catalog에서 해당 collection을 검색하면 관련 에셋 모두를 한자리에서 만나보실 수 있습니다.

필수요건

먼저, 애플리케이션 구축에 앞서 완료해야 할 작업의 체크리스트는 다음과 같습니다.

Figure 1은 전체 예제를 재생성하는 워크플로우 전반을 보여줍니다. NGC Collections로 시작하여 관련 모델과 컨테이너를 다운로드한 후 추론을 위한 재훈련과 최적화를 거쳐 헬름 차트를 활용해 추론용으로 배포합니다.

0208 블로그 figure 1
Figure 1. NGC Collections로 간소화한 워크플로우.

TLT 컨테이너 가져오기와 시작하기

앞서 설명한 바와 같이 NGC Collections는 AI의 구축을 매우 원활하게 해줍니다. 딥 러닝 소프트웨어 애플리케이션, 관련 모델, 코드 샘플 전체를 사용이 간편한 단일 위치에 큐레이트하여 작업에 필요한 모든 것을 빠르고 쉽게 찾을 수 있습니다.

TLT collection에는 TLT의 정의, 작동 방식, 시작 방법 등이 상세히 설명되어 있습니다. 또한 Entities 탭에는 TLT를 사용하는 작업에 도움이 되는 컨테이너, 모델, 헬름 차트, 기타 리소스 등의 NGC 컨텐츠 목록이 나열됩니다.

첫 번째 단계는 NGC에서 GPU 인스턴스로 TLT 컨테이너를 가져오는 것입니다. 도커(Docker)의 설치와 구성에 대한 더 자세한 정보는 Orientation and setup을 참고하십시오. TLT 컨테이너에 대한 더 자세한 정보를 위해서는 TLT collection의 Entities 탭에서 Transfer Learning Toolkits For Streaming Video Analytics 컨테이너를 선택합니다.

해당 컨테이너 페이지에는 시작에 필요한 dependency와 documentation 등의 모든 정보가 제공되어 있습니다. 최상위 메타데이터 영역의 코드 블록에는 이 컨테이너를 GPU 인스턴스로 가져오는 데 필요한 도커 명령이 들어 있습니다.

0208 블로그 figure 2
Figure 2. 동영상 스트리밍용 NGC catalog의 TLT 페이지.

이 도커 명령을 복사하여 여러분의 terminal session에 붙여넣기 하면 GPU 최적화 TLT 컨테이너의 최신 버전이 여러분의 기기에 확보됩니다.

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

컨테이너의 overview 페이지는 interactive terminal session에서 컨테이너를 시작하는 데 필요한 명령어도 제공합니다. Jupyter notebook 사용 시 Http 요청은 port 80:8888에서 전달됩니다. transfer learning용 데이터세트에 액세스할 수 있는 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와 함께 사전 설치되어 있어 NGC catalog의 모델이나 코드를 이용하는 작업을 간소화합니다. 이 CLI를 사용하면 본 포스팅이 소개하는 예제 notebook을 가져오기 할 수 있습니다. 다음의 명령을 통해 작업에 필요한 지침과 코드 일체가 함께 제공됩니다.

$ 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포맷이므로 예제에서 helper script를 가져와 raw data 일부를 변환해야 합니다. 예제는 TLT GitHub 페이지에서 확인할 수 있습니다. 다음의 명령을 실행하십시오.

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

이제 helper script가 기기에 다운로드되었습니다. 다음 단계는 dependency 설치입니다.

#Fixes the fact that pip doesn't work in Ubuntu right now...

!curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

!python3 get-pip.py --force-reinstall

# Install dependencies

!cd face-mask-detection && python3 -m pip install -r requirements.txt

데이터세트 다운로드

마스크 착용 감지 demo는 4개의 데이터세트를 활용합니다.

다운로드된 데이터세트가 특정한 data tree 구조를 갖추고 있어야만 예제가 구동됩니다. 구조상 요건을 충족하는 적합한 데이터세트를 기기에 다운로드했다면 다음의 명령을 수정하여 해당 데이터세트를 여러분의 GPU cluster에 복사합니다.

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

데이터세트 준비

데이터세트를 TLT와 함께 사용하려면 KITTI 형식으로 변환해야 합니다. 앞서 다운로드한 GitHub 저장소는 4개의 데이터세트 각각을 변환하는 helper script를 제공합니다.

실행할 템플릿 명령은 다음과 같습니다.

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의 기본값을 사용합니다. 더 자세한 내용은 Object Detection with DetectNetv2를 참고하십시오. 여러분에게 필요한 모델 아키텍처를 검색하고 그에 따른 값을 업데이트합니다.

DetectNet_v2

  • Input size: C * W * H (where C = 1 또는 3, W > =960, H >=544이며 W, H는 16의 배수).
  • Image format: JPG, JPEG, PNG
  • Label format: 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

TF records 형태의 KITTI 형식 데이터세트 준비하기

처리를 마친 데이터로 TFRecords를 생성해야 하며, 이는 훈련 프로세스 작업으로 가는 마지막 관문입니다. 다음의 명령어로 TFRecords spec file을 업데이트하여 KITTI 형식의 데이터세트를 수용하고 tlt-dataset-convert를 사용하는 TFRecords를 생성하도록 합니다.

먼저, GitHub에서 다운로드한 template spec file을 /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 파일을 편집하여 변환된 이미지를 지정합니다. 이 명령은 specs file이 마스크 착용 감지 사용사례에 부합하도록 업데이트해줍니다.

%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 데이터세트 변환 기능을 사용하여 모델 재훈련에 필요한 TFRecord 파일을 생성합니다.

!tlt-dataset-convert -d $SPECS_DIR/detectnet_v2_tfrecords_kitti_trainval.txt \

                     -o $DATA_DOWNLOAD_DIR/tfrecords/kitti_trainval/

사전훈련된 모델 다운로드하기

이제 거의 다 됐습니다! NGC catalog에서 TLT로 재훈련을 진행하기 위해 최신 Object Detection 모델 또는 DetectNet 모델을 가져오기 하십시오.

여기서 주의할 것은 DetectNet_v2의 경우 0-1의 input이 RGB 방식의 input channel로 정규화 한다는 점입니다. 따라서 최적의 결과를 위해서는 이름에 *_detectnet_v2가 들어가는 모델을 다운로드하십시오. 다른 모델들은 mean subtraction과 RGB 방식 input channel을 통한 input 전처리를 기대하므로 이들을 pretrained weights로 사용하면 성능이 저하될 수 있습니다.

NGC CLI를 사용하면 NGC catalog 내 모든 DetectNet 모델들을 나열할 수 있습니다.

!ngc registry model list nvidia/tlt_pretrained_detectnet_v2:*

사전 훈련된 모델을 저장할 디렉터리를 만드십시오.

!mkdir -p $USER_EXPERIMENT_DIR/pretrained_resnet18/

이제 NGC catalog에서 모델을 다운로드합니다.

!ngc registry model download-version nvidia/tlt_pretrained_detectnet_v2:resnet18 \

    --dest $USER_EXPERIMENT_DIR/pretrained_resnet18

TLT로 마스크 감지기의 훈련-프루닝-훈련 진행하기

마스크 착용 감지기의 훈련은 3단계의 프로세스로 구성됩니다.

  1. NGC catalog에서 사전 훈련된 모델을 transfer learning과 미리 준비한 custom dataset를 활용하여 재훈련.
  2. 해당 모델의 불필요한 weights를 제거하기 위한 프루닝(pruning).
  3. 프루닝 완료 모델의 정확도 보장을 위한 재훈련.

training specs file 제공하기

TLT에 training spec file을 제공하는 것은 재훈련 프로세스 착수에 필수적입니다. training specs file에는 다음의 정보가 포함됩니다.

  • 훈련 데이터세트용 TFRecords
    • 새롭게 생성된 TFRecords를 사용하려면 spec file에서 dataset_config 파라미터를 업데이트하십시오.
    • 평가에 사용할 fold 수를 업데이트하십시오. 랜덤 데이터 분할의 경우에는 fold를 0으로 맞춰주십시오.
  • 시퀀스별 분할의 경우 데이터세트 변환 도구로 생성한 fold는 무엇이든 사용할 수 있습니다.
  • 사전 훈련된 모델
  • 즉각적인 data augmentation을 위한 augmentation 파라미터
  • batch 사이즈, epoch 횟수, 학습률 등 기타 훈련 (하이퍼)파라미터

detectnet_v2_train_resnet18_kitti.txt training spec file을 업데이트하여 NGC catalog에서 다운로드한 model weights를 지정하십시오.

workspace/detectnet_v2/specs/detectnet_v2_train_resnet18_kitti.txt
0208 블로그 table 1
Table 1. detectnet_v2_train_resnet18_kitti.txt 파일의 업데이트된 속성.

TLT 훈련 실행

이제 TLT에 다음의 정보를 제공하여 모델 훈련을 훈련하고 실험을 시작할 시간입니다.

  • trainig specification file(앞에서 확인)
  • 재훈련된 모델의 Output 디렉터리 위치
  • 앞서 지정한 모델의 key
  • 훈련에 사용되는 네트워크 유형

훈련 완료까지 수시간이 걸릴 수 있습니다. 본 예제의 경우 단일 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

훈련된 모델의 평가

transfer learning 완료 후 TLT를 사용하여 테스트 데이터에 대한 해당 모델의 성능을 평가할 수 있습니다.

  • -e—specification file의 실험 세부 정보
  • -m—재훈련된 모델
  • -k—앞서 지정한 모델의 key
!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

훈련된 모델의 프루닝

프루닝은 모델을 최적화하고 불필요한 weights를 제거하여 저지연 추론을 가능하게 한다는 점에서 중요합니다. 특히 동영상 사용사례의 스트리밍에 필수적이라고 할 수 있습니다. 파라미터는 다음과 같습니다.

  • -m—프루닝을 진행할 사전 훈련 모델.
  • -eq—ResNet과 MobileNet 모델에 적용 가능한 Equalization criterion.
  • -pth—프루닝 임계값. detectnet_v2 모델의 경우 임계값이 0.01이면 좋은 출발입니다.
  • -k—모델의 저장/로딩을 위한 key
  • -o—프루닝 완료 모델의 Output 디렉터리.

다음의 코드로 모델을 프루닝합니다.

!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

프루닝 완료 모델의 재훈련

프루닝을 완료한 네트워크는 해당 단계에서 손실된 정확도를 회복하기 위해 재훈련을 진행해야 합니다. 먼저 experiment file을 업데이트하고 model_config파일의 load_graph를 true로 설정하십시오. 다음 단계로 재훈련용 specification을 업데이트하여 프루닝 완료 모델을 pretrained weights로 사용하도록 합니다.

모델의 mAP가 일부 감소하는 현상이 발생한다면 원래 훈련되었던 모델의 프루닝이 다소 과도했기 때문일 수 있습니다. 이전 단계에서 프루닝 임계값을 낮춰 프루닝 비율을 줄인 후 새 모델로 재훈련을 진행합니다.

이제 detectnet_v2_retrain_resnet18_kitti.txt 파일을 편집하여 다음의 파라미터를 변경하십시오.

workspace/detectnet_v2/specs/detectnet_v2_retrain_resnet18_kitti.txt
0208 블로그 table 2
Table 2. detectnet_v2_retrain_resnet18_kitti.txt의 새로운 속성값

TLT를 사용하여 프루닝 완료 모델을 재훈련하는 방법은 다음과 같습니다.

# Retraining using the pruned model as pretrained weights !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 모델의 Export

최종 단계는 추론용 TLT 모델을 DeepStream으로 export하는 것입니다. 이를 통해 마스크 착용 감지 애플리케이션의 현장 투입이 가능해집니다. tlt-export 유틸리티를 사용해 weights를 export하십시오.

!mkdir -p $USER_EXPERIMENT_DIR/experiment_dir_final_pruned
# Removing a preexisting copy of the etlt if there is one.
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 configuration file 준비하기

구축한 모델과 NVIDIA DeepStream 애플리케이션의 효과적 사용을 위해, 새로 훈련한 모델에 맞춰 configuration file을 업데이트하십시오. 다음의 파라미터를 업데이트합니다.

  • tlt-encoded-model—여러분의 모델이 DeepStream 컨테이너에서 배포될 때의 상대경로입니다. 여러분이 이 notebook을 따르고 있다면 ./resnet18_detector_pruned.etlt이 답입니다.
  • labelfile-path—여러분 notebook의 labels file에 대한 상대경로입니다. ./labels.txt
  • input-dims—앞서 설정한 인풋-차원 값과 일치해야 합니다. 960×544.
  • model-engine—model file과 동일한 경로이나 engine을 사용합니다.
  • network-mode—배포를 위한 네트워크 모드입니다. livestream 사용 시 해당 모드는 2가 되어야 합니다.

GitHub의 예제와 동일한 클래스를 사용하고 있으므로 labels file의 어떤 것도 변경할 필요가 없습니다.

  • mask—긍정적 클래스, 대상자가 마스크를 착용하고 있음.
  • no-mask—부정적 클래스, 영상 속 대상자가 마스크를 착용하고 있지 않음.
  • default—DetectNet model의 디폴트.

DeepStream 컨테이너 자체에서 지원되는 DeepStream configuration을 가져오는 작업 또한 필요하지만 지금처럼 Helm으로 배포하는 경우라면 직접 생성해야 합니다. GitHub에서 예제를 가져와 여러분의 사용사례에 맞춰 수정하십시오.

이 configuration에는 다음의 두 가지 속성이 필요합니다.

  • RTSP Stream Location—비디오 피드의 URL.
  • DeepStream Inference Config—업데이트된 모델의 inference configuration에 대한 경로.

이 configuration은 전에 업데이트되었으므로 추가 작업이 필요하지 않습니다.

!wget https://raw.githubusercontent.com/ChrisParsonsDev/ngc-gtc-content/master/demo-assets/dsconfig.txt

여러분은 이제 TLT로 DetectNet 모델을 재훈련하여 스트리밍 영상 속 인물이 마스크를 착용하고 있는지 여부를 식별할 수 있게 되었습니다. 최종 단계는 헬름 차트를 활용한 애플리케이션의 배포입니다.

NGC private registry에 모델 게시하기

여러분의 최종 모델을 NGC private registry에 업로드하여 다른 팀원들이 각자의 사용사례에 맞춰 활용하게 할 수 있습니다. 그러나 여러분의 내부 저장소에서도 모델을 배포할 수 있으므로 NGC private registry 업로드가 필수는 아닙니다. 이 작업을 완료하고 나면 NGC Private Registry UI에 모델이 올라가 있어야 합니다(Figure 3).

0208 블로그 figure 3
Figure 3. NGC Private Registry에 업로드된 모델.

Figure 4는 NGC에서의 모델 버전을 보여줍니다.

0208 블로그 figure 4
Figure 4. Version History 탭에서 확인할 수 있는 다양한 모델 버전의 목록.

Helm으로 앱 패키징하기

NGC에는 전용 Helm registry가 있어 헬름 차트와 헬름 카탈로그의 관리에 사용할 수 있습니다. NGC catalog가 제공하는 DeepStream 차트를 수정하여 마스크 감지기용 packaged deployment pattern을 생성할 수 있습니다.

Helm과 플러그인의 다운로드와 설치

첫 번째 단계는 사용자 환경에 헬름을 다운로드⋅설치하는 것입니다. 이를 통해 NGC Private Registry에 차트들을 다운로드 및 게시할 수 있습니다. 다음의 구성 요소를 반드시 설치해야 합니다.

헬름을 설치하려면 다음의 명령을 사용하십시오.

!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

NGC Helm registry에 로그인

NGC documentation은 여러분의 헬름 환경을 구성하는 단계별 지침을 제공합니다. 여러분은 앞에서 설정한 NGC CLI API key를 사용해 헬름 서비스 또한 인증할 수 있습니다. 헬름 저장소는 두 개를 추가해야 합니다. 즉, public catalog로 최초의 DeepStream 차트를 가져오고, NGC Private Registry로는 그 차트를 공유하고 수정하여 안면 감지 모델에 활용하는 방식입니다.

NGC Catalog와 private registry에 로그인하십시오.

!helm repo add ngc-catalog https://helm.ngc.nvidia.com/nvidia # Edit the repo name/url to match your private registry !helm repo add ngc-privatereg https://helm.ngc.nvidia.com/ngcvideos --username=\$oauthtoken --password=$NGC_KEY

DeepStream 헬름 차트 다운로드

NGC에서 DeepStream 차트를 다운로드하고 마스크 착용 감지 사용사례에 맞춰 수정하십시오. Helm CLI를 사용하여 사용사례가 NGC Catalog에서 지원되는지 확인합니다.

!helm search repo video-analytics-demo

이제 해당 차트를 NGC Catalog에서 가져와 로컬 환경에 다운로드합니다. NGC UI가 이 워크플로우를 보다 손쉽게 만들어줍니다. 모델이나 컨테이너 저장과 마찬가지로 헬름 가져오기 명령을 사용자 인터페이스에서 곧바로 사용하십시오(Figure 5).

0208 블로그 figure 5
Figure 5. NGC catalog에서의 DeepSteam Helm chart.

해당 모델을 사용할 수 있도록 헬름 차트 수정하기

NGC Catalog에서 차트를 다운로드한 후에는 마스크 착용 감지 모델과 함께 작동할 수 있도록 수정을 거쳐야 합니다.

  1. private registry의 차트 이름을 변경합니다.
  2. 차트의 압축을 풉니다.
  3. 차트를 편집해 모델을 지정합니다.
  4. 차트를 패키징합니다.

values.yaml 파일의 ngcModel 머리말 이하에 있는 다음의 속성을 편집하여 차트에 안면 감지 모델을 지정해줍니다.

  • getModel—우리의 private registry에서 모델을 다운로드하는 NGC CLI 명령.
  • name—모델명.
  • filename—model file 이름.
  • modelConfig—모델의 Config file.

camera 세부 정보를 편집하여 여러분의 비디오 스트림을 지정합니다.

  • camera1—카메라의 rtsp 스트림에 연결.

여러분은 또한 camera2 && camera3와 같이 새로운 행을 더해 다른 카메라를 추가할 수 있습니다.

본 예제에서는 values.yaml 파일을 다음과 같은 속성으로 업데이트하십시오.

0208 블로그 table 3
Table 3. values.yaml의 업데이트된 속성값.

코드 예제를 실행하면 완료된 values.yaml 파일의 형태를 확인할 수 있습니다.

다음으로 chart.yaml 파일을 업데이트하여 수정된 차트의 설명과 버전 번호를 변경합니다.

  • name—패키징된 차트의 명칭.
  • description—차트에 대한 간단한 설명.
  • version—차트의 SemVer 버전.

업데이트된 값은 다음과 같아야 합니다.

0208 블로그 table 4
Table 4. chart.yaml의 업데이트된 속성값.
0208 블로그 figure 6
Figure 6. NGC catalog에서 DeepStream Helm chart를 불러올 수 있는 Chart.yaml 파일.

NGC private registry에 헬름 차트 게시하기

이제 차트 값을 편집했으므로 헬름 차트를 패키징하여 여러분의 private registry에 게시하십시오. 첫 단계는 차트를 helm package 명령으로 패키징하는 것입니다.

!helm package video-analytics-demo

다음의 명령을 통해 차트를 private registry로 보냅니다.

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

NVIDIA Fleet Command 하이브리드-클라우드 플랫폼을 사용하거나 helm install 명령을 실행하여 차트를 배포할 수 있습니다. 애플리케이션이 배포되어 RTSP 카메라 스트림에 연결되면 마스크 착용 여부를 실시간으로 감지할 수 있습니다.

요약

이번 포스팅에서는 NGC Collections를 사용해 마스크 착용 감지 애플리케이션을 구축하는 방법을 소개했습니다. 애플리케이션 개발의 시작부터 끝까지 함께하며 컨테이너, 사전 훈련된 모델, 헬름 차트 등의 빌딩블록 일체를 활용해보았습니다. NGC catalog의 다른 컬렉션들을 이용해 여러분 각자의 사용사례에 맞는 사용자 지정 AI 애플리케이션을 만들 수도 있습니다.

마스크 착용 감지 애플리케이션 구축과 관련한 자세한 정보는 NGC GTC Fall 2020 Notebook.ipynb notebook을 참고하십시오.