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])¶
-
__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
-
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)¶
-
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) – 插值方法。可选值包括 nearest 和 bilinear。
-
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) – 插值方法。可选值包括 nearest 和 bilinear。
- 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将图像调整为目标尺寸。
-
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)¶
-
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)¶
-
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。
-
-
class
detectron2.data.transforms.AugmentationList(augs)¶ 基类:
detectron2.data.transforms.Augmentation应用一系列增强操作。
它具有
__call__方法来应用数据增强。请注意,对于
AugmentationList来说,get_transform()方法是无法实现的(如果调用会抛出错误),因为要应用一系列增强操作,必须先应用第k个增强,才能为第(k+1)个增强提供所需的输入。-
__init__(augs)¶ - Parameters
augs (list[Augmentation 或 Transform]) –
-
-
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)¶
-
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) – 要应用的变换或增强。它可以是Transform或Augmentation的实例。
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)¶
-
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)¶
-
get_transform(image)¶
-
-
class
detectron2.data.transforms.RandomCrop(crop_type: str, crop_size)¶ 基类:
detectron2.data.transforms.Augmentation从图像中随机裁剪出一个矩形区域。
-
__init__(crop_type: str, crop_size)¶ - Parameters
"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)¶
-
get_transform(image)¶
-
-
class
detectron2.data.transforms.RandomLighting(scale)¶ 基类:
detectron2.data.transforms.AugmentationAlexNet中描述的“光照”增强方法,在ImageNet上使用固定PCA处理。假设输入图像具有'RGB'通道顺序。
色彩抖动的程度通过正态分布随机采样,其标准差由比例参数给出。
-
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_scale和max_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)¶
-
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
-
get_transform(image, boxes)¶ 调用函数以裁剪图像和边界框,需满足最小IoU约束条件。
- Parameters
boxes – 真实标注框,格式为(x1, y1, x2, y2)