1. 程式人生 > >[論文筆記]A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection

[論文筆記]A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection

paper

一、論文思想

訓練一個目標檢測器,對遮擋和形變魯棒,目前的主要方法是增加不同場景下的影象資料,但這些資料有時又特別少。作者提出使用對抗生成有遮擋或形變的樣本,這些樣本對檢測器來說識別比較困難,使用這些困難的正樣本訓練可以增加檢測器的魯棒性。 使用對抗網路生成有遮擋和有形變的兩種特徵,分別對應網路ASDN和ASTN。使用對抗網路生成有遮擋和有形變的兩種特徵,分別對應網路ASDN和ASTN。

1.ASDN

FAST-RCNN中RoI-池化層之後的每個目標proposal卷積特徵作為對抗網路的輸入,給定一個目標的特徵,ASDN嘗試生成特徵某些部分被dropout的掩碼,導致檢測器無法識別該物體。
ASDN網路初始化: 給定尺寸大小為d×d的特徵圖X,使用d3×d3的滑動窗,並將滑動窗位置對映到原圖,將原圖對應位置清零,生成新的特徵向量,傳入到分類層計算損失,選擇具有最大損失的滑動窗,用這個視窗生成二值掩碼M(滑動窗位置為1,其餘位置為0),用n個目標proposal生成n對對抗網路的訓練樣本(x1,M1),…,(xn,Mn) ,使用二值交叉熵損失訓練ASDN:
這裡寫圖片描述

在前向傳播過程中,首先使用ASDN在RoI-池化層之後生成特徵掩碼,然後使用重要性取樣法生成二值掩碼,使用該掩碼將特徵對應部位值清零,修改後的特徵繼續前向傳播計算損失。這個過程生成了困難的特徵,用於訓練檢測器。訓練過程流程圖如下所示:
這裡寫圖片描述

2.ASTN

STN網路包含三部分:定位網路,網格生成器,取樣器。定位網路估計出形變的引數(旋轉角度、平移距離和縮放因子)。這三個引數作為後兩部分的輸入,輸出是形變後的特徵圖。論文主要學習定位網路的三個引數。
ASTN: 主要關注特徵旋轉,定位網路包含三層全連線層,前兩層是ImageNet預訓練的fc6和fc7,訓練過程與ASDN類似,ASTN對特徵進行形變,使得ASTN將正樣本識別成負樣本。將特徵圖劃分為4個block,每個block估計四個方向的旋轉,增加了任務的複雜度。
兩種對抗網路可以相結合,使得檢測器更魯棒,RoI-池化層提取的特徵首先傳入ASDN丟棄一些啟用,之後使用ASTN對特徵進行形變,如下圖所示:
這裡寫圖片描述


ASDN 與 ASTN 網路組合架構示意。首先建立遮擋蒙版,隨後旋轉路徑以產生用於訓練的例子。

二、訓練

stage1:training a standard Fast-RCNN

./experiments/scripts/fast_rcnn_std.sh [GPU_ID] VGG16 pascal_voc

stage2:pre-training stage for the adversarial network

./experiments/scripts/fast_rcnn_adv_pretrain.sh [GPU_ID] VGG16 pascal_voc

stage3:copy the weights of the above two models to initialize the joint model

./copy_model.h

stage4: joint training of the detector and the adversarial network

./experiments/scripts/fast_rcnn_adv.sh [GPU_ID] VGG16 pascal_voc

三、程式碼解析

1.sigmod交叉熵

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
進一步可化簡為:
這裡寫圖片描述
這裡寫圖片描述
對應本文中的程式碼是: adversarial-frcnn/lib/roi_data_layer/layer.py
這裡寫圖片描述
程式碼解析:

1.注意絕對值使用的巧妙之處: * lZ = np.log(1+np.exp(-np.abs(f))) mask Lz對應化簡公式的第二項,其中e的指數項x在兩種情況下,均為非正,可以概括為程式碼中np.exp(-np.abs(f))
2.注意判斷語句使用的巧妙之處: * ((f>0)-t)*f mask該項對應化簡公式的第一項,對應caffe原始碼為:

這裡寫圖片描述

四、參考連結