当前位置:   article > 正文

JeTSON Xavier NX TX2_NX 暗转yolov5 v6.2使用Tensorrt加速实现USB摄像头和CSI摄像头的目标识别及采坑记录_yolov5目标检测+tensorrt加速+csi摄像头调用

yolov5目标检测+tensorrt加速+csi摄像头调用

本文是参考各位博客朋友的笔记做了实操整理勿喷。

硬件设备nvidia JETSON NX TX2_NX 

软件版本BSP3273(Jetpack4.6.3)再次分享一下刷机指导

Jetson Linux R32.7.3

NVIDIA® Jetson Linux 驱动程序包是 Jetson™ 的主板支持包。它包括Linux内核,UEFI引导加载程序,NVIDIA驱动程序,闪存实用程序,基于Ubuntu的示例文件系统以及Jetson平台的更多内容。

NVIDIA Jetson Linux 32.7.3

Jetson Linux 32.7.3 是 Jetson Linux 32.7.1 之上的次要版本,包含安全修复。其余功能与 Jetson Linux 32.7.2 相同。它支持所有Jetson模块:Jetson AGX Xavier系列,Jetson Xavier NX系列,Jetson TX2系列,Jetson TX1和Jetson Nano。还支持所有 Jetson 开发人员工具包。

Jetson Linux 32.7.3 包含在 JetPack 4.6.3 中

有关详细文档,请参阅在线 Jetson Linux 开发人员指南

支持的功能

  • 支持带有海力士内存的 Jetson TX2 模块:SKH 161-0434-100 H9HCNNNBKUMLXR-NEE

Jetson Linux 上的 Vulkan 支持

下载和链接


要访问其他 Jetson Linux 发布页面,请访问 Jetson Linux 存档

Previous Jetson Linux Versions版本查看

JETSON LINUX VERSIONJetson AGX XavierJetson AGX Xavier IndustrialJetson Xavier NXJetson TX2 NXJetson TX2Jetson TX2iJetson TX2 4GBJetson TX1Jetson Nano
32.7.3 >

November 2022

32.7.2 >

April 2022

32.7.1 >

February 2022

32.6.1 >

August 2021

32.5.2 >

July 2021

32.5.1 >

February 2021

32.5 >

January 2021

          官方开发套件使用sdkmanger工具刷完对应的jetpack和OS镜像即可,第三方厂家的按照他们的指导手册刷机到此。

系统和jetaoack安装完查看cuda版本的命令nvcc -V无法输出,在~/.bashrc文件内添加如下内容即可。

  1. export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
  2. export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
  3. export CUDA_ROOT=/usr/local/cuda

         保存退出后   source ~/.bashrc                                                                                                                                                                                                                                                                                                                                                                                                                               使用可视化界面查看的方法如下

  1. sudo apt-get install python3-pip
  2. sudo -H pip3 install jetson-stats
  3. sudo jtop

 二、安装pip3 并配置所需要的库

  1. sudo apt-get update
  2. sudo apt-get install python3-pip python3-dev -y
  3. sudo apt-get install build-essential make cmake cmake-curses-gui -y
  4. sudo apt-get install git g++ pkg-config curl -y
  5. sudo apt-get install libatlas-base-dev gfortran libcanberra-gtk-module libcanberra-gtk3-module -y
  6. sudo apt-get install libhdf5-serial-dev hdf5-tools -y
  7. sudo apt-get install nano locate screen -y

三、安装所需的依赖

  1. sudo apt-get install libfreetype6-dev -y
  2. sudo apt-get install protobuf-compiler libprotobuf-dev openssl -y
  3. sudo apt-get install libssl-dev libcurl4-openssl-dev -y
  4. sudo apt-get install cython3 -y
  5. sudo apt-get install curl
  6. sudo apt-get install libssl-dev libcurl4-openssl-dev

 四、安装opencv的系统级依赖,一些编解码的库

  1. sudo apt-get install build-essential -y
  2. sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y
  3. sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev -y
  4. sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev -y
  5. sudo apt-get install libxvidcore-dev libx264-dev -y
  6. sudo apt-get install libatlas-base-dev gfortran -y
  7. sudo apt-get install ffmpeg -y

 五、更新 cmake
这一步是必须的,因为arm架构的很多东西都要从源码编译,下面是3.13之前使用3.20也是可以的

  1. wget http://www.cmake.org/files/v3.13/cmake-3.13.0.tar.gz
  2. tar xpvf cmake-3.13.0.tar.gz cmake-3.13.0/ #解压
  3. cd cmake-3.13.0/
  4. ./bootstrap --system-curl # 慢
  5. make -j4 #慢
  6. echo 'export PATH=~/cmake-3.13.0/bin/:$PATH' >> ~/.bashrc
  7. source ~/.bashrc #更新.bashrc

 如果遇到问题 在cmake 上找不到CURL(缺少: CURL_LIBRARY CURL_INCLUDE_DIR)
其实就是上面下载安装依赖和库的时候没安装这两项,补上就好了:

  1. sudo apt-get install curl
  2. sudo apt-get install libssl-dev libcurl4-openssl-dev

 一个小tips:
jetson 设备会出现大容量设备无法挂载的情况,一条安装命令解决:   

sudo apt-get install exfat-utils

  六、安装 pytorch

注意:为啥不使用torch官网给出的命令安装,只要cpu是arm芯片,无论是windows linux maxos都不能使用官网命令!

下载pytorch1.8 nvidia 官网torch 带cuda 版本的whl文件下载地址
这个whl文件 在torch 官网是找不到 aarch 版本的,在github上也有 aarch 别的各个版本的 aarch离线whl 文件下载网址,但是这些都不带 cuda,都是cpu 版本。实在找不到可以私信我发你。

pytorch

  1. sudo apt-get install python3-pip libopenblas-base libopenmpi-dev libomp-dev
  2. pip3 install Cython
  3. pip3 install numpy torch-1.10.0-cp36-cp36m-linux_aarch64.whl

torchvision

  1. $ sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
  2. $ git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision # see below for version of torchvision to download
  3. $ cd torchvision
  4. $ export BUILD_VERSION=0.11.1 # where 0.x.0 is the torchvision version
  5. $ python3 setup.py install --user

如果这里出现了 illegal instruction(core dumped)错误
错误的原因是没有添加系统变量,因为jetson系列开发板的核心架构非常规。
终端打开:

sudo vi ~/.bashrc

在最底部加上:

export OPENBLAS_CORETYPE=ARMV8

然后:source ~/.bashrc 一下,再进行操作:

  1. cd torchvision # 进入到这个包的目录下
  2. export BUILD_VERSION=0.11.1
  3. python3 setup.py install --user

可能会自动安装 pillow 9.5.0版本,这时候pillow 的版本过高
在python3 环境中导入 torchvision 时报错如下:
 

SyntaxError: future feature annotations is not defined

 检验一下,是否安装成功:

python3
import torch
import torchvision
print(torch.cuda.is_available())    # 这一步如果输出True那么就成功了!
exit()    # 最后退出python编译
或者直接复制如下代码查看即可

  1. nvidia@nvidia-desktop:~$ python3 pytorch_ceck.py
  2. 1.10.0
  3. CUDA available: True
  4. cuDNN version: 8201
  5. Tensor a = tensor([0., 0.], device='cuda:0')
  6. Tensor b = tensor([0.4357, 1.5914], device='cuda:0')
  7. Tensor c = tensor([0.4357, 1.5914], device='cuda:0')
  8. nvidia@nvidia-desktop:~$
  9. nvidia@nvidia-desktop:~$
  10. nvidia@nvidia-desktop:~$
  11. nvidia@nvidia-desktop:~$
  12. nvidia@nvidia-desktop:~$ cat pytorch_ceck.py
  13. import torch
  14. print(torch.__version__)
  15. print('CUDA available: ' + str(torch.cuda.is_available()))
  16. print('cuDNN version: ' + str(torch.backends.cudnn.version()))
  17. a = torch.cuda.FloatTensor(2).zero_()
  18. print('Tensor a = ' + str(a))
  19. b = torch.randn(2).cuda()
  20. print('Tensor b = ' + str(b))
  21. c = a + b
  22. print('Tensor c = ' + str(c))

八、下载 yolov5-6.2源码 

       GitHub - ultralytics/yolov5 at v6.2

  1. git clone --branch v6.2 https://github.com/ultralytics/yolov5.git
  2. cd yolov5
  3. git clone --branch yolov5-v6.2 https://github.com/wang-xinyu/tensorrtx.git

  不放心可以先查一下版本

  1. nvidia@nvidia-desktop:~/yolov5$ git log
  2. commit d3ea0df8b9f923685ce5f2555c303b8eddbf83fd (HEAD, tag: v6.2)
  3. Author: Glenn Jocher <glenn.jocher@ultralytics.com>
  4. Date: Wed Aug 17 11:59:01 2022 +0200
  5. New YOLOv5 Classification Models (#8956)
  6. * Update
  7. * Logger step fix: Increment step with epochs (#8654)
  8. * enhance
  9. * revert
  10. * allow training from scratch
  11. * [pre-commit.ci] auto fixes from pre-commit.com hooks
  12. for more information, see https://pre-commit.ci
  13. * Update --img argument from train.py
  14. single line
  15. * fix image size from 640 to 128
  16. * suport custom dataloader and augmentation
  17. * [pre-commit.ci] auto fixes from pre-commit.com hooks
  18. for more information, see https://pre-commit.ci
  19. * format
  20. * Update dataloaders.py
  21. * Single line return, single line comment, remove unused argument
  22. * address PR comments
  23. * fix spelling
  24. * don't augment eval set
  25. * use fstring
  26. * update augmentations.py
  27. * new maning convention for transforms
  1. nvidia@nvidia-desktop:~/yolov5$ git clone -b yolov5-v6.2 https://github.com/wang-xinyu/tensorrtx.git
  2. Cloning into 'tensorrtx'...
  3. remote: Enumerating objects: 2317, done.
  4. remote: Counting objects: 100% (84/84), done.
  5. remote: Compressing objects: 100% (67/67), done.
  6. remote: Total 2317 (delta 33), reused 51 (delta 17), pack-reused 2233
  7. Receiving objects: 100% (2317/2317), 1.94 MiB | 4.40 MiB/s, done.
  8. Resolving deltas: 100% (1464/1464), done.
  9. Note: checking out '165b0a428c356ab9e2cb8d2c8f3d4aae3ea74eac'.
  10. You are in 'detached HEAD' state. You can look around, make experimental
  11. changes and commit them, and you can discard any commits you make in this
  12. state without impacting any branches by performing another checkout.
  13. If you want to create a new branch to retain commits you create, you may
  14. do so (now or later) by using -b with the checkout command again. Example:
  15. git checkout -b <new-branch-name>
  16. nvidia@nvidia-desktop:~/yolov5$ git log
  17. commit d3ea0df8b9f923685ce5f2555c303b8eddbf83fd (HEAD, tag: v6.2)
  18. Author: Glenn Jocher <glenn.jocher@ultralytics.com>
  19. Date: Wed Aug 17 11:59:01 2022 +0200
  20. New YOLOv5 Classification Models (#8956)

 安装所需依赖;

pip3 install scikit-build
pip3 install -r requirements.txt

执行前注释掉内部的torch和torchvision 

  1. # YOLOv5 requirements
  2. # Usage: pip install -r requirements.txt
  3. # Base ----------------------------------------
  4. matplotlib>=3.2.2
  5. numpy>=1.18.5
  6. opencv-python>=4.1.1
  7. Pillow>=7.1.2
  8. PyYAML>=5.3.1
  9. requests>=2.23.0
  10. scipy>=1.4.1
  11. #torch>=1.7.0
  12. #torchvision>=0.8.1
  13. tqdm>=4.64.0
  14. protobuf<=3.20.1 # https://github.com/ultralytics/yolov5/issues/8012
  15. # Logging -------------------------------------
  16. tensorboard>=2.4.1
  17. # wandb
  18. # clearml
  19. # Plotting ------------------------------------
  20. pandas>=1.1.4
  21. seaborn>=0.11.0
  22. # Export --------------------------------------
  23. # coremltools>=5.2 # CoreML export
  24. # onnx>=1.9.0 # ONNX export
  25. # onnx-simplifier>=0.4.1 # ONNX simplifier
  26. # nvidia-pyindex # TensorRT export
  27. # nvidia-tensorrt # TensorRT export
  28. # scikit-learn==0.19.2 # CoreML quantization
  29. # tensorflow>=2.4.1 # TFLite export (or tensorflow-cpu, tensorflow-aarch64)
  30. # tensorflowjs>=3.9.0 # TF.js export
  31. # openvino-dev # OpenVINO export
  32. # Extras --------------------------------------
  33. ipython # interactive notebook
  34. psutil # system utilization
  35. thop>=0.1.1 # FLOPs computation
  36. # albumentations>=1.0.3
  37. # pycocotools>=2.0 # COCO mAP
  38. # roboflow

python3 detect.py --source 0

报错如下:

TypeError: unlink() got an unexpected keyword argument 'missing_ok'

不会改直接先屏蔽

nvidia@nvidia-desktop:~/yolov5$ sudo vi /home/nvidia/yolov5/utils/downloads.py

 File "/home/nvidia/yolov5/utils/downloads.py", line 47, in safe_download
    file.unlink(missing_ok=True)  # remove partial downloads
TypeError: unlink() got an unexpected keyword argument 'missing_ok 

注释掉第47行居然通过了。

 额,误差好大。

  1. 源码配置说明
  2. 在命令行参数选择模型 n/s/m/l/x/n6/ns/s6/m6/l6/x6
  3. 输入尺寸的定义在yololayer.h
  4. 类别数的定义在yololayer.h中,如果是自定义模型,不要忘记修改
  5. INT8/FP16/FP32可以通过yolov5.cpp中的宏进行选择
  6. GPU ID可以通过yolov5.cpp中的宏指定
  7. NMS阈值的设置在yolov5.cpp中
  8. BBox置信度阈值的设置在yolov5.cpp中
  9. Batch size的设置在yolov5.cpp中

3. 运行
3.1 .pt转.wts
tensorrtx项目通过tensorRT的Layer API一层层搭建模型,模型权重的加载则通过自定义方式实现,通过get_wts.py文件将yolov5模型的权重即yolov5.pt保存成yolov5.wts,生成的yolov5.wts文件即作者自定义的权重文件方便后续加载使用。

权重的生成在本地完成即可,将转换生成的yolov5.wts文件拷贝回到yolov5文件夹下

yolov5s.wts文件生成指令如下:

  1. nvidia@nvidia-desktop:~/yolov5$ mkdir weights
  2. nvidia@nvidia-desktop:~/yolov5$ cp yolov5s.pt weights/
  3. nvidia@nvidia-desktop:~/yolov5$ python3 gen_wts.py -w weights/yolov5s.pt yolov5s.wts
  4. usage: gen_wts.py [-h] -w WEIGHTS [-o OUTPUT] [-t {detect,cls}]
  5. gen_wts.py: error: unrecognized arguments: yolov5s.wts
  6. nvidia@nvidia-desktop:~/yolov5$ python3 gen_wts.py -w weights/yolov5s.pt -o yolov5s.wts
  7. Generating .wts for detect model
  8. YOLOv5
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/42101
    推荐阅读
    相关标签