《Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks》论文笔记

论文《Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks》

论文链接:Soft Filter Pruning for Accelerating Deep Convolutional Neural Networks

代码链接:Soft Filter Pruning(SFP)

这篇是IJCAI 2018的关于模型压缩加速的文章,思想简洁有效,主要是和Hard Filter Pruning(HFP)做对比。


背景理解:


首先了解一下比较常见的剪枝方式Hard Filter Pruning(HFP),剪枝的话一般是按照某些指标对卷积核进行排序,然后剪掉不符合指标的卷积核,然后做fine tune,HFP指的是硬裁剪,也就是说fine tune的时候网络中不包含被剪掉的卷积核。

 

文章灵感:


Soft Filter Pruning(SFP),也就是软裁剪,其和HFP最大的不同就是剪掉的卷积核仍然会参与网络的训练,并进行迭代更新参数,SFP在每个epoch结束后会进行剪枝,剪枝后再训练一个epoch,然后继续剪枝,循环迭代。如下图为SFP和HFP的对比图。

è¿éåå¾çæè¿°

基于此,我们也就比较好的理解文章提出的两个创新点了:

1. Larger model capacity.  相比HFP直接裁剪掉网络的filter,SFP中被裁剪掉的filter仍然参与下次迭代参数更新,这样就保留了原来网络的表达能力,且更好收敛

2. Less dependence on the pretrained model. 采用这种边剪枝边重训的方法,可以从网络的训练开始就进行剪枝,不需要先训练好一个高精度网络模型再剪枝,节省了很多时间,也不完全依赖预训练模型,可以说是一种聪明的剪枝方法。

算法整体流程:


è¿éåå¾çæè¿°

SFP算法示意图如Algorithm 1所示。

总体而言包含两个循环结构,第一个循环是epoch,其实就是常规的训练过程,每次训完一个epoch就要开始执行剪枝操作。第二个循环是遍历网络的每一层,计算每一层的每个卷积核的L2-norm(L2范数),剪枝概率Pi和第i层的卷积核数量Ni+1相乘表示一个网络层中被剪枝的卷积核数量,将卷积核的L2范数最低的Ni+1*Pi个卷积核剪枝,剪枝是通过将该卷积核的值置为0来实现,从而完成第i层卷积核的剪枝操作。这样随着epoch的迭代,最终得到的模型会包含一些值为0的卷积核,这些卷积核就可以直接去掉从而得到最终的模型。

 
Lp-norm(Lp范数)的式子如公式2所示,实际中用的是L2-norm,也就是p等于2。 

è¿éåå¾çæè¿°

igure2是Soft Filter Pruning(SFP)的示意图。(a)表示剪枝之前的某个网络层的卷积核情况和对应的L2范数,L2范数比较低的用紫色表示。(b)表示对L2范数比较低的一些卷积核执行剪枝操作,也就是将卷积核的值置为0。(c)表示基于剪枝后的网络执行下一个epoch的迭代更新,和Hard Filter Pruning不同的是这里依然会对前面置零的卷积核执行更新操作,也就是参与此次迭代更新的卷积核数量和上一个epoch一模一样,只不过两次迭代前数值为0的卷积核不完全相同而已。 
è¿éåå¾çæè¿°

至于计算量的减少计算方式可以直接看论文了

可改进点:


整体来说,这篇文章偏简单基础,很多入门剪枝的童鞋可以看看,然后这其中有很多可以改进的点,接下来会进行描述。

 

  • 这篇文章采用的是一整个网络的每个层都用相同的剪枝概率,但其实不同层用不同剪枝概率的做法在剪枝中还是比较常见的,而且每一层卷积分布不同,所以这块是可以做进一步探索的。此外,剪枝率的选择也是一个可探索的点。
  • 对于按照某些指标对卷积核进行排序剪枝,这些指标也可以进行探索。
  • 迭代次数的不同会影响网络的性能,这一块也是值得去探索的。

参考链接:

https://blog.csdn.net/m_buddy/article/details/85346684

https://blog.csdn.net/u014380165/article/details/81107032

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码修剪卷积神经网络用于资源高效推理,是一种优化模型的方法,旨在减小模型的尺寸和计算量,从而实现在资源受限的设备上进行高效推理。 修剪是指通过删除模型中的一些参数或神经元来减小模型的复杂性。在卷积神经网络中,修剪通常包括删除一些卷积核或通道,以及减少连接权重的数量。这可以通过一些算法和技术来实现,例如剪枝算法、稀疏矩阵和低秩近似等。 修剪卷积神经网络可以带来多个好处。首先,它可以大大减小模型的尺寸,从而降低了存储模型所需的内存空间。其次,修剪可以减少模型的计算量,使得模型可以更快地进行推理。这对移动设备和嵌入式系统等资源受限的设备非常重要。此外,修剪还可以提高模型的泛化能力,减少过拟合的风险。 对于修剪卷积神经网络的代码实现,一般分为两个步骤。首先,需要训练一个初始的卷积神经网络模型。然后,通过一些修剪算法选择要修剪的参数或神经元,并将其从模型中移除。修剪的目标可以是按照权重大小或梯度大小进行选择。 在实际编程中,代码可以使用一些深度学习框架(如PyTorch或TensorFlow)来实现。这些框架通常提供了一些修剪工具和函数,以便进行参数和神经元的修剪。开发者需要根据具体的应用场景和需求来选择合适的修剪策略,并根据框架的API来实现修剪过程。 总之,代码修剪卷积神经网络是一种资源高效推理的方法,通过减小模型的尺寸和计算量,提高模型的效率和性能。这对于在资源受限的设备上进行深度学习推理任务非常有意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值