OpenMMLab中MMDetection 整体构建流程
创始人
2025-06-01 17:40:19
0

训练部分一般包括 9 个核心组件,总体流程是:

  1. 任何一个 batch 的图片先输入到 backbone 中进行特征提取,典型的骨干网络是 ResNet
  2. 输出的单尺度或者多尺度特征图输入到 neck 模块中进行特征融合或者增强,典型的 neck 是 FPN
  3. 上述多尺度特征最终输入到 head 部分,一般都会包括分类和回归分支输出
  4. 在整个网络构建阶段都可以引入一些即插即用Enhance增强算子来增加提取提取能力,典型的例如 SPP、DCN 等等
  5. 目标检测 head 输出一般是特征图,对于分类任务存在严重的正负样本不平衡,可以通过BBox Assigner正负样本属性分配和BBox
    Sampler采样控制
  6. 为了方便收敛和平衡多分支,一般都会对 gt bbox 进行BBox Encoder编码 最后一步是计算分类和回归 loss,进行训练
  7. 在训练过程中也包括非常多的 trick,例如优化器选择等,参数调节也非常关键
    在这里插入图片描述
    训练部分
    1、backbone特征提取。目前 MMDetection 中已经集成了大部分骨架网络 mmdet/models/backbones
__all__ = [    'RegNet', 'ResNet', 'ResNetV1d', 'ResNeXt', 'SSDVGG', 'HRNet', 'Res2Net',    'HourglassNet', 'DetectoRS_ResNet', 'DetectoRS_ResNeXt', 'Darknet',    'ResNeSt', 'TridentResNet']

2、neck 可以认为是 backbone 和 head 的连接层,主要负责对 backbone 的特征进行高效融合和增强,能够对输入的单尺度或者多尺度特征进行融合、增强输出等。mmdet/models/necks

__all__ = [    'FPN', 'BFP', 'ChannelMapper', 'HRFPN', 'NASFPN', 'FPN_CARAFE', 'PAFPN',    'NASFCOS_FPN', 'RFP', 'YOLOV3Neck']

3、Head 目标检测算法一般包括分类和框坐标回归两个分支
one-stage 算法的 head 模块都在mmdet/models/dense_heads中
two-stage 算法还包括额外的mmdet/models/roi_heads。
在这里插入图片描述
4、enhance 是即插即用、能够对特征进行增强的模块,其具体代码可以通过 dict 形式注册到 backbone、neck 和 head 中。常用 enhance 模块是 SPP、ASPP、RFB、Dropout、Dropblock、DCN 和各种注意力模块 SeNet、Non_Local、CBA 等
在这里插入图片描述
5、BBox Assigner正负样本属性分配模块作用是正负样本定义或者正负样本分配
正样本就是常说的前景样本(可以是任何类别),负样本就是背景样本。mmdet/core/bbox/assigners
在这里插入图片描述
6、BBox Sampler样本平衡操作。本模块作用是对前面定义的正负样本不平衡进行采样,力争克服该问题。一般在目标检测中 gt bbox 都是非常少的,所以正负样本比是远远小于 1 的。而基于机器学习观点:在数据极度不平衡情况下进行分类会出现预测倾向于样本多的类别,出现过拟合,为了克服该问题,适当的正负样本采样策略是非常必要的 mmdet/core/bbox/assigners
在这里插入图片描述
7、BBox Encoder 为了更好的收敛和平衡多个 loss,具体解决办法非常多,而 bbox 编解码策略也算其中一个,bbox 编码阶段对应的是对正样本的 gt bbox 采用某种编码变换(反操作就是 bbox 解码),最简单的编码是对 gt bbox 除以图片宽高进行归一化以平衡分类和回归分支,一些典型的编解码策略如下
在这里插入图片描述

__all__ = [    'BaseBBoxCoder', 'PseudoBBoxCoder', 'DeltaXYWHBBoxCoder',    'LegacyDeltaXYWHBBoxCoder', 'TBLRBBoxCoder', 'YOLOBBoxCoder',    'BucketingBBoxCoder']

8、Loss 通常都分为分类和回归 loss,其对网络 head 输出的预测值和 bbox encoder 得到的 targets 进行梯度下降迭代训练。mmdet/models/losses
在这里插入图片描述
9、Training tricks 训练技巧非常多,常说的调参很大一部分工作都是在设置这部分超参。
在这里插入图片描述
测试
除了必备的网络构建部分外( backbone、neck、head 和 enhance ),不需要正负样本定义、正负样本采样和 loss 计算三个最难的部分,但是其额外需要一个 bbox 后处理模块和测试 trick。
1、BBox Decoder 训练时候进行了编码,那么对应的测试环节需要进行解码。根据编码的不同,解码也是不同的。举个简单例子:假设训练时候对宽高是直接除以图片宽高进行归一化的,那么解码过程也仅仅需要乘以图片宽高即可。其代码和 bbox encoder 放在一起,在mmdet/core/bbox/coder
2、BBox PostProcess 在得到原图尺度 bbox 后,由于可能会出现重叠 bbox 现象,故一般都需要进行后处理,最常用的后处理就是非极大值抑制以及其变种。mmdet/core/post_processing

__all__ = [    'multiclass_nms', 'merge_aug_proposals', 'merge_aug_bboxes',    'merge_aug_scores', 'merge_aug_masks', 'fast_nms']

3、Testing tricks为了提高检测性能,测试阶段也会采用 trick。

最后附上核心组件大图:
在这里插入图片描述
参考:https://zhuanlan.zhihu.com/p/337375549

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...