- Auto: 김준호
- Date: 2022-02-18
NVIDIA의 Jetson Nano/TX1/TX2/Xavier NX/AGX Xavier 를 사용한 inference(추론) 와 realtime(실시간) DNN vision library를 위한 guide에 오신걸 환영합니다.
해당 repo는 NVIDIA TensorRT 를 사용합니다. 이는 graph optimizations, kernel fusion, FP16/INT8 precision 을 적용함으로써 Jetson 플랫폼에서 인공신경망을 더 빠르게, 더 적은 에너지로 사용하기 위해서 입니다.
비전의 기초, imageNet
for image recognition(이미지 분류), detectNet
for object detection(객체 검출), segNet
for semantic segmentation, and poseNet
for pose estimation, 각 모델들은 shared tensorNet
object 에서 상속되어 사용됩니다. 예제로 live camera로부터 streaming 받는 것과 이미지를 처리하는 것이 제공됩니다. 다음 API Reference 에서 C++, Python에 대한 자세한 자료를 찾아보실 수 있습니다.
Hello AI World 에서는 jetson platform에서 inference(추론)과 transfer learning을 하는 튜토리얼을 제공합니다. 여기서 직접 datasets을 수집하고 인공신경망을 직접 학습시켜볼 수 있습니다. 이 튜토리얼은 image classification(이미지 분류), object detection(객체 검출), sematic segmentation, pose estimation, mono depth를 다룹니다.
- Hello AI World
- Video Walkthroughs
- API Reference
- Code Examples
- Pre-Trained Models
- System Requirements
- Change Log
> JetPack 4.6 이 지원됩니다. 문서를 확인하세요. updated containers.
> Pose Estimation 와 Mono Depth 튜토리얼을 해보세요!
Hello AI Wolrd는 jetson 보드에서 수행될 수 있으며, 이는 TensorRT를 통한 inference(추론)과 Pytorch를 이용한 transfer learning을 포함합니다. inference 부분은 Python과 C++로 직접 image classfication(이미지 분류)와 object detectino(객체 검출) application 코드를 작성하는 것으로 이루어져있고 약 2시간 정도가 소요됩니다. 반면, tranfer learning은 밤새 수행시켜주시는 것이 좋습니다.
- ImageNet 데이터셋으로 이미지 분류하기
- DetectNet으로 객체 위치 찾기
- SegNet으로 하는 Semantic Segmentation
- PoseNet으로 하는 Pose Estimation
- DepthNet으로 하는 Monocular Depth
- PyTorch로 하는 Transfer Learning
- Classification(분류)/Recognition(인식) (ResNet-18)
- Object Detection (SSD-Mobilenet)
아래 영상들은 Jetson AI Certification 코스에서 제공된 것입니다.
Description | Video |
---|---|
Hello AI World Setup Jetson Nano에서 Hello AI World 도커 컨테이너를 다운로드 받고 run 합니다. 카메라를 테스트 합니다. 그리고 RTP를 통해 네트워크에 어떻게 스트리밍 되는지 확인합니다. |
|
Image Classification Inference 딥러닝 기술과 Jetson Nano를 통해 수행하는 이미지 분류 프로그램을 코딩합니다. 그리고 라이브 카메라에서 실시간으로 이미지를 분류하는 것을 확인합니다. |
|
Training Image Classification Models Jetson Nano에서 어떻게 Pytorch로 이미지 분류 모델을 훈련하는지 배웁니다. 그리고 커스텀 모델을 생성하기 위한 datasets을 수집하는 방법을 배웁니다. |
|
Object Detection Inference 딥러닝 기술과 Jetson Nano를 통해 수행하는 객체 검출 프로그램을 코딩합니다. 그리고 라이브 카메라에서 실시간으로 객체를 검출하는 것을 확인합니다. |
|
Training Object Detection Models Jetson Nano에서 어떻게 Pytorch로 객체 검출 모델을 훈련하는지 배웁니다. 그리고 커스텀 모델을 생성하기 위한 datasets을 수집하는 방법을 배웁니다. |
|
Semantic Segmentation Jetson Nano에서 Semantic segmentation network를 경험해보고 이를 라이브 카메라로 잘 수행되는지 확인합니다. |
아래 두 문서 링크는 C++ and Python 해당 repo에서 사용하는 API 라이브러리입니다.
C++ | Python | |
---|---|---|
Image Recognition | imageNet |
imageNet |
Object Detection | detectNet |
detectNet |
Segmentation | segNet |
segNet |
Pose Estimation | poseNet |
poseNet |
Monocular Depth | depthNet |
depthNet |
위 라이브러리들은 libjetson-inference
and libjetson-utils
를 링크함으로써 다른 프로젝트에서도 사용할 수 있습니다.
Introductory code walkthroughs of using the library are covered during these steps of the Hello AI World tutorial:
Additional C++ and Python samples for running the networks on static images and live camera streams can be found here:
C++ | Python | |
---|---|---|
Image Recognition | imagenet.cpp |
imagenet.py |
Object Detection | detectnet.cpp |
detectnet.py |
Segmentation | segnet.cpp |
segnet.py |
Pose Estimation | posenet.cpp |
posenet.py |
Monocular Depth | depthnet.cpp |
depthnet.py |
note: for working with numpy arrays, see Converting to Numpy Arrays and Converting from Numpy Arrays
These examples will automatically be compiled while Building the Project from Source, and are able to run the pre-trained models listed below in addition to custom models provided by the user. Launch each example with --help
for usage info.
이 프로젝트는 여러 pre-trained models이 함께 제공되며 해당 툴을 사용하여 다운로드 받을 수 있습니다. Model Downloader
Network | CLI argument | 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 |
Network | CLI argument | NetworkType enum | Object classes |
---|---|---|---|
SSD-Mobilenet-v1 | ssd-mobilenet-v1 |
SSD_MOBILENET_V1 |
91 (COCO classes) |
SSD-Mobilenet-v2 | ssd-mobilenet-v2 |
SSD_MOBILENET_V2 |
91 (COCO classes) |
SSD-Inception-v2 | ssd-inception-v2 |
SSD_INCEPTION_V2 |
91 (COCO classes) |
DetectNet-COCO-Dog | coco-dog |
COCO_DOG |
dogs |
DetectNet-COCO-Bottle | coco-bottle |
COCO_BOTTLE |
bottles |
DetectNet-COCO-Chair | coco-chair |
COCO_CHAIR |
chairs |
DetectNet-COCO-Airplane | coco-airplane |
COCO_AIRPLANE |
airplanes |
ped-100 | pednet |
PEDNET |
pedestrians |
multiped-500 | multiped |
PEDNET_MULTI |
pedestrians, luggage |
facenet-120 | facenet |
FACENET |
faces |
Dataset | Resolution | CLI Argument | Accuracy | Jetson Nano | Jetson Xavier |
---|---|---|---|---|---|
Cityscapes | 512x256 | fcn-resnet18-cityscapes-512x256 |
83.3% | 48 FPS | 480 FPS |
Cityscapes | 1024x512 | fcn-resnet18-cityscapes-1024x512 |
87.3% | 12 FPS | 175 FPS |
Cityscapes | 2048x1024 | fcn-resnet18-cityscapes-2048x1024 |
89.6% | 3 FPS | 47 FPS |
DeepScene | 576x320 | fcn-resnet18-deepscene-576x320 |
96.4% | 26 FPS | 360 FPS |
DeepScene | 864x480 | fcn-resnet18-deepscene-864x480 |
96.9% | 14 FPS | 190 FPS |
Multi-Human | 512x320 | fcn-resnet18-mhp-512x320 |
86.5% | 34 FPS | 370 FPS |
Multi-Human | 640x360 | fcn-resnet18-mhp-512x320 |
87.1% | 23 FPS | 325 FPS |
Pascal VOC | 320x320 | fcn-resnet18-voc-320x320 |
85.9% | 45 FPS | 508 FPS |
Pascal VOC | 512x320 | fcn-resnet18-voc-512x320 |
88.5% | 34 FPS | 375 FPS |
SUN RGB-D | 512x400 | fcn-resnet18-sun-512x400 |
64.3% | 28 FPS | 340 FPS |
SUN RGB-D | 640x512 | fcn-resnet18-sun-640x512 |
65.1% | 17 FPS | 224 FPS |
- If the resolution is omitted from the CLI argument, the lowest resolution model is loaded
- Accuracy indicates the pixel classification accuracy across the model's validation dataset
- Performance is measured for GPU FP16 mode with JetPack 4.2.1,
nvpmodel 0
(MAX-N)
Legacy Segmentation Models
Network | CLI Argument | NetworkType enum | Classes |
---|---|---|---|
Cityscapes (2048x2048) | fcn-alexnet-cityscapes-hd |
FCN_ALEXNET_CITYSCAPES_HD |
21 |
Cityscapes (1024x1024) | fcn-alexnet-cityscapes-sd |
FCN_ALEXNET_CITYSCAPES_SD |
21 |
Pascal VOC (500x356) | fcn-alexnet-pascal-voc |
FCN_ALEXNET_PASCAL_VOC |
21 |
Synthia (CVPR16) | fcn-alexnet-synthia-cvpr |
FCN_ALEXNET_SYNTHIA_CVPR |
14 |
Synthia (Summer-HD) | fcn-alexnet-synthia-summer-hd |
FCN_ALEXNET_SYNTHIA_SUMMER_HD |
14 |
Synthia (Summer-SD) | fcn-alexnet-synthia-summer-sd |
FCN_ALEXNET_SYNTHIA_SUMMER_SD |
14 |
Aerial-FPV (1280x720) | fcn-alexnet-aerial-fpv-720p |
FCN_ALEXNET_AERIAL_FPV_720p |
2 |
Model | CLI argument | NetworkType enum | Keypoints |
---|---|---|---|
Pose-ResNet18-Body | resnet18-body |
RESNET18_BODY |
18 |
Pose-ResNet18-Hand | resnet18-hand |
RESNET18_HAND |
21 |
Pose-DenseNet121-Body | densenet121-body |
DENSENET121_BODY |
18 |
- Jetson Nano Developer Kit with JetPack 4.2 or newer (Ubuntu 18.04 aarch64).
- Jetson Nano 2GB Developer Kit with JetPack 4.4.1 or newer (Ubuntu 18.04 aarch64).
- Jetson Xavier NX Developer Kit with JetPack 4.4 or newer (Ubuntu 18.04 aarch64).
- Jetson AGX Xavier Developer Kit with JetPack 4.0 or newer (Ubuntu 18.04 aarch64).
- Jetson TX2 Developer Kit with JetPack 3.0 or newer (Ubuntu 16.04 aarch64).
- Jetson TX1 Developer Kit with JetPack 2.3 or newer (Ubuntu 16.04 aarch64).
The Transfer Learning with PyTorch section of the tutorial speaks from the perspective of running PyTorch onboard Jetson for training DNNs, however the same PyTorch code can be used on a PC, server, or cloud instance with an NVIDIA discrete GPU for faster training.
In this area, links and resources for deep learning are listed:
- ros_deep_learning - TensorRT inference ROS nodes
- NVIDIA AI IoT - NVIDIA Jetson GitHub repositories
- Jetson eLinux Wiki - Jetson eLinux Wiki
note: the DIGITS/Caffe tutorial from below is deprecated. It's recommended to follow the Transfer Learning with PyTorch tutorial from Hello AI World.
Expand this section to see original DIGITS tutorial (deprecated)
The DIGITS tutorial includes training DNN's in the cloud or PC, and inference on the Jetson with TensorRT, and can take roughly two days or more depending on system setup, downloading the datasets, and the training speed of your GPU.
- DIGITS Workflow
- DIGITS System Setup
- Setting up Jetson with JetPack
- Building the Project from Source
- Classifying Images with ImageNet
- Using the Console Program on Jetson
- Coding Your Own Image Recognition Program
- Running the Live Camera Recognition Demo
- Re-Training the Network with DIGITS
- Downloading Image Recognition Dataset
- Customizing the Object Classes
- Importing Classification Dataset into DIGITS
- Creating Image Classification Model with DIGITS
- Testing Classification Model in DIGITS
- Downloading Model Snapshot to Jetson
- Loading Custom Models on Jetson
- Locating Objects with DetectNet
- Detection Data Formatting in DIGITS
- Downloading the Detection Dataset
- Importing the Detection Dataset into DIGITS
- Creating DetectNet Model with DIGITS
- Testing DetectNet Model Inference in DIGITS
- Downloading the Detection Model to Jetson
- DetectNet Patches for TensorRT
- Detecting Objects from the Command Line
- Multi-class Object Detection Models
- Running the Live Camera Detection Demo on Jetson
- Semantic Segmentation with SegNet
© 2016-2019 NVIDIA | Table of Contents