zoukankan      html  css  js  c++  java
  • (2) 用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”)


    然后在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
    ', 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个部件。

    模型可视化例如以下:


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


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


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

    模型可视化例如以下:


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

    检測结果例如以下:


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





  • 相关阅读:
    Cleve Moler MATLAB 创始人金秋10月中国大学校园行
    [原]ASP.NET中使用JQUERYEASYUI后,解决ClientScript.RegisterStartupScript 所注册脚本执行两次
    [原]ASP.NET中使用后端代码注册脚本 生成JQUERYEASYUI 的界面错位
    [原]jqueryeasyui 关闭tab如何自动切换到前一个tab
    [原创]C# 实例Oracle 备份,带进度提示
    停止Oracle 服务开机自动重启
    最新县及县以上行政区划代码(截止2009年12月31日)
    单元测试学习:无返回值,触发委托
    [笔记]GetRequestStream()超时问题(出现假死,卡住)
    asp.net 页面 css中图片不存在引发的异常
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5099581.html
Copyright © 2011-2022 走看看