用DPM(Deformable Part Model,voc-release4.01)算法在INRIA数据集上训练自己的人体检测模型

步骤一,首先要使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”, 此外windows下用‘\’而不要用‘/‘, 这里有问题)

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

[html] view
plain
copy

  1. pos = []; % 存储正样本目标信息的数组,每个元素是一个结构,{im, x1, y1, x2, y2}
  2. numpos = 0; % 正样本目标个数(一个图片中可能含有多个正样本目标)
  3. % InriaPersonPos.txt是从Inria人体数据集获得的50个正样本的标注文件,格式为[x1 y1 x2 y2 RelativePath]
  4. [a,b,c,d,p] = textread(‘InriaPersonPos.txt‘,‘%d %d %d %d %s‘); % 注意:读取后p的类型时50*1的cell类型
  5. % 遍历训练图片文件名数组ids
  6. for i = 1:length(a);
  7. if mod(i,10)==0
  8. fprintf(‘%s: parsing positives: %d/%d\n‘, cls, i, length(a));
  9. end;
  10. numpos = numpos+1; % 正样本目标个数
  11. pos(numpos).im = [VOCopts.datadir p{numpos}]; % 引用cell单元时要用{},引用矩阵单元时用()
  12. pos(numpos).x1 = a(numpos);
  13. pos(numpos).y1 = b(numpos);
  14. pos(numpos).x2 = c(numpos);
  15. pos(numpos).y2 = d(numpos);
  16. 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个部件。

模型可视化如下:

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

所以训练出来的模型根本检测不到任何人体目标。

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

模型可视化如下:

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

检测结果如下:

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

用DPM(Deformable Part Model,voc-release4.01)算法在INRIA数据集上训练自己的人体检测模型

时间: 2024-10-26 16:19:20

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

用DPM(Deformable Part Model,voc-release3.1)算法在INRIA数据集上训练自己的人体检测模型

我的环境 DPM源码版本:voc-release3.1 VOC开发包版本:VOC2007_devkit_08-Jun Matlab版本:MatlabR2012b c++编译器:VS2010 系统:Win7 32位 learn.exe迭代次数:5万次 数据集:INRIA 人体数据集,等 步骤一,首先要使voc-release3.1目标检测部分的代码在windows系统下跑起来: 在Windows下运行Felzenszwalb的Deformable Part Models(voc-release4.

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

DPM源码(voc-release)中的模型可视化做的还算相当炫酷的,可以让我们直观的看到训练好的模型,甚至我们不用去做模型的评价,直接根据肉眼的观察,就能大致了解一个目标训练的好不好,比如我训练一个人体模型,那他的可视化图当然就是越接近人体越好. 下面是对DPM源码中有关模型可视化部分代码的分析,通过分析这些代码,有助于更好的理解DPM模型. 注意:我的源码版本是voc-release3.1,第4版往后的模型变得更复杂,这里不讨论. 有关模型可视化的代码主要在visualizemodel.m,

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

关于可变部件模型的描写叙述在作者[2010 PAMI]Object Detection with Discriminatively Trained Part Based Models的论文中已经有说明: 含有n个部件的目标模型能够形式上定义为一个(n+2)元组:(F0,P1,..., Pn, b),F0是根滤波器,Pi是第i个部件的模型,b是表示偏差的实数值.每一个部件模型用一个三元组定义:(Fi,vi, di),Fi是第i个部件的滤波器:vi是一个二维向量,指定第i个滤波器的锚点位置(anch

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

DPM(Deformable Parts Model) Reference: Object detection with discriminatively trained partbased models. IEEE Trans. PAMI, 32(9):1627–1645, 2010. "Support Vector Machines for Multiple-Instance Learning,"Proc. Advances in Neural Information Proces

DPM(Deformable Parts Model)

DPM(Deformable Parts Model) Reference: Object detection with discriminatively trained partbased models. IEEE Trans. PAMI, 32(9):1627–1645, 2010. "Support Vector Machines for Multiple-Instance Learning,"Proc. Advances in Neural Information Proces

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

http://blog.csdn.net/ttransposition/article/details/12966521 DPM(Deformable Parts Model) Reference: Object detection with discriminatively trained partbased models. IEEE Trans. PAMI, 32(9):1627–1645, 2010. "Support Vector Machines for Multiple-Instan

隧道目标识别实验过程(二)标准VOC数据集和制作后的数据集实验结果对比

VOC标准数据集中一共有20个类别: 'aeroplane', 'bicycle', 'bird', 'boat','bottle', 'bus', 'car', 'cat', 'chair','cow', 'diningtable', 'dog', 'horse','motorbike', 'person', 'pottedplant','sheep', 'sofa', 'train', 'tvmonitor' 可以尝试用其中的红色标注的五个类别来对隧道目标进行识别. 标准数据集中的车和行人的

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

原文:ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上 ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效.如果我们能够将ValidationAttribute特性直接应用到参数上,我们不但可以实现简单类型(比如int.double等)数据的Model验证,还能够实现“一个Model类型,多种验证规则”,本篇文章将为你提供相关的解决方案(源代码

算法数据结构01 /算法数据结构概述

目录 算法数据结构01 /算法数据结构概述 1. 算法 2. 评判程序优劣的方法 3. 时间复杂度 4. 数据结构 5. python数据结构性能分析 6. 总结 算法数据结构01 /算法数据结构概述 1. 算法 算法概述 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务.一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用. 算法是独立存在的一种解决问题的方法和思想. 对于算法而言,实