YOLOv4-tiny在jetson NANO\TX2\NX下的实时目标检测(从装系统到功能实现)

本文最后更新于:2022年2月28日 上午

YOLOv4-tiny在jetson NANO\TX2\NX下的实时目标检测(从装系统到功能实现)

* 目的

  • 在nvidia jetson系列的嵌入式平台上,运用YOLOv4-tiny算法以及TensorRT加速框架,实现实时的目标检测.
  • 环境
    • Jetpack 4.4
    • CUDA 10.2
    • ONNX 1.4.1

* 实践

* 烧系统

  • 准备系统镜像.img(jetpack4.4:实测nx和nano不通用,用nano的img烧进去nx不识别)
    • 官网下载jetpack4.4. tips:英伟达官网下载有时会很慢:改.com为.cn


  • 准备三大件(提取码:8848):1、格式化内存卡:SD Card Formatter 2.烧写工具:balenaEtcher 3.备用烧写工具Win32DiskImager。烧写失败时,这两个工具换着用。
    • 格式化卡


* 烧写系统



* 把SD卡插到板子上,开机后初始化下系统就可以“愉快的”配置环境了

* 配环境

* CUDA 10.2

1
2
3
4
打开配置文件

sudo gedit ~/.bashrc

1
2
3
4
5
添加环境变量

export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH

1
2
3
4
刷新环境变量

source ~/.bashrc


查看CUDA版本

* 换源

1
2
3
换源

sudo vim /etc/apt/sources.list
1
2
3
4
5
6
7
8
9
10
11
12

替换软件源(清华源)

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted

1
2
3
4
5
6
7

更新软件库
sudo apt-get update

更新依赖
sudo apt-get upgrade

换源
cantt find yilai

* pip安装及更新


pip安装及更新

1
2
3
4
5
6
sudo apt-get install python-pip #python2
sudo apt-get install python3-pip #python3
sudo apt-get remove python-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
hash -r
  • pip已经安装,但是/usr/bin/pip: No such file or directory

    pip: No such file or directory

    • setpool报错

    setpool

    • python 版本切换

      3.6/2.7

      • 1 删除原有链接
      1
      sudo rm /usr/bin/python
      • 2 建立软连接
      1
      sudo ln -s /usr/bin/python3.6 /usr/bin/python //3.6 3.5 2.7 可以根据需求更改
    • curl:

    curl

    • 安装curl时报错 curl : Depends: libcurl3-gnutls (= 7.47.0-1ubuntu2.12) but 7.58.0-2ubuntu3.6 is to be installed
    • 提示安装curl依赖的libcurl版本不一致,这个时候用purge命令重新安装就好了
  • 部署YOLO+TRT

    • 下载源码:
1
git clone [https://github.com/jkjung-avt/tensorrt_demos.git](https://github.com/jkjung-avt/tensorrt_demos.git)
* 安装onnx模型:
1
2
sudo apt-get install protobuf-compiler libprotoc-dev
sudo pip3 install onnx==1.4.1


​ * 编译下plugins文件夹里的相关文件

1
make
* 转换yolo文件 * 1.将.weight模型文件转换成 .onnx 格式
1
python3 yolo_to_onnx.py -m yolov4-tiny-416
* 2.再将 .onnx文件转换成 .trt 格式
1
python3 onnx_to_tensorrt.py -m yolov4-tiny-416
* 3.启用摄像头实时检测
1
python3 trt_yolo.py --usb 0 -m yolov4-tiny-416     

  • 结果
    • 实时检测帧数在40左右,下一篇接着总结NMS、精准度等调参问题


  • 结论
    • 网上的教程鱼龙混杂,推荐一篇不错的博文。起初在nano上部署成功,后来尝试按照自己总结的这套方法在NX上复现。没有啥大问题的话,不到一个小时环境部署就可以完成,祝你好运!