news 2026/10/3 13:25:20

卷积变体全解析:分组卷积、深度可分离、空洞、转置卷积原理与实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
卷积变体全解析:分组卷积、深度可分离、空洞、转置卷积原理与实战

1. 为什么卷积的变体越来越多:先厘清标准卷积的边界

刚接触卷积神经网络的时候,我们往往会把“卷积”当成一个黑盒——输入一张图,经过几层卷积,特征图越来越小、通道越来越多,最后接全连接层出分类结果。但等你真正上手做项目,尤其是做语义分割、目标检测、轻量化模型部署这些实际任务时,标准卷积的短板就暴露出来了:要么计算量扛不住,要么感受野不够用,要么上采样怎么做都不对劲。这时候你才会意识到,所谓“最全卷积总结”不是要把网络结构背一遍,而是得先把卷积这件事从原理上拆明白。

标准卷积的本质,是让每个卷积核在输入特征图的所有通道上做加权求和。拿一个 3×3 卷积举例,假设输入是 H×W×C_in,输出通道数为 C_out,那么这一层需要的参数量是 3×3×C_in×C_out,计算量是 3×3×C_in×C_out×H×W。这个公式看起来简单,但藏着一个关键信息:计算量和输入分辨率、通道数、卷积核尺寸是乘性增长的。在移动端设备上跑一个 224×224 的分类模型,如果全用标准 3×3 卷积,中间层的计算量动辄就是几千万甚至上亿次乘加运算,算力稍弱的芯片根本吃不消。

感受野的问题则更隐蔽。标准卷积堆叠确实能增大感受野,但代价是层数变深。假设你只有 5 层 3×3 卷积,感受野也就 11×11,对于需要全局上下文信息的任务(比如语义分割中判断一个像素属于哪个物体),这种局部感知能力远远不够。空洞卷积的出现,本质上就是要在不增加参数量的情况下,把感受野撑大。

空间信息的处理方式也是标准卷积的短板。标准卷积虽然能提取局部特征,但如果你要做图像到图像的映射(比如分割、超分、生成),需要把特征图恢复到原始分辨率。反卷积(转置卷积)就是在这个需求下被广泛使用的。它不是一个“逆向卷积”,而是一种带有可学习参数的上采样方式,理解这一点,很多误用就能避开。

还有一类需求是结构上的。标准卷积的每个卷积核要同时处理所有输入通道,这意味着通道间的冗余信息也会被建模,浪费算力。分组卷积、深度可分离卷积本质上就是在“通道维度”上做文章:要么把通道分成几组,各自卷积,降低计算量;要么把空间卷积和通道混合拆成两步,进一步压缩参数。MobileNet、ShuffleNet 这些轻量级网络,核心就是围绕这两类卷积做设计。

所以你会发现,“卷积家族”不是一堆花哨名词的堆砌,每一类变体都在解决某个具体痛点。本篇文章我就按照“从标准卷积出发,逐个展开变体原理、计算量对比、适用场景、复现细节”的思路来写,尽量把数学推导和工程经验糅合在一起,适合三类读者:刚入门想系统梳理卷积知识的学生;做模型轻量化部署的工程师;以及做分割、检测等密集预测任务、需要灵活组合卷积类型的算法研究员。

2. 分组卷积:通道拆开算,计算量和准确率的博弈

2.1 参数量节省的具体计算

分组卷积的核心操作一句话就能说清:把输入特征图的通道均匀分成 G 组,每组独立做标准卷积,最后把各组输出拼接起来。这里的组数 G 是一个超参数,G=1 时退化为标准卷积,G=C_in 时就是深度卷积(depthwise convolution)。

为了让你直观感受到参数量差距,我直接列一组数字。假设输入通道 C_in=256,输出通道 C_out=256,卷积核 3×3:

  • 标准卷积参数:3×3×256×256 = 589,824
  • 分组卷积(G=4)参数:3×3×(256/4)×(256/4)×4 = 147,456
  • 分组卷积(G=8)参数:3×3×(256/8)×(256/8)×8 = 73,728

参数量的变化规律是标准卷积的 1/G。这个推导很简单:每组输入通道是 C_in/G,每组输出通道是 C_out/G,组内的卷积核参数是 3×3×(C_in/G)×(C_out/G),再乘以 G 组,抵消后就是原来的 1/G。计算量同理,也是 1/G。

2.2 为什么分组卷积曾经不被看好,现在又火了

分组卷积最早出名是在 AlexNet 里,当时是因为两块 GPU 显存不够,才把通道拆成两组分别计算。后来 ResNeXt 把它重新带火,变成了“cardinality”(基数)的概念——不是单纯省算力,而是把分组当成一种增强模型表达能力的手段。

我个人的理解是,分组卷积实际上对通道之间的相关性做了一个先验假设:同一组内的通道相关性较强,跨组的通道相关性较弱。这有点像人脑处理视觉信号时分区域并行,各处理各的通路。ResNeXt 的实验表明,在相同参数量下,增加分组数(即基数)比增加网络深度或宽度更能提升准确率,原因是它让网络学到的特征更加多样化。

工程上的坑在于,分组卷积在 GPU 上的实际加速效果并不总是和理论计算量成正比。主要原因有两点:一是分组后每组独立计算,GPU 的并行度利用率可能下降,尤其是分组数很大、每组通道很少时;二是内存访问模式变得更复杂,如果实现不当,访存开销会把算力优势吃掉。在 PyTorch 里,Conv2d 的 groups 参数就是为此设计的,但底层是否真正加速,取决于硬件和库的实现。我自己在 2080Ti 上测过,G=2 到 G=4 时加速明显,G=32 以上反而可能比标准卷积更慢。

2.3 分组卷积在轻量化网络中的隐藏用法

除了省参数,分组卷积还有一个容易被忽视的用法:通道重排(channel shuffle)。ShuffleNet 的核心逻辑是,如果多个分组卷积堆叠,每组只在组内交流信息,跨组信息永远无法流动,这会损害表达能力。于是它加了一个“打乱通道”的操作,让下一层分组时每组都能包含上一层各组的信息。

这个操作的代价几乎为零,只是对张量做 reshape 和 transpose,但收益却很可观。我复现 ShuffleNetV2 时测过,加了 channel shuffle 之后,同等算力下 ImageNet 准确率能涨 1.5 到 2 个点。值得注意的是,ShuffleNetV2 论文里有个反直觉的结论:FLOPs 一样不代表速度一样,内存访问成本(MAC)和并行度对实际速度的影响非常大。当时我做端侧推理时也踩过这个坑,光看理论计算量选网络,上板之后发现延迟完全不是那么回事,后来改成直接用实际推理耗时作为衡量指标。

3. 深度可分离卷积:MobileNet 的速度密码,但别忽略它的副作用

3.1 拆解两步走:深度卷积加逐点卷积

深度可分离卷积由两部分组成:

  1. 深度卷积:每个输入通道单独用一个卷积核做空间卷积,不跨通道。这一步负责提取空间特征。
  2. 逐点卷积:用 1×1 卷积在所有通道间做线性组合,这一步负责通道间的信息融合。

这两步加起来的效果,理论上可以逼近标准卷积。为什么说“逼近”?因为标准卷积是一个联合空间加通道的线性映射,而深度可分离卷积把它强行拆成了两步,相当于把原来一个高维矩阵分解成了两个低维矩阵的乘积——信息表达上会有轻微损失,但参数量和计算量大幅下降。

还是用具体数字说话。输入 C_in=256,输出 C_out=256,卷积核 3×3,特征图 56×56:

  • 标准卷积计算量:3×3×256×256×56×56 ≈ 1.85×10^9
  • 深度卷积计算量:3×3×256×56×56 ≈ 7.24×10^6
  • 逐点卷积计算量:1×1×256×256×56×56 ≈ 2.05×10^8
  • 深度可分离卷积总计算量:约 2.12×10^8

对比下来,计算量大约是标准卷积的 1/8 到 1/9。这个比例怎么来的?标准卷积的计算量是 3×3×C_in×C_out×H×W,深度可分离卷积是 (3×3×C_in + C_in×C_out)×H×W,当 C_out 远大于 9 时,后者约等于前者的 1/(C_out×某些系数),具体取决于 C_in 和 C_out 的关系。

3.2 实际训练中那些容易踩的坑

按理说计算量降了一个数量级,模型应该又好又快。但我在实际项目中发现,直接用深度可分离卷积替换标准卷积,往往会出现准确率下降的问题,尤其是任务复杂度较高时。原因有三个:

第一,深度卷积的每个卷积核只处理一个通道,感受野和跨通道信息同时受限。比如在检测小物体时,单独一个通道的空间信息可能不够,导致特征质量下降。MobileNetV2 之所以加入“倒残差”(inverted residual)结构,用 1×1 先把通道扩宽,再做深度卷积,最后用 1×1 压缩回去,本质上就是为了缓解这个问题——在更高维的空间里做深度卷积,信息不容易丢。

第二,深度卷积的参数量极少,容易过拟合或欠拟合。如果数据集很小,深度卷积层实际上学不到足够丰富的空间模式。我当时在一个工业质检项目里,只有几千张样本,用 MobileNetV2 做特征提取,效果反而不如 ResNet18,调了很久才发现是这个原因。

第三,量化部署时精度掉得比标准卷积更明显。因为深度卷积每个通道独立计算,对量化误差更敏感,尤其是通道间数值范围差异大时,统一用同一个 scale 去量化,误差会被放大。我后来在 TensorRT 里做 INT8 量化,深度可分离卷积的部分必须做 per-channel 量化,否则精度掉得没法用。

3.3 什么时候该用,什么时候别用

适用场景:

  • 移动端或边缘设备上的分类、检测模型,算力受限。
  • 需要极低延迟的实时推理,比如视频流处理。
  • 作为骨干网络与注意力机制结合,MobileNetV3 和 EfficientNet 都验证了这条路可行。

不适合的场景:

  • 需要极高精度的离线任务,算力不是瓶颈,标准卷积或大模型更合适。
  • 小数据集训练,深度可分离卷积更容易过拟合或欠拟合。
  • 对逐像素输出质量要求很高的任务(如精细分割、超分),单纯替换会损失边缘细节。

4. 空洞卷积:撑大感受野的代价是“网格伪影”

4.1 dilation rate 到底改了什么

空洞卷积(Dilated Convolution)的关键参数是 dilation rate,记为 d。普通卷积核的相邻元素间距是 1,空洞卷积会让间距变成 d,相当于在卷积核元素之间插入 d-1 个空洞。一个 3×3 卷积核,当 d=2 时,实际覆盖的范围是 5×5,但参数量不变,仍然是 9 个权重。

感受野的计算公式是:新的感受野 = (卷积核尺寸 - 1) × dilation + 1。所以 3×3 卷积,d=2 时的感受野是 (3-1)×2+1 = 5,d=3 时是 7。如果连续堆叠多层空洞卷积,感受野的增长是指数级的:每层的等效卷积核尺寸可以叠加。

空洞卷积最经典的应用是 DeepLab 系列的语义分割。分割任务要求输出分辨率尽量接近输入,所以不能像分类那样反复池化把分辨率降下来。空洞卷积可以在保持分辨率的同时扩大感受野,从而让每个像素都获得足够大的上下文信息。

4.2 网格伪影:空洞卷积最阴险的坑

空洞卷积有个著名的副作用叫“网格伪影”(gridding artifact)。当多个空洞卷积堆叠时,如果 dilation rate 相同或成倍数关系,卷积核的有效采样点会集中在某些规律的位置上,导致局部信息丢失,输出特征图出现棋盘格状的伪影。具体表现是,分割结果的边缘区域出现周期性的误分类,或者生成的图像有规则纹理。

我在一个遥感图像的建筑物分割项目里就遇到过这个问题:模型在验证集上整体精度还行,但输出图里建筑物边缘总有一圈细密的网格状噪点。后来排查发现,连续三层 dilation rate=2 的空洞卷积叠加,采样点分布完全错开了中间区域。解决办法参考了 HDC(Hybrid Dilated Convolution)的思路:在一组空洞卷积中,让 dilation rate 呈现锯齿状变化,比如 [1,2,5,9] 而不是 [2,2,2,2],确保采样点覆盖完整。

另一个更工程化的补救是“多分支空洞卷积”,也就是 ASPP 结构——并行使用多个不同 dilation rate 的空洞卷积,再把结果拼接起来。DeepLabV3 里的 ASPP 用的是 [1, 6, 12, 18] 四个分支,效果比单纯堆叠同 dilation 的层好很多,因为不同率的特征互补,网格伪影被平均掉了。

4.3 空洞卷积与感受野的“假大空”

很多人以为空洞卷积的感受野大了,就能获取更多全局信息。实测中不完全是这样。空洞卷积的感受野确实覆盖了更大的区域,但采样点是稀疏的,中间大量的像素根本没被看到。相比同样感受野的密集卷积(比如 5×5),空洞卷积学到的是“抽样”特征,信息量其实更少。

这意味着什么?空洞卷积适合做上下文信息的补充,但不适合做像素级细粒度特征的提取。如果你把所有下采样都换成空洞卷积来保持分辨率,模型会学到一种“高感受野低细节”的表示,边缘和小目标往往处理不好。我的建议是:空洞卷积要和标准卷积混合使用。浅层用标准卷积提取细节,深层用空洞卷积扩大上下文,这样能兼顾局部和全局。

5. 转置卷积:不是逆卷积,是可学习上采样

5.1 从数学上弄懂转置卷积的维度变化

转置卷积(Transposed Convolution)也叫反卷积(Deconvolution),但这个中文名其实有误导性。它并不是标准卷积的逆运算——你不可能从一个输出恢复出唯一确定的输入,因为标准卷积本身不是可逆的。转置卷积做的事情,是在已知卷积核的前提下,把一个低分辨率的特征图映射到高分辨率,映射规则保持“与卷积的转置关系”,因此叫转置卷积。

理解它的最好方式是从矩阵角度看。标准卷积可以表示为一个稀疏矩阵乘法 y = Cx,其中 C 是由卷积核构造的矩阵。转置卷积则是 y' = C^T x',把输入特征图映射到更大的空间。注意这里的 C^T 并不是 C 的逆,它只是把信息“扩散”到了更多位置。

具体来说,假设输入尺寸是 2×2,用 3×3 转置卷积,stride=2,输出尺寸是 4×4。输出的每个位置是输入各像素与卷积核权重组合的结果。PyTorch 里你可以用nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=2)实现,输出尺寸公式是:

  • 输出尺寸 = (输入尺寸 - 1) × stride - 2×padding + kernel_size + output_padding

这个公式经常让人头大,尤其是 output_padding 这个参数。它的作用只是调整输出尺寸,并不参与卷积运算。比如输入 4×4,stride=2,卷积核 3×3,按公式计算输出是 (4-1)×2 + 3 = 9,如果你想得到 8×8 的输出,就得设置 output_padding=1。

5.2 棋盘格伪影:转置卷积的经典问题

转置卷积有个绕不开的问题:棋盘格伪影(checkerboard artifacts),在 GAN 生成的图像里非常常见。原因是 stride 大于 1 时,卷积核的采样在输出空间上不均匀——某些位置被多个输入像素影响,某些位置只被一个输入像素影响,导致输出的权重分布不均匀,形成明暗相间的棋盘纹理。

当时我做图像超分实验时,用了一堆转置卷积做上采样,结果生成的图像总有一层隐约的网格感。后来把上采样方式换成了“先插值再卷积”的组合,棋盘格伪影立刻消失了。这个操作很值得推荐:先用双线性插值或最近邻插值把分辨率放大到目标尺寸,再接一个标准 3×3 卷积。虽然从理论上说参数量差不多,但生成图像的质量高很多,训练也更稳定。

5.3 转置卷积在分割任务中的正确使用姿势

语义分割的上采样(从编码器输出的低分辨率特征图恢复到原图尺寸)有两种主流方案:

  1. 直接转置卷积:简单粗暴,但容易出棋盘格伪影。
  2. 双线性插值加卷积:先插值到目标尺寸,再做卷积融合。

我个人的经验是,如果分割目标是平滑的大物体(如道路、天空),转置卷积没问题;如果目标是精细结构(如血管、电线),建议用插值加卷积的组合,或者用 Pixelshuffle(像素重排)做上采样。Pixelshuffle 的原理是把通道维度的信息“重排”到空间维度,比如把 [C×r², H, W] 变成 [C, H×r, W×r],它不是转置卷积,但能达到类似的上采样效果,而且没有棋盘格伪影。

6. 几类卷积的对比表格:参数、计算量、感受野速查

这里给一张我平时做方案选型会参考的速查表。行是卷积类型,列是参数量倍数(相对于标准卷积)、计算量倍数(相对于标准卷积,假设输出通道与输入相同)、感受野特点、主要适用场景。

卷积类型参数量倍数计算量倍数感受野特点主要适用场景
标准卷积11局部密集采样,感受野与卷积核大小一致通用特征提取,几乎适用所有任务
分组卷积(G组)1/G1/G通道分组内局部采样,感受野同标准卷积降低计算量,ResNeXt骨干,通道稀疏交互
深度可分离卷积约1/9约1/8深度卷积空间采样,逐点卷积通道融合轻量化部署、移动端分类检测
空洞卷积(dilation=d)11等效感受野线性放大,采样稀疏语义分割、需要大上下文的任务
转置卷积11(但输出更大)上采样映射,感受野与卷积核相关图像生成、超分辨、分割解码器
自适应图卷积变体较多变体较多结构自适应,非规则感受野图数据、点云、关系建模任务

注意,这张表的参数量和计算量倍数是在“输入输出通道相等、同卷积核尺寸”的理想条件下推导的,实际项目中还要考虑具体硬件、内存布局、是否融合激活函数等因素,不能只看理论值。

7. 自适应图卷积和三维卷积:卷积变体在非图像数据上的扩展

7.1 为什么要在图上定义卷积

传统的卷积操作依赖规则网格——图像的像素均匀排列,空间位置关系固定。但现实中有大量数据不是这种结构,比如社交网络、分子结构、点云、知识图谱。它们的节点没有固定顺序,邻居关系也各不相同,标准卷积的滑动窗口根本无法直接应用。为了实现“类似卷积”的邻域聚合操作,研究人员设计了图卷积。自适应图卷积(Adaptive Graph Convolution)进一步允许网络自己学习节点之间的连接权重,而不依赖手工定义的邻接矩阵,因此对不同的图结构有更强的泛化能力。

7.2 从图像卷积到图卷积的映射逻辑

图像卷积做的事可以概括为两步:确定邻居,然后对邻居特征做加权求和。图卷积也是这两步,只是“邻居”的确定方式变了——每个节点的邻居就是与之相连的节点,而这个连接关系可以来自邻接矩阵,也可以来自注意力机制(这正是自适应图卷积的精髓)。

常见的实现有 GCN(谱域图卷积)和 GAT(图注意力网络)。GCN 使用固定的邻接矩阵做归一化传播,GAT 则使用学习到的注意力权重动态聚合邻居。自适应主要体现在注意力权重或者图上,比如可以引入可学习的边权重矩阵,让网络根据节点特征自动调整连接强度。这种机制在处理点云(如 PointNet++ 的改进版)或人体骨架动作识别时特别有效,因为每个节点的邻居数量是不固定的。

7.3 三维卷积:从图像到视频和体数据

三维卷积则是把二维卷积核扩展为三维立方体,输入从 [C, H, W] 变成 [C, D, H, W],其中 D 可以是视频帧的时间维度,也可以是 CT 影像的切片深度维度。3D 卷积神经网络经常用在这个场景:视频动作识别、医学影像分割、气象数据预测等。

这里的核心代价是计算量暴涨。一个 3×3×3 的 3D 卷积核,参数量是普通 3×3 的 3 倍,计算量更是随分辨率维度的增加而指数级上升。在 64×64×64 的体数据上跑一个简单的 3D 分割模型,显存占用经常把 24G 的卡跑满。常用的应对策略包括:用 2D+1D 分离卷积(比如先做空间 2D 卷积再做时间 1D 卷积)、减少通道数、使用混合精度训练。

8. 门控卷积:给特征加上“开关”的进阶玩法

8.1 门控卷积的原理

门控卷积(Gated Convolution)最早在图像修复任务里被提出,核心思路是:让网络自己决定每个位置、每个通道的信息该保留多少。它的公式是:

output = sigmoid(W_g · x) ⊙ (W_f · x)

其中 W_g 和 W_f 是两个不同的卷积层,sigmoid 的输出作为“门控信号”,逐元素乘到 W_f 提取的特征上。简单来说,就是一份特征经过两条分支:一条分支提取内容特征,另一条分支生成 0 到 1 之间的掩码,决定内容特征中哪些部分需要保留,哪些部分需要抑制。

这跟你熟悉的注意力机制有很多相似之处。SE 模块是对通道做全局注意力,CBAM 是对通道加空间做注意力,门控卷积则是在特征图的每个空间位置上做动态选择。它的优势在于,网络可以根据输入内容自适应地调整信息流——比如图像修复时,破损区域的信息应该被抑制,周围有效区域的信息应该被放大,门控卷积天然适合做这件事。

8.2 门控卷积的典型使用场景

  • 图像修复与 Inpainting:门控可以自动区分破损区域和有效区域,让网络把特征提取集中在有效区域上。
  • 语言模型与语音合成:WaveNet 就用了类似门控的 Gated Activation Unit,在时序数据上控制信息的遗忘与保留。
  • 视频预测与生成:门控控制时间维度的信息流动,避免误差累积。

在复现门控卷积时要注意一点:sigmoid 分支和内容分支的卷积核感受野应该一致(通常都用 3×3 或 5×5),否则门控信号和内容特征在空间上对不齐,训练效果会很差。我踩过这个坑,当时门控分支用了 1×1 卷积,内容分支用了 3×3,结果模型输出总是有奇怪的边缘——就是因为门控信号的空间分辨率虽然一样,但感受到的局部范围不同,语义对不上。

9. 实战复盘:在语义分割任务里如何组合这些卷积

理论讲再多,不如直接走一遍选型过程。这里我分享一个我在工业质检项目中的实际操作流程,需求是:分割传送带上的零件表面缺陷(裂纹、划痕、污渍),硬件是一块老旧的嵌入式 GPU,内存有限,要求单帧推理时间不超过 20ms。

第一步:选骨干网络。因为推理时间限制很紧,直接排除 ResNet、VGG 这类重网络,选择 MobileNetV2 作为编码器,它的深度可分离卷积能保证低延迟。

第二步:处理分辨率问题。检测微小划痕需要较高分辨率,不能像分类那样用大 stride 把特征图降到 7×7,所以我用了空洞卷积替代部分下采样。具体做法是:把 MobileNetV2 的最后多个 block 的 stride 从 2 改为 1,同时把 block 里的深度卷积改为空洞卷积(dilation=2),这样输出特征图保持在原图的 1/8 而不是 1/32,感受野又没有被缩小。

第三步:解码器设计。我先尝试了双线性插值加卷积的组合,效果不错但边缘细节还不够锐利。后来融合了转置卷积做一层精细上采样,虽然棋盘格伪影的风险存在,但在这种缺陷尺寸较小的场景下,转置卷积带来的细节增强收益更大。这里的关键是只在上采样的最后一层用转置卷积,前面的上采样都用插值,把伪影风险压到最低。

第四步:引入门控卷积做掩码增强。缺陷区域的边界往往模糊,我加了一个门控分支,让网络自动学习哪些区域是“真正的缺陷边缘”,哪些是背景纹理噪声。调整之后,边缘 F1 分数提升了 1.8 个百分点,这个收益在当时是很有说服力的。

整条链路下来,单帧推理时间稳定在 17ms 左右,满足需求。

10. 几条从实践中获得的选型经验

最后再分享几条我自己的选型经验,不一定适用于所有场景,但至少能帮你少走弯路。

第一,不要为了用某些变体而强行用。如果你的任务在普通卷积下已经跑得很好,算力也不紧张,就没必要换成深度可分离卷积,省下的那点参数量可能带来精度损失和部署复杂度。

第二,感受野不是越大越好。空洞卷积虽然能扩大感受野,但采样稀疏,过度使用会导致特征质量下降。合理的做法是“阶梯式”设置 dilation rate,比如 [1, 2, 5],确保感受野覆盖平滑。

第三,上采样的优先级顺序,我个人是:插值加卷积优于转置卷积,Pixelshuffle 优于插值加卷积(在生成任务中)。转置卷积不是不能用,而是要控制使用位置,尽量不放在最后的输出层。

第四,任何卷积变体的效果,都要在目标硬件上实测验证。理论 FLOPs 和实际延迟的差距在我做嵌入式部署时几乎每天都能感受到,同样的网络在 GPU、NPU、CPU 上的表现差异巨大,最终选型必须以实测为准。

第五,新模型里的卷积组合(比如 MobileNetV3 的 NAS 搜索结构、EfficientNet 的复合缩放)本质上都是在卷积变体的搜索空间里寻优,理解每一种变体的优缺点,比背某个模型结构更重要。你只有知道每组件的实际作用,才能在遇到问题时真正调试得动,而不是只会换网络。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 13:23:57

Android WLAN STA/AP并发实现:从驱动到框架的完整定制指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 13:23:46

Cesium接入天地图实现业务标记:从Entity到Primitive的性能优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 13:18:10

GLIBCXX_3.4.32 not found 解决方案:C++ 运行库版本兼容实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/3 13:17:42

合作博弈与Shapley值:综合能源系统优化调度及利益分配的MATLAB实现

简介:面向综合能源系统与电力市场方向的毕业设计,这里提供一套基于合作博弈的综合能源系统利益分配优化调度MATLAB源程序。代码覆盖P2G电转气、碳捕集、燃气轮机、热储能等设备建模,并实现三方主体合作联盟构建,利用Shapley值法对…

作者头像 李华
网站建设 2026/10/3 13:17:33

el-cascader懒加载动态加载:触发机制、踩坑排查与封装实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华