作者|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数据集,地址是:github.com/facebookres…
然后从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复制代码
注意:
- 转换需要有效的样本输入和权重来跟踪模型。这就是脚本需要数据集的原因。你可以修改脚本以其他方式获取样本输入。
- 仅Pytorch的master支持GPU转换。因此我们使用
MODEL.DEVICE cpu
。 - 使用
--run-eval
标志,它将评估转换后的模型以验证其准确性。由于以下原因,精度通常与PyTorch略有不同(在0.1 AP内)不同实现之间的数值精度。建议始终验证准确性,以防转换不支持自定义模型。
转换后的模型位于指定的caffe2_model/
目录中。两个文件model.pb
以及包含网络结构和网络参数的model_init.pb
对于部署都是必需的。
然后可以使用Caffe2的API将这些文件加载到C ++或Python中。
该脚本会生成model.svg
文件,其中包含网络的可视化内容。
你也可以将model.pb
加载到netron(github.com/lutzroeder/…
输入和输出
所有转换后的模型均采用两个输入张量:每个图像的"data"是NCHW图像,而"im_info"是Nx3张量(高度,宽度,未使用的旧参数)("data"的形状可能由于填充而大于在"im_info"中显示的内容)。
转换后的模型不包含将原始图层输出转换为格式化的预测的后处理操作。这些模型仅从未经后期处理的终层产生原始输出,因为在实际部署中,应用程序通常需要自定义的轻量级后期处理(例如,通常无需为每个检测到的对象使用full-image masks )。
由于不同的输入和输出格式,该Caffe2Model.__call__
方法包括预处理/后处理代码,以匹配原始detectron2模型的格式。它们可以作为实际部署中的预处理的参考。
原文链接:detectron2.readthedocs.io/tutorials/d…
欢迎关注磐创AI博客站: panchuang.net/
sklearn机器学习中文官方文档: sklearn123.com/
欢迎关注磐创博客资源汇总站: docs.panchuang.net/