detectron2.data.transforms

相关教程:数据增强.

detectron2.data.transforms.Transform

基础:object

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

每个转换操作可以处理几种数据类型,例如:图像、坐标、分割、边界框,使用其apply_*方法。其中一些具有默认实现,但如果默认实现不合适,可以覆盖它们。有关详细信息,请参阅每个预定义的apply_*方法的文档。请注意,这些方法的实现可以选择就地修改其输入数据以实现高效转换。

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

__repr__()

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

apply_box(box: numpy.ndarray)numpy.ndarray

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

参数

box (ndarray) – Nx4 浮点数组,以绝对坐标表示 XYXY 格式。

返回值

ndarray – 应用转换后的框。

注意

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

此函数不会剪裁框以强制它们位于图像内。这取决于使用这些框的应用程序来决定。

抽象 apply_coords(coords: numpy.ndarray)

将转换应用于坐标。

参数

coords (ndarray) – 形状为 Nx2 的浮点数组。每行都是 (x, y)。

返回值

ndarray – 应用转换后的坐标。

注意

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

抽象 apply_image(img: numpy.ndarray)

将转换应用于图像。

参数

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

返回值

ndarray – 应用转换后的图像。

apply_polygons(polygons: list)list

将转换应用于多边形列表,每个多边形由 Nx2 数组表示。默认情况下将只转换所有点。

参数

polygon (list[ndarray]) – 每个都是以绝对坐标表示的 (x, y) 格式的 Nx2 浮点数组。

返回值

list[ndarray] – 应用转换后的多边形。

注意

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

apply_segmentation(segmentation: numpy.ndarray)numpy.ndarray

将转换应用于全图像分割。默认情况下将只执行“apply_image”。

参数
  • segmentation (ndarray) – 形状为 HxW。数组应该具有整数

  • bool 数据类型。 () –

返回值

ndarray – 应用转换后的分割。

inverse()detectron2.data.transforms.Transform

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

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

返回值

转换

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

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

参数
  • data_type (str) – 数据类型的名称(例如,框)

  • 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
detectron2.data.transforms.TransformList(transforms: List[detectron2.data.transforms.Transform])

基础:detectron2.data.transforms.Transform

维护一个转换操作列表,这些操作将按顺序应用。 .. attribute:: transforms

类型

list[Transform]

__add__(other: detectron2.data.transforms.TransformList)detectron2.data.transforms.TransformList
参数

other (TransformList) – 要添加的转换。

返回值

TransformList – 转换列表。

__iadd__(other: detectron2.data.transforms.TransformList)detectron2.data.transforms.TransformList
参数

other (TransformList) – 要添加的转换。

返回值

TransformList – 转换列表。

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

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

__len__()int
返回值

TransformList 中包含的转换数量。

__radd__(other: detectron2.data.transforms.TransformList)detectron2.data.transforms.TransformList
参数

other (TransformList) – 要添加的转换。

返回值

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 enhance 函数变换像素颜色。

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

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

参数
  • src_image (ndarray) – 输入图像与该图像混合。这两个图像必须具有相同的形状、范围、通道顺序和数据类型。

  • src_weight (float) – src_image 的混合权重。

  • dst_weight (float) – dst_image 的混合权重。

apply_coords(coords: numpy.ndarray)numpy.ndarray

对坐标不执行任何变换。

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

对图像应用混合变换。

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

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

返回值

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)
参数
  • 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

对坐标应用剪裁变换。

参数

coords (ndarray) – 形状为 Nx2 的浮点数组。每行都是 (x, y)。

返回值

ndarray – 剪裁后的坐标。

apply_image(img: numpy.ndarray)numpy.ndarray

剪裁图像。

参数

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

返回值

ndarray – 剪裁后的图像。

apply_polygons(polygons: list)list

对多边形列表应用剪裁变换,每个多边形由 Nx2 数组表示。它将使用框剪裁多边形,因此多边形中的点数可能会发生变化。

参数

polygon (list[ndarray]) – 每个都是以绝对坐标表示的 (x, y) 格式的 Nx2 浮点数组。

返回值

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)
参数
  • 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)
参数
  • 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

对图像应用网格采样。

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

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

返回值

ndarray – 网格采样图像。

apply_segmentation(segmentation: numpy.ndarray)numpy.ndarray

对全图分割应用网格采样。

参数

segmentation (ndarray) – 形状为 HxW。数组应具有整数或布尔类型。

返回值

ndarray – 网格采样分割。

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

基础:detectron2.data.transforms.Transform

执行水平翻转。

apply_coords(coords: numpy.ndarray)numpy.ndarray

翻转坐标。

参数

coords (ndarray) – 形状为 Nx2 的浮点数组。每行都是 (x, y)。

返回值

ndarray – 翻转后的坐标。

注意

输入是浮点坐标,而不是像素索引。因此它们被 (W - x, H - y) 翻转,而不是 (W - 1 - x, H - 1 - y).

apply_image(img: numpy.ndarray)numpy.ndarray

翻转图像。

参数

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

返回值

ndarray – 翻转后的图像。

apply_rotated_box(rotated_boxes)

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

参数

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

翻转坐标。

参数

coords (ndarray) – 形状为 Nx2 的浮点数组。每行都是 (x, y)。

返回值

ndarray – 翻转后的坐标。

注意

输入是浮点坐标,而不是像素索引。因此它们被 (W - x, H - y) 翻转,而不是 (W - 1 - x, H - 1 - y).

apply_image(img: numpy.ndarray)numpy.ndarray

翻转图像。

参数

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

返回值

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)
参数
  • h (int) – 原始图像大小。

  • w (int) – 原始图像大小。

  • new_h (int) – 新图像大小。

  • new_w (int) – 新图像大小。

  • interp (str) – 插值方法。选项包括 nearestlinear (仅限 3D)、bilinearbicubic (仅限 4D) 和 area。详细信息可以在以下位置找到: https://pytorch.ac.cn/docs/stable/nn.functional.html

apply_coords(coords: numpy.ndarray)numpy.ndarray

计算调整大小后的坐标。

参数

coords (ndarray) – 形状为 Nx2 的浮点数组。每行都是 (x, y)。

返回值

ndarray – 调整大小后的坐标。

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

调整图像(s)的大小。

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

  • interp (str) – 插值方法。选项包括 nearestlinear (仅限 3D)、bilinearbicubic (仅限 4D) 和 area。详细信息可以在以下位置找到: https://pytorch.ac.cn/docs/stable/nn.functional.html

返回值

ndarray – 调整大小后的图像(s)。

apply_segmentation(segmentation: numpy.ndarray)numpy.ndarray

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

参数

segmentation (ndarray) – 形状为 HxW。数组应具有整数或布尔类型。

返回值

ndarray – 调整大小后的分割。

inverse()detectron2.data.transforms.Transform

逆操作是将其恢复到原始大小。

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

基础:detectron2.data.transforms.Transform

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

填充颜色用于映射落在源图像外部的源矩形的像素。

参见:https://pillow.pythonlang.cn/en/latest/PIL.html#PIL.ImageTransform.ExtentTransform

__init__(src_rect, output_size, interp=2, fill=0)
参数
  • 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)
参数
  • 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()

参数

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)
参数
  • h (int) – 原始图像大小

  • w (int) – 原始图像大小

  • angle (float) – 旋转角度

  • expand (bool) – 选择是否应调整图像大小以适应整个旋转图像(默认值),或简单地裁剪

  • center (元组 (width, height)) – 旋转中心的坐标。如果设置为 None,则旋转中心将被设置为每个图像的中心。如果 expand=True,则 center 参数无效,因为它只影响平移。

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

apply_coords(coords)

coords 应该是一个 N * 2 的数组,包含 N 个 (x, y) 点对。

apply_image(img, interp=None)

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

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

逆操作是使用 expand 将图像旋转回原位,然后裁剪以获取原始形状。

detectron2.data.transforms.ColorTransform(op)

基础:detectron2.data.transforms.Transform

对任何光度变换的通用包装器。这些变换只应该影响颜色空间,

而不影响图像的坐标空间(例如,注释坐标,如边界框,不应被改变)。

__init__(op)
参数

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

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

基类:detectron2.data.transforms.ColorTransform

PIL 光度图像变换的通用包装器,

它影响颜色空间而不影响图像的坐标空间。

__init__(op)
参数

op (可调用) – 要应用于图像的操作,它接收一个 PIL Image 并返回一个经过变换的 PIL Image。有关可能的操作的参考,请参阅: - https://pillow.pythonlang.cn/en/stable/

apply_image(img)
detectron2.data.transforms.Augmentation

基础:object

Augmentation 定义(通常是随机的)策略来从数据中生成 Transform。它通常用于输入数据的预处理。

生成 Transform 的“策略”可能在最通用的情况下需要来自输入数据的任意信息,以确定要应用哪些变换。因此,每个 Augmentation 实例都定义了其 get_transform() 方法所需的 arguments。当使用位置 arguments 调用时,get_transform() 方法将执行策略。

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

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

__call__(aug_input)detectron2.data.transforms.Transform

就地增强给定的 aug_input,并返回所使用的变换。

此方法将被调用以应用增强。在大多数增强中,使用默认实现就足够了,它使用输入调用 get_transform()。但是子类可以覆盖它以具有更复杂的逻辑。

参数

aug_input (AugInput) – 一个包含此增强所需属性的对象(由 self.get_transform 定义)。它的 transform 方法将被调用以就地变换它。

返回值

Transform – 应用于输入的变换。

__repr__()

生成类似于: “MyAugmentation(field1={self.field1}, field2={self.field2})” 的内容。

__str__()

生成类似于: “MyAugmentation(field1={self.field1}, field2={self.field2})” 的内容。

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

根据输入数据执行策略,并决定要应用于输入的变换。

参数

args – 任何固定长度的位置 arguments。默认情况下,arguments 的名称应该存在于要使用的 AugInput 中。

返回值

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() 方法中自由使用任意新的 argument 名称,只要它们在输入数据中可用。在 detectron2 中,我们使用以下约定:

  • image: (H,W) 或 (H,W,C) ndarray,类型为 uint8,范围为 [0, 255],或者浮点数,范围为 [0, 1] 或 [0, 255]。

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

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

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

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

基类:detectron2.data.transforms.Augmentation

应用一系列增强。

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

注意,get_transform() 方法对于 AugmentationList 是不可能的(如果调用,则会抛出错误),因为为了应用一系列增强,必须首先应用第 k 个增强,以提供第 (k+1) 个增强所需的输入。

__init__(augs)
参数

augs (列表[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)
参数
  • image (ndarray) – (H,W) 或 (H,W,C) 类型为 uint8 的 ndarray,范围在 [0, 255] 之间,或浮点型,范围在 [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)
参数
  • 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)
参数
  • 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) 中均匀采样。 - intensity < 1 将降低亮度 - intensity = 1 将保留输入图像 - intensity > 1 将增加亮度

请参阅:https://pillow.pythonlang.cn/en/3.0.x/reference/ImageEnhance.html

__init__(intensity_min, intensity_max)
参数
  • 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) 中均匀采样。 - intensity < 1 将降低对比度 - intensity = 1 将保留输入图像 - intensity > 1 将增加对比度

请参阅:https://pillow.pythonlang.cn/en/3.0.x/reference/ImageEnhance.html

__init__(intensity_min, intensity_max)
参数
  • 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)
参数
  • 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]) 区域。裁剪大小必须小于输入图像大小。

  • “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)
参数

image_size (tuple) – 高度、宽度

返回值

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

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

基类:detectron2.data.transforms.Augmentation

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

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

__init__(scale_range, shift_range)
参数
  • 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)
参数
  • 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 会提高饱和度

请参阅:https://pillow.pythonlang.cn/en/3.0.x/reference/ImageEnhance.html

__init__(intensity_min, intensity_max)
参数
  • 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)
参数

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)
参数
  • angle (list[float]) – 如果 sample_style=="range",则为从其采样角度(以度为单位)的 [最小值, 最大值] 区间。如果 sample_style=="choice",则为从其采样的角度列表

  • expand (bool) – 选择是否应调整图像大小以适应整个旋转图像(默认值),或简单地裁剪

  • center (list[[float, float]]) – 如果 sample_style=="range",则为从其采样中心的 [[最小x, 最小y], [最大x, 最大y]] 相对区间,[0, 0] 为图像的左上角,[1, 1] 为右下角。如果 sample_style=="choice",则为从其采样的中心列表默认:None,表示旋转中心为图像中心中心如果 expand=True 则没有效果,因为它只影响偏移

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

基类:detectron2.data.transforms.Augmentation

将图像调整为固定目标大小

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

  • 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 之间缩放。然后,它对输入图像进行缩放,使其在缩放后的目标框内,保持纵横比不变。这实现了 Google 的“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)
参数
  • 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)
参数
  • 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][source]

计算给定输入尺寸和目标最短边长度的输出尺寸。

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)
参数
  • 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)
参数
  • 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 中随机选择。

参数
  • min_ious (tuple) – 与所有交集的最小 IoU 阈值。

  • boxes (bounding) –

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

  • a >= min_crop_size) (where) –

  • mode_trials – 采样 min_ious 阈值的尝试次数。

  • crop_trials – 裁剪后采样裁剪尺寸的尝试次数。

get_transform(image, boxes)

调用函数以使用最小 IoU 约束裁剪图像和边界框。

参数

boxes – 地面真实框,以 (x1, y1, x2, y2) 格式表示。