深度学习的训练和推理流程,是先采用高性能图形服务器使用深度学习框架来训练(Training)机器学习算法,研究大量的数据来学习一个特定的场景,完成后得到模型参数,再部署到终端执行机器学习推理(Inference),以训练好的模型从新数据中得出结论。
一般的深度学习项目,训练时为了加快速度,会使用多 GPU 分布式训练。但在部署推理时,为了降低成本,往往使用单个 GPU 机器甚至嵌入式平台进行部署。Jetson Nano 可以完成整个训练和推理流程,但基于 Jetson Nano 的低算力,不推荐在 Jetson Nano 上进行复杂训练,而仅用于推理。
- 在
GPU 服务器上使用 pytorch 训练模型得到 pth 模型文件; - 将
pth 模型转化为 onnx 格式文件; - Jetson Nano
上利用 tensorrt 加载 onnx 模型,实现快速推理。
以下是根据这篇文章的摘要,介绍使用 ssd-mobilenet 实现目标检测网络的训练、部署和推理。
环境准备
前提:基于 Jetson Inference 完整可运行状态,见《Jetson Nano 2GB 深入 Jetson Inference 项目》。
cd jetson-inference/python/training/detection/ssd
# 安装必要的依赖环境 boto3、pandas 和 urllib3
pip3 install -v -r requirements.txt
数据集准备
在 ssd-mobilenet 工程中提供了一个脚本文件 open_images_downloader.py,使用该文件可以从
python3 open_images_downloader.py --class-names "Apple,Orange,Banana,Strawberry,Grape,Pear,Pineapple,Watermelon" --data=data/fruit
Google Open Image 图像数据集(Open Images Dataset V6 + Extensions)链接了大约 600 个类别(包括扩展为 6000 类)的 900 万张图像,比同类 ImageNet 图像数据集(1000 个类别)包含更多贴近实际生活的实体,足够保证从头训练一个深度网络模型。
ILSVRC(ImageNet Large Scale Visual Recognition Challenge)是近年来机器视觉领域最受追捧也是最具权威的学术竞赛之一,代表了图像领域的最高水平。ImageNet 数据集是
再下载一个预训练模型:
wget https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth -O models/mobilenet-v1-ssd-mp-0_675.pth
这个预训练模型是提前在
训练
python3 train_ssd.py --data=data/fruit --model-dir=models/fruit --batch-size=4 --epochs=30
在 Jetson Nano 上训练,batch-size 设置为 4,1
训练好的模型下载地址:
https://nvidia.box.com/shared/static/gq0zlf0g2r258g3ldabl9o7vch18cxmi.gz
模型转换
训练或下载后的模型为
虽然在 Jetson Nano 直接通过 pytorch 进行推理,但通过 pytorch 训练出来的模型(pth
TensorRT 现已能支持 TensorFlow、Caffe、Mxnet、Pytorch 等几乎所有的深度学习框架,将 TensorRT 和 NVIDIA 的 GPU 结合起来,能在几乎所有的框架中进行快速和高效的部署推理。
在 models/fruit 目录下准备一个 labels.txt 文件,用来指明所有物体类:
BACKGROUND
Apple
Banana
Grape
Orange
Pear
Pineapple
Strawberry
开始转换模型:
python3 onnx_export.py --model-dir=models/fruit
最终会生成一个名为 ssd-mobilenet.onnx 的参数文件,位于 jetson-inference/python/training/detection/ssd/models/fruit 目录下面。
实时推理
采用
detectnet --model=models/fruit/ssd-mobilenet.onnx --labels=models/fruit/labels.txt \
--input-blob=input_0 --output-cvg=scores --output-bbox=boxes \
/dev/video0
第一次运行时由于需要将
via - https://blog.csdn.net/qianbin3200896/article/details/108949723
Jetson Nano 的资源分享:
链接:https://pan.baidu.com/s/1E95CKisbCLTGKGI6c-JydA
提取码:culm
楼主残忍的关闭了评论