1、使用模型
在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仅建立模型结构并用随机参数填充它。有关如何将现有检查点加载到模型以及如何使用model对象的信息,请参见下文。
1.1、加载/保存检查点
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的检查点可以识别pytorch .pth格式的模型以及.pkl我们模型动物园中的文件。 有关其用法的更多详细信息,请参见
API文档
。
该模型文件可以使用任意操纵torch.{load,save}的.pth文件或 pickle.{dump,load}对.pkl文件。
1.2、使用模型
可以通过调用模型,其中是。每个字典对应一个图像,所需的键取决于模型的类型以及模型是处于训练还是评估模式。例如,为了进行推断,所有现有模型都希望使用“图像”键,并且可以选择使用“高度”和“宽度”。现有模型的输入和输出的详细格式说明如下。
outputs = model(inputs) inputs list[dict]
在训练模式下,所有模型都必须在下方使用EventStorage。培训统计信息将被存储:
from detectron2.utils.events import EventStorage
with EventStorage() as storage:
losses = model(inputs)
如果只想使用现有模型进行简单推断,则
DefaultPredictor
是提供此类基本功能的模型包装。它包括默认行为,包括模型加载,预处理以及对单个图像(而不是批量图像)进行操作。有关用法,请参见其文档。
模型也可以像这样直接使用:
model.eval()
with torch.no_grad():
outputs = model(inputs)
1.3、模型输入格式
用户可以实现支持任何任意输入格式的自定义模型。在这里,我们描述了detectron2中所 有内置模型都支持的标准输入格式。它们都以a list[dict]作为输入。每个字典对应于有关一个图像的信息。
该字典可能包含以下键:
-
“图像”:Tensor(C,H,W)格式。通道的含义由定义cfg.INPUT.FORMAT。图像归一化(如果有)将使用在模型内部执行 cfg.MODEL.PIXEL_{MEAN,STD}。
-
“ height”,“ width”:所需的输出高度和宽度,不一定与image字段的高度或宽度相同。例如,image如果将调整大小用作预处理步骤,则该字段包含调整大小的图像。但是您可能希望输出为原始分辨率。
-
“实例”:一个 用于训练的
实例
对象,具有以下字段:
-
“ gt_boxes”:一个
Boxes
对象,存储N个盒子,每个实例一个。
-
“ gt_classes”:Tensor长类型,是N个标签的向量,范围[0,num_categories)。
-
“ gt_masks”:一个
PolygonMasks
或
BitMasks
对象,存储N个遮罩,每个实例一个。
-
“gt_keypoints”:一个
关键点
对象存储N个关键点集,每个实例。
如果提供,则模型将以该分辨率产生输出,而不是以image模型的输入分辨率产生输出。这样更有效,更准确。
它如何连接到数据加载器:
默认
DatasetMapper
的输出是遵循上述格式的字典。数据加载器执行批处理后,list[dict]内置模型将支持它。
1.4、模型输出格式
在训练模式下,内置模型将输出dict[str->ScalarTensor]所有损失。
在推理模式下,内置模型list[dict]为每个图像输出一个dict。根据模型正在执行的任务,每个字典可能包含以下字段:
1.5、部分执行模型
有时您可能想在模型内部获得中间张量。由于通常有数百个中间张量,因此没有提供所需中间结果的API。您有以下选择:
-
编写一个(子)模型。在学习完本
教程之后
,您可以重写模型组件(例如,模型的头部),使其与现有组件具有相同的功能,但是返回所需的输出。
-
部分执行模型。您可以像往常一样创建模型,但是可以使用自定义代码而不是来执行模型forward()。例如,以下代码在蒙版头之前获取蒙版特征。
images = ImageList.from_tensors(...) # preprocessed input tensor
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 = [features[f] for f in model.roi_heads.in_features]
mask_features = model.roi_heads.mask_pooler(mask_features, [x.pred_boxes for x in instances])
请注意,这两个选项都要求您阅读现有的前向代码,以了解如何编写代码以获得所需的输出。
2、写模型
如果您要尝试全新的工作,则可能希望完全在detectron2中从头开始实现模型。但是,在许多情况下,您可能会对修改或扩展现有模型的某些组件感兴趣。因此,我们还提供了一种注册机制,使您可以覆盖标准模型的某些内部组件的行为。
例如,要添加新的主干,请将以下代码导入您的代码中:
from detectron2.modeling import BACKBONE_REGISTRY, Backbone, ShapeSpec
@BACKBONE_REGISTRY.register()
class ToyBackBone(Backbone):
def __init__(self, cfg, input_shape):
super().__init__()
# create your own backbone
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=16, padding=3)
def forward(self, image):
return {"conv1": self.conv1(image)}
def output_shape(self):
return {"conv1": ShapeSpec(channels=64, stride=16)}
然后,您可以在配置对象中使用。 然后会致电给您。cfg.MODEL.BACKBONE.NAME = 'ToyBackBone'build_model(cfg)ToyBackBone
再举一个例子,要向Generalized R-CNN元体系结构中的ROI头添加新功能,可以实现一个新的
ROIHeads
子类并将其放在中ROI_HEADS_REGISTRY。有关 实现新ROIHeads来执行新任务的示例,请参见
detectron2
和
meshrcnn中的密集
姿势
。和
项目/
包含实现不同的架构更多的例子。
完整的注册表列表可以在
API文档中
找到。您可以在这些注册表中注册组件,以自定义模型的不同部分或整个模型。
从前面的教程中,您现在可能已经有了一个自定义模型和一个数据加载器。要进行培训,用户通常会偏好以下两种样式之一:
3.1、自定义训练
准备好模型和数据加载器后,可以在PyTorch中找到编写训练循环所需的所有其他内容,您可以自己编写训练循环。这种风格使研究人员可以更清晰地管理整个培训逻辑并拥有完全的控制权。
tools / plain_train_net.py中
提供了一个这样的示例。
然后,用户可以轻松地控制训练逻辑上的任何定制。
3.2、训练抽象
我们还提供带有钩子系统的标准化“培训师”抽象,可帮助简化标准培训行为。它包括以下两个实例:
要自定义DefaultTrainer:
-
对于简单的自定义(例如,更改优化器,评估器,LR调度程序,数据加载器等),请在子类中覆盖
其方法
,就像
tools / train_net.py一样
。
-
使用培训师+挂钩系统意味着总会有一些非标准行为无法得到支持,尤其是在研究中。对于培训期间的更复杂的任务,请查看
挂钩系统是否
可以支持它,或者从
tools / plain_train_net.py
开始手动实施培训逻辑。
3.3、指标记录
在训练过程中,detectron2模型和训练员将指标放入集中式
EventStorage中
。您可以使用以下代码对其进行访问并为其记录指标:
from detectron2.utils.events import get_event_storage
# inside the model:
if self.training:
value = # compute the value from inputs
storage = get_event_storage()
storage.put_scalar("some_accuracy", value)
有关更多详细信息,请参阅其文档。
然后使用
EventWriter
将度量标准写入不同的目标。DefaultTrainer启用了一些EventWriter默认配置。有关如何自定义它们的信息,请参见上文。
评估是一个过程,需要多个输入/输出对并进行汇总。您始终可以直接
使用模型
,而只是手动解析其输入/输出以执行评估。或者,可以使用
DatasetEvaluator
接口在detectron2中实现评估。
Detectron2包括一些DatasetEvaluator使用标准数据集特定的API(例如COCO,LVIS)来计算指标的工具。您也可以DatasetEvaluator使用输入/输出对来实现自己的任务,以执行其他一些工作。例如,要计算在验证集上检测到多少个实例:
class Counter(DatasetEvaluator):
def reset(self):
self.count = 0
def process(self, inputs, outputs):
for output in outputs:
self.count += len(output["instances"])
def evaluate(self):
# save self.count somewhere, or print it, or return it.
return {"count": self.count}
4.1、使用评估器
要使用评估器的方法进行手动评估,请执行以下操作:
def get_all_inputs_outputs():
for data in data_loader:
yield data, model(data)
evaluator.reset()
for inputs, outputs in get_all_inputs_outputs():
evaluator.process(inputs, outputs)
eval_results = evaluator.evaluate()
评估程序也可以与
inference_on_dataset
一起使用。例如,
eval_results = inference_on_dataset(
model,
data_loader,
DatasetEvaluators([COCOEvaluator(...), Counter()]))
这将model在来自的所有输入上执行data_loader,并调用evaluator进行处理。
与使用模型手动运行评估相比,此功能的优势在于可以使用
DatasetEvaluators
将评估器合并在一起,并且所有评估都可以在数据集的一次向前传递中完成。此功能还为给定的模型和数据集提供准确的速度基准。
4.2、自定义数据集的评估器
detectron2中的许多评估器都是针对特定数据集的,以便使用每个数据集的官方API获得分数。除此之外,两个评估器还能够评估遵循detectron2的
标准数据集格式的
任何通用数据
集
,因此它们可用于评估自定义数据集:
detectron2配置安装,
总目录
:
1、
coco数据集下载格式解析
2、
win10下detectron2环境配置
3、
windows10离线安装pycocotools
4、
detectron2代码运行及数据集配置
5、
detectron2使用自定义数据集及数据加载
6、
detectron2模型使用、读写、训练及测试
7、
detectron2配置与部署
1、使用模型在detectron2模型(及其子模型)是由功能,如内置build_model,build_backbone,build_roi_heads:from detectron2.modeling import build_modelmodel = build_model(cfg) # returns a torch.nn.Modulebuild_model仅建立模型结构并用随机参数填充它。有关如何将现有检查点加载到模型以及如何使用model对象的信息,请参见下文。1.1、加载/
MySQL-Proxy是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform)通信数据,它支持非常广泛的
使用
场景:负载平衡和故障转移处理查询分析和日志SQL宏(SQLmacros)查询重写(queryrewriting)执行shell命令MySQLProxy更强大的一项功能是实现“
读写
分离(Read/WriteSplitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SEL
ECT
查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。MMM即Master-MasterReplicatio
detect
ron2
训练
自己的数据实现目标检测和关键点检测
——ubuntu18.04编译
测试
detect
ron2
1. 配置1.1 环境要求2. 环境安装2.1 torch 和 torchvision2.2 cocoapi (pycocotools)2.3 下载安装
detect
ron2
3.
测试
detect
ron2
——ubuntu18.04编译
测试
detect
ron2
)
1. 配置
本教程实现
使用
Detect
ron2
库
训练
自定义目标检测器。值得注意的是,
Detect
ron2
库远不止目标检测,它支持语义分割、关键点检测、掩码和稠密估计。
我们将介绍在自定义对象上
训练
Detect
ron2
所需的步骤。我们
使用
公共血细胞检测数据集。
为了
训练
我们的检测器,我们采取以下步骤:
获取
Detect
ron2
的Docker镜像,并创建自己的容器
可视化
Detect
ron2
的
训练
数据
编写我们的
Detect
ron2
训练
配置
运行
Detect
ron2
训练
评估
Detect
ron2
性能
在
测试
图像上运行De
文章目录背景配置环境搭建步骤下载源码创建虚拟环境安装torch,torchvision,cudatoolkit编译detec
ron2
源码
测试
demo
最近在跑mask-rcnn,看到facebook推荐
使用
detect
ron2
,所以就去配置了一下detec
ron2
的环境,虽然二者的核心代码是差不多的,但是明显
detect
ron2
环境的配置过程比较简单,所以下面就来看看如何配置detec
ron2
的环境吧~
搭建环境之前,先来说一下我的显卡配置,毕竟不同的显卡所支持的cuda版本是不一样的,比如GT
Detect
ron2
提供了一个基于键值的配置系统,该系统可用于获取标准的常见行为。
Detect
ron2
的配置系统
使用
YAML和yacs。除了访问和更新配置的基本操作外,我们还提供以下额外功能:
该配置可以具有字段,该字段将首先加载基本配置。如果存在任何冲突,则基本配置中的值将在子配置中被覆盖。我们为标准
模型
架构提供了一些基本配置。_BASE_:base.yaml
我们提供配置版本控制,以实现向后兼容。如果您的配置文件
使用
config行这样的版本进行版本控制,即使将来我们更
python:3.8
Detect
ron: 0.3(笔者可以在win环境成功编译安装
detect
ron2
Detect
ron2
模型
数量虽然比mm
detect
ion少,不过有些论文还是用
Detect
ron2
做的,因此有必要了解一下如何用
Detect
ron2
训练
自定义数据集。
关于mm
detect
ion下
训练
coco格式的自定义数据请移步笔者另一篇博文:mm
detect
ion-v2.3安装配置及
训练
自定义