【入门篇】Jetson TX2深度学习Inference初体验
前面如果已经在Jetson TX2安装好JetPack和Caffe(【入门篇】一个小白在Jetson TX2上安装caffe的踩坑之旅 ),我们接下来可以尝试在Jetson TX2上跑一些深度学习的测试代码。
NVIDIA提供了套教程,教程里包含了开发指南、TensorRT示例代码,甚至包括ImageNet和DetectNet示例在内的预先训练的网络模型,让您能够在Jetson TX1/TX2开发套件上加载并运行预训练的深层神经网络,并学习如何使用自己的数据集重新培训网络用来生产演示(点击阅读原文,观看完整官方教程)
今天我们来学习在TX2上用ImageNet来运行几个预训练的图像分类的代码。
下面是我们的运行步骤,这个步骤也是完全遵照NVIDIA的教程,我们都实际跑成功了:
1
NVIDIA提供了一个“源码”,是一款基于tensorr的深度学习原语,用于在实时的摄像头中运行google/alexnet,可用于做图像识别和具有定位功能的步行检测网络(即提供边界框),以及分割。
所以首先我们需要在Jetso上用源码进行编译:
1. 在TX2上安装git和cmake:
$ sudo apt-get install git cmake
2. 从 jetson-inference 源上复制:
$ git clone http://github.com/dusty-nv/jetson-inference
3.配置cmake:
$ cd jetson-inference
$ mkdir build
$ cd build
$ cmake ../
4.编译项目:
$ cd jetson-inference/build
$ make
运行到这一步,可能会出现错误,提示nvidia.app.box.com链接不上,导致模块下载不下来。
我也没有什么特别好的解决方式,况且我的网络也已经了,但也是出了这个问题。在这步卡了半天,换了同事重复执行以上步骤几次后,居然就链接上了....
链接上后各种编译需要花费一些时间,但是等待的时间是值得的。如果没有意外,环境就配置好了。这个时候我们查看一下Jetson-inference下有哪些文件:
2
接下来我们开始用Imagenet来做图像分类。
首先,尝试使用imageNet控制台程序来测试一些示例图像中的imageNet识别。它加载一个图像,使用TensorRT和imageNet类来执行推断,然后覆盖分类并保存输出图像。
首先进入此目录:
$ cd jetson-inference/build/aarch64/bin
我们进到这个目录里也可以看到已经有不少图片
然后,用imagenet-console程序对一个示例图像进行分类。imagenet控制台接受两个命令行参数:输入图像的路径和输出图像的路径。
按照教程,我们去识别一个橙子
$ ./imagenet-console orange_0.jpg output_0.jpg
运行结果显示这个图案97%的可能性是橙子
举一反三,我们再测试一个文件夹里的图案,比如一个鸟的图案,它的文件名是qqq.jpg:
$ ./imagenet-console qqq.jpg output_0.jpg
运行结果显示这个图案99%的可能性是知更鸟类
你也可以测试其它的图案,会不会开始有点感觉了?
3
接下来我们测试实时摄像头识别演示
与上一个示例类似,实时图像识别演示在/aarch64/bin中被称为imagenet-照相机。它运行在实时的摄像机流上,取决于用户参数,加载google lenet或alexnet使用TensorRT。
$ ./imagenet-camera googlenet
$ ./imagenet-camera alexnet
TX2自带摄像头设备识别出的图案类别显示在窗口标题栏上。默认情况下,应用程序可以识别多达1000种不同类型的对象,因为google lenet和Alexnet在ILSVRC12 ImageNet数据库中进行了培训,该数据库包含1000类对象。您可以在数据/网络/ilsvrc12 synsetwords.txt中找到包含1000种对象的名称的映射。
来吧,应该是可以了。注意,TX2摄像头出厂时候镜头贴了一层保护膜,你可以把它去掉,显示会更清晰!
我放了一个招财猫储蓄罐在摄像头面前
显示器显示86%可能性是~~茶壶~~确实有点像茶壶啊!
大家可以玩起来了!
欢迎大家继续关注我们的公众号,更欢迎大家能跟我们一起做踩坑教程。
为了完成本次教程,Ladycat也贡献了力量!
- C#新功能--命名参数与可选参数
- 这或许是对小白最友好的python入门了吧——14,遍历字典
- C#新功能--命名参数
- Tomcat 安全配置与性能优化
- 【机器学习】伪标签(Pseudo-Labelling)的介绍:一种半监督机器学习技术
- 这或许是对小白最友好的python入门了吧——13,字典初识
- PHP 安全与性能
- 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...
- Linux 系统与数据库安全
- 这或许是对小白最友好的python入门了吧——12,列表深入体验
- 初识SqlLite ---.net连接数据库
- 【实践操作】:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器
- 这或许是对小白最友好的python入门了吧——11,if语句初体验
- 你的网站做好神马搜索优化了吗?神马搜索站长工具提交
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法