【AI达人创造营三期】中国交通标志识别-JetsonNano部署

1. 项目简介

  • 本项目针对JetsonNano开发板进行项目部署落地,并完成真实场景的交通标志识别。
  • 本部署项目依托于【校园AI Day-AI workshop】中国交通标志图像分类项目,在该项目训练好的模型基础上进行开发板部署落地。
  • 对该项目训练好的PaddleDetection中的Picodet模型进行导出,进而完成开发板部署整体流程,包括开发板组装、系统烧入、磁盘空间扩充、分配虚拟内存、导入模型、安装摄像头、C++部署等几个主要步骤。
  • 下面将进行详细介绍。

2. 开发板组装

本项目主要用到的硬件包括:

  1. Jetson nano开发板主体
  2. 支持HDMI的显示器
  3. 鼠标
  4. 键盘
  5. 网线(用于给开发板联网导入训练好的模型等)
  6. CSI摄像头(用于实时检测)
  7. 32G的SD存储卡(用于烧录系统)

注意在脚针那一侧的侧盖可以先不用安装,因为后续要用到侧面脚针。组装完成的开发板如下图所示:

在这里插入图片描述

3. 系统烧录

系统烧录主要分两步骤,虚拟机烧录eMMC文件以及SD卡烧录系统,两步骤缺一不可,否则可能会导致开发板开不开机。

3.1 虚拟机烧录

首先要在自己的电脑上安装VMware虚拟机。注意:在设置虚拟机配置的时候要开启USB接口,也就是让虚拟机能够识别你电脑的物理USB接口接入的设备。

然后,因为开发板提供了系统优盘,我们可以导出U盘中提供的clb_jetson.vmx文件,然后在虚拟机窗口选择打开虚拟机,然后选择该文件代开,如下图所示:

在这里插入图片描述

然后使用跳线连接开发板侧面的第二脚针和第三脚针。如下图所示:

在这里插入图片描述

接下来,使用usb连接线连接电脑与开发板,并且连接电源线为开发板通电。

在这里插入图片描述

然后,电脑的虚拟机就可以识别到USB设备(开发板)了,进而就可以进行eMMC文件烧录,烧录具体步骤请参考系统烧录

3.2 烧录SD卡

在PC上安装U盘中提供的 Balena Etcher 烧录工具。

在这里插入图片描述

然后,将SD储存卡放入读卡器,并插入电脑。具体系统烧录过程请参考:安装系统

最后,拔掉与电脑之间的usb连接线,拔掉跳线。保留电源线,使用hdmi线连接显示器,即可开机。

在这里插入图片描述

4. 扩充磁盘空间

使用如下命令安装磁盘工具:
sudo apt-get install gparted

然后打开磁盘工具,在右上角选择sda,然后右键sda磁盘条,选择resize,然后将磁盘条拖到最大空间,应用即可。

5. 释放虚拟内存

扩充内存空间是必要的,显存各个内存是共享受的,物理内存比较小只有4G,所以应该加上。Swap交换空间是在硬盘上,当物理内存RAM用完时,会开始使用。交换空间可以采用专用交换分区或交换文件的形式。在大多数情况下,不存在交换分区,因此唯一的选择是创建交换文件。具体扩充步骤请参考:增加交换空间大小

6. 摄像头安装

  • 注意:在安装摄像头的时候需要断电
  • 首先把Nano的这个CSI接口的这个销子轻轻拔起,注意要小心,千万别拔断
  • 然后插入CSI摄像头的排线线缆,注意方向和正反,别插反了
  • 接下来把刚才拔起来的销子压下去固定好
  • 别忘记把摄像头的保护贴膜去掉

在这里插入图片描述

安装摄像头以后使用如下命令查看是否有摄像头接入,能否被系统识别:

在确定有摄像头设备接入后,使用第二个命令开启视像头,进行摄像头测试:

ls /dev/vid*

gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e

7. C++部署

7.1 环境准备

安装所需的包, c m a k e cmake cmake g + + g++ g++ p a t c h e l f patchelf patchelf(用于编译),在终端中使用如下命令进行安装。

  • 注意:使用如下命令安装的cmake版本过低,会导致后续部署失败,需要手动升级,或者是直接手动安装高版本cmake。
    步骤1:访问cmake官网,找到对应的版本。
  • 本项目使用的开发板需要选择Linux aarch64平台,然后选择合适版本的压缩包cmake-3.23.4-linux-aarch64.tar.gz进行手动下载

在这里插入图片描述

步骤2:解压安装
找到download目录下刚刚下好的安装包,打开终端使用如下命令进行解压缩:
tar -zxvf cmake-3.23.4-linux-aarch64.tar.gz
然后可以将解压好的文件夹移动到/opt/cmake3.23目录下(/cmake3.23可以根据需要可以自己命名成别的),使用如下命令查看是否安装成功:

cmake -version

若提示此错误:cmake :command not found,说明需要设置一下路径

解决办法:

  • 按照提示需要在终端执行命令:export PATH=/opt/cmake3.23/bin:$PATH
sudo apt-get install build-essential make cmake

sudo apt-get install git g++ pkg-config curl

sudo apt-get install patchelf

7.2 FastDeploy 的 C++ 部署

编译 FastDeploy 的 C++ SDK,使用如下命令先从官网克隆FastDeploy,然后进行编译:

/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/目录下的即为编译产出的C++部署库。包括C++的实例代码也在里面。

git clone https://github.com/PaddlePaddle/FastDeploy

cd FastDeploy

mkdir build && cd build

cmake .. -DBUILD_ON_JETSON=ON -DENABLE_VISION=ON -DCMAKE_INSTALL_PREFIX=${PWD}/fastdeploy_cpp_sdk

make -j8

make install

7.3 Picodet模型部署

步骤1:导入依赖库

注意:依赖库导入环境变量的脚本在/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/fastdeploy_init.sh需要我们在终端中使用如下命令导入:

source /home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/fastdeploy_init.sh

步骤2:修改源码

FastDeploy 提供的示例代码在以下路径:

/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/examples/vision/detection/paddledetection/cpp/infer_picodet.cc

  • 但是使以上路径中的infer_picodet.cc文件直接编译的话,不能调用摄像头,只能本地推理,因此需要将该infer_picodet.cc文件内容进行改动。
  • 修改好的infer_picodet.cc文件已经在本项目aistudio目录下了,可以将其下载下来,替换原来的infer_picodet.cc文件。
  • 这样,在接下来的编译后就能调用摄像头进行实时推理了。

在这里插入图片描述


步骤3:编译

需要我们进入到此目录下开启终端:/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/examples/vision/detection/paddledetection/cpp/

然后使用如下命令进行编译:

mkdir build && cd build

cmake .. -DFASTDEPLOY_INSTALL_DIR=YourPathTo/fastdeploy_cpp_sdk

cpp_sdk

make -j

步骤4:推理
  • 进入到/home/nvidia/FastDeploy/build/fastdeploy_cpp_sdk/examples/vision/detection/paddledetection/cpp/build目录,可找到编译后的可执行文件: infer_picodet_demo
  • 将我们之前训练好的 PicoDet 模型和测试图片拷贝到当前build目录下
  • 使用如下命令进行推理
  • infer_picodet_demo:代表使用的推理文件
  • ./picodet_s_320_coco_lcnet:表示要使用的训练好的推理模型
  • 036_1_0002_1_j.png:表示要推理的图片(因为源码中没改图片传入,所以实时推理的时候也需要给一张图片路径),但是不影响启动摄像头实时推理
  • 命令中最后那个0:代表使用CPU推理;也可选择2:代表GPU上TensorRT推理(TRT推理加载时间比较长,请耐心等待)。根据需要选择。
  • 使用如下命令进行推理:
./infer_picodet_demo ./picodet_s_320_coco_lcnet 036_1_0002_1_j.png 2

8. 实时推理效果展示

最终选择了GPU上TensorRT推理,推理效果如下图中所示,可以看出经过部署,能够将不同的交通标志进行识别与分类。


本地推理结果如下所示:

在这里插入图片描述

实时推理结果如下所示:

在这里插入图片描述

在这里插入图片描述

请点击此处查看本环境基本用法.

Please click here for more detailed instructions.

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐