(转载请注明作者和出处 楼燚(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. Maven发布工程到公共库

    1.发布工程 新建一个 Maven build 选择要发布的工程

  2. 如何设置'REUSE_ALV_GRID_DISPLAY'的单个单元格的颜色

    REPORT ydemo_rick_a . TYPE-POOLS: slis. , carrid LIKE sflight-carrid, connid LIKE sflight-connid, fl ...

  3. [ javascript canvas isPointInPath(x,y) 判断点是否在最后绘制的图形中 ] javascript canvas isPointInPath(x,y) 判断点是否在最后绘制的图形中方法演示 效果之三

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...

  4. 高性能JS笔记4——算法和流程控制

    一.循环 for.while.do while三种循环的性能都没有多大区别.foreach 的性能较其他三种差 . 既然循环没有多大区别,注意循环内的代码控制. 减少迭代次数. 减少迭代工作量. 推荐 ...

  5. AndroidAnnotations配置--Android studio

    1.引入对android-apt的依赖.在全局build.gradle中文件中添加以下代码.(Project目录下的build.gradle) repositories { mavenCentral( ...

  6. ReactiveCocoa框架下的MVVM模式解读

    记录一些MVVM文章中关于ReactiveCocoa的代码: 实例一:带有分页的文章列表,根据文章类别过滤出文章的列表,可以进入文章详细页面 1:YFBlogListViewModel 首先了解关于列 ...

  7. iOS开发之AFN的基本使用

    本篇将从四个方面对iOS开发中经常使用到的AFNetworking框架进行讲解: 一.什么是 AFN 二.为什么要使用 AFN 三.AFN 怎么用 三.AFN和ASI的区别 一.什么是 AFN AFN ...

  8. C++语言-08-命名空间

    概述 命名空间通常作为附加信息来区分不同库中相同名称的函数.类.变量.命名空间的本质是定义一个范围,该范围即为一个上下文,一个上下文中通常不允许出现相同名称的函数.类.变量. 定义 定义格式 普通的命 ...

  9. JS实现悬浮移动窗口(悬浮广告)的特效

    页面加载完成之后向页面插入窗口,之后向窗口插入关闭按钮,使用setInterval()函数触发moves()函数开始动画   js方法: 复制代码代码如下: <!DOCTYPE HTML PUB ...

  10. 关于RichTextField2.0表情显示错乱的问题!

    flex4.5和4.6在textField.getCharBoundaries()这个方法的返回结果上是不一样的.getCharBoundaries()方法只会返回被渲染出来的文字的边框信息,也就是说 ...