6、Hello World官网教程(TX2)第一部分

本文档详述了在TX2上使用JetPack4.4.1进行图像分类的步骤,包括刷机、理解cmake、makefile的作用,使用ImageNet程序处理图像和构建自己的图像分类程序。教程覆盖了从安装依赖到运行预训练模型,以及自定义模型的编译和测试。
摘要由CSDN通过智能技术生成

一、准备工作

1、首先你得给你的TX2 刷好机,而且最好刷最新版本Jetpack4.4.1(因为本人刷过3.3的版本,运行代码时会出现很多的问题)
2、教程原地址

二、正式的学习

1、该教程做了哪些

(1)此仓库使用NVIDIA TensorRT将神经网络有效地部署到嵌入式Jetson平台上.
(2)在Jetson上运行推理和转移学习,包括收集自己的数据集和训练自己的模型。它涵盖了图像分类,对象检测和分割。

2、从源头开始构建项目

(1)总体的执行过程
$ sudo apt-get update//更新安装程序列表
$ sudo apt-get install git cmake libpython3-dev python3-numpy//安装python3依赖库和cmake
$ git clone --recursive https://github.com/dusty-nv/jetson-inference//克隆该项目
$ cd jetson-inference//进入到该目录
$ git submodule update --init//更新submodule
$ mkdir build
$ cd build
$ cmake ../
$ make -j$(nproc)
$ sudo make install
$ sudo ldconfig
(2)有些指令为什么要执行?

1、为什么需要cmke、make、makefile

在前面我们通过sudo apt install cmake安装了一个cmake的工具,那么它到底是什么呢?
①是什么?

CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程。

②为什么需要它?它不能构建最终的软件,但是可以产生输出各种各样的makefile或者project文件。

假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。即使是原作者给出了相关的结构文档,对新手来说建立工程的过程依旧是漫长而艰辛的,因此CMake的作用就凸显出来了。原作者只需要生成一份CMakeLists.txt文档,框架的使用者们只需要在下载源码的同时下载作者提供的CMakeLists.txt,就可以利用CMake,在”原作者的帮助下“进行工程的搭建。

③输出了makefile文件后有什么用?

makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具。

④为什么需要makefile?

有效地描述这些文件之间的依赖关系以及处理命令,当个别文件改动后仅执行必要的处理,而不必重复整个编译过程,可以大大提高软件开发的效率。

⑤最终完整的实现逻辑
通过cmake编译cmakelist.txt生成了makefile文件,然后通过make工具就可以解释makefile最终生成可执行文件。
执行make就可以实现自动编译,执行make clean 就可以清楚编译产生的文件,本人博客的makefile专栏有简单的makefile编写,链接如下
2、在刚刚的构建步骤中为什么执行cmake …/?
看下图既可知道。
在这里插入图片描述
此命令将启动CMakePreBuild.sh在Jetson上安装某些必备软件包,该脚本还从Web服务下载经过预训练的网络。

3、make的相关命令的作用
make,仅编译;
make install,编译并安装(比如安装到/usr/bin目录下,然后可以直接使用。因为/usr/bin只有管理员才能向里面添加文件,所以通常要加sudo)
make就是make all,编译用的,具体编译了那些文件要看你的Makefile
make install就是把编译出来的二进制文件,库,配置文件等等放到相应目录下
make clean清除编译结果
具体的东西都在Makefile里面,只不过大部分应用程序的Makefile都是由configure脚本自动生成的,所以Makefile内容都差不多。

上面的构建过程中用到了sudo make install ,更新代码,请记住再次运行它。

4、sudo ldconfig
ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

linux下的共享库机制采用了类似于高速缓存的机制,将库信息保存在/etc/ld.so.cache里边。
程序连接的时候首先从这个文件里边查找,然后再到ld.so.conf的路径里边去详细找。
这就是为什么修改了ld.so.conf要重新运行一下ldconfig的原因
补充一点,ldconfig在/sbin里面。
可参考这篇博主的文章

3、使用ImageNet程序

(1)处理图像

使用TensorRT和imageNet类执行推理,然后叠加分类结果并保存输出图像

首次运行每种模型时,TensorRT将花费几分钟来优化网络。然后将优化的网络文件缓存到磁盘,因此使用该模型的将来运行将加载得更快。

c++的imagenet程序

class imageNet : public tensorNet
{
   
public:
	/**
	 * Network choice enumeration.
	 */
	enum NetworkType
	{
   
		CUSTOM,        /**< Custom model provided by the user */
		ALEXNET,       /**< AlexNet trained on 1000-class ILSVRC12 */
		GOOGLENE
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值