【ACF學習】ACF訓練檢測模型
ACF在行人檢測取得了不錯的成績,適合剛性目標或者準剛性目標的訓練
1,資料量說明
本文準備了12W+正樣本,以豎直手掌為主,有部分樣本存在輕微的旋轉
負樣本7k+(不夠,訓練一級分類器就停止了,後面增加到2W+)
2,熟悉acfTrain
輸入 opts=acfTrain returns all default options
opts =
pPyramid: [1x1 struct]
filters: []
modelDs: [100 41]
modelDsPad: [128 64]
pNms: [1x1 struct]
stride: 4
cascThr: -1
cascCal: 0.0050
nWeak: 128
pBoost: [1x1 struct]
seed: 0
name: ''
posGtDir: ''
posImgDir: ''
negImgDir: ''
posWinDir: ''
negWinDir: ''
imreadf: @imread
imreadp: {}
pLoad: [1x1 struct]
nPos: Inf
nNeg: 5000
nPerNeg: 25
nAccNeg: 10000
pJitter: {}
winsSave: 0
在acfTrain的註釋中說明引數的含義
1)pPyramid指定通道特徵,詳細檢視chnsCompute.m and chnsPyramid.m。
通道可能被一系列filters的卷積,用於去除區域性關聯(檢視NIPS14 on LDCF),用於提高精度但是降低速度
如果filters=[wFilter, nFilter],這些都是自動計算的
模型維度modelDs(預設為[100, 41])定義視窗的高度和寬度,padded維度modelDsPad(預設為[128, 64])確定圍繞目標邊緣拓展的維度,這樣有利於分類。
例如對於100個畫素高的行人,128畫素高的區域用於決策
pNms控制極大值抑制(bbNms.m),stride控制視窗步長,cascThr和cascCal是constant soft cascades的閾值和標度
通常cascThr設定為-1,調整cascCal直到達到期望的召回率
訓練在取樣bootstrapping和分類Adaboost Classifier之間切換
nWeak決定訓練級數和每級中tree的個數,例如nWeak=[32 128 512 2048]確定四級,最後一級有2048棵樹
pBoost指定Adaboost的引數,pBoost.pTree是決策樹的引數(參考adaBoostTrain.m)
seed是隨機種子使得訓練結果reproducible,name指定detector和log檔案的路徑
2)訓練資料可以是多種形式的,正樣本可以使用預先裁剪的視窗目錄(posWinDir)或者整幅影象(posImgDir)+Groundtruth目錄(posGtDir)
負樣本可以使用預先裁剪的視窗目錄(negWinDir)或者使用整幅並不包含任何正樣本的影象目錄(negImgDir)
如果沒有指定negWinDir也沒有指定negImgDir的話,負樣本使用posImgDir中採集
對於預先裁剪的影象,尺寸最小為modelDsPad(預設為[128, 64]),目標位於裁剪影象中心不小於modelDs(預設為[100, 41])
imreadf用於指定載入影象的常規函式(預設為imread函式),imreadp為imreadf的額外引數
當從整幅影象採集時,pLoad指定groundtruth是如何被載入的,並且將正樣本集合進行轉換(檢視bbGt>bbLoad)
nPos控制訓練時總正樣本(如果nPos=inf,正樣本數量受限於訓練集,預設nPos=inf)
nNeg控制總負樣本數量(預設為5000),nPerNeg(預設為25)限制每個影象上採集的負樣本數量,nAccNeg(預設10000)控制最大負樣本總數,在bootstrapping過程中累計計數
pJitter用於擾動正樣本,這樣可以增加正樣本數量(預設flip=1)
winsSave如果為true的話,裁剪的視窗以mat檔案形式儲存到disk中(預設為0)