【视频开发】【计算机视觉】doppia编译之一:前言及安装CUDA
最近做一个“高清视频人流量检测”的项目,由于对实时性要求较高,我们需要较快的检测速度。在搜索茫茫“论”海后,我在“The Fastest Deformable Part Model for Object Detection”这篇论文中,找到了FFT(DPM)、Proposed Method、以及ACF三种相对较快的行人检测方法。由于在这三种方法中,Proposed Method和ACF方法更快,检测效果更好,所以我将注意力主要集中在PM和ACF上,但浏览作者主页及各大源码下载网站后,我只找到了ACF的开源代码(网址
http://vision.ucsd.edu/~pdollar/toolbox/doc/index.html)。(为老外无私奉献的开源精神点赞!)在调试好ACF程序后发现,发现它处理1920*1080的图像大概要0.2-0.6s左右,没有达到我们项目的要求。但在读完作者的论文Fast
Feature Pyramids for Object Detection后,发现有人实现了它的GPU加速,处理600*480图像它能达到100fps(Pedestrian Detection at 100 Frames per Second),对于这样的速度,显然是符合我们的要求的。在找到GPU加速ACF的开源代码后,就开始了我编译doppia的痛苦之旅(这个加速版ACF的名字叫做doppia,文章最后给出了下载链接)。对于一个之前完全没有接触过Ubuntu等Linux操作系统,没有用过CUDA,更没用它编译过OpenCV的我而言,说它是一种痛苦,真的丝毫不为过。不过值得高兴的是,经历了十天的时间,我终于是把它运行起来啦。(请原谅我的智商以及我捉急的调试能力)
在此写下编译doppia的博客,主要有三个目的:
第一, 当然是为了今后忘记的时候,能有点文字提醒自己怎么做;
第二, 希望这篇博客能给今后需要用到这个开源软件的朋友一点帮助,减轻一点他们的痛苦;
第三, 向doppia的作者以及在编译doppia过程中,给过我帮助的朋友致谢!
好啦,闲话不多说,开始进入正题。
(1) 下载doppia,网址:https://bitbucket.org/rodrigob/doppia,目前为止,doppia有2个版本,v1和v2。这里我调试的是v1,因为v2我一直没调通。(之后如果调通了,我会再更新)
(2) 在调试程序之前,最好先看看doppia中的Readme,了解软件的配置环境。
(3) 检查及配置编译环境 (这里,我就直接列出我的配置环境)
硬件:支持CUDA的NVIDIA显卡(2块NVIDIA显卡的台式机)
注:这里,一定要使用2块显卡都是NVIDIA的台式机。如果一块是NVIDIA,另一块不是的话,在安装CUDA后,极易出现重启开机进不了Ubuntu系统的情况。所以对于笔记本安装CUDA,这里的方法是不适用的,而且目前在网上我也没找到适用的方法。这里主要和显卡驱动有关,ubuntu系统默认使用集成显卡绘2D图,采用独立显卡绘3D图。在安装CUDA同时,NVIDIA驱动也会重新安装,使得独显只参与计算不参与绘制桌面,于是出现了只显示桌面墙纸的2D图(集显可显),而不显示启动器/任务栏这类的3D图标(独显不可显)的情况。
(针对笔记本安装CUDA,网上有人曾提出以下的解决方案/**/,经测试,不管用,但为了保证文章的原始性,在这里我就不删除啦,仅用c++注释符象征性表示一下不可用,请忽略该方法,尽快换电脑。)
/*如果你只有集显+独显的本子,找不到2块NVIDIA显卡的台式机的话,建议你在安装CUDA前修改系统grub文件,方法如下:
打开系统中的grub配置文件:
sudo gedit /etc/default/grub
- 1
- 1
把 “nomodeset”参数加到 GRUB_CMDLINE_LINUX行:
GRUB_CMDLINE_LINUX=”nomodeset”
- 1
- 1
并更新 grub:
sudo update-grub
- 1
- 1
方法引自:http://blog.csdn.net/menglongbor/article/details/7015380
*/
操作系统及相应库
(下面只是我自己的配置,当然你也可以用其他操作系统和不同版本的库)
Ubuntu 14.04 Kylin
gcc 4.8/g++ 4.8
Cmake 2.8
CUDA 7.0
Boost 1.58.0
Opencv 2.4.10
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
(4) 下面就开始doppia的环境配置吧!
(这里要说明,我的大部分方法来自网络,但网上鱼龙混杂,有的方法很好,但也有方法根本行不通,从万千方法里找到正确的实属不易。这里重写一遍,主要意图是让自己和其他朋友今后少走弯路。至于借鉴别人的方法,我会指明方法来源)
首先,安装CUDA。可以说这是让我最头疼的一步,我的本子就是因为CUDA安装的NVIDIA驱动而荡机三次。而在经过这么多天的摸索后,我感觉CUDA的安装和验证都是很简单的(前提是,CUDA安装的NVIDIA驱动不会让你进不了系统。所以,我再次强烈建议,请用显卡都为NVIDIA的台式机)。
安装CUDA前,你要做三步验证工作:
1) 验证你的显卡是否支持GPU编程,在终端(Ctrl+Alt+T,打开终端)输入
lspci | grep -i nvidia
- 1
- 1
它会给出你的显卡信息,上http://developer.nvidia.com/cuda-gpus查看你的显卡是否在CUDA支持产品之列。
2) 查看你的linux版本,终端输入
uname -m && cat /etc/*release
- 1
- 1
返回系统信息后,官网https://developer.nvidia.com/cuda-downloads下载符合自己系统的CUDA版本。
以x86-64的Ubuntu14.04为例,我选择的是下图红线框中的第二个版本。(官网提供三个版本,第一个是在线安装包,第二个是离线安装包,第三个是linux通用版,这里我建议下载第二个,既不用担心断网安装失败,版本也比较稳定)
3) 查看编译器版本,终端输入
gcc –-version
- 1
- 1
你可以下载CUDA安装指导书
http://developer.download.nvidia.com/compute/cuda/7_0/Prod/doc/CUDA_Getting_Started_Linux.pdf核对版本是否符合要求。
这里,我的Ubuntu 14.04系统 自带gcc4.8、g++4.8,符合要求。
(查看g++版本)
g++ –-version
- 1
- 1
4) 完成以上三步验证后,你就可以开始CUDA的安装工作啦!
删除旧NVIDIA驱动
如果是刚装好的Ubuntu系统,其中的开源的NVIDIA显卡驱动是没有激活的,可以跳过这一步,而如果之前NVIDIA驱动已经激活则需要将其卸载掉。卸载命令:
sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove xserver-xorg-video-nouveau
- 1
- 2
- 1
- 2
(第二条命令不知道作用是什么,如果你没有执行成功,也不要紧,继续下面的工作)
重启电脑,进入tty1
接下来重启电脑,进入系统后,快捷键
Ctrl+Alt+F1
- 1
- 1
切换到tty1文字输入界面。(这里建议在切换到tty1之前,把CUDA安装文件放在Home下,这样就不用为记不住文件目录而烦恼啦)
输入账号和密码后,输入
sudo stop lightdm
- 1
- 1
关闭桌面管理。
正式安装CUDA
关闭桌面管理后。接下来正式安装CUDA。输入下列命令,将CUDA安装到本地仓库
(<>中的内容根据自己下载的CUDA版本和Ubuntu系统做修改)
sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
- 1
- 1
(当然,如果你的安装包不在Home下,记得切换目录)
更新本地仓库
sudo apt-get update
- 1
- 1
最后安装CUDA和显卡驱动(CUDA默认路径:/usr/local/cuda)
sudo apt-get install cuda
- 1
- 1
打开桌面管理后,重启电脑
sudo start lightdm
- 1
- 1
(我自己的本子就是在这里重启后进不了系统的,希望你们不会发生这种情况。如果谁有解决方案,也可以留言告诉我一下,在此先谢过)
验证CUDA是否安装成功
进入系统后,记得要设置环境变量,不然系统找不到CUDA的执行文件“nvcc”
(下面这种方式只对此次开机有用,电脑重启后,又会清除,所以每次开机后都要重新设置)
export PATH=/usr/local/cuda-7.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH
- 1
- 2
- 1
- 2
这时,CUDA的安装和配置工作已经完成。
但为了验证CUDA是否安装成功,我们还需以下几步:
查看CUDA编译器版本
(注意,如果没有设置环境变量,可能会提示“nvcc未安装”)
nvcc –V
- 1
- 1
返回类似以下信息
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Mon_Feb_16_22:59:02_CST_2015
Cuda compilation tools, release 7.0, V7.0.27
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
编译CUDA示例代码
进入usr/local/cuda-7.0/samples目录,编译示例
sudo make all -j8
- 1
- 1
编译完成后,进入目录samples/bin/x86_64/linux/release,终端输入
sudo ./deviceQuery
- 1
- 1
如果出现类似以下显卡信息,那么恭喜你,CUDA安装成功。
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 2 CUDA Capable device(s)
Device 0: "GeForce GT 640"
CUDA Driver Version / Runtime Version 7.0 / 7.0
CUDA Capability Major/Minor version number: 3.0
Total amount of global memory: 2048 MBytes (2147287040 bytes)
( 2) Multiprocessors, (192) CUDA Cores/MP: 384 CUDA Cores
GPU Max Clock rate: 902 MHz (0.90 GHz)
Memory Clock rate: 900 Mhz
Memory Bus Width: 128-bit
L2 Cache Size: 262144 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: No
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 4 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
Device 1: "Quadro 600"
CUDA Driver Version / Runtime Version 7.0 / 7.0
CUDA Capability Major/Minor version number: 2.1
Total amount of global memory: 1023 MBytes (1072889856 bytes)
( 2) Multiprocessors, ( 48) CUDA Cores/MP: 96 CUDA Cores
GPU Max Clock rate: 1280 MHz (1.28 GHz)
Memory Clock rate: 800 Mhz
Memory Bus Width: 128-bit
L2 Cache Size: 131072 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65535), 3D=(2048, 2048, 2048)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per multiprocessor: 1536
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (65535, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 3 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
> Peer access from GeForce GT 640 (GPU0) -> Quadro 600 (GPU1) : No
> Peer access from Quadro 600 (GPU1) -> GeForce GT 640 (GPU0) : No
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.0, CUDA Runtime Version = 7.0, NumDevs = 2, Device0 = GeForce GT 640, Device1 = Quadro 600
Result = PASS
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
现在你可以运行release里的例子,来体验一下CUDA的功能。
sudo ./bilateralFilter
- 1
- 1
得到图片
至此,doppia环境配置的第一部分“CUDA的安装”就大功告成啦!!!
(最后,提醒一下,虽然CUDA的deb文件可以直接点击安装,但是不建议这么做,直接点击安装,你根本找不到CUDA的lib库和include文件在哪,之后无法调用)
引用博客:
(1)http://blog.csdn.net/menglongbor/article/details/7015380
(2)http://blog.csdn.net/xizero00/article/details/43227019
(3)https://gist.github.com/bearpaw/c38ef18ec45ba6548ec0
doppia及作者相关介绍链接:
(1)http://blog.csdn.net/xizero00/article/details/43227019
(2)https://bitbucket.org/rodrigob/doppia
【视频开发】【计算机视觉】doppia编译之一:前言及安装CUDA的更多相关文章
- 【视频开发】【计算机视觉】doppia编译之三:编译安装opencv库
这里我介绍2种方法 (1)利用别人写好的脚本编译,相对来说省力一点 上Github下载别人写好的脚本文件,网址 https://github.com/jayrambhia/Install-OpenC ...
- 【视频开发】【计算机视觉】doppia编译之四:安装其他库、编译和运行doppia
(与本节内容无关///////////////////////////保存图片参数为--gui.save_all_screenshots true////////////////////) 在我们安 ...
- 【视频开发】ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
转载地址:http://blog.csdn.net/gubenpeiyuan/article/details/25618177 概要: 目前ONVIF协议家族设备已占据数字监控行业 ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
- WebRTC 音视频开发
WebRTC 音视频开发 webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 7 无线wifi传输视频开发
转载,侵删 7 无线wifi传输视频开发 MT7601的驱动源码提供了两种:AP模式和STA模式源码.此时我使用USB作为AP热点,电脑作为STA模式,并使用ORTP实现无线传输视频 7.1.AP模式 ...
随机推荐
- Linux入侵类问题排查思路
深入分析,查找入侵原因 一.检查隐藏帐户及弱口令 检查服务器系统及应用帐户是否存在 弱口令: 检查说明:检查管理员帐户.数据库帐户.MySQL 帐户.tomcat 帐户.网站后台管理员帐户等密码设置是 ...
- 初学Django基础02 ORM操作
django的ORM操作 之前我们知道了models.py这个文件,这个文件是用来读取数据结构的文件,每次操作数据时都走这个模块 常用字段 AutoField int自增列,必须填入参数 primar ...
- DT6.0框架留言模块漏洞修复
今天早上登入后台,留言被国外乱码注入一大堆,很烦人,得去数据库清空.所以仔细检查dt的留言模块,找到解决办法. 在:module/extend/guestbook.inc.php 大约第10行左右 i ...
- less-6
首先输入id=1和id=1’未报错,均显示You are in.....(如下图所示) 由上图可以看到,如果运行返回结果正确的时候只返回you are in...,不会返回数据库当中的信息了,可以从这 ...
- Ranger安装部署 - solr安装
1. 概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库: Solr是以Lucene为基础实现的文本检索应用服务.Solr部署方式有单机方式.多机Master-Slaver方法. ...
- rs485一主多从的连接方式及通信注意事项
rs485的通信方式看似比较简单,其实通信软件的处理还是有需要注意的. 下图是主机向从机发送信息的示意图,其中485的线都是手牵手相连的,因此主机向下发的时候,其实各个从机都有在接收数据的,只是,从机 ...
- 微信小程序开发工具“当前系统代理不是安全代理”
(1)删除注册表中以proxy开头的项目再次重启 regedit进入[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Inter ...
- php之大文件分段上传、断点续传
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
- 【JZOJ6216】【20190614】序列计数
题目 一个长为\(N\)的串\(S\),\(M\)询问区间\([l,r]\)不同的子串个数,字符集为$ C $ \(N ,M \le 10^5 \ , \ C \le 10\) 题解 这题非常套路.. ...
- 【loj2983】【WC2019】数树
题目 两颗\(n\)个点的树T1和T2,有\(y\)种颜色; 现在给每个点染色,要求公共边端点的颜色相同,求: 1.op=0 , T1和T2都确定,求合法染色方案数: 2.op=1 , T1确 ...