目標檢測之SSD:資料增強引數詳解
資料增強效果圖
假設原圖輸入是一張640*480的圖片,這裡由於版面問題我放縮了圖片尺寸並且沒做mean subtract,由於最後會有resize引數導致輸出的圖片都會resize到300x300,但是主要看的是增強的效果,SSD中的資料增強的順序是:
DistortImage: 這個主要是修改圖片的brightness,contrast,saturation,hue,reordering channels,並沒改變標籤bbox
ExpandImage: 這個主要是將DistortImage的圖片用畫素0進行擴充套件,標籤bbox此時肯定會改變,就重新以黑邊的左上角為原點計算[0,1]的bbox的左上角和右下角兩個點座標。
BatchSampler: 由於這裡選錯圖了,BatchSampler必須要有GT的存在才會生效,由於我做的是人的檢測所以圖中沒人就不會生成sampled_bboxes,後面修改例子。sampled_bboxes的值是隨機在[0, 1]上生成的bbox,並且和某個gt_bboxes的IOU在[min, max]之間。由於proto中配的max_sample都是為1,所以每個batch_sampler可能會有1個sampled_bbox,隨機取一個sampled bbox並且裁剪圖片和標籤。標籤裁剪也很好理解首先要通過ProjectBBox將原座標系標籤投影到裁剪後圖片的新座標系的座標,然後再ClipBBox到[0,1]之間。
Resize:放縮到300x300,最後將圖片放縮到300x300,標籤框也是線性放縮座標而已。
Crop:原本data_transformer還會crop的,這個引數是配在prototxt中,預設是原圖 所以就和沒crop一樣。如果要crop的話標籤也是會和之前BatchSampler那樣處理。
layer { name: "data" type: "AnnotatedData" top: "data" top: "label" include { phase: TRAIN } transform_param { mirror: true mean_value: 104 mean_value: 117 mean_value: 123 resize_param { prob: 1 resize_mode: WARP height: 512 width: 512 interp_mode: LINEAR interp_mode: AREA interp_mode: NEAREST interp_mode: CUBIC interp_mode: LANCZOS4 } emit_constraint { emit_type: CENTER } distort_param { brightness_prob: 0.5 ##調整亮度 brightness_delta: 32 ##新增畫素值 contrast_prob: 0.5 ##調整對比度 contrast_lower: 0.5 ##隨機對比因子的下界 contrast_upper: 1.5 ##隨機對比因子的上界 hue_prob: 0.5 ##調整色調 hue_delta: 18 ##調整色調通道數量 saturation_prob: 0.5 ##調整飽和 saturation_lower: 0.5 ##調整飽和因子的下界 saturation_upper: 1.5 ##調整飽和因子的上界 random_order_prob: 0.0 ##隨機排列影象通道 } expand_param {///////////////////////////////////////////////##儲存資料轉換器用於擴充套件策略的引數的訊息 prob: 0.5 ##使用擴充套件的概率 max_expand_ratio: 4.0 ##擴大影象的比率 } } data_param { source: "/home/x306/caffe/xn/image/VEDAI/lmdb/VEDAI_trainval_512_lmdb" batch_size: 2 backend: LMDB } annotated_data_param { batch_sampler {/////////////// max_sample: 1 max_trials: 1 } batch_sampler { sampler { min_scale: 0.3 ***********1.0 ##最大尺度與與最小尺度,如果樣本幾乎是均勻大小的,那麼設定為1.0即可。 max_scale: 1.0 ***********1.0 min_aspect_ratio: 0.5***********1.0 ##最大縱橫比與最小縱橫比,如果樣本框幾乎都是正方形的,那麼設定為1.0就好。 max_aspect_ratio: 2.0***********1.0 } sample_constraint { min_jaccard_overlap: 0.1**********1.0 ####取樣一個片段,使目標最小的jaccard重疊為0.1,0.3,0.5,0.7,0.9 } max_sample: 1 max_trials: 50 } batch_sampler { sampler { min_scale: 0.3 max_scale: 1.0 min_aspect_ratio: 0.5 ***************1.0 max_aspect_ratio: 2.0 ***************1.0 } sample_constraint { min_jaccard_overlap: 0.3 *************1.0 } max_sample: 1 max_trials: 50 } batch_sampler { sampler { min_scale: 0.3 max_scale: 1.0 min_aspect_ratio: 0.5 *****************1.0 max_aspect_ratio: 2.0 *****************1.0 } sample_constraint { min_jaccard_overlap: 0.5 *****************1.0 } max_sample: 1 max_trials: 50 } batch_sampler { sampler { min_scale: 0.3 max_scale: 1.0 min_aspect_ratio: 0.5****************1.0 max_aspect_ratio: 2.0****************1.0 } sample_constraint { min_jaccard_overlap: 0.7*****************1.0 } max_sample: 1 max_trials: 50 } batch_sampler { sampler { min_scale: 0.3 max_scale: 1.0 min_aspect_ratio: 0.5******************1.0 max_aspect_ratio: 2.0******************1.0 } sample_constraint { min_jaccard_overlap: 0.9****************1.0 } max_sample: 1 max_trials: 50 } batch_sampler { sampler { min_scale: 0.3 max_scale: 1.0 min_aspect_ratio: 0.5*********************1.0 max_aspect_ratio: 2.0*********************1.0 } sample_constraint { max_jaccard_overlap: 1.0*****************1.0 } max_sample: 1 max_trials: 50 }