您的位置:首页 > 编程语言 > PHP开发

YOLO on TX1

2017-04-18 22:13 204 查看

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-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo 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.git cd ~/opencv
mkdir build
cd 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 -j8
sudo 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/pkgconfig
export PKG_CONFIG_PATH


安装浏览器

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

sudo add-apt-repository  ppa:chromium-daily/stable
sudo apt-get update
sudo apt-get install chromium-browser


安装配置darknet

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


修改Makefile,打开GPU、CUDNN、OPENCV

GPU=1
CUDNN=1
OPENCV=1
DEBUG=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左右。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息