Changeable 基于pytorch的目标检测数据增强工具包

简介

基于pytorch的目标检测数据增强工具包。

实现了从 VOC格式数据集 -> transforms -> 无限dotaloader -> mosaic数据增强 -> anchors匹配 => 输出 : tuple(image[B, C, H, W], boxes[B, num_anchors * num_classes, 4], labels[B, num_anchors*num_classes], image_name[B])

mosaic

mosaic图片合成,在dotaloader中实现,

在合成mosaic时,读入四张图片。先随机生成图片交汇点;然后计算各位置图片所需尺寸;对四张图片分别进行尺寸裁剪,并去除中心在裁剪区域外的标注框;合并生成mosaic图片。
在合成前,通过dataset中transforms对单张图片进行数据增强。

第一行为mosaic,第二行mosaic+transform。每次mosaic合成,都会随机中心点,然后进行裁剪,而不是单纯的遮挡。

AnchorsAssigner (anchors分配)

实现了两种anchor分配方式:通过交并比分配,通过宽高比分配。

第一行为交并比分配,对大目标较为友好。
第二行为宽高比分配,对小目标更为友好。

Transforms (数据增强)

所实现的数据增强方式,均是针对目标检测任务。输入均为 image, boxes, labels。

  • ToTensor() # 转换npndarry为tensor。(一般不需要使用,在dataloader中会自动转换)
  • ConvertBoxesToValue() # 将boxes从百分比形式转换为值形式。
  • ConvertBoxesToPercentage() # 将boxes从值形式转换为百分比形式。
  • ConvertBoxesForm(from_form: str, to_form: str) # 转换boxes格式。’xyxy’ 或 ‘cxcywh’
  • Resize(size: Tuple[int, int]) # resize
  • AdaptiveResize(size: Tuple[int, int], value: Union[Tuple[int, int, int], Tuple[Tuple[int, int, int], …]]=(114, 114, 114)) # 自适应resize。保持图像宽高比,短边补黑边。
  • Scaled(scale: Union[float, Tuple[float, float]]) # 放大缩小图片。输入缩放比例值或缩放比例范围。
  • CropIou(iou:Union[float, Tuple[float, …]]) # 按指定最小iou截图图片。指定一个或多个iou值。
  • CropSize(size:Union[Tuple[int, int], Tuple[Tuple[int, int], …]]) # 按指定尺寸截取图片。图片尺寸小于截取尺寸时,先resize大图片,然后截取。
  • SubtractMeans(mean: Tuple[float, float, float]) # 减均值
  • DivideStds(std: Tuple[float, float, float]) # 除方差
  • GaussNoise(scale: Union[float, Tuple[float, float]]=(0, 0.1), probability: float=0.5) # 高斯噪声。指定一个值或一个范围
  • SalePepperNoise(sale_scale: Union[float, Tuple[float, float]]=(0, 0.03), pepper_scale: Union[float, Tuple[float, float]]=(0, 0.03), probability: float=0.5) # 椒盐噪声。参数分别为盐噪声比例与椒噪声比例,指定一个值或一个范围。
  • GaussBlur(ksize: Union[int, Tuple[int, …]]=(3, 5, 7, 9), probability: float=0.5) # 高斯平滑(高斯模糊)。高斯核大小,指定一个值或多个值,必须为正奇数。
  • MotionBlue(ksize: Union[int, Tuple[int, …]]=(3, 5, 7, 9, 11), angle: Union[int, Tuple[int, int]] = (0, 30), probability: float=0.5) # 运动平滑(运动模糊)。参数为核大小与运动角度。核大小,指定一个或多个值,必须为正奇数;运动角度,指定一个值或一个范围。
  • Cutout(num: Union[int, Tuple[int, …]]=(1, 2, 3, 4), size: Union[Tuple[float, float], Tuple[Tuple[float, float], …]]=((0.2, 0.2), (0.3, 0.3)), value:Union[Tuple[int, int, int], Tuple[Tuple[int, int, int], …]]=(114, 114, 114), cover: float=0.5, probability: float=0.5) # 遮挡。参数为遮挡块数量、遮挡块尺寸系数、遮挡块填充值与遮挡阈值。遮挡块数量,指定一个值或多个值;遮挡块尺寸,指定一组值或多组值(宽高);遮挡块填充值,指定一组值或多种值。
  • RandomFlipLR(probability: float=0.5) # 左右翻转。
  • RandomFlipUD(probability: float=0.5) # 上下翻转。
  • ShuffleChannels(mode: Union[Tuple[int, int, int], Tuple[Tuple[int, int, int], ]]=((0, 2, 1), (1, 0, 2), (1, 2, 0),(2, 0, 1), (2, 1, 0)), probability: float=0.5) # 交换通道。指定一组值或多组值。
  • ChangeContrast(scale:Union[float, Tuple[float, float]]=(-0.5, 0.5), probability: float=0.5) # 对比度调整。指定一个值或一个范围。
  • ChangeHue(scale: Union[int, Tuple[int, int]]=(0, 360), probability: float=0.5) # 色调调整。指定一个值或一个范围。
  • ChangeSaturation(scale: Union[float, Tuple[float, float]]=(-1, 1), probability: float=0.5) # 饱和度调整。指定一个值或一个范围。
  • ChangeBrightness(scale: Union[float, Tuple[float, float]]=(-0.3, 0.3), probability: float=0.5) # 亮度调整。指定一个值或一个范围。
  • Compose(transforms)

色彩调整

亮度
ChangeBrightness -0.3 -0.2 -0.1 0 0.1 0.2 0.3
对比度
ChangeContrast -0.5 -0.3 -0.2 0 0.2 0.3 0.5
色调
ChangeHue 0 60 120 180 240 300 360
饱和度
ChangeSaturation -1 -0.5 -0.3 0 0.3 0.5 1
通道交换  
ShuffleChannels (0, 1, 2) (0, 2, 1) (1, 0, 2) (1, 2, 0) (2, 0, 1) (2, 1, 0)  

翻转

左右翻转 上下翻转
RandomFlipLR   RandomFlipUD  

噪声

椒盐噪声
SalePepperNoise 0.01,
0.01
0.02,
0.02
0.03,
0.03
0,
0.01
0.01,
0
0,
0.02
0.02,
0
高斯噪声    
GaussNoise 0.01 0.05 0.1 0.2 0.3    

模糊

运动模糊
MotionBlue 3, 0 5, 0 7, 0 9, 0 11, 0 11, 30 11, 60
高斯模糊    
GaussBlur 1 3 5 7 9    

遮挡

遮挡
Cutout 1,(0.3, 0.3), (114,114,114), 2,(0.3, 0.3), (114,114,114) 2,(0.2, 0.15),
(0,0,0)
3,(0.15, 0.15),
(114,114,255)