1. 磐创AI-开放猫官方网站首页
  2. 系列教程
  3. Detectron2

Detectron2 部署 | 十一

本文是全系列中第15 / 15篇:Detectron2

作者|facebookresearch
编译|Flin
来源|Github

部署

Caffe2部署

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

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

覆盖范围

它支持最常见的3元结构:GeneralizedRCNN,RetinaNet,PanopticFPN,几乎在这些3元结构的所有官方正式型号。

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

用法

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

要转换经过COCO训练的官方Mask R-CNN,请先准备COCO数据集,地址是:https://github.com/facebookresearch/detectron2/tree/master/datasets

然后从Model Zoo中选择模型,然后运行:

python tools/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. 仅Pytorch的master支持GPU转换。因此我们使用MODEL.DEVICE cpu
3. 使用--run-eval标志,它将评估转换后的模型以验证其准确性。由于以下原因,精度通常与PyTorch略有不同(在0.1 AP内)不同实现之间的数值精度。建议始终验证准确性,以防转换不支持自定义模型。

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

该脚本会生成model.svg文件,其中包含网络的可视化内容。
你也可以将model.pb加载到netron(https://github.com/lutzroeder/netron)之类的工具中以对其进行可视化。

输入和输出

所有转换后的模型均采用两个输入张量:每个图像的”data”是NCHW图像,而”im_info”是Nx3张量(高度,宽度,未使用的旧参数)(“data”的形状可能由于填充而大于在”im_info”中显示的内容)。

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

由于不同的输入和输出格式,该Caffe2Model.__call__方法包括预处理/后处理代码,以匹配原始detectron2模型的格式。它们可以作为实际部署中的预处理的参考。

原文链接:https://detectron2.readthedocs.io/tutorials/deployment.html

原创文章,作者:磐石,如若转载,请注明出处:https://panchuang.net/2020/06/25/detectron2-%e9%83%a8%e7%bd%b2-%e5%8d%81%e4%b8%80/

发表评论

登录后才能评论

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息