关于SSD的数据增强,caffe,prototxt文件
数据增强(data Augmentation)
AnnotatedDatum是存放图片和BBox的类// 估计是一张图片就对应于一个AnnotatedDatum<br>message AnnotatedDatum {
enum
AnnotationType {
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
}