YOLO on TX1

来源:互联网 发布:网络系统集成课后答案 编辑:程序博客网 时间:2024/06/16 00:09

TX1系统配置

拿到TX1开发板后首先要刷机,把机器跑起来。

刷机

准备工作

1、一台Ubuntu x86_64电脑,我使用的是装了Ubuntu 16.04的雷蛇笔记本

2、一个显示器,连接在TX1上

3、一个USB HUB(没有的话就只能不停的插拔USB切换了),插在TX1上连接鼠标、键盘还有USB Camera

4、用自带的Micro USB 转 USB 数据线连接电脑与TX1

安装使用JetPack

首先要在电脑上下载NVIDIA提供的JetPack L4T工具,JetPack L4T最近更新了3.0版本,官网链接如下:

https://developer.nvidia.com/embedded/jetpack

注意,下载前需要有NVIDIA开发者账户(申请很快,填个问卷就可以了)。

下载好JetPack-L4T-3.0-linux-x64.run后执行命令赋予可执行权限:

chmod +x JetPack-L4T-3.0-linux-x64.run

运行

sudo ./JetPack-L4T-3.0-linux-x64.run

这里写图片描述

一路next,直到
这里写图片描述

选择TX1
这里写图片描述

我都装过了,所以Action列是no action。把Host端和TX1上的Opencv都disable掉,后续会在TX1上手动安装Opencv3.2。
这里写图片描述

接受license,开始下载和安装(50M上海联通2小时左右)
这里写图片描述

全部安装完成后准备烧录到TX1。我使用的电脑和TX1接在同一个路由器下。
这里写图片描述

这里写图片描述
选择eth0端口,点击Next。

弹出终端
这里写图片描述

按照提示,将TX1设置为强制USB恢复模式,方法如下(操作时注意防静电):

1、关闭设备,拔掉电源

2、用自带的Micro USB 转 USB 数据线连接电脑与TX1

3、连接电源

4、按下电源键

5、按住FORCE RECOVERY 键不放开,同时按一下RESET键,等待两秒钟,松开FORCE RECOVERY 键

完成上述步骤后,可以在电脑上通过 lsusb命令查看是否含有Nvidia Corp设备,确认存在后敲击Enter,开始刷机,观察连接TX1的显示器会看到Ubuntu 16.04的安装和启动。

刷机完成后,TX1相当于一个已经启动的电脑主机,我们连接了显示器、鼠标、键盘,我们可以把配置工作切换到TX1上了。

打开终端,查看Cuda是否安装配置好。在TX1上无法使用nvidia-smi命令查看GUP信息,查看GPU使用

sudo ~/tegrastats

运行TX1上自带的samples试试效果,sample路径:

/home/ubuntu/NVIDIA_CUDA-<version>_Samples/bin/aarch64/linux/release/

oceanFFT 效果

这里写图片描述

如果sample运行失败,又没有特别的提示可以尝试下重启TX1

安装Opencv

在TX1上安装Opencv需要先清理掉home目录下通过JetPack传来的各种安装包,因为TX1的存储空间实在是太小了。

清理完存储空间后,下载编译安装Opencv,参考

http://blog.csdn.net/hrsstudy/article/details/60340699

安装依赖

sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

下载opencv代码,创建编译目录

git clone https://github.com/opencv/opencv.gitcd ~/opencvmkdir buildcd build

配置CMAKE

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

默认WITH_CUDA是打开的,编译会比较久,而且需要较大的存储空间,建议关闭(实在需要的话可以插个U盘,在U盘上编译)。

cmake -D CMAKE_BUILD_TYPE=Release -D WITH_CUDA=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. 

编译、安装

make -j8sudo make install

配置环境变量

sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'sudo ldconfig

打开profile

sudo gedit /etc/profile

添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfigexport PKG_CONFIG_PATH

安装浏览器

TX1刷机后是没有浏览器的,非常不方便,需要自己安装,我使用的chromium。

sudo add-apt-repository  ppa:chromium-daily/stablesudo apt-get updatesudo apt-get install chromium-browser

安装配置darknet

git clone https://github.com/pjreddie/darknetcd darknet

修改Makefile,打开GPU、CUDNN、OPENCV

GPU=1CUDNN=1OPENCV=1DEBUG=0

截止到darknet的第330个Commit,直接编译会报一些OpenCV相关的错误,在CvCapture报错的文件中引入 videoio_c.h后即可解决

#include "opencv2/videoio/videoio_c.h"

下载权重文件

wget http://pjreddie.com/media/files/yolo.weights

编译、运行

./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights -c 1

注意运行时要指定USB camera,开发板上自带的camera需要通过nvidia的插件调用,如果没有USB camera,可以尝试修改YOLO代码,将camera 索引0 换成

"nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)1280, height=(int)720,format=(string)I420, framerate=(fraction)24/1 ! nvvidconv flip-method=2 ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink"

YOLO优化

在TX1上运行YOLO FPS很低,卷积层输入尺寸为416 * 416时FPS只有3.5左右,使用tiny YOLO会快一些,FPS可以达到15左右。而且,经过发现整个检测过程大约有3到5秒左右延迟,加入log后check发现,TX1的性能确实很差,当camera分辨率设置为2560 * 1920 时,从opencv获取图片要1.2秒左右,检测图片中的物体要花费1.0秒左右,加上images数组中的3帧空图片,整个延迟就非常严重了。
优化方案分3部分:
1.修改cfg文件,卷积层网络输入的图像尺寸改为320 * 320。因为训练使用了Multi-Scale Training技巧(训练时cfg文件的random = 1),已经对320 * 320的图像输入做了针对性训练,精度保持一定水准的同时速度会有明显提升。而且网络是全卷积的,可以直接修改输入尺寸。
2.修改demo中的FRAMES宏值为2。
3.将camera的分辨率设为480 * 320。
做完优化后,延迟降到1秒内,FPS上升到7.5左右。

0 0
原创粉丝点击