论文阅读: Xception

Xception网络采用串行式group代替并行式group,引入separable convolution模块,显著减少了参数量和计算成本,同时在ImageNet数据集上取得了优于Inception v3的性能。

Introduction

GoogleNet论文中研究 group size 而搞出了Inceptionv1(即多group的CNN分支)。此后,Inception不断迭代,group size被越玩越复杂,一直发展到了v4版本。

这时,Inception的鼻祖Google团队又提出了 Extreme Inception ,即赫赫有名的 Xception 。只不过,这次不再是之前的 并行式group 了,取而代之的是 串行式group

具体来说,就是:

在channel上进行逐片分治,然后group之。

而这一 串行式group 的module,被起名 separable convolution

separable convolution是通过如下图所示(图片来源:Xception: Deep Learning with Depthwise Separable Convolutions)的演化而诞生的:
这里写图片描述

从此,group操作进入了“串行”时代。

传统的卷积操作如下图:
这里写图片描述

而separable convolution的操作如下图:
这里写图片描述

完整的一个SeparableConv组合如下图(图片来源):
这里写图片描述

整个网络结构并没有太多的创新点,可以视为将ResNeXt的Inception module替换为SeparableConv module:
这里写图片描述

换言之:

Xception是ResNeXt的一个变种。

Innovation

并行式group --> 串行式group

在SeparableConv module看来,channel之间的信息融合,交给Conv1×1就够了:
这里写图片描述

channel数个Conv3×3则只需对单channel负责,这样就可以更专心地学到本channel的location信息:
这里写图片描述

两部分各司其职,共同组成了SeparableConv module。

depth-wise conv 的计算

参数量 3 × 3 × C i n + 1 × 1 × C i n × C o u t 3 × 3 × C i n × C o u t \frac{3×3×C_{in} + 1×1×C_{in}×C_{out}}{3×3×C_{in}×C_{out}} 3×3×Cin×Cout3×3×Cin+1×1×Cin×Cout
FLOPS [ 3 × 3 × C i n × F × F + C i n × C o u t × F × F ] × 2 [ 3 × 3 × C i n × C o u t × F × F ] × 2 = 1 C o u t + 1 3 × 3 \frac{[3×3×C_{in}×F×F + C_{in}×C_{out}×F×F]×2}{[3×3×C_{in}×C_{out}×F×F]×2} = \frac{1}{C_{out}} + \frac{1}{3×3} [3×3×Cin×Cout×F×F]×2[3×3×Cin×F×F+Cin×Cout×F×F]×2=Cout1+3×31

Result

经过实验,Xception在ImageNet上稍优于Inceptionv3:
这里写图片描述

参数数量和Inceptionv3基本一致,速度也差不多:
这里写图片描述

在ImageNet上的收敛情况也好于Inceptionv3:
这里写图片描述

Thinking

  • 对于Xception的串行式group为什么会优于Inceptionv3的并行式group,并且在ImageNet上取得了更好地分类结果,我还是觉得百思不得其解。如果先出来Xception,再出来Inceptionv3,且Inceptionv3的分类效果更好,那么又可以吹出一个貌似“有理有据”的故事。

  • 另外,Xception取代ResNet作为Detection算法的basemodel,从而提高算法速度和减少模型参数,是目前被普遍接受的一种做法。

  • Xception-145、Xception-39是Xception中最大和最小的两种version。其中,“39” 表示浮点数运算次数(FLOP)的量级为 39M ,“145” 则对应 145M 。

  • Xception的速度几乎比ResNet 一个数量级


[1] Xception: Deep Learning with Depthwise Separable Convolutions
[2] Google Xception Network

### 解决 DeepSeek-R1 模型中的张量数量不匹配错误 当遇到 `wrong number of tensors; expected 292, got 291` 的错误时,这通常意味着模型加载过程中预期的参数数目与实际提供的参数数目不符。这种差异可能是由于版本控制不当、配置文件设置有误或是数据预处理阶段出现了问题。 #### 验证模型权重文件完整性 确保使用的模型权重文件未损坏且来自官方发布的可信源。任何缺失或多余的层都会影响最终统计到的可训练参数总数[^1]。 #### 对比模型结构定义 仔细对比当前代码实现下的网络架构同原始论文描述是否存在出入。特别是新增加或者移除某些特定类型的卷积核、全连接层等操作可能会改变所需初始化向量的数量。 #### 更新依赖库至最新稳定版 有时第三方框架本身的Bug也会引发此类异常情况的发生。因此建议检查并升级PyTorch等相关软件包到最近一次发布版本,以获得更好的兼容性和修复已知缺陷的支持。 #### 调试信息输出辅助定位 通过增加日志记录功能来追踪每一层创建前后具体的Tensor对象计数变化趋势,有助于快速锁定具体哪一部分引入了额外变量或者是遗漏了一个必要的组件实例化过程。 ```python import torch from deepseek import model as dm def debug_tensor_count(model): named_params = list(model.named_parameters()) print(f'Total Tensors: {len(named_params)}') model = dm.DeepSeekR1() debug_tensor_count(model) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值