用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.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 ?
這里要特別注意的是,不需要提前從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数据集上训练自己的人体检测模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用初次训练的SVM+HOG分类器在负样本
- 下一篇: 凸优化和非凸优化