用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資料集上訓練自己的人體檢測模型
相關文章
- keras-retinanet 用自己的資料集訓練KerasNaN
- 用SSD-Pytorch訓練自己的資料集PyTorch
- Mxnet R FCN 訓練自己的資料集
- DeepLab 使用 Cityscapes 資料集訓練模型模型
- 目標檢測---教你利用yolov5訓練自己的目標檢測模型YOLO模型
- Mxnet-R-FCN-訓練自己的資料集
- 資料集訓練
- 訓練一個目標檢測模型模型
- YOLOv5模型訓練及檢測YOLO模型
- 谷歌colab訓練自己的資料集YOLOv3谷歌YOLO
- Caffe-SSD-Ubuntu16-04-訓練自己的資料集Ubuntu
- Caffe SSD Ubuntu16 04 訓練自己的資料集Ubuntu
- Yolov3程式碼分析與訓練自己資料集YOLO
- Yolov5——訓練目標檢測模型YOLO模型
- 資料集訓練+1
- fashion資料集訓練
- 首次!用合成人臉資料集訓練的識別模型,效能高於真實資料集模型
- yolov5 自建資料集訓練測試YOLO
- 亮資料:高效率資料採集,加速大模型訓練!大模型
- 目標檢測 YOLO v3 訓練 人臉檢測模型YOLO模型
- 用PyTorch版本R-FCN訓練自己的資料PyTorch
- ImageAI實現完整的流程:資料集構建、模型訓練、識別預測AI模型
- Alink漫談(七) : 如何劃分訓練資料集和測試資料集
- yolov3訓練自己資料教程YOLO
- 訓練集、驗證集、測試集
- 如何部署自己的SSD檢測模型到AndroidTFLite上模型Android
- 使用自己的資料集訓練MobileNet、ResNet實現影象分類(TensorFlow)
- 【小白學PyTorch】5 torchvision預訓練模型與資料集全覽PyTorch模型
- win10 下的YOLOv3 訓練 wider_face 資料集檢測人臉Win10YOLOIDE
- YOLOv4 win10 配置 + 訓練自己的資料 + 測試YOLOWin10
- DPM演算法演算法
- Yolov5_v6.2訓練資料集進行預測YOLO
- 劃分訓練集與測試集
- 【YOLO目標檢測實戰 】3.使用YOLO11訓練COCO128資料集YOLO
- 用神經網路測量訓練集的半衰期神經網路
- 在測試集上訓練,還能中CVPR?這篇IEEE批判論文是否合理?
- 用Flask在伺服器上部署訓練好的模型Flask伺服器模型
- 借用Ultralytics Yolo快速訓練一個物體檢測器YOLO
- 全網最細 | 教你如何在 docker 容器下使用 mmdetection 訓練自己的資料集Docker