前言
随着目标检测的蓬勃发展,近年来提出了几种深度卷积神经网络模型,例如R-CNN、SSD和YOLO等。然而,随着网络变得越来越复杂,这些模型的规模不断增加,这使得在现实生活中将这些模型部署到嵌入式设备上变得越来越困难。因此,开发一种高效快速的物体检测模型以在不影响目标检测质量的情况下减小参数大小至关重要。
PART/ 1
前言
深度学习模型在目标检测的性能上取得了重大突破。然而,在传统模型中,例如Faster R-CNN和YOLO,由于计算资源有限和功率预算紧张,这些网络的规模使其难以部署在嵌入式移动设备上。
深度学习领域的加速发展极大地促进了目标检测的发展,其在人脸检测、自动驾驶、机器人视觉和视频监控等方面的广泛应用。随着目标检测的蓬勃发展,近年来提出了几种深度卷积神经网络模型,例如R-CNN、SSD和YOLO等。然而,随着网络变得越来越复杂,这些模型的规模不断增加,这使得在现实生活中将这些模型部署到嵌入式设备上变得越来越困难。因此,开发一种高效快速的物体检测模型以在不影响目标检测质量的情况下减小参数大小至关重要。
PART/ 2
摘要总结
今天我们分享的技术,是通过减少网络信道的传统信道修剪方法难以有效地修剪具有深度卷积层和某些有效模块(如流行的反向残差块)的有效CNN模型。由于存在一些归一化层,通过减少网络深度的先验深度修剪方法不适合于修剪一些有效的模型。此外,通过直接移除激活层来微调子网会破坏原始模型权重,阻碍修剪后的模型实现高性能。
为了解决这些问题,研究者提出了一种新的有效模型深度修剪方法。新方法为子网提出了一种新的块修剪策略和渐进训练方法。此外,将修剪方法扩展到视觉Transformer模型。
最终实验结果表明,在各种修剪配置中,新方法始终优于现有的深度修剪方法。将新方法应用于ConvNeXtV1,获得了三个修剪后的ConvNeXtV1模型,这些模型超过了大多数具有可比推理性能的SOTA有效模型。新方法还在视觉Transformer模型上实现了最先进的修剪性能。
PART/ 3
动机
Network Pruning
神经网络在计算机视觉领域已被广泛应用,表现出非凡的能力。然而,复杂的网络架构对高效的实时部署提出了挑战,并需要大量的计算资源和能源成本。在端侧和边缘侧部署网络具体的挑战:
- 模型体积大;
- FLOPs(float-point operations,浮点操作);
- 耗能;
- 处理器架构和处理速度;
- 内存占用;
- 推理时延;
这些挑战可以通过网络压缩等优化来克服。网络剪枝(Network Pruning)是网络压缩主要技术之一,是一种减小内存大小和带宽的重要技术。剪枝就是通过去除网络中冗余的通道(channels),滤波器(filters),神经元节点( neurons), 网络层(layers)以得到一个更轻量级的网络,同时不影响性能。
剪枝的不同分类:
- 根据网络元素类型,可以分为神经元剪枝和连接剪枝;
- 根据剪枝前后网络结构是否是改变,可以分为结构化剪枝和非结构化剪枝;
- 根据在推理阶段是否有剪枝,可以分为静态剪枝和动态剪枝;
结构化剪枝可以包括神经元剪枝和连接剪枝,但是是改变了剪枝前的网络结构。非结构化剪枝并没有改变网络结构,而是将分支权重改为0,这样权重为0的分支对整个网络没有影响,从而相当于减掉了该分支。如果观察到在某些迭代权重为0的分支对本轮迭代作用很大(影响性能),可以动态恢复非结构化剪枝造成的为零权重,提供网络性能。神经元剪枝会改变网络结构,属于结构化剪枝。连接剪枝,在权重设置为0并没有改变网络结构时属于非结构化剪枝,在连接删除改变网络结构时属于结构化剪枝。
Structural Reparameterization
在block内不存在非线性激活函数的情况下,结构重新参数化技术有助于将多个卷积层合并为单个卷积层。这种合并有效地减少了神经网络在推理过程中的内存需求,从而加速了模型推理。RepVGG区分了训练和测试结构,使普通网络能够超越ResNet的性能。此外,DBB将多分支结构合并为一个卷积,显著地超过了传统多分支单元的速度。
Neural Architecture Search (NAS)
既然网络不是设计出来的,我们要搜,那么怎么搜网络结构呢?理解这个问题,你就能了解NAS的最基本的思想。想象你是一个考试命题组的出题人,你要出高考题,那怎么出题呢?首先这是高考,你肯定只能出高中生学过的内容,所以需要框定一个出题的范围,这便是搜索空间。确定了出题范围,我们还需要知道到底怎么出题,到底是出选择题好呢,还是填空题好呢?这是出题的策略,对应到这个问题上,就是搜索策略。现在题也出完了,但是我们还需要知道这个考卷的题目出的好不好,一个好的高考试卷应该有一定的区分度!所以我们需要一个评判的标准去了解这个题目出的好不好,这个标准和可以是专家评议,或者学生调研等等,也就是相当于我们需要给我们一个评价的指标。
围绕搜索空间、搜索策略以及评价搜索的指标三个维度展开搜索最优的网络,先确定在哪些模块(卷积,池化等等)里面搜索组合一个网络,然后用什么样的方式组合我们的网络,最后得出的网络我们如何评价它是否好用。这便是NAS算法自动搜索的基本思想。
PART/ 4
新框架详解
深度修剪方法旨在通过提出新的具有重新参数化技术的块修剪策略来减少模型深度,而不是直接省略块。如下图所示,块修剪策略在块合并中将复杂而缓慢的块转换为简单而快速的块。对于块,将激活层替换为标识层,将LayerNorm(LN)或GroupNorm(GN)层替换为BatchNorm(BN)层,并在块末尾插入带有BatchNorm层的激活层,以创建重新参数化的条件。然后,重新参数化技术可以合并BatchNorm层、相邻的卷积或全连接层,并跳过连接,如下图所示:
Depth Pruner on CNN
将新方法应用于CNN模型可以参考上图所示的管道。应该先找到基本块,并参考上图中的修剪块来设计相应的修剪块。对于块中的激活层,将其替换为标识层。对于块中不是BatchNorm层的规范化层,将其替换为BatchNorm图层,否则无需执行任何操作。
最后,将在块的末尾插入一个带有BatchNorm层的激活层。如果像ResNet34块这样的位置已经存在激活层,则只需要在块末尾的激活层之后插入BatchNorm层。修剪块完成后,回顾超网训练、子网搜索、子网训练和子网合并过程。将获得修剪后的CNN模型。对于普通的CNN模型,可以定义可以包括两个或多个顺序卷积层的块。
Depth Pruner on Vision Transformer
研究者还将提出的深度修剪器应用于Vision Transformer模型。Vision Transformer块通常具有多头自注意(MHSA)模块和包括两个全连接层的MLP模块。特别是,利用DeiT作为展示修剪流程的案例。如上图所示,为了构建Supernet,在原始模型的LN和活化(GELU)层旁边添加BN旁路,并在剩余添加操作后插入GELU和BN块。经过子网搜索和子网训练,获得了子网,其原始LN和修剪块的GELU操作都被BN取代。添加残余物后,连接GELU&BN块。然后合并子网以获得快速修剪的模型,如上图所示。
PART/ 5
实验及可视化
下表与一些常见的有效模型进行了比较,因为ConvNeXtV1没有压缩方法。在AMD平台上使用表中较慢的网络EfficientFormerV2-S2作为基准,测试所有网络的速度。作者将模型分为不同 Level ,深度剪枝方法在不同 Level 上实现了可比速度下的更高精度:
在今天分享中,研究者为有效的CNN和Vision Transformer模型提供了一个统一的深度修剪器,以在深度维度上修剪模型。深度修剪器包括四个步骤,即超网训练、子网搜索、子网训练和子网合并。提出了一种新的块修剪方法和渐进训练策略,以更好地利用基线模型权重。在子网合并过程中,使用重新参数化技术使子网变得更浅、更快。将新方法应用于几个CNN模型和transformer模型。SOTA修剪性能证明了新方法的优越性。未来,研究者们将在更多的Transformer模型和任务上探索新方法。
标签:剪枝,Transformer,子网,模型,修剪,网络,40%,CNN From: https://blog.51cto.com/u_16163452/12107187