From 89275adb290bffa89d8917cba01a85b3082fc514 Mon Sep 17 00:00:00 2001 From: Seperendity <69076980+Seperendity@users.noreply.github.com> Date: Fri, 6 Jan 2023 20:30:48 +0800 Subject: [PATCH] [CodeCamp] #50 Add module combination doc (#349) * the file to verify the installation * "add module_combination" * add module_combination * modified module_combination.md * modify module_combination.md * fix module_combination.md --- .../advanced_guides/module_combination.md | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/docs/zh_cn/advanced_guides/module_combination.md b/docs/zh_cn/advanced_guides/module_combination.md index 1c4f824..265d926 100644 --- a/docs/zh_cn/advanced_guides/module_combination.md +++ b/docs/zh_cn/advanced_guides/module_combination.md @@ -171,3 +171,110 @@ model = dict( beta=6) )) ``` + +## Backbone + Neck + HeadModule 的组合替换 + +### 1. YOLOv5 Backbone 替换 + +(1) 假设想将 `RTMDet backbone + yolov5 neck + yolov5 head` 作为 `YOLOv5` 的完整网络,则配置文件如下: + +```python +_base_ = './yolov5_s-v61_syncbn_8xb16-300e_coco.py' + +widen_factor = 0.5 +deepen_factor = 0.33 + +model = dict( + backbone=dict( + _delete_=True, + type='CSPNeXt', + arch='P5', + expand_ratio=0.5, + deepen_factor=deepen_factor, + widen_factor=widen_factor, + channel_attention=True, + norm_cfg=dict(type='BN'), + act_cfg=dict(type='SiLU', inplace=True)) +) +``` + +(2) `YOLOv6EfficientRep backbone + yolov5 neck + yolov5 head` 作为 `YOLOv5` 的完整网络,则配置文件如下: + +```python +_base_ = './yolov5_s-v61_syncbn_8xb16-300e_coco.py' + +model = dict( + backbone=dict( + type='YOLOv6EfficientRep', + norm_cfg=dict(type='BN', momentum=0.03, eps=0.001), + act_cfg=dict(type='ReLU', inplace=True)) +) +``` + +### 2. YOLOv5 Neck 替换 + +(1) 假设想将 `yolov5 backbone + yolov6 neck + yolov5 head` 作为 `YOLOv5` 的完整网络,则配置文件如下: + +```python +_base_ = './yolov5_s-v61_syncbn_8xb16-300e_coco.py' + +model = dict( + neck = dict( + type = 'YOLOv6RepPAFPN', + in_channels = [256, 512, 1024], + out_channels = [128, 256, 512], # 注意 YOLOv6RepPAFPN 的输出通道是[128, 256, 512] + num_csp_blocks = 12, + act_cfg = dict(type='ReLU', inplace = True), + ), + bbox_head = dict( + head_module = dict( + in_channels = [128, 256, 512])) # head 部分输入通道要做相应更改 +) +``` + +(2) 假设想将 `yolov5 backbone + yolov7 neck + yolov5 head` 作为 `YOLOv5` 的完整网络,则配置文件如下: + +```python +_base_ = './yolov5_s-v61_syncbn_8xb16-300e_coco.py' + +deepen_factor = _base_.deepen_factor +widen_factor = _base_.widen_factor + +model = dict( + neck = dict( + _delete_=True, # 将 _base_ 中关于 neck 的字段删除 + type = 'YOLOv7PAFPN', + deepen_factor = deepen_factor, + widen_factor = widen_factor, + upsample_feats_cat_first = False, + in_channels = [256, 512, 1024], + out_channels = [128, 256, 512], + norm_cfg=dict(type='BN', momentum=0.03, eps=0.001), + act_cfg = dict(type='SiLU', inplace=True), + ), + bbox_head = dict( + head_module = dict( + in_channels = [256, 512, 1024])) # 注意使用 YOLOv7PAFPN 后 head 部分输入通道数是 neck 输出通道数的两倍 +) +``` + +### 3. YOLOv5 HeadModule 替换 + +(1) 假设想将 `yolov5 backbone + yolov5 neck + yolo7 headmodule` 作为 `YOLOv5` 的完整网络,则配置文件如下: + +```python +_base_ = './yolov5_s-v61_syncbn_8xb16-300e_coco.py' + +strides = [8, 16, 32] +num_classes = 1 # 根据自己的数据集调整 + +model = dict( + bbox_head=dict( + type='YOLOv7Head', + head_module=dict( + type='YOLOv7HeadModule', + num_classes=num_classes, + in_channels=[256, 512, 1024], + featmap_strides=strides, + num_base_priors=3))) +``` -- GitLab