Hello AI World! —— 部署深度学习
- 1. Hello AI World
- 1.1 系统安装
- 1.2 推理
- 1.3 训练
- 1.4 附录
- 2. 视频演练
- 3. API 参考
- 4. 代码示例
- 5. 预训练模型
- 6. 推荐系统要求
- 7. 额外资源
- 8. 两天的演示(数字)
欢迎使用我们的教学指南,了解NVIDIA Jetson Nano/TX1/TX2/Xavier NX/AGX Xavier的推理和实时DNN视觉库]。
此 repo 使用 NVIDIA TensorRT 将神经网络有效地部署到嵌入式 Jetson 平台上,通过图形优化、内核融合和 FP16/INT8 精度提高性能和电源效率。
视觉原语,如用于图像识别的 imageNet、用于目标检测的detectNet和用于语义分割的segNet,都继承自共享的tensorNet对象。提供了从实时相机馈送流和处理图像的示例。有关C++和Python库的详细参考文档,请参见API参考部分。
遵循Hello AI World教程在Jetson上运行推理和转移学习,包括收集自己的数据集和训练自己的模型。它包括图像分类、目标检测和分割。
Jetson Nano 2GB and JetPack 4.5 is now supported in the repo. Try the new Re-training SSD-Mobilenet object detection tutorial! See the Change Log for the latest updates and new features.
1. Hello AI World
Hello AI World可以完全在您的Jetson上运行,包括使用TensorRT进行推理和使用PyTorch进行转移学习。Hello AI世界的推理部分包括编码自己的图像分类和Python或C++的对象检测应用程序和实时摄像机演示程序,可以在JeSon上运行大约两个小时或更少,而传递学习最好是留着运行一夜。
1.1 系统安装
- 基于 JetPack 安装 Jetson
- 运行 Docker 容器
- 从源代码构建项目
1.2 推理
- 用ImageNet对图像进行分类在Jetson上使用ImageNet程序编写自己的图像识别程序(Python)编码你自己的图像识别程序(C++)运行实时摄像机识别演示
- 用DetectNet定位物体从图像中检测对象运行实时摄像头检测演示编写自己的目标检测程序
- 基于SegNet的语义切分从命令行分割图像运行实时摄像机分割演示
1.3 训练
- 用PyTorch进行迁移学习
- 分类/识别(ResNet-18)猫/狗数据集再训练PlantCLEF数据集的再训练收集自己的分类数据集
- 目标检测(SSD Mobilenet)再培训SSD Mobilenet收集自己的检测数据集
1.4 附录
- 摄像头流媒体和多媒体
- 基于CUDA的图像处理
- ROS/ROS2深度学习节点
2. 视频演练
以下是为Jetson AI认证课程录制的Hello AI World的屏幕截图:(原网站图像无法下载,可惜了。)
Description | Video |
Hello AI World Setup Download and run the Hello AI World container on Jetson Nano, test your camera feed, and see how to stream it over the network via RTP. | |
Image Classification Inference Code your own Python program for image classification using Jetson Nano and deep learning, then experiment with realtime classification on a live camera stream. | |
Training Image Classification Models Learn how to train image classification models with PyTorch onboard Jetson Nano, and collect your own classification datasets to create custom models. | |
Object Detection Inference Code your own Python program for object detection using Jetson Nano and deep learning, then experiment with realtime detection on a live camera stream. | |
Training Object Detection Models Learn how to train object detection models with PyTorch onboard Jetson Nano, and collect your own detection datasets to create custom models. | |
Semantic Segmentation Experiment with fully-convolutional semantic segmentation networks on Jetson Nano, and run realtime segmentation on a live camera stream. |
3. API 参考
下面是 repo 中的 C++ 和 Python 库的参考文档。
jetson-inference
任务类型 | C++ | Python |
Image Recognition | ||
Object Detection | ||
Segmentation |
jetson-utils
- C++
- Python
通过链接到libjetson-inference和libjetson-utils,这些库可以在外部项目中使用。
4. 代码示例
在Hello AI World教程的以下步骤中介绍了使用库的介绍性代码演练:
- 编写自己的图像识别程序(Python)
- 编码你自己的图像识别程序(C++)
在静态图像和实时摄像机流中运行网络的附加C++和Python示例可以在这里找到(注意:下面表格的链接地址与上面的表格不一样):
任务类型 | C++ | Python |
Image Recognition | ||
Object Detection | ||
Segmentation |
注意:有关使用numpy数组的信息,请参见转换为numpy数组和从numpy数组转换
5. 预训练模型
该项目附带了许多经过预培训的模型,这些模型可通过模型下载工具获得:
图像识别
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 |
- 如果CLI参数中省略了分辨率,则加载最低分辨率模型
- 精度表示模型验证数据集的像素分类精度
- 使用JetPack 4.2.1、nvpmodel 0(MAX-N)对GPU FP16模式的性能进行了测量
传统分割模型
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 |
6. 推荐系统要求
- Jetson Nano开发者工具包,带有JetPack 4.2或更新版本(Ubuntu 18.04 aarch64)。
- Jetson Nano 2GB开发工具包,带有JetPack 4.4.1或更新版本(Ubuntu 18.04 aarch64)。
- Jetson Xavier NX开发工具包,带有JetPack 4.4或更新版本(Ubuntu 18.04 aarch64)。
- Jetson AGX Xavier开发包,带有JetPack 4.0或更新版本(Ubuntu 18.04 aarch64)。
- JetPack 3.0或更新版本的Jetson TX2开发工具包(Ubuntu 16.04 aarch64)。
- JetPack 2.3或更新版本的Jetson TX1开发工具包(Ubuntu 16.04 aarch64)。
本教程的PyTorch迁移学习部分从在Jetson上运行PyTorch来训练DNN的角度出发,但是相同的PyTorch代码可以在PC、服务器或云实例上使用NVIDIA离散GPU进行更快的训练。
7. 额外资源
在这方面,列出了深度学习的链接和资源:
- ros 深度学习-TensorRT推理ros节点
- NVIDIA AI IoT-NVIDIA Jetson GitHub存储库
- Jetson Elinox Wiki-Jetson Elinox Wiki
8. 两天的演示(数字)
注意:下面的DIGITS/Caffe教程已弃用。建议遵循来自Hello AI World的PyTorch转移学习教程。 展开此部分以查看原始数字教程(已弃用)
DIGITS教程包括在云端或PC上训练DNN,以及使用TensorRT在Jetson上进行推理,可能需要大约两天或更长时间,具体取决于系统设置、下载数据集和GPU的训练速度。
- 数字工作流
- 数字系统设置
- 使用JetPack设置Jetson
- 从源代码构建项目
- 用ImageNet对图像进行分类 在Jetson上使用控制台程序 编写自己的图像识别程序 运行实时摄像机识别演示 用数字重新训练网络 下载图像识别数据集 自定义对象类 将分类数据集导入数字 数字图像分类模型的建立 数字分类模型的检验 将模型快照下载到Jetson 在Jetson上加载自定义模型
- 用DetectNet定位物体 检测数据的数字格式 下载检测数据集 将检测数据集导入数字 用数字创建DetectNet模型 检测网模型推理的数字测试 将检测模型下载到Jetson TensorRT的DetectNet修补程序 从命令行检测对象 多类目标检测模型 在Jetson上运行实时摄像头检测演示
- 基于SegNet的语义切分 下载无人机数据集 将航空数据集导入数字 生成预训练FCN网络 数字训练FCN-net 数字测试推理模型 TensorRT的FCN Alexnet修补程序 在Jetson上运行细分模型
参考资料:https://github.com/dusty-nv/jetson-inference#training