深度可分离卷积

深度可分离卷积,使用了一些 trick 极大减少卷积所需参数量和计算量。

理解深度可分离卷积#

若需要对 12×12×3 的输入使用卷积,获得 8×8×256 的输出,直接的卷积方法是使用 256 个 5×5×3 的卷积核(无 padding、步长为 1,下同)。此时卷积层的参数量为 19200,卷积一次需要进行 1228800 次乘法运算。

换用深度可分离卷积,卷积运算分为两步:深度卷积、点卷积。

依然以 12×12×3 的输入意欲获得 8×8×256 的输出为例。深度卷积步骤 希望将 12×12×3 的输入转换为 8×8×3,此时需要 3 个 5×5 的卷积核;点卷积步骤 实际会进行 1×1 卷积,需要 256 个 1×1×3 卷积核将刚才的矩阵卷积到 8×8×256 上来。

现在,卷积层参数量 843,卷积一次需要进行 53952 次乘法运算。

简要 PyTorch 代码实现#

class depthwise_separable_conv(nn.Module):
    def __init__(self, nin, nout):
        super(depthwise_separable_conv, self).__init__()
        self.depthwise = nn.Conv2d(nin, nin, kernel_size=3, padding=1, groups=nin)
        self.pointwise = nn.Conv2d(nin, nout, kernel_size=1)

    def forward(self, x):
        out = self.depthwise(x)
        out = self.pointwise(out)
        return out

参考来源#

作者:chirp

出处:https://www.cnblogs.com/chirp/p/17953149

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   倒地  阅读(162)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示