Network Slimming 算法笔记

本文介绍了一种名为Network Slimming的模型压缩方法,通过利用卷积网络中Batch Normalization层的γ参数来评估特征图的重要性。通过引入γ参数的L1范数约束,使网络在训练过程中自动学习到稀疏的γ分布,从而实现有效剪枝。剪枝后的网络需要进行微调以保持性能。实验主要在CIFAR-10和CIFAR-100数据集上针对VGG网络进行,结果显示了显著的加速和压缩效果。然而,该方法在ResNet和DenseNet等网络以及ImageNet数据集上的效果未明确验证。

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

论文:Learning Efficient Convolutional Networks Through Network Slimming
链接:https://arxiv.org/abs/1708.06519
原代码(Torch实现):https://github.com/liuzhuang13/slimming
第三方代码(PyTorch实现):https://github.com/foolwood/pytorch-slimming

这篇是ICCV2017的文章,通过剪枝来做模型压缩和加速。我们知道在剪枝系列算法中,主要的不同点在于如何评价卷积核或者feature map的重要性,一般都是通过额外增加一些对原网络层的计算得到卷积核或feature map的重要性信息,而这篇文章的剪枝比较有特色,因为其通过网络原有的Batch Normalization层的γ参数进行feature map重要性评估(由BN层γ参数的含义可知feature map的每个channel对应一个γ值,所以这个γ值相当于该channel的重要性),然后将重要性低于某个阈值的feature map剪掉,剪掉feature map相当于生成这些feature map的对应卷积核也被剪掉,这就完成了剪枝的过程,如Figure1所示。factors那一列就是BN层的γ参数,其中比较小的值对应的feature map就会被剪掉(橙色)。
这里写图片描述

当然这里有两个注意的点:1、如果不对BN层的γ参数做一些限制,也就是正常情况下其值是很分

### Network Slimming 技术原理 Network Slimming 是一种用于高效卷积网络的剪枝方法,该方法通过对批归一化(Batch Normalization, BN)层中的缩放因子施加 L1 正则化来实现通道级别的剪枝[^2]。具体来说,在训练阶段引入额外的正则项使得某些通道对应的缩放因子逐渐趋近于零,从而可以识别并移除那些对模型贡献较小的通道。 #### 施加 L1 正则化的机制 为了使部分通道变得不重要以便后续去除,会在BN层内的γ参数上增加L1范数惩罚项: \[ \min_{W,\gamma} \sum_i^{N}\left \| y_i-f\left(x_i; W,\beta ,\frac{\gamma }{\sqrt{\sigma ^{2}+\epsilon }}\right ) \right \|^2_2 + \lambda \|\gamma\|_1 \] 其中 \(f\) 表示前向传播函数;\(y_i,x_i\) 分别代表第i个样本的真实标签和输入特征图;而最后一项即为针对所有BN层中γ系数求解绝对值之和的结果乘以超参λ作为权重衰减力度控制因素[^3]。 当某个特定位置上的 γ 值接近或等于 0,则意味着相应位置所关联的那个滤波器在整个数据集范围内几乎不起作用,因此可以在不影响整体表现的情况下安全删除这样的冗余单元。 #### 对应关系与修剪过程 每个缩放因子仅对应到具体的卷积通道或是全连接层里的单个神经元之上,所以一旦确定哪些γ数值很小就可以直接定位要裁掉的具体组件。对于被标记出来的低效路径实施物理意义上的切断操作之后,整个架构会变得更加精炼简洁,不仅减少了存储空间占用量同时也加快了推理速度。 ```python import torch.nn as nn class SlimmableConv2d(nn.Conv2d): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.bn = nn.BatchNorm2d(self.out_channels) def apply_l1_regularization(model, lambda_reg=0.0001): l1_loss = sum([torch.sum(torch.abs(param)) for name,param in model.named_parameters() if 'bn.weight' in name]) return lambda_reg * l1_loss ``` ### 应用实例 采用此策略构建更轻量化版本的深度学习框架能够有效降低硬件成本以及能耗开销,尤其适合移动设备端的应用场景。实验表明经过适当调整后的剪枝版ResNet-56能够在ImageNet分类任务上保持原有水平的同时减少约一半以上的浮点运算次数[FLOPs][^1]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值