From 58229636b599bbb4c8eeba5fdf41a3a3dbf70634 Mon Sep 17 00:00:00 2001 From: RangiLyu <lyuchqi@gmail.com> Date: Mon, 29 Aug 2022 22:37:51 +0800 Subject: [PATCH] [Docs] Cross library import examples. (#461) * [Docs] cross library import examples. * update * resolve comments --- docs/zh_cn/examples/cross_library.md | 96 ++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 docs/zh_cn/examples/cross_library.md diff --git a/docs/zh_cn/examples/cross_library.md b/docs/zh_cn/examples/cross_library.md new file mode 100644 index 00000000..7deff4f3 --- /dev/null +++ b/docs/zh_cn/examples/cross_library.md @@ -0,0 +1,96 @@ +# è·¨åº“è°ƒç”¨æ¨¡å— + +通过使用 MMEngine çš„[注册器(Registry)](../tutorials/registry.md)å’Œ[é…置文件(Config)](../tutorials/config.md),用户å¯ä»¥å®žçŽ°è·¨è½¯ä»¶åŒ…的模å—构建。 +例如,在 [MMDetection](https://github.com/open-mmlab/mmdetection) ä¸ä½¿ç”¨ [MMClassification](https://github.com/open-mmlab/mmclassification) çš„ Backbone, +或者在 [MMRotate](https://github.com/open-mmlab/mmrotate) ä¸ä½¿ç”¨ [MMDetection](https://github.com/open-mmlab/mmdetection) çš„ Transform, +或者在 [MMTracking](https://github.com/open-mmlab/mmtracking) ä¸ä½¿ç”¨ [MMDetection](https://github.com/open-mmlab/mmdetection) çš„ Detector。 +一般æ¥è¯´ï¼ŒåŒç±»æ¨¡å—都å¯ä»¥è¿›è¡Œè·¨åº“调用,åªéœ€è¦åœ¨é…置文件的模å—类型å‰åŠ 上软件包åçš„å‰ç¼€å³å¯ã€‚下é¢ä¸¾å‡ 个常è§çš„例å: + +## 跨库调用 Backbone: + +以在 MMDetection ä¸è°ƒç”¨ MMClassification çš„ ConvNeXt 为例,首先需è¦åœ¨é…ç½®ä¸åŠ å…¥ `custom_imports` å—段将 MMClassification çš„ Backbone æ·»åŠ è¿›æ³¨å†Œå™¨ï¼Œç„¶åŽåªéœ€è¦åœ¨ Backbone çš„é…ç½®ä¸çš„ `type` åŠ ä¸Š MMClassification 的软件包å `mmcls` 作为å‰ç¼€ï¼Œå³ `mmcls.ConvNeXt` å³å¯ï¼š + +```python +# 使用 custom_imports å°† mmcls çš„ models æ·»åŠ è¿›æ³¨å†Œå™¨ +custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False) + +model = dict( + type='MaskRCNN', + data_preprocessor=dict(...), + backbone=dict( + type='mmcls.ConvNeXt', # æ·»åŠ mmcls å‰ç¼€å®Œæˆè·¨åº“调用 + arch='tiny', + out_indices=[0, 1, 2, 3], + drop_path_rate=0.4, + layer_scale_init_value=1.0, + gap_before_final_norm=False, + init_cfg=dict( + type='Pretrained', + checkpoint= + 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-tiny_3rdparty_32xb128-noema_in1k_20220301-795e9634.pth', + prefix='backbone.')), + neck=dict(...), + rpn_head=dict(...)) +``` + +## 跨库调用 Transform: + +与上文的跨库调用 Backbone ä¸€æ ·ï¼Œä½¿ç”¨ custom_imports å’Œæ·»åŠ å‰ç¼€å³å¯å®žçŽ°è·¨åº“调用: + +```python +# 使用 custom_imports å°† mmdet çš„ transforms æ·»åŠ è¿›æ³¨å†Œå™¨ +custom_imports = dict(imports=['mmdet.datasets.transforms'], allow_failed_imports=False) + +# æ·»åŠ mmdet å‰ç¼€å®Œæˆè·¨åº“调用 +train_pipeline=[ + dict(type='mmdet.LoadImageFromFile'), + dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'), + dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')), + dict(type='mmdet.Resize', scale=(1024, 2014), keep_ratio=True), + dict(type='mmdet.RandomFlip', prob=0.5), + dict(type='mmdet.PackDetInputs') +] +``` + +## 跨库调用 Detector: + +跨库调用算法是一个比较å¤æ‚的例å,一个算法会包å«å¤šä¸ªå模å—ï¼Œå› æ¤æ¯ä¸ªå模å—也需è¦åœ¨`type`ä¸å¢žåŠ å‰ç¼€ï¼Œä»¥åœ¨ MMTracking ä¸è°ƒç”¨ MMDetection çš„ YOLOX 为例: + +```python +# 使用 custom_imports å°† mmdet çš„ models æ·»åŠ è¿›æ³¨å†Œå™¨ +custom_imports = dict(imports=['mmdet.models'], allow_failed_imports=False) +model = dict( + type='mmdet.YOLOX', + backbone=dict(type='mmdet.CSPDarknet', deepen_factor=1.33, widen_factor=1.25), + neck=dict( + type='mmdet.YOLOXPAFPN', + in_channels=[320, 640, 1280], + out_channels=320, + num_csp_blocks=4), + bbox_head=dict( + type='mmdet.YOLOXHead', num_classes=1, in_channels=320, feat_channels=320), + train_cfg=dict(assigner=dict(type='mmdet.SimOTAAssigner', center_radius=2.5))) +``` + +为了é¿å…ç»™æ¯ä¸ªå模å—æ‰‹åŠ¨å¢žåŠ å‰ç¼€ï¼Œé…置文件ä¸å¼•å…¥äº† `_scope_` 关键å—,当æŸä¸€æ¨¡å—çš„é…ç½®ä¸æ·»åŠ 了 `_scope_` 关键å—åŽï¼Œè¯¥æ¨¡å—é…置文件下é¢çš„所有å模å—é…置都会从该关键å—所对应的软件包内去构建: + +```python +# 使用 custom_imports å°† mmdet çš„ models æ·»åŠ è¿›æ³¨å†Œå™¨ +custom_imports = dict(imports=['mmdet.models'], allow_failed_imports=False) +model = dict( + _scope_='mmdet', # 使用 _scope_ 关键å—,é¿å…给所有å模å—æ·»åŠ å‰ç¼€ + type='YOLOX', + backbone=dict(type='CSPDarknet', deepen_factor=1.33, widen_factor=1.25), + neck=dict( + type='YOLOXPAFPN', + in_channels=[320, 640, 1280], + out_channels=320, + num_csp_blocks=4), + bbox_head=dict( + type='YOLOXHead', num_classes=1, in_channels=320, feat_channels=320), + train_cfg=dict(assigner=dict(type='SimOTAAssigner', center_radius=2.5))) +``` + +以上这两ç§å†™æ³•äº’相ç‰ä»·ã€‚ + +若希望了解更多关于注册器和é…置文件的内容,请å‚考[é…置文件教程](../tutorials/config.md)å’Œ[注册器教程](../tutorials/registry.md) -- GitLab