2022-09-29 15:36:32 +08:00
|
|
|
|
本教程收集了任何如何使用 MMYOLO 进行 xxx 的答案。 如果您遇到有关`如何做`的问题及答案,请随时更新此文档!
|
|
|
|
|
|
|
|
|
|
## 给骨干网络增加插件
|
|
|
|
|
|
|
|
|
|
MMYOLO 支持在 BackBone 的不同 Stage 后增加如 `none_local`、`dropblock` 等插件,用户可以直接通过修改 config 文件中 `backbone` 的 `plugins` 参数来实现对插件的管理。例如为 `YOLOv5` 增加 `GeneralizedAttention` 插件,其配置文件如下:
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
_base_ = './yolov5_s-v61_syncbn_8xb16-300e_coco.py'
|
|
|
|
|
|
|
|
|
|
model = dict(
|
|
|
|
|
backbone=dict(
|
|
|
|
|
plugins=[
|
|
|
|
|
dict(
|
|
|
|
|
cfg=dict(
|
|
|
|
|
type='mmdet.GeneralizedAttention',
|
|
|
|
|
spatial_range=-1,
|
|
|
|
|
num_heads=8,
|
|
|
|
|
attention_type='0011',
|
|
|
|
|
kv_stride=2),
|
|
|
|
|
stages=(False, False, True, True)),
|
|
|
|
|
], ))
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`cfg` 参数表示插件的具体配置, `stages` 参数表示是否在 backbone 对应的 stage 后面增加插件,长度需要和 backbone 的 stage 数量相同。
|
|
|
|
|
|
|
|
|
|
## 应用多个 Neck
|
|
|
|
|
|
|
|
|
|
如果你想堆叠多个 Neck,可以直接在配置文件中的 Neck 参数,MMYOLO 支持以 `List` 形式拼接多个 Neck 配置,你需要保证的是上一个 Neck 的输出通道与下一个 Neck 的输入通道相匹配。如需要调整通道,可以插入 `mmdet.ChannelMapper` 模块用来对齐多个 Neck 之间的通道数量。具体配置如下:
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
_base_ = './yolov5_s-v61_syncbn_8xb16-300e_coco.py'
|
|
|
|
|
|
2022-10-27 10:29:39 +08:00
|
|
|
|
deepen_factor = _base_.deepen_factor
|
|
|
|
|
widen_factor = _base_.widen_factor
|
2022-09-29 15:36:32 +08:00
|
|
|
|
model = dict(
|
|
|
|
|
type='YOLODetector',
|
|
|
|
|
neck=[
|
|
|
|
|
dict(
|
|
|
|
|
type='YOLOv5PAFPN',
|
|
|
|
|
deepen_factor=deepen_factor,
|
|
|
|
|
widen_factor=widen_factor,
|
|
|
|
|
in_channels=[256, 512, 1024],
|
2022-10-27 10:29:39 +08:00
|
|
|
|
out_channels=[256, 512, 1024], # 因为 out_channels 由 widen_factor 控制,YOLOv5PAFPN 的 out_channels = out_channels * widen_factor
|
2022-09-29 15:36:32 +08:00
|
|
|
|
num_csp_blocks=3,
|
|
|
|
|
norm_cfg=dict(type='BN', momentum=0.03, eps=0.001),
|
|
|
|
|
act_cfg=dict(type='SiLU', inplace=True)),
|
|
|
|
|
dict(
|
|
|
|
|
type='mmdet.ChannelMapper',
|
|
|
|
|
in_channels=[128, 256, 512],
|
|
|
|
|
out_channels=128,
|
|
|
|
|
),
|
|
|
|
|
dict(
|
|
|
|
|
type='mmdet.DyHead',
|
|
|
|
|
in_channels=128,
|
|
|
|
|
out_channels=256,
|
|
|
|
|
num_blocks=2,
|
|
|
|
|
# disable zero_init_offset to follow official implementation
|
|
|
|
|
zero_init_offset=False)
|
|
|
|
|
]
|
2022-10-27 10:29:39 +08:00
|
|
|
|
bbox_head=dict(head_module=dict(in_channels=[512,512,512])) # 因为 out_channels 由 widen_factor 控制,YOLOv5HeadModuled 的 in_channels * widen_factor 才会等于最后一个 neck 的 out_channels
|
|
|
|
|
)
|
2022-09-29 15:36:32 +08:00
|
|
|
|
```
|