作者|facebookresearch 编译|Flin 来源|Github
detectron2中的模型(及其子模型)由函数,例如build_model
,build_backbone
,build_roi_heads
构成:
from detectron2.modeling import build_model
model = build_model(cfg) #返回torch.nn.Module
注意,build_model
仅构建模型结构,并用随机参数填充它。要将现有检查点加载到模型,请使用 DetectionCheckpointer(model).load(file_path)
。Detectron2可以识别pytorch.pth
格式的模型,以及我们model zoo中的.pkl
文件。
你可以通过outputs = model(inputs)
使用模型。接下来,我们解释一下detectron2中内置模型使用的输入/输出格式。
DefaultPredictor(https://detectron2.readthedocs.io/modules/engine.html#detectron2.engine.defaults.DefaultPredictor) 是模型的包装,提供常规推断的默认行为。它包括模型加载和预处理,并且对单个图像进行操作,而不是按批处理。
所有内置模型均以"list [dict]"作为输入。每个字典对应于有关一张图像的信息。
该字典可能包含以下键:
"image":(C,H,W)格式的Tensor
。通道的含义由cfg.INPUT.FORMAT
定义。图像归一化(如果有)将在模型内部执行。
"instances":一个 Instances对象,具有以下字段:
"proposals":仅在Fast R-CNN样式模型中使用的Instances对象,具有以下字段:
"height","width":所需的输出高度和宽度,不一定与image输入字段的高度或宽度相同。例如,image输入字段可能是调整大小的图像,但你可能希望输出为原始分辨率。
如果提供,模型将以该分辨率产生输出,而不是将"图像"的分辨率作为模型的输入。这样更有效,更准确。
"sem_seg":Tensor int
(H,W)格式。语义分割ground truth.。值表示从0开始的类别标签。
默认的DatasetMapper(https://detectron2.readthedocs.io/modules/engine.html#detectron2.engine.defaults.DefaultPredictor) 的输出是字典,遵循上述格式。 数据加载器执行批处理后,list[dict]
内置模型将支持它。
在训练模式下,内置模型输出所有损失的dict [str-> ScalarTensor]
。
在推理模式下,内置模型输出一个"list [dict]",每个图像一个dict。 根据模型正在执行的任务,每个字典可能包含以下字段:
"instances":Instances对象具有以下字段:
Tensor
,N个标签的向量,范围为[0,num_categories)。"sem_seg":(num_categories,H,W)的Tensor
,语义分割预测。
"proposals": 具有以下字段的实例对象:
"panoptic_seg":(Tensor, list[dict])
的元组。张量具有(H,W)形状,其中每个元素代表像素的段ID。每个字典描述一个段ID,并具有以下字段:
用必要的键构造自己的list [dict]
作为输入。然后调用outputs = model(inputs)
。 例如,为了进行推断,请为字典提供"图像",以及可选的"高度"和"宽度"。
请注意,在训练模式下,所有模型都必须在"EventStorage"下使用。训练统计信息将被存储:
from detectron2.utils.events import EventStorage
with EventStorage() as storage:
losses = model(inputs)
要记住的另一件事:detectron2模型不支持model.to(device)
或model.cpu()
。该设备在cfg.MODEL.DEVICE
中定义,之后无法更改。
有时你可能想在模型内部获得中间张量。 由于通常有数百个中间张量,因此没有提供你的API 你需要的中间结果。 你有以下选择:
forward()
来执行它。例如,以下代码在mask head之前获取mask 特征。images = ImageList(...) # 预处理输入张量
model = build_model(cfg)
features = model.backbone(images.tensor)
proposals, _ = model.proposal_generator(images, features)
instances = model.roi_heads._forward_box(features, proposals)
mask_features = model.roi_heads.mask_pooler(features, [x.pred_boxes for x in instances])
请注意,这两个选项都要求你阅读现有的后面的文档代码以了解 如何编写代码以获得所需的输出。
原文链接:https://detectron2.readthedocs.io/tutorials/models.html
欢迎关注磐创AI博客站: http://panchuang.net/
sklearn机器学习中文官方文档: http://sklearn123.com/
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/