DataAugForObjectDetection
DataAugForObjectDetection
这是一个目标检测对VOC数据集进行增强的工具箱,代码简单简单易用。
知乎-如何用TensorLayer做目标检测的数据增强
如何用TensorLayer做目标检测的数据增强
import tensorlayer as tl
import random
batch_size = 64
im_size = [416, 416] # 输出图的大小
n_data = len(imgs_file_list)
jitter = 0.2
def _data_aug_fn(self, data, jitter):
im, ann = data
clas, coords = ann
## resize到高宽合适的大小
scale = np.max((self.im_size[1] / float(im.shape[1]),
self.im_size[0] / float(im.shape[0])))
im, coords = tl.prepro.obj_box_imresize(im, coords,
[int(im.shape[0]*scale)+2, int(im.shape[1]*scale)+2],
is_rescale=True, interp='bicubic')
## 几何增强 geometric transformation
im, coords = tl.prepro.obj_box_left_right_flip(im,
coords, is_rescale=True, is_center=True, is_random=True)
im, clas, coords = tl.prepro.obj_box_shift(im, clas,
coords, wrg=0.1, hrg=0.1, is_rescale=True,
is_center=True, is_random=True)
im, clas, coords = tl.prepro.obj_box_zoom(im, clas,
coords, zoom_range=(1-jitter, 1+jitter),
is_rescale=True, is_center=True, is_random=True)
im, clas, coords = tl.prepro.obj_box_crop(im, clas, coords,
wrg=self.im_size[1], hrg=self.im_size[0],
is_rescale=True, is_center=True, is_random=True)
## 光度增强 photometric transformation
im = tl.prepro.illumination(im, gamma=(0.5, 1.5),
contrast=(0.5, 1.5), saturation=(0.5, 1.5), is_random=True)
im = tl.prepro.adjust_hue(im, hout=0.1, is_offset=True,
is_clip=True, is_random=True)
im = tl.prepro.pixel_value_scale(im, 0.1, [0, 255], is_random=True)
## 把数值范围从 [0, 255] 转到 [-1, 1] (可选)
im = im / 127.5 - 1.
im = np.clip(im, -1., 1.)
return im, [clas, coords]
# 随机读取一个batch的图片及其标记
idexs = tl.utils.get_random_int(min=0, max=n_data-1, number=batch_size)
b_im_path = [imgs_file_list[i] for i in idexs]
b_images = tl.prepro.threading_data(b_im_path, fn=tl.vis.read_image)
b_ann = [ann_list[i] for i in idexs]
# 多线程处理
data = tl.prepro.threading_data([_ for _ in zip(b_images, b_ann)],
_data_pre_aug_fn)
b_images2 = [d[0] for d in data]
b_ann = [d[1] for d in data]
# 保存每一组图片以供体会
for i in range(len(b_images)):
tl.vis.draw_boxes_and_labels_to_image(b_images[i],
ann_list[idexs[i]][0], ann_list[idexs[i]][1], [],
classes, True, save_name='_bbox_vis_%d_original.png' % i)
tl.vis.draw_boxes_and_labels_to_image((b_images2[i]+1)*127.5,
b_ann[i][0], b_ann[i][1], [], classes, True,
save_name='_bbox_vis_%d.png' % i)
参考:
DataAugForObjectDetection
如何用TensorLayer做目标检测的数据增强
一起来看数据增强
论文笔记之数据增广mixup