玩转Jetson Nano(四):TensorRT图像识别

前言

  • 本文是个人使用Jetson Nano的电子笔记,由于水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入
    玩转Jetson Nano
    专栏或我的个人主页查看

TensorRT简介

  • NVIDIA TensorRT™是一个高性能深度学习推理平台,用于优化经过训练的深度学习模型以实现高性能推理。它包括深度学习推理优化器和运行时,可为深度学习推理应用程序提供低延迟和高吞吐量。在推理期间,基于TensorRT的应用程序比仅CPU平台的执行速度快40倍。
  • 使用TensorRT,您可以优化在所有主要框架中培训的神经网络模型,以高精度校准低精度,最后部署到超大规模数据中心,嵌入式或汽车产品平台。
  • TensorRT构建于NVIDIA的并行编程模型CUDA之上,使您能够利用CUDA-X AI中的库,开发工具和技术,为人工智能,自动机器,高性能计算和图形优化所有深度学习框架的推理。
  • TensorRT为深度学习推理应用的生产部署提供INT8和FP16优化,例如视频流,语音识别,推荐和自然语言处理。降低精度推断可显着减少应用程序延迟,这是许多实时服务,自动和嵌入式应用程序的要求。
    在这里插入图片描述
  • 您可以将训练有素的模型从每个深度学习框架导入TensorRT。应用优化后,TensorRT选择特定于平台的内核,以最大限度地提高数据中心,Jetson嵌入式平台和NVIDIA DRIVE自动驾驶平台中Tesla GPU的性能。
  • 为了在数据中心生产中使用AI模型,TensorRT推理服务器是一种容器化微服务,可最大化GPU利用率,并在节点上同时运行来自不同框架的多个模型。它利用Docker和Kubernetes无缝集成到DevOps架构中。
  • 使用TensorRT,开发人员可以专注于创建新颖的AI驱动的应用程序,而不是用于推理部署的性能调整。
  • 使用 TensorRT 的典型深度学习开发周期,如在下图所示。
    在这里插入图片描述

TensorRT搭建

安装所需的依赖

sudo apt-get install libpython3-dev python3-numpy
sudo apt-get install git cmake

在这里插入图片描述
在这里插入图片描述

安装jetson-inference

git clone https://github.com/dusty-nv/jetson-inference

在这里插入图片描述

cd jetson-inference
git submodule update --init

在这里插入图片描述

配置cmake

mkdir build    # 创建build文件夹

由于download-models.sh所需模型文件的下载链接为外网,国内网络无法访问,要编辑jetson-inference/CMakePreBuild.sh,把./download-models.sh和./install-pytorch.sh注释掉。 jetson-inference需要的模型文件另外下载,再传输到data/networks目录下。

vi CMakePreBuild.sh 

在这里插入图片描述
在这里插入图片描述

cd build       # 进入build
cmake ../      # 运行cmake,它会自动执行上一级目录下面的 CMakePreBuild.sh

在这里插入图片描述
在这里插入图片描述

下载所需的模型文件

下载地址 提取码:jsdm
在这里插入图片描述

cd Downloads
unzip jetson-inference-download-models.zip

在这里插入图片描述
在这里插入图片描述

mv ~/Downloads/jetson-inference-download-models/* ~/jetson-inference/data/networks/

在这里插入图片描述

cd ~/jetson-inference/data/networks/
ls
for tar in *.tar.gz; do tar xvf $tar; done

在这里插入图片描述

在这里插入图片描述

ls

在这里插入图片描述

编译

cd jetson-inference/build
# -j4 使用 4 个 CPU 核同时编译
make -j4

在这里插入图片描述
在这里插入图片描述

sudo make install

在这里插入图片描述
在这里插入图片描述
编译成功,会生成下列文件夹结构

build
├── aarch64
│   ├── bin
│   │   ├── images -> /home/ubuntu/jetson-inference/data/images
│   │   └── networks -> /home/ubuntu/jetson-inference/data/networks
│   ├── include
│   │   ├── jetson-inference
│   │   └── jetson-utils
│   └── lib
│       └── python
│           ├── 2.7
│           └── 3.6
├── CMakeFiles
│   ├── 3.10.2
│   │   ├── CompilerIdC
│   │   │   └── tmp
│   │   └── CompilerIdCXX
│   │       └── tmp
│   ├── CMakeTmp
│   ├── Export
│   │   └── share
│   │       └── jetson-inference
│   │           └── cmake
│   └── jetson-inference.dir
│       ├── c
│       ├── calibration
│       └── plugins
│           └── pose
│               └── trt_pose
│                   └── parse
├── docs
│   └── CMakeFiles
├── examples
│   ├── CMakeFiles
│   ├── depthnet
│   │   └── CMakeFiles
│   │       └── depthnet.dir
│   ├── detectnet
│   │   └── CMakeFiles
│   │       ├── detectnet-camera.dir
│   │       ├── detectnet-console.dir
│   │       └── detectnet.dir
│   ├── imagenet
│   │   └── CMakeFiles
│   │       ├── imagenet-camera.dir
│   │       ├── imagenet-console.dir
│   │       └── imagenet.dir
│   ├── posenet
│   │   └── CMakeFiles
│   │       └── posenet.dir
│   └── segnet
│       └── CMakeFiles
│           ├── segnet-camera.dir
│           ├── segnet-console.dir
│           └── segnet.dir
├── python
│   ├── bindings_python_2.7
│   │   └── CMakeFiles
│   │       └── jetson-inference-python-27.dir
│   ├── bindings_python_3.6
│   │   └── CMakeFiles
│   │       └── jetson-inference-python-36.dir
│   ├── bindings_python_3.7
│   │   └── CMakeFiles
│   └── CMakeFiles
├── tools
│   ├── camera-capture
│   │   ├── camera-capture_autogen
│   │   │   ├── EWIEGA46WW
│   │   │   └── include
│   │   └── CMakeFiles
│   │       ├── camera-capture_autogen.dir
│   │       └── camera-capture.dir
│   │           └── camera-capture_autogen
│   ├── CMakeFiles
│   └── depth-viewer
│       └── CMakeFiles
└── utils
    ├── camera
    │   └── camera-viewer
    │       └── CMakeFiles
    │           └── camera-viewer.dir
    ├── CMakeFiles
    │   ├── Export
    │   │   └── share
    │   │       └── jetson-utils
    │   │           └── cmake
    │   └── jetson-utils.dir
    │       ├── camera
    │       ├── codec
    │       ├── cuda
    │       ├── display
    │       ├── image
    │       ├── input
    │       ├── network
    │       ├── threads
    │       └── video
    ├── display
    │   └── gl-display-test
    │       └── CMakeFiles
    │           └── gl-display-test.dir
    ├── python
    │   ├── bindings_python_2.7
    │   │   └── CMakeFiles
    │   │       └── jetson-utils-python-27.dir
    │   ├── bindings_python_3.6
    │   │   └── CMakeFiles
    │   │       └── jetson-utils-python-36.dir
    │   ├── bindings_python_3.7
    │   │   └── CMakeFiles
    │   └── CMakeFiles
    └── video
        └── video-viewer
            └── CMakeFiles
                └── video-viewer.dir

测试

在这里插入图片描述

cd jetson-inference/build/aarch64/bin
./imagenet-console ./images/cat.jpg output.jpg

在这里插入图片描述

第一次执行需要等待一段时间,后面执行就会很快了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CSI摄像头实时图像识别

cd jetson-inference/build/aarch64/bin
./imagenet-camera --network=googlenet  # 使用googlenet运行 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常见问题

注意:CSI摄像头会出现视频画面颠倒,可用以下方法设置修改。

cd ~/jetson-inference/utils/camera/    
sudo vi gstCamera.cpp 

进入文件之后,将

if( mOptions.flipMethod == videoOptions::FLIP_NONE )
    mOptions.flipMethod =  videoOptions::FLIP_ROTATA_180;
else if( mOptions.flipMethod =  videoOptions::FLIP_ROTATA_180 )   
    mOptions.flipMethod =  videoOptions::FLIP_NONE;

在这里插入图片描述

中的前三条语句注释掉,

//if( mOptions.flipMethod == videoOptions::FLIP_NONE )
    //mOptions.flipMethod =  videoOptions::FLIP_ROTATA_180;
//else if( mOptions.flipMethod =  videoOptions::FLIP_ROTATA_180 )   
    mOptions.flipMethod =  videoOptions::FLIP_NONE;

在这里插入图片描述
注释完成之后,保存并退出,然后对其进行编译即可。

cd ~/jetson-inference/build/    
make 
sudo make install   

如果没报错,则编译成功。

参考文献

[1] Jetson Nano Developer Kit User Guide
[2] TensorRT官方教程
[3] 官方Demo

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FriendshipT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值