(转载请注明作者和出处 楼燚(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 下编译运行的更多相关文章

  1. linux下编译运行驱动

    linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方 ...

  2. linux下编译运行TIGL Viewer步骤

    linux下编译运行TIGL Viewer步骤(仅为了正确编译安装的话直接跳到步骤3) 1. linux发行版选择:由于linux发行版众多,不同版本包含的库版本可能存在差别,因此需要选择正确的版本. ...

  3. linux下编译运行C程序

    GCC是Linux操作系统下一个非常重要的源代码编译工具,有着许多重要的选项,支持许多不同语言的编译,如C.C++.Ada.Fortran.Objective.Perl.Python.Ruby以及Ja ...

  4. 在linux下编译运行C++程序

    头一回...把windows下的程序挪到linux下,代码见这篇随笔 1.编译ZTHREAD,使用./configure失败,直接编译的,方法还是上面提到的那篇随笔 2.编译源码,最开始用的cc,后来 ...

  5. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  6. linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  7. linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  8. linux下编译gcc6.2.0

    linux下编译gcc6.2.0 在archlinx的下gcc已经更新到6.2.1了,win10的WSL下还是gcc4.8.官方源没有比较新的版本,于是自己编译使用. GCC6的几个新特性 GCC 6 ...

  9. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

随机推荐

  1. Web前端开发工程师基本要求

    一位好的Web前端开发工程师在知识体系上既要有广度,又要有深度,所以很多大公司即使出高薪也很难招聘到理想的前端开发工程师.现在说的重点不在于讲解技术,而是更侧重于对技巧的讲解.技术非黑即白,只有对和错 ...

  2. JavaScript——99乘法表

    <!DOCTYPE html> <html> <head> <title>99乘法表</title> <style type=&quo ...

  3. css命名书写规范小结。

    单行形式书写风格的排版约束 1.   每一条规则的大括号 { 前后加空格 2.   多个selector共用一个样式集,则多个selector必须写成多行形式 3.   每一条规则结束的大括号 } 前 ...

  4. javascript --- javascript与DOM

    javascript与DOM: 我们来个例子,一个HTML里包含一段文本和一个无序的列表. <p id="intro">My first paragraph...< ...

  5. 记录一下dotnetcore.1.0.0-VS2015Tools.preview2安装不上的问题

    错误提示:未指定错误 解决方案: 从这里下载:https://visualstudiogallery.msdn.microsoft.com/32f1fa1b-cdd5-4bd3-8f51-cd8f09 ...

  6. openssh/ntp/ftp漏洞

    这3种漏洞常规加固都要对应操作系统打官方漏洞升级包.既然这么说那下面就是不常规的: Openssh: 改ssh版本:whereis ssh //查看ssh目录cd 到该目录cp ssh ssh.bak ...

  7. java 实现 LINQ 的一些框架记录一下

    jOOQ: http://www.jooq.org JINQ: http://www.jinq.org JaQue: http://github.com/TrigerSoft/jaque JaQu:  ...

  8. iOS---TextView显示HTML文本

    _checkAllIntroduceTextView = [[UITextView alloc] initWithFrame:CGRectMake(10, 0, kScreenWidth-20, kS ...

  9. lumen Console Commands

    1.在app->Console->Commands中新增类 继承  Illuminate\Console\Command <?php namespace App\Console\Co ...

  10. Asp.net MVC的Model Binder工作流程以及扩展方法(2) - Binder Attribute

    上篇文章中分析了Custom Binder的弊端: 由于Custom Binder是和具体的类型相关,比如指定类型A由我们的Custom Binder解析,那么导致系统运行中的所有Action的访问参 ...