用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[]陣列中,注意要將圖片路徑補全為絕對路徑。
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)曲線如下:
參考
用DPM(Deformable Part Model,voc-release3.1)演算法在INRIA資料集上訓練自己的人體檢測模型
相關文章
- 在windows下執行Felzenszwalb的Deformable Part Model(DPM)原始碼voc-release3.1來訓練自己的模型WindowsORM原始碼模型
- 關於DPM(Deformable Part Model)演算法中模型結構的解釋ORM演算法模型
- 關於DPM(Deformable Part Model)演算法中模型視覺化的解釋ORM演算法模型視覺化
- 在Windows下執行Felzenszwalb的star-cascade DPM(Deformable Part Models)目標檢測Matlab原始碼WindowsORMMatlab原始碼
- HOG_SVM_行人檢測資料集合_INRIA資料集HOG
- 判別訓練的多尺度可變形部件模型 A Discriminatively Trained, Multiscale, Deformable Part Model模型AIORM
- 機器學習在入侵檢測方面的應用 - 基於ADFA-LD訓練集訓練入侵檢測判別模型機器學習模型
- 用SSD-Pytorch訓練自己的資料集PyTorch
- keras-retinanet 用自己的資料集訓練KerasNaN
- 目標檢測---教你利用yolov5訓練自己的目標檢測模型YOLO模型
- Mxnet R FCN 訓練自己的資料集
- 資料集訓練
- YOLOv5模型訓練及檢測YOLO模型
- 訓練一個目標檢測模型模型
- DeepLab 使用 Cityscapes 資料集訓練模型模型
- 使用判別訓練的部件模型進行目標檢測 Object Detection with Discriminatively Trained Part Based Models模型ObjectAI
- Mxnet-R-FCN-訓練自己的資料集
- 在Windows下執行Felzenszwalb的Deformable Part Models(voc-release4.01)目標檢測matlab原始碼WindowsORMMatlab原始碼
- Caffe下自己的資料訓練和測試
- 有關可變形部件模型(Deformable Part Model)的一些說明模型ORM
- 資料集訓練+1
- Yolov5——訓練目標檢測模型YOLO模型
- Caffe-SSD-Ubuntu16-04-訓練自己的資料集Ubuntu
- Yolov3程式碼分析與訓練自己資料集YOLO
- Caffe SSD Ubuntu16 04 訓練自己的資料集Ubuntu
- 谷歌colab訓練自己的資料集YOLOv3谷歌YOLO
- Opencv 用SVM訓練檢測器OpenCV
- yolov5 自建資料集訓練測試YOLO
- 首次!用合成人臉資料集訓練的識別模型,效能高於真實資料集模型
- 亮資料:高效率資料採集,加速大模型訓練!大模型
- 資料模型需要多少訓練資料?模型
- 目標檢測 YOLO v3 訓練 人臉檢測模型YOLO模型
- fashion資料集訓練
- ImageAI實現完整的流程:資料集構建、模型訓練、識別預測AI模型
- 自己訓練SVM分類器進行HOG行人檢測HOG
- yolov3訓練自己資料教程YOLO
- 用PyTorch版本R-FCN訓練自己的資料PyTorch
- 用初次訓練的SVM+HOG分類器在負樣本原圖上檢測HardExampleHOG