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

歡迎關注磐創AI博客站: http://panchuang.net/

sklearn機器學習中文官方文檔: http://sklearn123.com/

歡迎關注磐創博客資源彙總站: http://docs.panchuang.net/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章