detectron2.data.transforms

相关教程: 数据增强.

class detectron2.data.transforms.Transform

基类: object

用于实现图像和其他数据结构的确定性转换的基类。"确定性"要求该类的所有方法输出相对于其输入参数都是确定的。请注意,这与(随机)数据增强不同。要在训练中执行数据增强,应该有一个更高层次的策略来生成这些转换操作。

每个转换操作可以处理多种数据类型,例如:图像、坐标、分割、边界框,通过其apply_*方法。其中一些方法有默认实现,但如果默认实现不合适可以被覆盖。详情请参阅每个预定义的apply_*方法的文档。请注意,这些方法的实现可能会选择就地修改输入数据以提高转换效率。

该类可以通过其register_type()方法扩展以支持任意新的数据类型。

__repr__()

生成类似以下内容: "MyTransform(field1={self.field1}, field2={self.field2})"

apply_box(box: numpy.ndarray)numpy.ndarray

对轴对齐的框应用变换。默认情况下会变换角点并使用它们的最小/最大值来创建一个新的轴对齐框。请注意,此默认操作可能会改变框的大小,例如旋转后。

Parameters

box (ndarray) – Nx4浮点数组,采用XYXY格式的绝对坐标。

Returns

ndarray – 应用变换后的边界框。

注意

坐标不是像素索引。形状为 (H, W) 的图像内部坐标范围是 [0, W] 或 [0, H]。

该函数不会将框裁剪以强制其位于图像内部。 由使用这些框的应用程序自行决定。

abstract apply_coords(coords: numpy.ndarray)

对坐标应用变换。

Parameters

coords (ndarray) - 形状为Nx2的浮点数组。每行表示一个(x, y)坐标点。

Returns

ndarray – 应用变换后的坐标。

注意

坐标不是像素索引。形状为 (H, W) 的图像内部坐标范围是 [0, W] 或 [0, H]。 此函数也应能正确处理图像外部的坐标转换。

abstract apply_image(img: numpy.ndarray)

对图像应用变换。

Parameters

img (ndarray) - 形状为NxHxWxC,或HxWxC或HxW的数组。该数组可以是 uint8类型,范围在[0, 255]之间,也可以是浮点类型, 范围在[0, 1]或[0, 255]之间。

Returns

ndarray - 应用变换后的图像。

apply_polygons(polygons: list)list

对多边形列表应用变换,每个多边形由一个Nx2数组表示。默认情况下,仅变换所有点。

Parameters

polygon (list[ndarray]) - 每个都是一个Nx2的浮点数组,采用绝对坐标的(x, y)格式。

Returns

list[ndarray] - 应用变换后的多边形。

注意

坐标不是像素索引。形状为 (H, W) 的图像上的坐标范围是 [0, W] 或 [0, H]。

apply_segmentation(segmentation: numpy.ndarray)numpy.ndarray

在全图像分割上应用此变换。 默认情况下仅执行“apply_image”。

Parameters
  • segmentation (ndarray) – 形状为HxW的数组。该数组应为整数类型

  • 布尔数据类型。 () –

Returns

ndarray – 应用变换后的分割结果。

inverse()detectron2.data.transforms.Transform

创建一个变换,用于反转该变换的几何变化(即坐标变化)。

请注意,逆变换仅适用于几何变化。 对于不改变坐标的光度变换,其逆变换定义为无操作,即使它们可能是可逆的。

Returns

转换

classmethod register_type(data_type: str, func: Optional[Callable] = None)[源代码]

将给定函数注册为此转换将用于特定数据类型的处理程序。

Parameters
  • data_type (str) - 数据类型的名称(例如:box)

  • func (可调用对象) – 接收一个转换器和数据作为输入,返回转换后的数据。

示例:

# call it directly
def func(flip_transform, voxel_data):
    return transformed_voxel_data
HFlipTransform.register_type("voxel", func)

# or, use it as a decorator
@HFlipTransform.register_type("voxel")
def func(flip_transform, voxel_data):
    return transformed_voxel_data

# ...
transform = HFlipTransform(...)
transform.apply_voxel(voxel_data)  # func will be called
class detectron2.data.transforms.TransformList(transforms: List[detectron2.data.transforms.Transform])

基类: detectron2.data.transforms.Transform

维护一个按顺序应用的变换操作列表。 .. 属性:: transforms

type

变换列表

__add__(other: detectron2.data.transforms.TransformList)detectron2.data.transforms.TransformList
Parameters

其他 (TransformList) – 要添加的转换。

Returns

TransformList - 转换列表。

__iadd__(other: detectron2.data.transforms.TransformList)detectron2.data.transforms.TransformList
Parameters

其他 (TransformList) – 要添加的转换。

Returns

TransformList - 转换列表。

__init__(transforms: List[detectron2.data.transforms.Transform])
Parameters

transforms (list[Transform]) – 要执行的转换列表。

__len__()int
Returns

TransformList中包含的变换数量。

__radd__(other: detectron2.data.transforms.TransformList)detectron2.data.transforms.TransformList
Parameters

其他 (TransformList) – 要添加的转换。

Returns

TransformList - 转换列表。

apply_coords(x)
apply_image(x)
inverse()detectron2.data.transforms.TransformList

按相反顺序反转每个变换。

class detectron2.data.transforms.BlendTransform(src_image: numpy.ndarray, src_weight: float, dst_weight: float)

基类: detectron2.data.transforms.Transform

使用PIL增强功能转换像素颜色。

__init__(src_image: numpy.ndarray, src_weight: float, dst_weight: float)

使用以下公式将输入图像(dst_image)与src_image混合: src_weight * src_image + dst_weight * dst_image

Parameters
  • src_image (ndarray) - 输入图像将与这张图像进行混合。两张图像必须具有相同的形状、数值范围、通道顺序和数据类型。

  • src_weight (float) – 源图像的混合权重

  • dst_weight (float) – 目标图像的混合权重

apply_coords(coords: numpy.ndarray)numpy.ndarray

不对坐标进行任何变换。

apply_image(img: numpy.ndarray, interp: str = None)numpy.ndarray

对图像应用混合变换。

Parameters
  • img (ndarray) - 形状为NxHxWxC、HxWxC或HxW的数组。该数组可以是 uint8类型(范围[0,255]),或浮点类型(范围[0,1]或[0,255])。

  • interp (str) – 为保持一致性保留此选项,执行混合操作时不需要插值。

Returns

ndarray – 混合后的图像。

apply_segmentation(segmentation: numpy.ndarray)numpy.ndarray

在全图像分割上不应用任何变换。

inverse()detectron2.data.transforms.Transform

逆操作是无操作的。

class detectron2.data.transforms.CropTransform(x0: int, y0: int, w: int, h: int, orig_w: Optional[int] = None, orig_h: Optional[int] = None)

基类: detectron2.data.transforms.Transform

__init__(x0: int, y0: int, w: int, h: int, orig_w: Optional[int] = None, orig_h: Optional[int] = None)
Parameters
  • x0 (int) – 通过img[y0:y0+h, x0:x0+w]裁剪图像。

  • y0 (int) – 通过img[y0:y0+h, x0:x0+w]裁剪图像。

  • w (int) – 通过img[y0:y0+h, x0:x0+w]裁剪图像。

  • h (int) – 通过img[y0:y0+h, x0:x0+w]裁剪图像。

  • orig_w (int) - 可选参数,裁剪前的原始宽度和高度。需要此参数以使该变换可逆。

  • orig_h (int) - 可选参数,表示裁剪前的原始宽度和高度。需要此参数以使该变换可逆。

apply_coords(coords: numpy.ndarray)numpy.ndarray

对坐标应用裁剪变换。

Parameters

coords (ndarray) - 形状为Nx2的浮点数组。每行表示一个(x, y)坐标点。

Returns

ndarray – 裁剪后的坐标。

apply_image(img: numpy.ndarray)numpy.ndarray

裁剪图像。

Parameters

img (ndarray) - 形状为NxHxWxC,或HxWxC或HxW的数组。该数组可以是 uint8类型,范围在[0, 255]之间,也可以是浮点类型, 范围在[0, 1]或[0, 255]之间。

Returns

ndarray – 裁剪后的图像。

apply_polygons(polygons: list)list

对一组多边形应用裁剪变换,每个多边形由一个Nx2数组表示。裁剪操作会使用边界框对多边形进行裁剪,因此多边形中的点数可能会发生变化。

Parameters

polygon (list[ndarray]) - 每个都是一个Nx2的浮点数组,采用绝对坐标的(x, y)格式。

Returns

ndarray – 裁剪后的多边形。

inverse()detectron2.data.transforms.Transform
class detectron2.data.transforms.PadTransform(x0: int, y0: int, x1: int, y1: int, orig_w: Optional[int] = None, orig_h: Optional[int] = None, pad_value: float = 0, seg_pad_value: int = 0)

基类: detectron2.data.transforms.Transform

__init__(x0: int, y0: int, x1: int, y1: int, orig_w: Optional[int] = None, orig_h: Optional[int] = None, pad_value: float = 0, seg_pad_value: int = 0)
Parameters
  • x0 – 左侧和顶部填充的像素数

  • y0 – 左侧和顶部填充的像素数量

  • x1 – 右侧和底部填充的像素数量

  • y1 – 右侧和底部填充的像素数量

  • orig_w – 可选参数,原始宽度和高度。需要此参数以使变换可逆。

  • orig_h – 可选参数,原始宽度和高度。需要此参数以使该变换可逆。

  • pad_value – 图像的填充值

  • seg_pad_value - 分割掩码的填充值

apply_coords(coords)
apply_image(img)
apply_segmentation(img)
inverse()detectron2.data.transforms.Transform
class detectron2.data.transforms.GridSampleTransform(grid: numpy.ndarray, interp: str)

基类: detectron2.data.transforms.Transform

__init__(grid: numpy.ndarray, interp: str)
Parameters
  • grid (ndarray) - 网格包含用于计算输出的x和y输入像素位置。网格值的范围在[-1, 1]之间,这是通过输入高度和宽度归一化的。维度为N x H x W x 2

  • interp (str) – 插值方法。可选值包括 nearestbilinear

apply_coords(coords: numpy.ndarray)

不支持。

apply_image(img: numpy.ndarray, interp: str = None)numpy.ndarray

对图像应用网格采样。

Parameters
  • img (ndarray) - 形状为NxHxWxC、HxWxC或HxW的数组。该数组可以是uint8类型(范围[0,255]),或浮点类型(范围[0,1]或[0,255])。

  • interp (str) – 插值方法。可选值包括 nearestbilinear

Returns

ndarray – 经过网格采样的图像。

apply_segmentation(segmentation: numpy.ndarray)numpy.ndarray

在全图像分割上应用网格采样。

Parameters

分割 (ndarray) - 形状为HxW的数组。该数组应具有整数或布尔数据类型。

Returns

ndarray – 网格采样的分割结果。

class detectron2.data.transforms.HFlipTransform(width: int)

基类: detectron2.data.transforms.Transform

执行水平翻转。

apply_coords(coords: numpy.ndarray)numpy.ndarray

翻转坐标。

Parameters

coords (ndarray) – 浮点型数组,形状为Nx2。每行表示一个(x, y)坐标点。

Returns

ndarray – 翻转后的坐标。

注意

输入的是浮点坐标,而非像素索引。因此它们通过(W - x, H - y)进行翻转,而不是(W - 1 - x, H - 1 - y)

apply_image(img: numpy.ndarray)numpy.ndarray

翻转图像。

Parameters

img (ndarray) - 形状为HxW、HxWxC或NxHxWxC的数组。该数组可以是 uint8类型(范围[0, 255]),或浮点类型(范围 [0, 1]或[0, 255])。

Returns

ndarray – 翻转后的图像。

apply_rotated_box(rotated_boxes)

对旋转框应用水平翻转变换。

Parameters

rotated_boxes (ndarray) – Nx5浮点数组,采用 (x_center, y_center, width, height, angle_degrees)格式, 使用绝对坐标表示。

inverse()detectron2.data.transforms.Transform

逆操作就是再次翻转

class detectron2.data.transforms.VFlipTransform(height: int)

基类: detectron2.data.transforms.Transform

执行垂直翻转。

apply_coords(coords: numpy.ndarray)numpy.ndarray

翻转坐标。

Parameters

coords (ndarray) - 形状为Nx2的浮点数组。每行表示一个(x, y)坐标点。

Returns

ndarray – 翻转后的坐标。

注意

输入的是浮点坐标,而非像素索引。因此它们通过(W - x, H - y)进行翻转,而不是(W - 1 - x, H - 1 - y)

apply_image(img: numpy.ndarray)numpy.ndarray

翻转图像。

Parameters

img (ndarray) - 形状为HxW、HxWxC或NxHxWxC的数组。该数组可以是 uint8类型(范围[0, 255]),或浮点类型(范围 [0, 1]或[0, 255])。

Returns

ndarray – 翻转后的图像。

inverse()detectron2.data.transforms.Transform

逆操作就是再次翻转

class detectron2.data.transforms.NoOpTransform

基类: detectron2.data.transforms.Transform

一个不做任何操作的转换。

apply_coords(coords: numpy.ndarray)numpy.ndarray
apply_image(img: numpy.ndarray)numpy.ndarray
apply_rotated_box(x)
inverse()detectron2.data.transforms.Transform
class detectron2.data.transforms.ScaleTransform(h: int, w: int, new_h: int, new_w: int, interp: str = None)

基类: detectron2.data.transforms.Transform

将图像调整为目标尺寸。

__init__(h: int, w: int, new_h: int, new_w: int, interp: str = None)
Parameters
  • h (int) – 原始图像尺寸。

  • w (int) – 原始图像尺寸。

  • new_h (int) – 新的图像尺寸。

  • new_w (int) – 新的图像尺寸。

  • interp (str) – interpolation methods. Options includes nearest, linear (3D-only), bilinear, bicubic (4D-only), and area. Details can be found in: https://pytorch.org/docs/stable/nn.functional.html

apply_coords(coords: numpy.ndarray)numpy.ndarray

计算调整大小后的坐标。

Parameters

coords (ndarray) - 形状为Nx2的浮点数组。每行表示一个(x, y)坐标点。

Returns

ndarray – 调整大小后的坐标。

apply_image(img: numpy.ndarray, interp: str = None)numpy.ndarray

调整图像大小。

Parameters
  • img (ndarray) - 形状为NxHxWxC,或HxWxC或HxW的数组。该数组可以是uint8类型(范围[0,255]),或浮点类型(范围[0,1]或[0,255])。

  • interp (str) – interpolation methods. Options includes nearest, linear (3D-only), bilinear, bicubic (4D-only), and area. Details can be found in: https://pytorch.org/docs/stable/nn.functional.html

Returns

ndarray – 调整大小后的图像。

apply_segmentation(segmentation: numpy.ndarray)numpy.ndarray

在全图像分割上应用调整大小。

Parameters

分割 (ndarray) - 形状为HxW的数组。该数组应具有整数或布尔数据类型。

Returns

ndarray – 调整大小后的分割结果。

inverse()detectron2.data.transforms.Transform

逆操作是将其调整回原始大小。

class detectron2.data.transforms.ExtentTransform(src_rect, output_size, interp=2, fill=0)

基类: detectron2.data.transforms.Transform

从源图像中提取一个子区域并将其缩放到输出尺寸。

填充颜色用于映射源矩形中超出源图像范围的像素。

See: https://pillow.readthedocs.io/en/latest/PIL.html#PIL.ImageTransform.ExtentTransform

__init__(src_rect, output_size, interp=2, fill=0)
Parameters
  • src_rect (x0, y0, x1, y1) – 源坐标

  • output_size (h, w) - 目标图像尺寸

  • interp – PIL插值方法

  • fill – 当src_rect超出图像范围时使用的填充颜色

apply_coords(coords)
apply_image(img, interp=None)
apply_segmentation(segmentation)
class detectron2.data.transforms.ResizeTransform(h, w, new_h, new_w, interp=None)

基类: detectron2.data.transforms.Transform

将图像调整为目标尺寸。

__init__(h, w, new_h, new_w, interp=None)
Parameters
  • h (int) – 原始图像高度

  • w (int) – 原始图像尺寸

  • new_h (int) – 新图像尺寸

  • new_w (int) – 新图像尺寸

  • interp – PIL插值方法,默认为双线性。

apply_coords(coords)
apply_image(img, interp=None)
apply_rotated_box(rotated_boxes)

对旋转框应用尺寸调整变换。有关这些(近似)公式如何推导的详细信息,请参阅RotatedBoxes.scale()

Parameters

rotated_boxes (ndarray) – Nx5浮点数组,采用 (x_center, y_center, width, height, angle_degrees)格式 的绝对坐标。

apply_segmentation(segmentation)
inverse()
class detectron2.data.transforms.RotationTransform(h, w, angle, expand=True, center=None, interp=None)

基类: detectron2.data.transforms.Transform

该方法返回此图像的副本,围绕其中心逆时针旋转指定度数。

__init__(h, w, angle, expand=True, center=None, interp=None)
Parameters
  • h (int) – 原始图像高度

  • w (int) – 原始图像尺寸

  • angle (float) – 旋转角度(以度为单位)

  • expand (bool) - 选择是否将图像调整为适合整个旋转后的图像(默认),或仅进行裁剪

  • center (tuple (width, height)) – 旋转中心的坐标 如果留空为None,中心将自动适配为每张图像的中心 当expand=True时center参数无效,因为它仅影响偏移量

  • interp – cv2插值方法,默认为cv2.INTER_LINEAR

apply_coords(coords)

坐标应为一个N*2的类数组结构,包含N组(x, y)点

apply_image(img, interp=None)

img 应该是一个 numpy 数组,格式为 高度 * 宽度 * 通道数

apply_segmentation(segmentation)
create_rotation_matrix(offset=0)
inverse()

逆操作是通过expand旋转回原状,然后裁剪以获得原始形状。

class detectron2.data.transforms.ColorTransform(op)

基类: detectron2.data.transforms.Transform

适用于任何光度变换的通用封装器。这些变换应仅影响色彩空间和

不是图像的坐标空间(例如,标注坐标如边界框不应更改)

__init__(op)
Parameters

op (Callable) – 要应用于图像的操作,该操作接收一个ndarray并返回一个ndarray。

apply_coords(coords)
apply_image(img)
apply_segmentation(segmentation)
inverse()
class detectron2.data.transforms.PILColorTransform(op)

基类: detectron2.data.transforms.ColorTransform

Generic wrapper for PIL Photometric image transforms,

这会影响图像的色彩空间而非坐标空间

__init__(op)
Parameters

op (Callable) – 应用于图像的操作, 该操作接收一个PIL图像并返回转换后的PIL图像。 关于可能操作的参考请见: - https://pillow.readthedocs.io/en/stable/

apply_image(img)
class detectron2.data.transforms.Augmentation

基类: object

增强定义了(通常是随机的)策略/方法,用于从数据生成Transform。它通常用于输入数据的预处理。

在最一般情况下,生成Transform的"策略"可能需要从输入数据中获取任意信息,以确定应用何种变换。因此,每个Augmentation实例都定义了其get_transform()方法所需的参数。当使用位置参数调用时,get_transform()方法会执行该策略。

请注意,Augmentation定义了创建Transform的策略,但并未规定如何对这些数据执行实际的转换操作。其__call__()方法将使用AugInput.transform()来执行转换。

返回的Transform对象用于描述确定性变换,这意味着它可以重新应用于关联数据,例如图像的几何形状及其分割掩码需要一起进行变换。 (如果不需要这种重新应用,则确定性就不是关键要求。)

__call__(aug_input)detectron2.data.transforms.Transform

对给定的 aug_input 进行原地增强,并返回所使用的变换。

该方法将被调用来应用增强。在大多数增强情况下,使用默认实现就足够了,该实现会使用输入参数调用get_transform()。但子类可以重写它以实现更复杂的逻辑。

Parameters

aug_input (AugInput) – 一个包含本增强操作所需属性的对象(由self.get_transform定义)。其transform方法将被调用来对其进行原地转换。

Returns

Transform - 应用于输入数据的转换操作。

__repr__()

生成类似以下内容: "MyAugmentation(field1={self.field1}, field2={self.field2})"

__str__()

生成类似以下内容: "MyAugmentation(field1={self.field1}, field2={self.field2})"

get_transform(*args)detectron2.data.transforms.Transform

根据输入数据执行策略,并决定对输入应用何种转换。

Parameters

args – 任何固定长度的位置参数。默认情况下,参数的名称应存在于AugInput中才能被使用。

Returns

Transform - 返回应用于输入的确定性变换。

示例:

class MyAug:
    # if a policy needs to know both image and semantic segmentation
    def get_transform(image, sem_seg) -> T.Transform:
        pass
tfm: Transform = MyAug().get_transform(image, sem_seg)
new_image = tfm.apply_image(image)

说明

用户可以在自定义的get_transform()方法中自由使用任意新的参数名称,只要这些参数在输入数据中可用。在detectron2中我们遵循以下约定:

  • 图像: (高度,宽度) 或 (高度,宽度,通道数) 的 uint8 类型 ndarray 数组,取值范围为 [0, 255],或浮点数取值范围为 [0, 1] 或 [0, 255]。

  • boxes: (N,4) float32类型的ndarray。它表示N个实例的边界框,每个框以XYXY格式的绝对坐标单位表示。

  • sem_seg: (H,W) 类型为uint8的ndarray。每个元素代表像素的整数标签。

我们没有为其他类型指定规范,也不包含detectron2中使用其他类型的内置Augmentation

input_args: Optional[Tuple[str]] = None
class detectron2.data.transforms.AugmentationList(augs)

基类: detectron2.data.transforms.Augmentation

应用一系列增强操作。

它具有__call__方法来应用数据增强。

请注意,对于AugmentationList来说,get_transform()方法是无法实现的(如果调用会抛出错误),因为要应用一系列增强操作,必须先应用第k个增强,才能为第(k+1)个增强提供所需的输入。

__init__(augs)
Parameters

augs (list[AugmentationTransform]) –

class detectron2.data.transforms.AugInput(image: numpy.ndarray, *, boxes: Optional[numpy.ndarray] = None, sem_seg: Optional[numpy.ndarray] = None)

基类: object

可用于Augmentation.__call__()的输入。这是大多数用例的标准实现。该类提供了__init__()中定义的标准属性"image"、"boxes"、"sem_seg",不同的增强方法可能需要这些属性。大多数增强策略只需要这三个属性。

在对这些属性应用增强后(使用AugInput.transform()),返回的变换可用于转换用户拥有的其他数据结构。

示例:

input = AugInput(image, boxes=boxes)
tfms = augmentation(input)
transformed_image = input.image
transformed_boxes = input.boxes
transformed_other_data = tfms.apply_other(other_data)

一个涉及新数据类型的扩展项目可能需要实现需要其他输入的增强策略。算法可能需要以不同于本类定义的标准方式转换输入。在这些罕见情况下,用户可以实现一个类似于此类的类,满足以下条件:

  • 输入必须以属性访问的形式提供对这些数据的访问权限(getattr)。例如,如果要应用的Augmentation需要"image"和"sem_seg"参数,其输入必须具有"image"和"sem_seg"属性。

  • 输入必须有一个transform(tfm: Transform) -> None方法,该方法会原地转换其所有属性。

__init__(image: numpy.ndarray, *, boxes: Optional[numpy.ndarray] = None, sem_seg: Optional[numpy.ndarray] = None)
Parameters
  • image (ndarray) – 类型为uint8、取值范围[0,255]的(H,W)或(H,W,C)维ndarray,或取值范围[0,1]或[0,255]的浮点数。C的含义由用户自行定义。

  • boxes (ndarrayNone) – Nx4 float32格式的边界框,采用XYXY_ABS坐标模式

  • sem_seg (ndarrayNone) – HxW uint8语义分割掩码。每个元素代表像素的整数标签。

transform(tfm: detectron2.data.transforms.Transform)None

原地转换该类的所有属性。

所谓"原地操作",指的是调用此方法后,访问诸如self.image等属性将返回转换后的数据。

class detectron2.data.transforms.FixedSizeCrop(crop_size: Tuple[int], pad: bool = True, pad_value: float = 128.0, seg_pad_value: int = 255)

基类: detectron2.data.transforms.Augmentation

如果crop_size小于输入图像尺寸,则会使用随机裁剪至指定尺寸。如果crop_size大于输入图像尺寸,当pad为True时会在图像右侧和底部进行填充至目标尺寸,否则直接返回较小的原图。

__init__(crop_size: Tuple[int], pad: bool = True, pad_value: float = 128.0, seg_pad_value: int = 255)
Parameters
  • crop_size – 目标图像的(高度,宽度)。

  • pad – 如果为True,会将小于crop_size的图像填充至crop_size大小

  • pad_value – 图像的填充值。

  • seg_pad_value – 分割掩码的填充值。

get_transform(image: numpy.ndarray)detectron2.data.transforms.TransformList
class detectron2.data.transforms.RandomApply(tfm_or_aug, prob=0.5)

基类: detectron2.data.transforms.Augmentation

以给定概率随机应用一种增强效果。

__init__(tfm_or_aug, prob=0.5)
Parameters
  • tfm_or_aug (Transform, Augmentation) – 要应用的变换或增强。它可以是TransformAugmentation的实例。

  • prob (float) – 包装器转换被应用的概率,范围在0.0到1.0之间

get_transform(*args)
class detectron2.data.transforms.RandomBrightness(intensity_min, intensity_max)

基类: detectron2.data.transforms.Augmentation

随机变换图像亮度。

亮度强度在(intensity_min, intensity_max)范围内均匀采样。 - 强度 < 1 会降低亮度 - 强度 = 1 会保持输入图像不变 - 强度 > 1 会增加亮度

See: https://pillow.readthedocs.io/en/3.0.x/reference/ImageEnhance.html

__init__(intensity_min, intensity_max)
Parameters
  • intensity_min (float) - 最小增强强度

  • intensity_max (float) – 最大增强值

get_transform(image)
class detectron2.data.transforms.RandomContrast(intensity_min, intensity_max)

基类: detectron2.data.transforms.Augmentation

随机变换图像对比度。

对比度在(intensity_min, intensity_max)范围内均匀采样。 - 强度 < 1 会降低对比度 - 强度 = 1 会保持输入图像不变 - 强度 > 1 会增加对比度

See: https://pillow.readthedocs.io/en/3.0.x/reference/ImageEnhance.html

__init__(intensity_min, intensity_max)
Parameters
  • intensity_min (float) - 最小增强强度

  • intensity_max (float) - 最大增强强度

get_transform(image)
class detectron2.data.transforms.RandomCrop(crop_type: str, crop_size)

基类: detectron2.data.transforms.Augmentation

从图像中随机裁剪出一个矩形区域。

__init__(crop_type: str, crop_size)
Parameters
  • crop_type (str) – 可选值为"relative_range"、"relative"、"absolute"、"absolute_range"之一。

  • crop_size (tuple[float, float]) – 两个浮点数,解释如下。

  • "relative":从尺寸为 (H, W) 的输入图像中裁剪出一个 (H * crop_size[0], W * crop_size[1]) 的区域。裁剪尺寸应在 (0, 1] 范围内

  • “relative_range”:从[crop_size[0], 1]和[crop_size[1], 1]中均匀采样两个值,并将其用作"relative"裁剪类型。

  • "absolute" 从输入图像中裁剪出一个 (crop_size[0], crop_size[1]) 大小的区域。crop_size 必须小于输入图像的尺寸。

  • "absolute_range",对于输入尺寸为(H, W)的情况,在[crop_size[0], min(H, crop_size[1])]范围内均匀采样H_crop,在[crop_size[0], min(W, crop_size[1])]范围内均匀采样W_crop。然后裁剪出一个(H_crop, W_crop)的区域。

get_crop_size(image_size)
Parameters

image_size (tuple) – 高度, 宽度

Returns

crop_size (tuple) – 高度和宽度,单位为绝对像素

get_transform(image)
class detectron2.data.transforms.RandomExtent(scale_range, shift_range)

基类: detectron2.data.transforms.Augmentation

通过裁剪源图像的随机“子矩形”区域来输出一张图像。

子矩形区域可以被参数化以包含源图像之外的像素,在这种情况下这些像素将被设置为零值(即黑色)。输出图像的大小会随着随机子矩形区域的大小而变化。

__init__(scale_range, shift_range)
Parameters
  • output_size (h, w) - 输出图像的尺寸

  • scale_range (l, h) - 输入到输出尺寸缩放因子的范围

  • shift_range (x, y) – 裁剪子矩形区域的平移范围。该矩形会按照[w / 2 * Uniform(-x, x), h / 2 * Uniform(-y, y)]进行平移,其中(w, h)表示输入图像的(宽度, 高度)。将任一分量设为零表示在图像中心进行裁剪。

get_transform(image)
class detectron2.data.transforms.RandomFlip(prob=0.5, *, horizontal=True, vertical=False)

基类: detectron2.data.transforms.Augmentation

以给定的概率水平或垂直翻转图像。

__init__(prob=0.5, *, horizontal=True, vertical=False)
Parameters
  • prob (float) – 翻转的概率。

  • horizontal (boolean) - 是否应用水平翻转

  • vertical (boolean) - 是否应用垂直翻转

get_transform(image)
class detectron2.data.transforms.RandomSaturation(intensity_min, intensity_max)

基类: detectron2.data.transforms.Augmentation

随机变换RGB图像的饱和度。输入图像假定具有'RGB'通道顺序。

饱和度强度在(intensity_min, intensity_max)范围内均匀采样。 - 当intensity < 1时会降低饱和度(使图像更接近灰度) - intensity = 1时会保持输入图像不变 - 当intensity > 1时会增加饱和度

See: https://pillow.readthedocs.io/en/3.0.x/reference/ImageEnhance.html

__init__(intensity_min, intensity_max)
Parameters
  • intensity_min (float) - 最小增强幅度(1表示保持输入不变)。

  • intensity_max (float) - 最大增强值(1表示保持输入不变)。

get_transform(image)
class detectron2.data.transforms.RandomLighting(scale)

基类: detectron2.data.transforms.Augmentation

AlexNet中描述的“光照”增强方法,在ImageNet上使用固定PCA处理。假设输入图像具有'RGB'通道顺序。

色彩抖动的程度通过正态分布随机采样,其标准差由比例参数给出。

__init__(scale)
Parameters

scale (float) – 主成分权重的标准差。

get_transform(image)
class detectron2.data.transforms.RandomRotation(angle, expand=True, center=None, sample_style='range', interp=None)

基类: detectron2.data.transforms.Augmentation

该方法返回此图像的副本,围绕给定中心逆时针旋转指定度数。

__init__(angle, expand=True, center=None, sample_style='range', interp=None)
Parameters
  • angle (list[float]) - 如果 sample_style=="range", 表示从中采样角度(以度为单位)的[min, max]区间。 如果 sample_style=="choice",则表示要从中采样的角度列表

  • expand (bool) - 选择是否将图像调整为适合整个旋转后的图像(默认),或仅进行裁剪

  • center (list[[float, float]]) - 如果sample_style=="range", 表示一个[[minx, miny], [maxx, maxy]]的相对区间,从中采样中心点, [0, 0]表示图像左上角,[1, 1]表示右下角。 如果sample_style=="choice",则表示可供采样的中心点列表。 默认值:None,表示旋转中心为图像中心。 当expand=True时center参数无效,因为它只影响偏移量

get_transform(image)
class detectron2.data.transforms.Resize(shape, interp=2)

基类: detectron2.data.transforms.Augmentation

将图像调整为固定的目标尺寸

__init__(shape, interp=2)
Parameters
  • shape – (h, w) 元组或整数

  • interp – PIL插值方法

get_transform(image)
class detectron2.data.transforms.ResizeScale(min_scale: float, max_scale: float, target_height: int, target_width: int, interp: int = 2)

基类: detectron2.data.transforms.Augmentation

以目标尺寸作为输入,在min_scalemax_scale之间随机缩放给定的目标尺寸。然后按比例缩放输入图像,使其适应缩放后的目标框,同时保持宽高比不变。 这实现了谷歌"resize_and_crop"数据增强中的调整大小部分: https://github.com/tensorflow/tpu/blob/master/models/official/detection/utils/input_utils.py#L127

__init__(min_scale: float, max_scale: float, target_height: int, target_width: int, interp: int = 2)
Parameters
  • min_scale – 最小图像缩放范围。

  • max_scale – 最大图像缩放范围。

  • target_height – 目标图像高度。

  • target_width – 目标图像宽度。

  • interp – 图像插值方法。

get_transform(image: numpy.ndarray)detectron2.data.transforms.Transform
class detectron2.data.transforms.ResizeShortestEdge(short_edge_length, max_size=9223372036854775807, sample_style='range', interp=2)

基类: detectron2.data.transforms.Augmentation

在保持宽高比不变的情况下调整图像大小。 它会尝试将较短边缩放到给定的short_edge_length, 只要较长边不超过max_size。 如果达到max_size,则进行降尺度处理以确保较长边不超过max_size。

__init__(short_edge_length, max_size=9223372036854775807, sample_style='range', interp=2)
Parameters
  • short_edge_length (list[int]) – 如果 sample_style=="range", 表示用于采样最短边长度的[min, max]区间范围。 如果 sample_style=="choice",则表示可供采样的最短边长度列表。

  • max_size (int) – 允许的最大长边长度。

  • sample_style (str) - 可以是"range"或"choice"。

static get_output_shape(oldh: int, oldw: int, short_edge_length: int, max_size: int) → Tuple[int, int][源代码]

根据输入尺寸和目标短边长度计算输出尺寸。

get_transform(image)
class detectron2.data.transforms.RandomCrop_CategoryAreaConstraint(crop_type: str, crop_size, single_category_max_area: float = 1.0, ignored_category: int = None)

基类: detectron2.data.transforms.Augmentation

类似于RandomCrop,但会寻找一个裁剪窗口,使得在语义分割的真实标注中,没有任何单一类别占据超过single_category_max_area的比例,这可能导致训练不稳定。该函数最多尝试10次以找到这样一个有效的裁剪窗口。

__init__(crop_type: str, crop_size, single_category_max_area: float = 1.0, ignored_category: int = None)
Parameters
  • crop_type – 与 RandomCrop 中的相同

  • crop_size – 与 RandomCrop 中的相同

  • single_category_max_area – 单个类别的最大允许面积比例。设置为1.0表示禁用此限制

  • ignored_category - 允许语义分割标注中的这一类别超出面积比例限制。通常设置为训练中被忽略的类别。

get_transform(image, sem_seg)
class detectron2.data.transforms.RandomResize(shape_list, interp=2)

基类: detectron2.data.transforms.Augmentation

随机调整图像大小至shape_list中的目标尺寸

__init__(shape_list, interp=2)
Parameters
  • shape_list – 一个包含形状(h, w)的列表

  • interp – PIL插值方法

get_transform(image)
class detectron2.data.transforms.MinIoURandomCrop(min_ious=0.1, 0.3, 0.5, 0.7, 0.9, min_crop_size=0.3, mode_trials=1000, crop_trials=50)

基类: detectron2.data.transforms.Augmentation

随机裁剪图像和边界框,裁剪后的区域与原始图像及边界框需满足最小IoU要求,IoU阈值从min_ious中随机选取。

Parameters
  • min_ious (tuple) – 所有交并比的最小IoU阈值

  • boxes (边界框) –

  • min_crop_size (float) – 最小裁剪尺寸(即 h,w := a*h, a*w)

  • a >= min_crop_size) (其中) –

  • mode_trials – 用于采样最小交并比(min_ious)阈值的试验次数

  • crop_trials – 裁剪后采样crop_size的尝试次数

get_transform(image, boxes)

调用函数以裁剪图像和边界框,需满足最小IoU约束条件。

Parameters

boxes – 真实标注框,格式为(x1, y1, x2, y2)