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

2023-10-24 04:20

本文主要是介绍【AI达人创造营三期】中国交通标志识别-JetsonNano部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【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 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部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/272660

相关文章

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的