detectron2.utils

detectron2.utils.colormap 模块

一个很棒的颜色映射,用于非常棒的可视化。从 Detectron 复制,并删除了灰色。

detectron2.utils.colormap.colormap(rgb=False, maximum=255)[source]
参数
  • rgb (bool) – 是否返回 RGB 颜色或 BGR 颜色。

  • maximum (int) – 255 或 1

返回值

ndarray – 一个大小为 Nx3 的浮点数数组,范围为 [0, 255] 或 [0, 1]

detectron2.utils.colormap.random_color(rgb=False, maximum=255)[source]
参数
  • rgb (bool) – 是否返回 RGB 颜色或 BGR 颜色。

  • maximum (int) – 255 或 1

返回值

ndarray – 一个包含 3 个数字的向量

detectron2.utils.colormap.random_colors(N, rgb=False, maximum=255)[source]
参数
  • N (int) – 需要唯一颜色的数量

  • rgb (bool) – 是否返回 RGB 颜色或 BGR 颜色。

  • maximum (int) – 255 或 1

返回值

ndarray – 一个随机颜色列表

detectron2.utils.comm 模块

此文件包含用于多 GPU 通信的基元。这在进行分布式训练时很有用。

detectron2.utils.comm.get_world_size()int[source]
detectron2.utils.comm.get_rank()int[source]
detectron2.utils.comm.create_local_process_group(num_workers_per_machine: int)None[source]

创建一个包含同一台机器上的等级的进程组。

Detectron2 的 launch() 在 engine/launch.py 中会调用此函数。如果你在没有 launch() 的情况下启动了工作进程,那么你将不得不调用它。否则,诸如 get_local_rank() 之类的工具将无法使用。

此函数包含一个障碍。所有进程都必须一起调用它。

参数

num_workers_per_machine – 每台机器的工作进程数量。通常是 GPU 数量。

detectron2.utils.comm.get_local_process_group()[source]
返回值

一个仅包含与当前进程位于同一台机器上的进程的 torch 进程组。该组对于机器内的通信很有用,例如每台机器的 SyncBN。

detectron2.utils.comm.get_local_rank()int[source]
返回值

当前进程在本地(每台机器)进程组中的等级。

detectron2.utils.comm.get_local_size()int[source]
返回值

每台机器的进程组的大小,即每台机器的进程数量。

detectron2.utils.comm.is_main_process()bool[source]
detectron2.utils.comm.synchronize()[source]

辅助函数,用于在使用分布式训练时在所有进程中进行同步(障碍)

detectron2.utils.comm.all_gather(data, group=None)[source]

对任意可腌制数据(不一定张量)运行 all_gather。

参数
  • data – 任何可腌制对象

  • group – 一个 torch 进程组。默认情况下,将使用包含 gloo 后端上所有等级的组。

返回值

list[data] – 从每个等级收集的列表

detectron2.utils.comm.gather(data, dst=0, group=None)[source]

对任意可腌制数据(不一定张量)运行 gather。

参数
  • data – 任何可腌制对象

  • dst (int) – 目标等级

  • group – 一个 torch 进程组。默认情况下,将使用包含 gloo 后端上所有等级的组。

返回值

list[data]

在 dst 上,从每个等级收集的列表。否则,

一个空列表。

detectron2.utils.comm.shared_random_seed()[source]
返回值

int – 在所有工作进程中都相同的随机数。如果工作进程需要共享 RNG,它们可以使用这个共享种子创建一个。

所有工作进程都必须调用此函数,否则它将死锁。

detectron2.utils.comm.reduce_dict(input_dict, average=True)[source]

减少所有进程中字典中的值,以便等级为 0 的进程具有减少的结果。

参数
  • input_dict (dict) – 要减少的输入。所有值必须是标量 CUDA 张量。

  • average (bool) – 是否进行平均或求和

返回值

一个与 input_dict 具有相同键的字典,经过减少。

detectron2.utils.events 模块

detectron2.utils.logger 模块

detectron2.utils.logger.setup_logger(output=None, distributed_rank=0, *, color=True, name='detectron2', abbrev_name=None, enable_propagation: bool = False, configure_stdout: bool = True)[source]

初始化 detectron2 记录器并将它的详细程度设置为“DEBUG”。

参数
  • output (str) – 保存日志的文件名或目录。如果为 None,则不会保存日志文件。如果以“.txt”或“.log”结尾,则假定为文件名。否则,日志将保存到 output/log.txt 中。

  • name (str) – 此记录器的根模块名称

  • abbrev_name (str) – 模块的缩写,用于避免日志中的长名称。设置为“ ”表示不在日志中记录根模块。默认情况下,将“detectron2”缩写为“d2”,并将其他模块保持不变。

  • enable_propagation (bool) – 是否将日志传播到父记录器。

  • configure_stdout (bool) – 是否将日志配置到标准输出。

返回值

logging.Logger – 一个记录器

detectron2.utils.logger.log_first_n(lvl, msg, n=1, *, name=None, key='caller')[source]

仅针对前 n 次记录日志。

参数
  • lvl (int) – 日志级别

  • msg (str) –

  • n (int) –

  • name (str) – 要使用的记录器的名称。默认情况下,将使用调用者的模块。

  • key (str or tuple[str]) – 该字符串可以是“caller”或“message”之一,它定义了如何识别重复的日志。例如,如果使用 n=1, key=”caller” 调用,则该函数仅记录来自同一调用者的第一个调用,而与消息内容无关。如果使用 n=1, key=”message” 调用,则该函数仅记录一次相同的内容,即使它们来自不同的位置。如果使用 n=1, key=(“caller”, “message”) 调用,则该函数仅在同一调用者之前记录过相同消息时才不会记录日志。

detectron2.utils.logger.log_every_n(lvl, msg, n=1, *, name=None)[source]

每 n 次记录一次日志。

参数
  • lvl (int) – 日志级别

  • msg (str) –

  • n (int) –

  • name (str) – 要使用的记录器的名称。默认情况下,将使用调用者的模块。

detectron2.utils.logger.log_every_n_seconds(lvl, msg, n=1, *, name=None)[source]

每 n 秒记录日志不超过一次。

参数
  • lvl (int) – 日志级别

  • msg (str) –

  • n (int) –

  • name (str) – 要使用的记录器的名称。默认情况下,将使用调用者的模块。

detectron2.utils.registry 模块

class detectron2.utils.registry.Registry(*args, **kwds)[source]

Bases: collections.abc.Iterable, typing.Generic

提供名称 -> 对象映射的注册表,以支持第三方用户自定义模块。

要创建一个注册表(例如,一个主干注册表)

BACKBONE_REGISTRY = Registry('BACKBONE')

要注册一个对象

@BACKBONE_REGISTRY.register()
class MyBackbone():
    ...

或者

BACKBONE_REGISTRY.register(MyBackbone)
__init__(name: str)None[source]
参数

name (str) – 此注册表的名称

register(obj: Any = None) → Any[source]

在名称 obj.__name__ 下注册给定的对象。可以用作装饰器,也可以不用。有关用法,请参见此类的文档字符串。

get(name: str) → Any[source]
detectron2.utils.registry.locate(name: str) → Any[source]

使用输入字符串 {x.__module__}.{x.__qualname__}(例如,“module.submodule.class_name”)定位并返回对象 x

如果找不到,则引发异常。

detectron2.utils.memory 模块

detectron2.utils.memory.retry_if_cuda_oom(func)[source]

在遇到 PyTorch 的 CUDA OOM 错误后,使函数重新尝试自身。它将在调用 torch.cuda.empty_cache() 后首先重新尝试。

如果仍然失败,它将通过尝试将输入转换为 CPU 来重新尝试。在这种情况下,它期望函数分派到 CPU 实现。返回值也可能变成 CPU 张量,用户有责任根据需要将其转换回 CUDA 张量。

参数

func – 一个无状态的可调用对象,它接受张量状对象作为参数

返回值

一个可调用对象,它在遇到 OOM 时会重新尝试 func

示例

output = retry_if_cuda_oom(some_torch_function)(input1, input2)
# output may be on CPU even if inputs are on GPU

注意

  1. 在将输入转换为 CPU 时,它将仅查看每个参数并检查它是否具有 .device.to 以进行转换。不支持张量嵌套结构。

  2. 由于该函数可能被调用多次,因此它必须是无状态的。

detectron2.utils.analysis 模块

detectron2.utils.visualizer 模块

class detectron2.utils.visualizer.ColorMode(value)[source]

Bases: enum.Enum

用于实例可视化的不同颜色模式的枚举。

IMAGE = 0

为每个实例选择随机颜色,并以低不透明度叠加分割。

SEGMENTATION = 1

使相同类别的实例具有相似的颜色(来自 metadata.thing_colors),并以高不透明度叠加它们。这将更多地关注分割质量。

IMAGE_BW = 2

与 IMAGE 相同,但将所有没有蒙版的区域转换为灰度。仅适用于绘制每个实例的蒙版预测。

class detectron2.utils.visualizer.VisImage(img, scale=1.0)[source]

Bases: object

__init__(img, scale=1.0)[source]
参数
  • img (ndarray) – 形状为 (H, W, 3) 的 RGB 图像,范围为 [0, 255]。

  • scale (float) – 缩放输入图像

reset_image(img)[source]
参数

img – 与 __init__ 中相同

save(filepath)[source]
参数

filepath (str) – 包含绝对路径(包括文件名)的字符串,将在其中保存可视化的图像。

get_image()[source]
返回值

ndarray – 可视化图像,形状为 (H, W, 3) (RGB),类型为 uint8。形状是根据给定的 scale 参数相对于输入图像进行缩放的。

class detectron2.utils.visualizer.Visualizer(img_rgb, metadata=None, scale=1.0, instance_mode=<ColorMode.IMAGE: 0>)[source]

Bases: object

可视化器,用于在图像上绘制有关检测/分割的数据。

它包含像 draw_{text,box,circle,line,binary_mask,polygon} 这样的方法,用于在图像上绘制基本对象,以及像 draw_{instance_predictions,sem_seg,panoptic_seg_predictions,dataset_dict} 这样的高级包装器,用于以一些预定义的样式绘制复合数据。

请注意,高级包装器的确切可视化样式可能会发生变化。颜色、不透明度、标签内容、标签可见性,甚至对象本身的可见性(例如,当对象太小的时候)等样式可能会根据不同的启发式方法而改变,只要结果在视觉上仍然合理。

为了获得一致的样式,您可以使用上述基本方法实现自定义绘图函数。如果您需要更多定制的可视化样式,您可以按照教程中记录的格式自行处理数据(使用模型使用自定义数据集)。此类不打算满足每个人对绘图样式的偏好。

此可视化器侧重于高渲染质量,而不是性能。它不是为实时应用而设计的。

__init__(img_rgb, metadata=None, scale=1.0, instance_mode=<ColorMode.IMAGE: 0>)[source]
参数
  • img_rgb – 形状为 (H, W, C) 的 numpy 数组,其中 H 和 W 分别对应于图像的高度和宽度。C 是颜色通道的数量。图像需要以 RGB 格式,因为这是 Matplotlib 库的要求。图像也应该在 [0, 255] 范围内。

  • metadata (Metadata) – 数据集元数据(例如,类名称和颜色)

  • instance_mode (ColorMode) – 定义在图像上绘制实例的预定义样式之一。

draw_instance_predictions(predictions)[source]

在图像上绘制实例级预测结果。

参数

predictions (Instances) – 实例检测/分割模型的输出。以下字段将用于绘制:“pred_boxes”,“pred_classes”,“scores”,“pred_masks”(或“pred_masks_rle”)。

返回值

output (VisImage) – 带有可视化的图像对象。

draw_sem_seg(sem_seg, area_threshold=None, alpha=0.8)[source]

绘制语义分割预测/标签。

参数
  • sem_seg (Tensorndarray) – 形状为 (H, W) 的分割。每个值都是像素的整型标签。

  • area_threshold (int) – 面积小于 area_threshold 的片段不会被绘制。

  • alpha (float) – 越大,分割的不透明度越高。

返回值

output (VisImage) – 带有可视化的图像对象。

draw_panoptic_seg(panoptic_seg, segments_info, area_threshold=None, alpha=0.7)[source]

绘制全景预测标注或结果。

参数
  • panoptic_seg (Tensor) – 形状为 (高度, 宽度),其中的值是每个片段的 ID。

  • segments_info (list[dict] or None) – 描述 panoptic_seg 中的每个片段。如果它是 list[dict],则每个字典包含键“id”,“category_id”。如果为 None,则每个像素的类别 ID 由 pixel // metadata.label_divisor 计算得出。

  • area_threshold (int) – 面积小于 area_threshold 的“东西”片段不会被绘制。

返回值

output (VisImage) – 带有可视化的图像对象。

draw_dataset_dict(dic)[source]

绘制 Detectron2 数据集格式中的标注/分割。

参数

dic (dict) – 一张图像的标注/分割数据,以 Detectron2 数据集格式。

返回值

output (VisImage) – 带有可视化的图像对象。

overlay_instances(*, boxes=None, labels=None, masks=None, keypoints=None, assigned_colors=None, alpha=0.5)[source]
参数
  • boxes (Boxes, RotatedBoxesndarray) – 既可以是 Boxes,也可以是单张图像中 N 个对象的 XYXY_ABS 格式的 Nx4 numpy 数组,或者 RotatedBoxes,或者单张图像中 N 个对象的 (x_center, y_center, width, height, angle_degrees) 格式的 Nx5 numpy 数组,

  • labels (list[str]) – 要为每个实例显示的文本。

  • masks (masks-like object) –

    支持的类型是

    • detectron2.structures.PolygonMasks, detectron2.structures.BitMasks.

    • list[list[ndarray]]: 包含单张图像中所有对象的分割掩码。列表的第一级对应于单个实例。第二级对应于组成该实例的所有多边形,第三级对应于多边形坐标。第三级应具有 [x0, y0, x1, y1, …, xn, yn] (n >= 3) 的格式。

    • list[ndarray]: 每个 ndarray 都是形状为 (H, W) 的二元掩码。

    • list[dict]: 每个字典都是 COCO 风格的 RLE。

  • keypoints (Keypointarray like) – 形状为 (N, K, 3) 的类数组对象,其中 N 是实例数量,K 是关键点数量。最后一维对应于 (x, y, 可见性或得分)。

  • assigned_colors (list[matplotlib.colors]) – 颜色列表,每个颜色对应于图像中的每个掩码或框。有关颜色接受的完整格式列表,请参阅“matplotlib.colors”。

返回值

output (VisImage) – 带有可视化的图像对象。

overlay_rotated_instances(boxes=None, labels=None, assigned_colors=None)[source]
参数
  • boxes (ndarray) – 单张图像中 N 个对象的 (x_center, y_center, width, height, angle_degrees) 格式的 Nx5 numpy 数组。

  • labels (list[str]) – 要为每个实例显示的文本。

  • assigned_colors (list[matplotlib.colors]) – 颜色列表,每个颜色对应于图像中的每个掩码或框。有关颜色接受的完整格式列表,请参阅“matplotlib.colors”。

返回值

output (VisImage) – 带有可视化的图像对象。

draw_and_connect_keypoints(keypoints)[source]

绘制实例的关键点,并遵循关键点连接规则,在合适的关键点之间绘制线条。这遵循线条颜色的颜色启发式方法。

参数

keypoints (Tensor) – 形状为 (K, 3) 的张量,其中 K 是关键点数量,最后一维对应于 (x, y, 概率)。

返回值

output (VisImage) – 带有可视化的图像对象。

draw_text(text, position, *, font_size=None, color='g', horizontal_alignment='center', rotation=0)[source]
参数
  • text (str) – 类标签

  • position (元组) – 用于放置文本的图像上 x 和 y 坐标的元组。

  • font_size (整数, 可选) – 文本的字体大小。如果未提供,将计算并使用与图像宽度成比例的字体大小。

  • color – 文本的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors

  • horizontal_alignment (字符串) – 请参阅 matplotlib.text.Text

  • rotation – 顺时针旋转角度(以度为单位)。

返回值

output (VisImage) – 绘制了文本的图像对象。

draw_box(box_coord, alpha=0.5, edge_color='g', line_style='-')[源代码]
参数
  • box_coord (元组) – 包含 x0、y0、x1、y1 坐标的元组,其中 x0 和 y0 是图像左上角的坐标。x1 和 y1 是图像右下角的坐标。

  • alpha (浮点数) – 混合效率。较小的值会导致更透明的蒙版。

  • edge_color – 边框轮廓的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors

  • line_style (字符串) – 用于创建框轮廓的字符串。

返回值

output (VisImage) – 绘制了框的图像对象。

draw_rotated_box_with_label(rotated_box, alpha=0.5, edge_color='g', line_style='-', label=None)[源代码]

在旋转框的左上角绘制一个带标签的旋转框。

参数
  • rotated_box (元组) – 包含 (cnt_x, cnt_y, w, h, angle) 的元组,其中 cnt_x 和 cnt_y 是框的中心坐标。w 和 h 是框的宽度和高度。angle 表示框相对于 0 度框顺时针旋转了多少度。

  • alpha (浮点数) – 混合效率。较小的值会导致更透明的蒙版。

  • edge_color – 边框轮廓的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors

  • line_style (字符串) – 用于创建框轮廓的字符串。

  • label (字符串) – 旋转框的标签。设置为 None 时不会渲染。

返回值

output (VisImage) – 绘制了框的图像对象。

draw_circle(circle_coord, color, radius=3)[源代码]
参数
  • circle_coord (列表(整数) 或 元组(整数)) – 包含圆心 x 和 y 坐标。

  • color – 多边形的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors

  • radius (整数) – 圆的半径。

返回值

output (VisImage) – 绘制了框的图像对象。

draw_line(x_data, y_data, color, linestyle='-', linewidth=None)[源代码]
参数
  • x_data (列表[整数]) – 包含所有绘制点 x 值的列表。列表的长度应与 y_data 的长度匹配。

  • y_data (列表[整数]) – 包含所有绘制点 y 值的列表。列表的长度应与 x_data 的长度匹配。

  • color – 线的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors

  • linestyle – 线的样式。有关接受的完整格式列表,请参阅 matplotlib.lines.Line2D

  • linewidth (浮点数) – 线的宽度。当它为 None 时,将计算并使用默认值。

返回值

output (VisImage) – 绘制了线的图像对象。

draw_binary_mask(binary_mask, color=None, *, edge_color=None, text=None, alpha=0.5, area_threshold=10)[源代码]
参数
  • binary_mask (ndarray) – 形状为 (H, W) 的 numpy 数组,其中 H 是图像高度,W 是图像宽度。数组中的每个值都是 uint8 类型的值 0 或 1。

  • color – 蒙版的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors。如果为 None,将选择随机颜色。

  • edge_color – 多边形边缘的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors

  • text (字符串) – 如果为 None,将绘制在对象上

  • alpha (浮点数) – 混合效率。较小的值会导致更透明的蒙版。

  • area_threshold (浮点数) – 小于此面积的连通分量将不会显示。

返回值

output (VisImage) – 绘制了蒙版的图像对象。

draw_soft_mask(soft_mask, color=None, *, text=None, alpha=0.5)[源代码]
参数
  • soft_mask (ndarray) – 形状为 (H, W) 的浮点数组,每个值都在 [0, 1] 范围内。

  • color – 蒙版的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors。如果为 None,将选择随机颜色。

  • text (字符串) – 如果为 None,将绘制在对象上

  • alpha (浮点数) – 混合效率。较小的值会导致更透明的蒙版。

返回值

output (VisImage) – 绘制了蒙版的图像对象。

draw_polygon(segment, color, edge_color=None, alpha=0.5)[源代码]
参数
  • segment – 形状为 Nx2 的 numpy 数组,包含多边形中的所有点。

  • color – 多边形的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors

  • edge_color – 多边形边缘的颜色。有关接受的完整格式列表,请参阅 matplotlib.colors。如果未提供,将使用多边形颜色的深色阴影。

  • alpha (浮点数) – 混合效率。较小的值会导致更透明的蒙版。

返回值

output (VisImage) – 绘制了多边形的图像对象。

get_output()[源代码]
返回值

output (VisImage) – 包含添加到图像的可视化的图像输出。

detectron2.utils.video_visualizer 模块

class detectron2.utils.video_visualizer.VideoVisualizer(metadata, instance_mode=<ColorMode.IMAGE: 0>)[源代码]

Bases: object

__init__(metadata, instance_mode=<ColorMode.IMAGE: 0>)[源代码]
参数

metadata (MetadataCatalog) – 图像元数据。

draw_instance_predictions(frame, predictions)[源代码]

在图像上绘制实例级预测结果。

参数
  • frame (ndarray) – 形状为 (H, W, C) 的 RGB 图像,范围为 [0, 255]。

  • predictions (Instances) – 实例检测/分割模型的输出。以下字段将用于绘制:“pred_boxes”,“pred_classes”,“scores”,“pred_masks”(或“pred_masks_rle”)。

返回值

output (VisImage) – 带有可视化的图像对象。

draw_sem_seg(frame, sem_seg, area_threshold=None)[源代码]
参数
  • sem_seg (ndarrayTensor) – 形状为 (H, W) 的语义分割,每个值是整型标签。

  • area_threshold (可选[int]) – 仅绘制大于阈值的分割区域。