轻量级检测网络Pelee和DenseNet

提到轻量级神经网络,大家都会提到MobileNet V1 V2 和 ShuffleNet V1 V2,似乎较少看到大家提到PeleeNet,网上搜到的结果也不多,这篇博客会简单介绍一下PeleeNet以及以它为backbone的检测网络Pelee,还有它的前身DenseNet。

1. DenseNet

这里推荐一篇博文,讲解DenseNet很详细:

https://blog.csdn.net/u014380165/article/details/75142664/

DenseNet发表于2017年的一篇论文Densely Connected Convolutional Networks ,该网络的创新点在于对特征的充分利用,与ResNet相比,DenseNet对特征的利用更加充分,并且通过bottleneck和transition layers降低了计算量。

网络结构图:

                                                        

图中为一个包含5个层的Dense block我们可以看出,在一个Dense block中,上一层不止会连接下一层,还会连接之后的所有层,并且在Dense block最后,会添加Transition layer来缩小计算量。

跳跃连接是一种解决梯度消失的好方法,ResNet中就使用了这种方法来解决梯度消失。

ResNet中的跳跃连接可以用下面的公式表示,其中H表示非线性变换。

                                                              

与ResNet不同的是,Dense的非线性变换包含了之前的所有层。

                                                            

DenseNet的具体网络结构如下:

                                      

可以看到,在Dense Block之间,作者使用了Transition layer,一个Transition layer包含一个BN层,一个1x1卷积核的卷积层(卷积核个数为输入个数的一半)和一个2x2的平均池化层。由于网络中后一层与前面所有层相连,到深层网络时,通道数非常大,会导致计算量非常大,作者使用1x1卷积缩小通道数的同时结合了通道间的信息,使用平均池化缩小特征图,降低了计算量。以DenseNet-169为例,Dense Block(3)中第32层需要输入为1248通道,其中一个分支连接另一个分支的输出,另一个分支首先使用bottleneck(1x1卷积)将1248通道缩小为128通道,再进行32通道的3x3卷积,输出的结果与另一个分支相连,得到1248+32=1280通道的特征图,为了进一步缩小计算量,在输入Dense Block(4)之前,作者使用Transition layer,将Dense Block(3)的输出用1x1的卷积缩小为640通道的特征图,并使用2x2,步长为2的平均池化层缩小特征图为原来的一半大小。

 

2.PeleeNet

PeleeNet是以DenseNet为基础的变型,目的是为了将网络轻量化,应用于移动设备。

网络的主要思想有以下五点:

(1) Two-Way Dense Layer

                     

作者借鉴GoogleNet中多尺度的方法,与Dense Block中的层结合,设计出两路稠密层,一条通道使用1个1x1的卷积核升维,然后接1个3x3的卷积层降维,另一个通道使用1x1卷积升维后,使用2个3x3卷积降维,目的是与另一个通道具有不同感受野。

(2) Stem layer

                                           

作者在网络开头使用Stem layer,在增加少量计算量的同时,极大的提升了网络的表达能力。

(3) Dynamic Number of Channels of Bottleneck Layer

在DenseNet中,每一个Dense Block的层中的bottleneck层的通道数都为固定值,作者发现这会导致网络开头一些层中的bottleneck的通道数远超过输入通道数,导致计算量增大。在PeleeNet中,作者动态的设置bottleneck层的通道数。

(4) Transition Layer without Compression

作者发现Transition Layer使用一半输入通道数,会降低网络的表达能力,PeleeNet中Transition Layer的通道数与输入通道数一致。

(5) Composite Function

使用后激活方法代替前激活方式,将relu放在最后,方便后期bn层与conv层结合,提升计算速度。(不知是否理解错误,在官方DenseNet caffe中,relu是放在bn层之后的,也就是后激活方式)

peleeNet模型结构如下:

                                           

3. Pelee

PeleeNet作者还提出了以PeleeNet为基础的轻量级检测网络Pelee,与以VGG为基础网络的SSD相比,为了降低计算量,作者使用19x19大小特征图的层作为SSD的第一层预测层。

预测层大小分别为:19 x 19, 10 x 10, 5 x 5, 3 x 3, 1 x 1

MobileNet 同样未使用38 x 38的特征图作为预测层,但添加了2 x 2的预测层来保持6尺度SSD检测。

 

在我的应用场景中,Pelee的表现远超出了ShuffleNet V2-SSD的表现,也有可能是调参之前没烧香,继续调试中。

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值