深度学习高手笔记(卷2):经典应用
上QQ阅读APP看书,第一时间看更新
 第1章 双阶段检测

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仅使用了最常见的翻转图片这一扩充方式。