关于SSD的数据增强,caffe,prototxt文件


原文链接: 关于SSD的数据增强,caffe,prototxt文件

一文道尽深度学习中的数据增强方法(上) - 简书

数据增强(data Augmentation)

AnnotatedDatum是存放图片和BBox的类
// 估计是一张图片就对应于一个AnnotatedDatum<br>message AnnotatedDatum {

enumAnnotationType {

BBOX = 0;

}<br>// 存储图片的数据,需要imdecode

optional Datum datum = 1;

// If there are "rich" annotations, specify the type of annotation.

// Currently it only supports bounding box.

// If there are no "rich" annotations, use label in datum instead.

optional AnnotationType type = 2;

// Each group contains annotation for a particular class. <br> // 每一类都会有一个annotation_group保存属于改类的bbox

repeated AnnotationGroup annotation_group = 3;

}

数据增强效果图

假设原图输入是一张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那样处理。

其在train.prototxt中的位置:

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
    }
`