DPM检测模型 VoC-release 5 linux 下编译运行
(转载请注明作者和出处 楼燚(yì)航的blog :http://www.cnblogs.com/louyihang-loves-baiyan/ 未经允许请勿用于商业用途)
DPM目前使非神经网络方法里面较好的目标检测程序,作者呢也是Fast RCNN的作者 Ross Girshick,真的是牛人,这个模型是在2010年被提出的DPM的全称也就是Deformable Part Model,可变形部件模型。其主要思想是根据弹簧形变模型提出的,也就是一个目标物时分为主部分和子部件,分别叫做root和part,很多时候我们需要检测的物体并不是单个模板下的,比如之前我用的opencv 下的svm来做检测,还有adaboost下用haar来做检测,他们的模型非常单一,是不能很好的适应复杂场景的检测需求。
DPM模型在训练的时候是分为主部件和子部件,在检测的时候就有了root filter 和 part filter,两者结合做检测,part filter在root filter,类比的话,比如人的手和脚是可以明显活动的,四肢非常灵活,显然单一的模板来检测人是不严密的,而其检测过程可以归纳为一个主部件的得分以及他子部件的得分的和,并且需要减去子部件偏离的cost,作为其最终得分。他的一个概念模型可以看一下下图

看一下我训练的车脸模型,模型里用的是Hog特征,梯度方向直方图,下面是特征模型的可视化结果:这里用的6个部件

网络上说voc-release5的资料比较少,大部分还是用的DPM代码的3.1或者4.1版本,最新的是voc-release5八本,ross在里面加入了star-cascade还有新的模型语法car-grammar,检测的速度比直接的块了不少。首先我说明一下如何编译voc-release5的matlab工程
首先下载DPM的工程源码,给出链接:
http://www.cs.berkeley.edu/~rbg/latent/
这里我觉得最好还是在linux下或者 os x下进行训练,不要在windows下进行训练,你最后得到的也是个mat的模型文件,不要徒增工作量,毕竟是matlab的源代码也不能直接应用于工程,怎么方便怎么配置。
由于我的ubuntu上安装的是matlab 2014a,根据readme的提示,需要先编译,再运行demo。一般来说现在的ubuntu比较主流的是14.04 LTS,其自带的gcc 版本比较高,我这里是4.8,但是Matlab最高支持到gcc4.7因此需要apt-get 安装一下4.7的gcc,再调整一下编译器的优先级选项,最后gcc -v 输出一下当前默认的gcc版本好是多少
sudo apt-get install gcc-4.7 g++-4.7 g++-4.7-multilib gcc-4.7-multilib
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.7 100
sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.8 50
gcc -v
接下来gcc的报错应该是没有了,但是编译还是会出错
看到报错,在compile.m中
mex error using
Unknown MEX argument '-o'.
在compile.m中有几处-o,列了两处
eval([mexcmd ' gdetect/fconvsse.cc -o fconv']);
eval([mexcmd ' gdetect/fconv_var_dim_MT.cc -o fconv_var_dim']);
-o的参数可能是因为mex的版本导致的参数指令不兼容,因此将-o 改成-output就可以了
再次运行demo.m文件,即可看到DPM模型的检测演示如下:
下面整个可视化模型是基于VOC2007训练的,可以看到有3个方向的模型,第一个是车辆的左斜视图,第二个是车辆的右斜视图,第三个是正视图,可以大致展现车的轮廓:

待检测的图像:

检测的示意图,其中红框是最后的检测位置,蓝框是局部的部件:

DPM检测模型 VoC-release 5 linux 下编译运行的更多相关文章
- linux下编译运行驱动
linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方 ...
- linux下编译运行TIGL Viewer步骤
linux下编译运行TIGL Viewer步骤(仅为了正确编译安装的话直接跳到步骤3) 1. linux发行版选择:由于linux发行版众多,不同版本包含的库版本可能存在差别,因此需要选择正确的版本. ...
- linux下编译运行C程序
GCC是Linux操作系统下一个非常重要的源代码编译工具,有着许多重要的选项,支持许多不同语言的编译,如C.C++.Ada.Fortran.Objective.Perl.Python.Ruby以及Ja ...
- 在linux下编译运行C++程序
头一回...把windows下的程序挪到linux下,代码见这篇随笔 1.编译ZTHREAD,使用./configure失败,直接编译的,方法还是上面提到的那篇随笔 2.编译源码,最开始用的cc,后来 ...
- linux下编译qt5.6.0静态库——configure配置
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- linux下编译gcc6.2.0
linux下编译gcc6.2.0 在archlinx的下gcc已经更新到6.2.1了,win10的WSL下还是gcc4.8.官方源没有比较新的版本,于是自己编译使用. GCC6的几个新特性 GCC 6 ...
- linux下编译安装boost库
linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...
随机推荐
- ScrollMagic – 酷毙了!超炫的页面滚动交互效果
ScrollMagic 是一款 jQuery 插件,它让你可以像使用进度条一样使用滚动条.如果你想在特定的滚动位置开始一个动画,并且让动画同步滚动条的动作,或者把元素粘在一个特定的滚动位置,那么这款插 ...
- 25佳漂亮的结婚邀请 & 婚礼请柬网站设计
互联网给我们的生活带来了巨大的变化,越来越多的事情可以通过网络完成.下面向大家分享一组结婚邀请网站以及婚礼请柬网站的设计案例,如果你也正想制作这样的网站,相信这些优秀案例能够带给你很大的帮助. 您可能 ...
- EventRay UI Kit – Web & Mobile 的素材
EventRay UI 工具包是一个免费的,可以现成使用的界面套件.包括多个为 Web 和移动应用设计的布局和 UI 元素.所有你需要做的就是下载这个 UI 工具包,点击源码下载打开的页面即可下载. ...
- Sublime text 3 快捷键的使用
快捷键的便捷使用: ctr+shift+n:打开新的sublime text ctr+shift+w:关闭sublime text ctr+o:打开 某个文件 ctrl+n:新建一个文本 ctrl+w ...
- form中动态生成Radiobutton控件
public partial class GetLabelFields : Form { int tableCount; public GetLabelFields(AxMapControl axma ...
- 操作系统开发系列—13.h.延时操作
计数器的工作原理是这样的:它有一个输入频率,在PC上是1193180HZ.在每一个时钟周期(CLK cycle),计数器值会减1,当减到0时,就会触发一个输出.由于计数器是16位的,所以最大值是655 ...
- iOS 跳转到App Store下载或评论
//跳转到app在AppStore页面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString string ...
- 跳转到自己App的“通知”
if (iOS8) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplicati ...
- 【代码笔记】iOS-检测手机翻转
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- android 转化json日期
/Date(1448356081207)/ public static String changeDate(String time){ String newStr = time.substring(t ...