前言:
最近做一个“高清视频人流量检测”的项目,由于对实时性要求较高,我们需要较快的检测速度。在搜索茫茫“论”海后,我在“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程序后发现,发现它处理19201080的图像大概要0.2-0.6s左右,没有达到我们项目的要求。但在读完作者的论文Fast Feature Pyramids for Object Detection后,发现有人实现了它的GPU加速,处理600480图像它能达到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
把 “nomodeset”参数加到 GRUB_CMDLINE_LINUX行:
GRUB_CMDLINE_LINUX=”nomodeset”
并更新 grub:
sudo update-grub
方法引自:http://blog.youkuaiyun.com/menglongbor/article/details/7015380
*/
操作系统及相应库
(下面只是我自己的配置,当然你也可以用其他操作系统和不同版本的库)
Ubuntu 14.04 Kylin
gcc 4.8/g++ 4.8
Cmake 2.8
CUDA 7.0