阅读笔记:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

在读上篇EfficientDet时,看到的EfficientNet,当时对其放缩网络感到疑惑,现在仔细看一下这个论文。
论文链接:https://arxiv.org/pdf/1905.11946.pdf
代码:https://github.com/lukemelas/EfficientNet-PyTorch
论文很简明的说明了其思想:增加网络深度、宽度以及增大图像分辨率都可以提高准确率, 但是当增大到一定程度时,准确率提升非常缓慢,直至不再提升,甚至可能下降。作者认为,网络的深度、宽度以及分辨率之间存在着相互联系,因此因此作者设置了几个可学习的参数,让网络去学习这些参数,但是又不能无限制的扩大网络,因此得设置一个上限,这就得到了公式:
在这里插入图片描述
再看网络结构,可视化一下看得更清晰是叭:
在这里插入图片描述
看代码时有个疑问,是utils.py代码注释里的,在212行,这里关于卷积后输出特征的大小:

class Conv2dDynamicSamePadding(nn.Conv2d):
    """2D Convolutions like TensorFlow, for a dynamic image size.
       The padding is operated in forward function by calculating dynamically.
    """

    # Tips for 'SAME' mode padding.
    #     Given the following:
    #         i: width or height
    #         s: stride
    #         k: kernel size
    #         d: dilation
    #         p: padding
    #     Output after Conv2d:
    #         o = floor((i+p-((k-1)*d+1))/s+1)
    # If o equals i, i = floor((i+p-((k-1)*d+1))/s+1),
    # => p = (i-1)*s+((k-1)*d+1)-i

看下这里面的Output after Conv2d,再来看pytorch文档里的:
在这里插入图片描述
为何文档里是2Padding,而这个代码里则是p,开始以为是pytorch文档的padding mod是 zero而代码里是same的原因,但是又搜到
在这里插入图片描述
后来仔细看代码,原来是代码中的p需要分成两半用,即:pytorch文档里的padding是左右分开说的,而这个代码里是整个padding。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值