• 玩转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
    
    • 1
    • 2

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

    安装jetson-inference

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

    在这里插入图片描述

    cd jetson-inference
    git submodule update --init
    
    • 1
    • 2

    在这里插入图片描述

    配置cmake

    mkdir build    # 创建build文件夹
    
    • 1

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

    vi CMakePreBuild.sh 
    
    • 1

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

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

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

    下载所需的模型文件

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

    cd Downloads
    unzip jetson-inference-download-models.zip
    
    • 1
    • 2

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

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

    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述

    ls
    
    • 1

    在这里插入图片描述

    编译

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

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

    sudo make install
    
    • 1

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115

    测试

    在这里插入图片描述

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

    在这里插入图片描述

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

    CSI摄像头实时图像识别

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

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

    常见问题

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

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

    进入文件之后,将

    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;
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    中的前三条语句注释掉,

    //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;
    
    • 1
    • 2
    • 3
    • 4

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

    cd ~/jetson-inference/build/    
    make 
    sudo make install   
    
    • 1
    • 2
    • 3

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

    参考文献

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

  • 相关阅读:
    【IPC】 共享内存
    嵌入式Linux入门-从启动代码开始,真正从0开始点个灯
    django组件552
    14---OpenCV:图像检测之边缘检测
    大道如青天,协程来通信,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang通道channel的使用EP14
    Ubuntu 20.04 中配置NFS服务
    各类值得收藏的开源项目推荐介绍
    11-Vue基础之组件通信(二)
    3、Semaphore&CountDownLatch&CyclicBarrier详解
    网友提问:HTML CSS JS很低级吗?
  • 原文地址:https://blog.csdn.net/FriendshipTang/article/details/126653391