步骤一,首先要使voc-release4.01目标检測部分的代码在windows系统下跑起来:

參考在window下执行DPM(deformable part models) -(检測demo部分)

步骤二,把训练部分代码跑通,在VOC数据集上进行測试,例如以下文:

在windows下执行Felzenszwalb的Deformable Part Model(DPM)源代码voc-release3.1来训练自己的模型

可是当中的learn.cpp代码有误。当中319行check(argc == 8)通只是,由于matlab中传入的參数多于8个,故learn.cpp文件源代码參考:

在windows下训练models of Object Detection with Discriminatively Trained Part Based Models

步骤三,再之后就是使之能在其它的数据集上训练模型,比方INRIA人体数据集。

这一步中主要是改动pascal_data.m文件。这个文件的作用就是读取标注。为训练准备数据。此函数会返回两个数组,pos[]和neg[],

pos[]中是正样本信息,格式为:[imagePath x1 y1 x2 y2 ];

neg[]中是负样本信息,格式为:[imagePath] 。

先读取INRIA数据集的标注。保存为以下的格式:(统一存入一个txt文档如“InriaPersonPos.txt”)

然后在pascal_data.m中读取此文件,依次将标注信息保存到pos[]数组中,注意要将图片路径补全为绝对路径。

pos = []; % 存储正样本目标信息的数组,每一个元素是一个结构。{im, x1, y1, x2, y2}
numpos = 0; % 正样本目标个数(一个图片中可能含有多个正样本目标) % InriaPersonPos.txt是从Inria人体数据集获得的50个正样本的标注文件,格式为[x1 y1 x2 y2 RelativePath]
[a,b,c,d,p] = textread('InriaPersonPos.txt','%d %d %d %d %s'); % 注意:读取后p的类型时50*1的cell类型 % 遍历训练图片文件名称数组ids
for i = 1:length(a);
if mod(i,10)==0
fprintf('%s: parsing positives: %d/%d\n', cls, i, length(a));
end;
numpos = numpos+1; % 正样本目标个数
pos(numpos).im = [VOCopts.datadir p{numpos}]; % 引用cell单元时要用{},引用矩阵单元时用()
pos(numpos).x1 = a(numpos);
pos(numpos).y1 = b(numpos);
pos(numpos).x2 = c(numpos);
pos(numpos).y2 = d(numpos);
pos(numpos).flip = true; % 这个flip项必须有,决定是否须要增加正例的对称图像,能够选false
pos(numpos).trunc = 0;
end

pos(numpos).im 中我也在相对路径前加了VOCopts的数据集文件夹datadir是由于我将INRIA数据集放在VOCdevkit文件夹下了。

这里要特别注意的是,不须要提前从INRIA数据集中依据标注文件手动裁出人体目标,而是将标注信息和正样本原图都告诉DPM算法,它自己主动会进行缩放、剪裁处理。对于有的标注信息超过图像边界的。也没关系。DPM中也会自己处理。

至于负样本就无所谓了。反正都是从不含人体的原图上随机裁取,还用VOC数据集中的即可。

以下展示几个训练的模型,以及检測结果

(1)50个INRIA正样本目标,300个VOC负样本目标。单组件(component)模型,部件个数为6。

模型可视化图例如以下:

没想到仅用50个正样本,训练出的模型居然非常不错。这也跟INRIA人体数据集的质量非常高有关。

检測结果例如以下:

在500个VOC測试图上获得的平均精度AP=0.091

(2)537个Spinello RGBD数据集中的正样本目标,300个VOC负样本目标,单组件。6个部件。

模型可视化例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFzaWJ1YWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="border:none; max-width:100%">

因为这537个正样本目标来自对单个人的跟踪结果,所以样本不太好。例如以下:

所以训练出来的模型根本检測不到不论什么人体目标。

(3)2396个Spinello RGBD数据集中的正样本目标,300个VOC负样本目标。单组件,6个部件。

模型可视化例如以下:

这次的数据源和(2)中同样,仅仅只是这次正样本取自数据集中的全部34个人的跟踪结果。训练了一个晚上,结果还行。

检測结果例如以下:

在500个VOC測试图上获得的平均精度AP=0.091。带包围盒预測的精度-召回率(precision-recall)曲线例如以下:

(2) 用DPM(Deformable Part Model,voc-release4.01)算法在INRIA数据集上训练自己的人体检測模型的更多相关文章

  1. 关于DPM(Deformable Part Model)算法中模型结构的解释

    关于可变部件模型的描写叙述在作者[2010 PAMI]Object Detection with Discriminatively Trained Part Based Models的论文中已经有说明 ...

  2. 使用DPM(Deformable Part Model,voc-release3.1)算法INRIA通过训练你的身体检测模型数据集

    我的环境 DPM源代码版本号:voc-release3.1 VOC开发包版本号:VOC2007_devkit_08-Jun Matlab版本号:MatlabR2012b c++编译器:VS2010 系 ...

  3. 关于DPM(Deformable Part Model)算法中模型可视化的解释

    搭建了自己的博客平台,本文地址:http://masikkk.com/blog/DPM-model-visualization/ DPM源代码(voc-release)中的模型可视化做的还算相当炫酷的 ...

  4. DPM(Deformable Parts Model)--原理(一)(转载)

    DPM(Deformable Parts Model) Reference: Object detection with discriminatively trained partbased mode ...

  5. DPM(Deformable Parts Model)

    DPM(Deformable Parts Model) Reference: Object detection with discriminatively trained partbased mode ...

  6. DPM(Deformable Parts Model)--原理(一)

    http://blog.csdn.net/ttransposition/article/details/12966521 DPM(Deformable Parts Model) Reference: ...

  7. DPM(Deformable Part Model)原理详解(汇总)

    写在前面: DPM(Deformable Part Model),正如其名称所述,可变形的组件模型,是一种基于组件的检测算法,其所见即其意.该模型由大神Felzenszwalb在2008年提出,并发表 ...

  8. ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上

    原文:ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上 ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model ...

  9. 【RS】Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model - 当因式分解遇上邻域:多层面协同过滤模型

    [论文标题]Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model   (35th-ICM ...

随机推荐

  1. hdu 4740【模拟+深搜】.cpp

    题意: 给出老虎的起始点.方向和驴的起始点.方向.. 规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转.. 当转了一次还没路走就会停下来.. 问他们有没有可能在某一格相遇. ...

  2. hdu-4833-Best-Financing(DP)

    Best Financing Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. 实习第一天之数据绑定:<%#Eval("PartyName")%>'

    1.asp:HyperLink ID="Link" runat="server" Target="_blank" Text='<%#E ...

  4. poj2763(树链剖分)

    题目链接:http://poj.org/problem?id=2763 题意:定一棵带边权的树,要求支持两种操作:1)询问树中某两点间的距离. 2)修改某条边的权值. 分析:树链剖分,边权修改,路径求 ...

  5. 新版SDK自己主动加入PlaceholderFragment的思考

    自从Android SDK更新到22.6.3,发现新建Activity的时候,会自己主动生成一个Fragment.这个Fragment是activity的静态内部类.同一时候生成了一个xml叫frag ...

  6. 《Linux设备驱动开发具体解释(第3版)》进展同步更新

    本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTE ...

  7. PHP草根论之设计模式-訪问者模式

    关于模式本身的概念,请參考网上其他文章 此处仅仅讨论在PHP实际开发过程中的应用 此模式适用范围极为受限,适用情景: 1.适用于项目维护过程,不适用于项目开发过程 2.新增需求,要求为一个/多个类添加 ...

  8. 【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse小工具

    目标: 编译Apache Hadoop2.2.0在win7x64环境下的Eclipse插件 环境: win7x64家庭普通版 eclipse-jee-kepler-SR1-win32-x86_64.z ...

  9. 使用Visual Studio 2010 创建简单的Silverlight应用程序

    使用Visual Studio 2010 创建简单的Silverlight应用程序 Silverlight是创建动态的引人的RIAs(Rich Internet Application)的新方法.这里 ...

  10. poj Optimal Milking

    Optimal Milking 题目: 有K个机器.C仅仅牛.要求求出最全部牛到各个产奶机的最短距离.给出一个C+K的矩阵,表示各种标号间的距离. 而每一个地方最多有M仅仅牛. 算法分析: 二分+最短 ...