可分离卷积-Separable Convolutions

本文深入探讨了深度可分离卷积(Depthwise Separable Convolutions)的概念,这是一种用于减少卷积神经网络中参数数量的技术,同时保持较高的模型精度。通过将标准卷积分解为深度卷积和点卷积两步,大幅减少了计算复杂度,实验表明精度损失仅为1%左右。文章还提供了PyTorch实现的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经典卷积层

一般卷积神经网络中,卷积运算的是使用与输入的feature map相同channel大小的kernel,kernel的每个通道与输入的每个通道对应卷积然后相加就得到输出feature的一个通道上的一个数据点。

因此有对应关系:

输入的通道数=每个kernel的通道数

输出的通道数=使用的kernel的数目

可以计算出这一层的训练参数:
N 1 = K × K × C i n × C o u t N_1=K \times K \times C_{in} \times C_{out} N1=K×K×Cin×Cout
在这里插入图片描述

Depthwise Separable Convolutions

为了将卷积网络中的参数量减少同时又不明显的降低效果,引出了一种deep wise convolution。将卷积运算分为两个部分,首先使用一个单通道的kernel与输入feature map 的每一个通道分别进行卷积运算。获得的中间feature map 通道数与输入相同,然后再使用与中间feature map 相同通道数的kernel与其进行卷积,与上面的常规卷积层不同的是,这里的kernel的尺寸为1x1。

可以计算出这一层的训练参数:
N 2 = K × K × C i n + 1 × 1 × C i n × C o u t N_2=K \times K \times C_{in} +1\times1\times C_{in} \times C_{out} N2=K×K×Cin+1×1×Cin×Cout
做一个简单的例子进行对比:

K = 7 , C i n = 3 , C o u t = 8 K=7,C_{in}=3,C_{out}=8 K=7,Cin=3,Cout=8
N 1 = 7 × 7 × 3 × 8 = 1176 N 2 = 7 × 7 × 3 + 1 × 1 × 3 × 8 = 171 N_1=7 \times 7 \times 3 \times 8 = 1176 \\ N_2=7 \times 7 \times 3 +1\times1\times 3 \times 8 =171 N1=7×7×3×8=1176N2=7×7×3+1×1×3×8=171
经过这样的轻量化,参数会变为传统卷积参数量的 171 1176 = 0.145 \frac{171}{1176}=0.145 1176171=0.145.

过实验验证,轻量化后的结果精度降低一般约为1%,因此这个轻量化操作是非常有意义的。

在这里插入图片描述

代码示例

from torch import nn
from torchsummary import summary


class SeparableConv2d(nn.Module):
    def __init__(self,in_channels,out_channels
                ,kernel_size=3,stride=1
                ,padding=0,dilation=1):
        super(SeparableConv2d, self).__init__()
        # groups=in_channels  every filter match one feature map 
        self.deepwise_conv = nn.Conv2d(in_channels,in_channels
                            ,kernel_size=kernel_size
                            ,stride=stride
                            ,padding=padding
                            ,dilation=dilation
                            ,groups=in_channels 
                            ,bias=False)
        self.pointwise_conv = nn.Conv2d(in_channels,out_channels
                            ,kernel_size=1
                            ,bias=False)
    def forward(self,x):
        out = self.pointwise_conv(self.deepwise_conv(x))
        return out

if __name__ == '__main__':
    sep_conv = SeparableConv2d(3,8,kernel_size=7)
    summary(sep_conv,(3,10,10))
----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1              [-1, 3, 4, 4]             147
            Conv2d-2              [-1, 8, 4, 4]              24
================================================================
Total params: 171
Trainable params: 171
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.00
Params size (MB): 0.00
Estimated Total Size (MB): 0.00
----------------------------------------------------------------
Size (MB): 0.00
----------------------------------------------------------------
<think>好的,我需要帮助用户查找关于深度可分离卷积(depthwise separable convolution)的相关研究论文。首先,我得确认用户的需求,他们可能是在寻找该领域的经典论文或最新进展。根据提供的引用[^1],里面提到深度可分离卷积将标准卷积分解为深度卷积和逐点卷积,降低了计算复杂度,尤其是在TensorFlow中的实现支持空洞卷积,这可能是一个研究方向。 接下来,我应该回忆一下深度可分离卷积的基础知识。比如,MobileNet和Xception网络都广泛使用了这种结构,所以相关论文应该包括这些工作的原始文献。此外,用户提供的引用可能来自一篇应用深度可分离卷积的论文,但需要具体确认。 然后,我需要考虑如何组织回答。用户要求结构清晰,分步骤解决问题,所以可能需要分点列出查找途径、经典论文和最新研究。同时,要确保所有数学表达式正确使用$...$或$$...$$格式,比如在解释计算复杂度时可能需要公式。 还要注意生成相关问题,这部分需要围绕深度可分离卷积的应用、优化、比较等方面提问。例如,如何分析其计算效率,优化方法,或者在不同任务中的应用场景。 检查引用部分,用户提供了三个引用,其中引用详细描述了深度可分离卷积的结构,可能来自某篇论文,但引用[^2]和[^3]似乎不太相关,可能需要忽略或仅作为扩展资源提及。但根据用户的问题,重点应放在引用提到的内容,并结合其他经典文献。 最后,确保回答使用中文,语法正确,并正确引用提供的参考资料。如果有不确定的地方,比如引用的GitHub链接是否相关,可能需要避免直接引用,除非明确相关。</think>以下是与深度可分离卷积(Depthwise Separable Convolution)相关的研究论文及查找建议: --- ### 查找深度可分离卷积论文的途径 1. **经典论文** - **MobileNet系列**:Google团队提出的轻量级网络,核心是深度可分离卷积。重点阅读: *MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications* $$ \text{计算量对比} = \frac{D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot N \cdot D_F \cdot D_F}{D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F} $$ 公式展示了其计算量仅为标准卷积的$1/N + 1/D_K^2$倍。 - **Xception网络**:提出将深度可分离卷积用于极简Inception模块,论文: *Xception: Deep Learning with Depthwise Separable Convolutions* 2. **最新研究** - 结合**空洞卷积**的改进:如引用提到的“空洞可分离卷积”,可搜索关键词“Atrous Separable Convolution”。 - **NAS(神经网络架构搜索)**:许多自动化设计的轻量模型依赖此结构,例如*EfficientNet*系列论文。 3. **应用场景论文** - 在移动端视觉、实时目标检测(如YOLOv4-Lite)、医学图像分割等领域均有应用,可通过Google Scholar搜索: `"depthwise separable convolution" + [应用领域]` --- ### 推荐论文示例 1. **理论分析** - *Rethinking the Inception Architecture for Computer Vision*(探讨分离空间与通道相关性) 2. **优化方法** - *ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices*(结合通道混洗) 3. **硬件加速** - *Fast Depthwise Separable Convolutions for Mobile Devices*(针对嵌入式设备的优化实现) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值