日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

我的環(huán)境

DPM源碼版本:voc-release3.1

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

Matlab版本:MatlabR2012b

c++編譯器:VS2010

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

learn.exe迭代次數:5萬次

數據集:INRIA 人體數據集,等


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

在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[]數組中,注意要將圖片路徑補全為絕對路徑。

[html]?view plain?copy ?
  • 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)曲線如下:




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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。