本文主要是介绍【AI达人创造营三期】中国交通标志识别-JetsonNano部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【AI达人创造营三期】中国交通标志识别-JetsonNano部署
1. 项目简介
- 本项目针对JetsonNano开发板进行项目部署落地,并完成真实场景的交通标志识别。
- 本部署项目依托于【校园AI Day-AI workshop】中国交通标志图像分类项目,在该项目训练好的模型基础上进行开发板部署落地。
- 对该项目训练好的PaddleDetection中的Picodet模型进行导出,进而完成开发板部署整体流程,包括开发板组装、系统烧入、磁盘空间扩充、分配虚拟内存、导入模型、安装摄像头、C++部署等几个主要步骤。
- 下面将进行详细介绍。
2. 开发板组装
本项目主要用到的硬件包括:
- Jetson nano开发板主体
- 支持HDMI的显示器
- 鼠标
- 键盘
- 网线(用于给开发板联网导入训练好的模型等)
- CSI摄像头(用于实时检测)
- 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 cmakesudo apt-get install git g++ pkg-config curlsudo 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/FastDeploycd FastDeploymkdir build && cd buildcmake .. -DBUILD_ON_JETSON=ON -DENABLE_VISION=ON -DCMAKE_INSTALL_PREFIX=${PWD}/fastdeploy_cpp_sdkmake -j8make 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 buildcmake .. -DFASTDEPLOY_INSTALL_DIR=YourPathTo/fastdeploy_cpp_sdkcpp_sdkmake -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.
此文章为搬运
原项目链接
这篇关于【AI达人创造营三期】中国交通标志识别-JetsonNano部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!