我的环境

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.01)目标检測matlab源代码

上文中用的4.01,3.1须要改动的地方是一样的,反而更简单。

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

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

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

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

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

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

先读取INRIA数据集的标注,保存为以下的格式:

然后在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);
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)曲线例如以下:

版权声明:本文博客原创文章。博客,未经同意,不得转载。

最新文章

  1. 1220 - Mysterious Bacteria--LightOj1220 (gcd)
  2. JSP 属性范围
  3. CentOS6下yum下载的包存放路径
  4. checkbox的全选、反选、删除(适配器)
  5. unity, 由unity5.2.1升级到5.4.2物体变亮解法
  6. 【String to Integer (atoi) 】cpp
  7. SPOJ 274 Johnny and the Watermelon Plantation(TLE)
  8. Android异步下载网络图片
  9. 找不到或无法加载已注册的 .Net Framework Data Provide
  10. 认识OD的两种断点
  11. Android启动时间测试方法
  12. iOS Xcode的快捷键
  13. Python 库大全
  14. 老生常谈之Block
  15. PAT乙级-1070. 结绳(25)
  16. websocket-heartbeat-js心跳检测库正式发布
  17. SQLServer: 解决“错误15023:当前数据库中已存在用户或角色”
  18. C#调用接口注意要点
  19. Ubuntu18.04下希捷移动硬盘Seagate Backup Plus读写慢
  20. POJ 2914 - Minimum Cut - [stoer-wagner算法讲解/模板]

热门文章

  1. ReactJS学习 相关网站
  2. Lua中的weak表——weak table(转)
  3. Python调用微博API
  4. js比量undefined种类
  5. 7 JavaScript Basics Many Developers Aren't Using (Properly)【转】
  6. Servlet(五岁以下儿童)web.xml一些常用的配置
  7. mac已安装xctool而简单的执行xctool打包
  8. 网络的基本概念TCP, UDP, 单播(Unicast), 多播(多播)(Multicast)
  9. Event Sourcing
  10. hdu 4965 Fast Matrix Calculation(矩阵高速幂)