1. 程式人生 > >【ACF學習】ACF訓練檢測模型

【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)