【Detectron2 教程】Use Models 使用模型

参考

Detectron2入门教程
Use Models
Detectron2-使用模型(Use Models)官方文档中文翻译

总览

  • 主要介绍如何构建模型。
  • 构建模型方式:通过调用 build_model, build_backbonebuild_roi_heads 等方法来构建。
  • 要导入权重可以使用 DetectionCheckpointer(model).load(file_path)
  • 使用模型就是 outputs = model(inputs)
  • 模型输入使用的参数通过 list[dict] 来实现,即上面dataloader的输出,具体的key形式可以参考这个页面中的内容。
  • 模型输出也是一个 list[dict],具体的形式可以参考这篇文章中的内容。

detectron2 中的模型(及其子模型)是由例如build_model, build_backbone, build_roi_heads等函数构建。

from detectron2.modeling import build_model
model = build_model(cfg)  # returns a torch.nn.Module

build_model只构建模型结构,并用随机参数填充它。有关如何将现有Checkpoint加载到模型以及如何使用model对象,请参见下面的内容。

1 加载/保存 Checkpoint

from detectron2.checkpoint import DetectionCheckpointer
DetectionCheckpointer(model).load(file_path_or_url)  # load a file, usually from cfg.MODEL.WEIGHTS

checkpointer = DetectionCheckpointer(model, save_dir="output")
checkpointer.save("model_999")  # save to output/model_999.pth

Detectron2的Checkpoint可以识别pytorch中 .pth格式的模型,以及我们的model zoo中的.pkl文件,更多使用细节请看API doc

model files可以使用.pth 文件来任意操作torch.{load,save}或者使用.pkl文件pickle.{dump,load}

2 使用模型

使用outputs = model(inputs)来调用模型,inputslist[dict]中的一个, 每个dict对应一个图像,所需的keys取决于模型的类型,以及模型是处于训练模式还是评估模式。 例如,为了进行推断,所有现有的模型都需要“image” key,以及可选的“height”和“width” key。现将现有模型输入和输出的详细格式解释如下。

Training:当处于训练模型时,所有的模型都需要在EventStorage下使用。将训练统计数据存入仓库:

from detectron2.utils.events import EventStorage
with EventStorage() as storage:
  losses = model(inputs)

Inference:如果你只想使用现有的模型进行简单的推断,DefaultPredictor是提供这种基本功能的模型的包装器。它包括默认行为,包括模型加载、预处理,对单个图像而不是批处理进行操作。请参阅其文档了解其用法。

你也可以像这样直接运行推断:

model.eval()
with torch.no_grad():
  outputs = model(inputs)

3 模型输入格式

用户可以实现支持任意输入格式的自定义模型。这里我们描述所有内置模型在detectron2中支持的标准输入格式。它们都以list[dict]作为输入。每个dict对应于一个图像的信息。

dict可能包含以下的keys:

  • “image”:Tensor 在(C,H,W)格式,通道的意义被cfg.INPUT.FORMAT 定义,图像归一化,如果有,将在模型内使用 cfg.MODEL.PIXEL_{MEAN,STD} 执行。
  • “height”,“width” : 期望输出的高度和宽度,不一定与图像字段的高度或宽度相同,例如,如果将调整大小用作预处理步骤,则图像字段包含调整大小的图像。但你可能希望输出为原始分辨率,如果提供,模型将以该分辨率输出,而不是以图像的分辨率作为模型的输入。这样更有效率、更准确。
  • “instances”: 用于训练的实例对象,具有以下字段
    • “gt_boxes” : Boxes存了 N 个 boxes ,一个 box 对应一个实例。
    • “gt_classes” : long 类型的 Tensor ,一个有 N 个标号的向量,范围为 [0,num_categories]
    • “gt_masks” : PolygonMasks 或者 BitMasks 存储了 N 个 mask,每个实例有一个 mask
    • “gt_keypoints” : Keypoints 存储了 N 个 keypoint 集合,每个实例有一个。
  • “sem_seg”: (H,W) 格式的 Tensor[int] .语义分割为训练奠定了基础。值表示从0开始的类别标签。
    -“proposals”: 只用在 Fast R-CNN 风格模型中的实例物体,有以下字段:
    • “proposal_boxes” : 是一个 Boxes 存储了 P proposal boxes
    • “objectness_logits”: Tensor, a vector of P scores, one for each proposal.

对于内部模型的推断,只需要 “image” ,而 “width/height” 是可选的。

我们当前不会为全景分割训练定义标准的输入格式,因为模型现在使用自定义 data loader 产生的自定义格式。

它是怎样连接到 data loader 上的

默认的 DatasetMapper 是一个包含了以上格式的 dict 的输出。数据加载器执行批处理后, 便成为了内置模型支持的 list[dict]

### Detectron2 使用教程 #### 安装依赖项 为了使用 Detectron2 进行对象检测和图像分割,安装必要的依赖项至关重要。推荐的方法是在 Python 虚拟环境中操作以避免与其他项目的包冲突。 ```bash conda create -n detectron2 python=3.8 -y conda activate detectron2 pip install torch torchvision torchaudio pip install git+https://github.com/facebookresearch/detectron2.git ``` 上述命令创建了一个名为 `detectron2` 的新环境并激活它,接着安装 PyTorch 及其相关库以及直接从 GitHub 上获取最新版本的 Detectron2[^1]。 #### 加载预训练模型 Detectron2 提供了一系列预先训练好的模型来快速上手测试不同的配置选项而无需长时间等待自定义训练完成。下面是一个简单的例子展示如何加载 Mask R-CNN 预训练权重来进行推理: ```python from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg from detectron2.utils.visualizer import Visualizer from detectron2.data import MetadataCatalog, DatasetCatalog import cv2 cfg = get_cfg() cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")) cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml") # Let training initialize from model zoo predictor = DefaultPredictor(cfg) im = cv2.imread("./input.jpg") outputs = predictor(im) v = Visualizer(im[:, :, ::-1], metadata=MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2) out = v.draw_instance_predictions(outputs["instances"].to("cpu")) cv2.imwrite('output.png', out.get_image()[:, :, ::-1]) ``` 这段代码首先设置了默认预测器所需的配置文件路径及其对应的预训练权重链接;之后读取了一张图片作为输入传给这个已经设置好参数的预测器得到输出结果;最后利用可视化工具将这些实例级别的预测绘制到原始图像之上保存下来[^3]。 #### 自定义数据集训练 对于特定应用场景下的目标识别任务来说,通常需要基于自有标注的数据集重新调整网络结构或微调现有模型使之更好地适应实际需求。这里给出一段关于怎样准备 COCO 数据格式兼容的新类别集合用于进一步训练的例子: 假设有一个本地存储位置 `/path/to/my_dataset/train.json`,其中包含了按照 MS-COCO JSON schema 编写的注解信息,则可以通过如下方式将其注册至 Detectron2 中以便后续处理: ```python from detectron2.data.datasets import register_coco_instances register_coco_instances("my_dataset_train", {}, "/path/to/json_annotation", "/path/to/image_dir") # Now you can use the registered dataset name 'my_dataset_train' to train a new detector. ``` 通过这种方式可以轻松地将自己的数据源集成进来参与整个工作流程之中[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CSPhD-winston-杨帆

给我饭钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值