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左右。
相关文章推荐
- 关于FDDB与YOLO的几个问题
- 物体检测的三种网络模型
- yolo_v2的训练过程
- cudnn5.1 安装命令
- YOLO教程之训练自己的数据
- traincascade源码解读
- YOLO:You Only Look Once: Unified, Real-Time Object Detection论文总结
- Ubuntu下配置AP热点(TX1配置热点)
- Selective Search 学习笔记
- 在Jetson TX1上用YOLO训练VOC2007
- OpenCV嵌入式图像处理(三)使用Jetpack安装OpenCV4Tegra
- yolo训练数据
- yolo 源码分析
- TX1 配置caffe
- YOLO源码解析之yolo.c
- YOLO实现之源码分析1
- NVIDIA JETSON TX1刷机重装系统笔记
- Jetson TX1中Caffe安装
- Jetson TX1 安装 ROS
- TX1平台中,OpenCV无法正常调用板载相机的可能原因