- 深度學習高手筆記(卷2):經典應用
- 劉巖(@大師兄)
- 599字
- 2024-09-05 16:45:36
1.3.2 數據準備
Fast R-CNN也是通過選擇性搜索選取的候選區域。Fast R-CNN的論文指出,隨著候選區域的增多,mAP(平均精度均值)呈先上升后下降的趨勢,所以候選區域的個數不宜太多,更不宜太少,Fast R-CNN則選取了2000個候選區域。
self.config = {'cleanup' : True, ???????????????'use_salt' : True, ???????????????'top_k' : 2000}
1.輸入圖像尺度
通過對比多尺度{480, 576, 688, 864, 1200}和單尺度的精度,可以發現Fast R-CNN的單尺度和多尺度的精度差距并不明顯。這也從另一個角度證明了深度卷積神經網絡有能力直接學習到輸入圖像的尺寸不變性。但Fast R-CNN依舊保留了多尺度這個功能,尺度選項可以在lib/fast-rcnn/config.py文件里設計,如下面的代碼,其中SCALES可以為單個值(單尺度)或多個值(多尺度)。
# 訓練期間使用的尺度(可以列出多個尺度) # 每個尺度中的值指的是圖像最短邊的大小 _ _C.TRAIN.SCALES = (600,)
Fast R-CNN的源碼在實驗中使用了最小邊長600、最大邊長不超過1000的縮放圖像方法,該方法通過下面的函數實現。
def prep_im_for_blob(im, pixel_means, target_size, max_size): ????im = im.astype(np.float32, copy=False) ????im -= pixel_means ????im_shape = im.shape ????im_size_min = np.min(im_shape[0:2]) ????im_size_max = np.max(im_shape[0:2]) ????im_scale = float(target_size) / float(im_size_min) ????# 防止最大邊超過 max_size ????if np.round(im_scale * im_size_max) > max_size: ????????im_scale = float(max_size) / float(im_size_max) ????im = cv2.resize(im, None, None, fx=im_scale, fy=im_scale, interpolation=cv2.INTER_LINEAR) ????return im, im_scale
2.數據擴充
在深度學習任務中,當我們的樣本量不足以支撐模型的訓練時,通常采用數據擴充的方法來增加樣本量。數據擴充對增加模型的泛化能力,減輕過擬合的問題是非常有效的。在實驗中,Fast R-CNN僅使用了最常見的翻轉圖片這一擴充方式。