日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/3/21 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用DPM(Deformable Part Model,voc-release3.1)算法在INRIA数据集上训练自己的人体检测模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我的環(huán)境

DPM源碼版本:voc-release3.1

VOC開發(fā)包版本:VOC2007_devkit_08-Jun

Matlab版本:MatlabR2012b

c++編譯器:VS2010

系統(tǒng):Win7?32位

learn.exe迭代次數(shù):5萬次

數(shù)據(jù)集:INRIA 人體數(shù)據(jù)集,等


步驟一,首先要使voc-release3.1目標(biāo)檢測(cè)部分的代碼在windows系統(tǒng)下跑起來

在Windows下運(yùn)行Felzenszwalb的Deformable Part Models(voc-release4.01)目標(biāo)檢測(cè)matlab源碼

上文中用的4.01,3.1需要修改的地方是一樣的,反而更簡(jiǎn)單。


步驟二,把訓(xùn)練部分代碼跑通,在VOC數(shù)據(jù)集上進(jìn)行測(cè)試,如下文:

在windows下運(yùn)行Felzenszwalb的Deformable Part Model(DPM)源碼voc-release3.1來訓(xùn)練自己的模型


步驟三,再之后就是使之能在其他的數(shù)據(jù)集上訓(xùn)練模型,比如INRIA人體數(shù)據(jù)集。

這一步中主要是修改pascal_data.m文件,這個(gè)文件的作用就是讀取標(biāo)注,為訓(xùn)練準(zhǔn)備數(shù)據(jù)。此函數(shù)會(huì)返回兩個(gè)數(shù)組,pos[]和neg[],

pos[]中是正樣本信息,格式為:[imagePath?x1 y1 x2 y2 ];

neg[]中是負(fù)樣本信息,格式為:[imagePath] 。

先讀取INRIA數(shù)據(jù)集的標(biāo)注,保存為下面的格式:


然后在pascal_data.m中讀取此文件,依次將標(biāo)注信息保存到pos[]數(shù)組中,注意要將圖片路徑補(bǔ)全為絕對(duì)路徑。

[html]?view plain?copy ?
  • pos?=?[];?%?存儲(chǔ)正樣本目標(biāo)信息的數(shù)組,每個(gè)元素是一個(gè)結(jié)構(gòu),{im,?x1,?y1,?x2,?y2}??
  • numpos?=?0;?%?正樣本目標(biāo)個(gè)數(shù)(一個(gè)圖片中可能含有多個(gè)正樣本目標(biāo))??
  • ??
  • %?InriaPersonPos.txt是從Inria人體數(shù)據(jù)集獲得的50個(gè)正樣本的標(biāo)注文件,格式為[x1?y1?x2?y2?RelativePath]??
  • [a,b,c,d,p]?=?textread('InriaPersonPos.txt','%d?%d?%d?%d?%s');?%?注意:讀取后p的類型時(shí)50*1的cell類型??
  • ??
  • %?遍歷訓(xùn)練圖片文件名數(shù)組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;?%?正樣本目標(biāo)個(gè)數(shù)??
  • ????pos(numpos).im?=?[VOCopts.datadir?p{numpos}];?%?引用cell單元時(shí)要用{},引用矩陣單元時(shí)用()??
  • ????pos(numpos).x1?=?a(numpos);??
  • ????pos(numpos).y1?=?b(numpos);??
  • ????pos(numpos).x2?=?c(numpos);??
  • ????pos(numpos).y2?=?d(numpos);??
  • end??
  • pos(numpos).im 中我也在相對(duì)路徑前加了VOCopts的數(shù)據(jù)集目錄datadir是因?yàn)槲覍NRIA數(shù)據(jù)集放在VOCdevkit目錄下了。


    這里要特別注意的是,不需要提前從INRIA數(shù)據(jù)集中根據(jù)標(biāo)注文件手動(dòng)裁出人體目標(biāo),而是將標(biāo)注信息和正樣本原圖都告訴DPM算法,它自動(dòng)會(huì)進(jìn)行縮放、剪裁處理,對(duì)于有的標(biāo)注信息超過圖像邊界的,也沒關(guān)系,DPM中也會(huì)自己處理。

    至于負(fù)樣本就無所謂了,反正都是從不含人體的原圖上隨機(jī)裁取,還用VOC數(shù)據(jù)集中的就行。

    下面展示幾個(gè)訓(xùn)練的模型,以及檢測(cè)結(jié)果

    (1)50個(gè)INRIA正樣本目標(biāo),300個(gè)VOC負(fù)樣本目標(biāo),單組件(component)模型,部件個(gè)數(shù)為6。

    模型可視化圖如下:

    沒想到僅用50個(gè)正樣本,訓(xùn)練出的模型竟然很不錯(cuò),這也跟INRIA人體數(shù)據(jù)集的質(zhì)量很高有關(guān)。

    檢測(cè)結(jié)果如下:


    在500個(gè)VOC測(cè)試圖上獲得的平均精度AP=0.091


    (2)537個(gè)Spinello RGBD數(shù)據(jù)集中的正樣本目標(biāo),300個(gè)VOC負(fù)樣本目標(biāo),單組件,6個(gè)部件。

    模型可視化如下:


    由于這537個(gè)正樣本目標(biāo)來自對(duì)單個(gè)人的跟蹤結(jié)果,所以樣本不太好,如下:


    所以訓(xùn)練出來的模型根本檢測(cè)不到任何人體目標(biāo)。


    (3)2396個(gè)Spinello RGBD數(shù)據(jù)集中的正樣本目標(biāo),300個(gè)VOC負(fù)樣本目標(biāo),單組件,6個(gè)部件。

    模型可視化如下:


    這次的數(shù)據(jù)源和(2)中相同,只不過這次正樣本取自數(shù)據(jù)集中的所有34個(gè)人的跟蹤結(jié)果,訓(xùn)練了一個(gè)晚上,結(jié)果還行。

    檢測(cè)結(jié)果如下:


    在500個(gè)VOC測(cè)試圖上獲得的平均精度AP=0.091。帶包圍盒預(yù)測(cè)的精度-召回率(precision-recall)曲線如下:




    from:?http://blog.csdn.net/masibuaa/article/details/25221103

    總結(jié)

    以上是生活随笔為你收集整理的用DPM(Deformable Part Model,voc-release3.1)算法在INRIA数据集上训练自己的人体检测模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。