1、配置文件

Detectron2提供了一个基于键值的配置系统,该系统可用于获取标准的常见行为。

Detectron2的配置系统使用YAML和yacs。除了访问和更新配置的基本操作外,我们还提供以下额外功能:

  1. 该配置可以具有字段,该字段将首先加载基本配置。如果存在任何冲突,则基本配置中的值将在子配置中被覆盖。我们为标准模型架构提供了一些基本配置。_BASE_:base.yaml

  2. 我们提供配置版本控制,以实现向后兼容。如果您的配置文件使用config行这样的版本进行版本控制,即使将来我们更改某些密钥,detectron2仍会识别该文件。VERSION:2

配置文件是一种非常有限的语言。我们不希望Detectron2中的所有功能都可以通过配置使用。如果您需要的配置空间不可用,请使用detectron2的API编写代码。

1.1、基本用法

CfgNode这里显示了该对象的一些基本用法。请参阅文档中的更多内容

from detectron2.config import get_cfg
cfg = get_cfg()    # obtain detectron2's default config
cfg.xxx = yyy      # add new configs for your own custom components
cfg.merge_from_file("my_cfg.yaml")   # load values from a file

cfg.merge_from_list(["MODEL.WEIGHTS", "weights.pth"])   # can also load values from a list of str
print(cfg.dump())  # print formatted configs

detectron2中的许多内置工具都接受命令行配置覆盖:命令行中提供的键值对将覆盖配置文件中的现有值。例如,demo.py可以与

./demo.py --config-file config.yaml [--other-options] \
  --opts MODEL.WEIGHTS /path/to/weights INPUT.MIN_SIZE_TEST 1000

要查看detectron2中可用配置的列表及其含义,请查看“ 配置参考”

1.2、配置最佳实践

  1. 将您编写的配置视为“代码”:避免复制或复制它们;用于_BASE_在配置之间共享公用部分。

  2. 使您编写的配置保持简单:不要包含不会影响实验设置的键。

  3. 在您的配置(或基本配置)中保留一个版本号,例如,以便向后兼容。读取没有版本号的配置时,我们会打印警告。官方配置不包含版本号,因为它们始终是最新的。VERSION:2

2、部署方式

2.1、Caffe2部署

我们目前支持通过ONNX将detectron2模型转换为Caffe2格式。转换后的Caffe2模型可以在Python或C ++中运行而无需detectron2依赖性。它具有针对CPU和移动设备推理优化的运行时,但不适用于GPU推理。

Caffe2转换需要PyTorch≥1.4和ONNX≥1.6。

2.2、覆盖范围

它支持3种最常见的元体系结构:GeneralizedRCNN,,RetinaNet和 PanopticFPN,以及这3种元体系结构下的大多数官方模型。

只要用户的自定义扩展名不包含Caffe2中不可用的控制流或运算符(例如,可变形卷积),就支持这些体系结构下的用户自定义扩展名(通过注册添加)。例如,开箱即用通常支持自定义主干和头部。

2.3、用法

转换API记录在API文档中。我们提供了一个工具,caffe2_converter.py作为使用这些API转换标准模型的示例。

要转换经过COCO培训的官方Mask R-CNN,请先 准备COCO数据集,然后从Model Zoo中选择模型,然后运行:

cd tools/deploy/ && ./caffe2_converter.py --config-file ../../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml \
	--output ./caffe2_model --run-eval \
	MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl \
	MODEL.DEVICE cpu

注意:

  1. 转换需要有效的样本输入和权重来跟踪模型。这就是脚本需要数据集的原因。您可以修改脚本以其他方式获取样本输入。

  2. 带有--run-eval标志,它将评估转换后的模型以验证其准确性。由于不同实现之间的数值精度,精度通常与PyTorch略有不同(在0.1 AP内)。如果转换不支持您的自定义模型,建议始终验证准确性。

转换后的模型位于指定caffe2_model/目录中。部署需要两个文件model.pb ,model_init.pb其中包含网络结构和网络参数。然后可以使用Caffe2的API将这些文件加载​​到C ++或Python中。

该脚本生成model.svg包含网络可视化文件。您也可以加载model.pb到诸如netron之类的工具以使其可视化。

2.4、在C ++ / Python中使用模型

该模型可以用C ++加载。给出了一个示例caffe2_mask_rcnn.cpp,该示例使用进行CPU / GPU推理COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x。

C ++示例需要使用以下代码构建:

  • 内置caffe2的PyTorch

  • gflags,glog,opencv

  • 符合您caffe2版本的protobuf标头

  • 如果caffe2是使用MKL构建的,则为MKL标头

以下可以在官方detectron2 docker内部编译示例:

sudo apt update && sudo apt install libgflags-dev libgoogle-glog-dev libopencv-dev
pip install mkl-include
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-cpp-3.6.1.tar.gz
tar xf protobuf-cpp-3.6.1.tar.gz
export CPATH=$(readlink -f ./protobuf-3.6.1/src/):$HOME/.local/include
export CMAKE_PREFIX_PATH=$HOME/.local/lib/python3.6/site-packages/torch/
mkdir build && cd build
cmake -DTORCH_CUDA_ARCH_LIST=$TORCH_CUDA_ARCH_LIST .. && make

# To run:
./caffe2_mask_rcnn --predict_net=./model.pb --init_net=./model_init.pb --input=input.jpg

注意:

  • 所有转换的模型(.pb文件)都采用两个输入张量:“ data”是一个NCHW图像,“ im_info”是一个Nx3张量,每个图像由(高度,宽度,1.0)组成(形状可能是“ data”)由于填充而比“ im_info”中的大)。

  • 转换后的模型不包含将原始图层输出转换为格式化的预测的后处理操作。该示例仅从未经后期处理的最终层生成原始输出(28x28蒙版),因为在实际部署中,应用程序通常需要自定义的轻量级后期处理(例如,通常无需为每个检测到的对象使用全图像蒙版) )。

我们还在Caffe2Model .__ call__方法中为转换后的模型提供了python包装器 。此方法的接口与模型pytorch版本相同,并且在内部应用预处理/后处理代码以匹配格式。它们可以作为实际部署中的预处理的参考。

detectron2配置安装,总目录

1、coco数据集下载格式解析

2、win10下detectron2环境配置

3、windows10离线安装pycocotools

4、detectron2代码运行及数据集配置

5、detectron2使用自定义数据集及数据加载

6、detectron2模型使用、读写、训练及测试

7、detectron2配置与部署

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐