前言
ResNet是目标检测模型最常用的backbone,DenseNet其实比ResNet提取特征能力更强,而且其参数更少,计算量(FLOPs)也更少,用于目标检测虽然效果好,但是速度较慢,这主要是因为DenseNet中密集连接所导致的高内存访问成本和能耗。
VoVNet就是为了解决DenseNet这一问题,基于VoVNet的目标检测模型性能超越基于DenseNet的模型,速度也更快,相比ResNet也是性能更好。
代码实现参考:https://github.com/youngwanLEE/vovnet-detectron2
一、优化的地方

DenseNet的一大问题就是密集连接太重了,而且每个layer都会聚合前面层的特征,其实造成的是特征冗余。
这种信息冗余反而是可以优化的方向,据此这里提出了OSA(One-Shot Aggregation)模块,如图1b所示,简单来说,就是只在最后一次性聚合前面所有的layer。
DenseNet中很多中间特征可能是冗余的,这对于目标检测非常重要,因为检测模型一般的输入都是较大的。
二、VovNet
VoVNet由OSA模块构成
首先是一个由3个3x3卷积层构成的stem block,
然后4个阶段的OSA模块,每个stage的最后会采用一个stride为2的3x3 max pooling层进行降采样,模型最终的output stride是32。与其他网络类似,每次降采样后都会提升特征的channel数。
每个OSA模块里面都是5个3x3 conv,然后concat。

1.VoVNetV2
VoVNetV2引入了ResNet的残差连接和SENet的SE模块

从图b可以看到,改进的OSA模块直接将输入加到输出上,增加短路连接,使得VoVNet可以训练更深的网络,论文中是VoVNet-99。
从图2c可以看到,改进的另外一个点是在最后的特征层上加上了sSE模块来进一步增强特征,原始的SE模块包含两个FC层,其中中间的FC层主要是为降维,这在一定程度上会造成信息丢失。而sSE模块是去掉了这个中间FC层。
VoVNetV2相比VoVNet增加了少许的计算量,但是模型性能有提升。
模型效果参考https://blog.youkuaiyun.com/xiaohu2022/article/details/105318534/
2.代码分析
VoVNet39_eSE = {
'stem': [64, 64, 128], #三个stem模块输入的通道数
"stage_conv_ch": [128, 160, 192, 224], #stage2-5的输入通道
"stage_out_ch": [256, 512, 768, 1024], #stage2-5的输出通道
"layer_per_block": 5, #每个osa模块包含的3*3 conv数量
"block_per_stage": [1, 1, 2, 2], #每个stage的osa模块数量
"eSE": True, #ese注意力机制
"dw" : False #Depthwise卷积与Pointwise卷积
}
# OSA模块的实现
class _OSA_module(nn.Module):
def __init__(self, in_ch, stage_ch, concat_ch, layer_per_block, module_name,
SE=False, identity=False, depthwise=False):
super(_OSA_module, self).__init__()
self.identity = identity
self.depthwise = depthwise
self.isReduced = False
self

最低0.47元/天 解锁文章
11万+

被折叠的 条评论
为什么被折叠?



