0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅论深层卷积神经网络的剪枝优化

电子工程师 来源:电子技术应用第12期 作者:马治楠 韩云杰 彭 2021-04-28 10:40 次阅读

摘要: 随着近几年来深度学习的兴起,其在目标检测、图像分类、语音识别、自然语言处理等机器学习领域都取得了重大的突破,其中以卷积神经网络在深度学习中的运用较多。自VGGNet出现以来,深度学习逐渐向深层的网络发展,网络越来越深,这不仅增大了对硬件平台存储、运行内存的需求,还大大增加了计算量,对硬件平台资源的要求越来越高。

因此将深度学习应用于嵌入式平台尤为困难。对此,通过对模型进行剪枝的方法将训练好的网络模型压缩处理,在基本保证准确率的情况下去除不重要的参数,缩减模型,减小网络的计算复杂度,将深度学习应用于嵌入式平台。

0 引言

深度学习起源于人工神经网络,后来LECUN Y提出了卷积神经网络LeNet-5[1],用于手写数字识别,并取得了较好的成绩,但当时并没有引起人们足够的注意。随后BP算法被指出梯度消失的问题,当网络反向传播时,误差梯度传递到前面的网络层基本接近于0,导致无法进行有效的学习。

2006年HINTON G E提出多隐层的网络可以通过逐层预训练来克服深层神经网络在训练上的困难[2],随后深度学习迎来了高速发展期。一些新型的网络结构不断被提出(如AlexNet、VGGNet、GoogleNet、ResNet等),网络结构不断被优化,性能不断提升,用于图像识别可以达到很好的效果。然而这些网络大都具有更多的网络层,对计算机处理图像的能力要求很高,需要更多的计算资源,一般使用较好的GPU来提高训练速度,不利于在硬件资源(内存、处理器、存储)较低的设备运行,具有局限性。

深度学习发展到目前阶段,其研究大体可以分为两个方向:(1)设计复杂的网络结构,提高网络的性能;(2)对网络模型进行压缩,减少计算复杂度。在本文将讨论第二种情况,去除模型中冗余的参数,减少计算量,提高程序运行速度。

目前很多网络都具有更复杂的架构设计,这就造成网络模型中存在很多的参数冗余,增加了计算复杂度,造成不必要的计算资源浪费。模型压缩大体有以下几个研究方向:(1)设计更为精细的网络结构,让网络的性能更为简洁高效,如MobileNet网络[3];(2)对模型进行裁剪,越是结构复杂的网络越存在大量参数冗余,因此可以寻找一种有效的评判方法,对训练好的模型进行裁剪;

(3)为了保持数据的精度,一般常见的网络模型的权重,通常将其保存为32 bit长度的浮点类型,这就大大增加了数据的存储和计算复杂度。因此,可以将数据进行量化,或者对数据二值化,通过数据的量化或二值化从而大大降低数据的存储。除此之外,还可以对卷积核进行核的稀疏化,将卷积核的一部分诱导为0,从而减少计算量[4]。

本文着重讨论第二种方法,对模型的剪枝,通过对无用权重参数的裁剪,减少计算量。

1 CNN卷积神经网络

卷积神经网络是一种前馈式网络,网络结构由卷积层、池化层、全连接层组成[5]。卷积层的作用是从输入层提取特征图,给定训练集:

6368160324185828021761918.gif

在卷积层后面一般会加一个池化层,池化又称为降采样,池化层可以用来降低输入矩阵的纬度,而保存显著的特征,池化分为最大池化和平均池化,最大池化即给出相邻矩阵区域的最大值。池化层具有减小网络规模和参数冗余的作用。

2 卷积神经网络剪枝

6368160326517124681388836.gif

6368160328756254815269472.gif

2.1 模型压缩的方法

本文用以下方法修剪模型:(1)首先使用迁移学习的方法对网络训练,然后对网络进行微调,使网络收敛并达到最优,保存模型;(2)对保存的模型进行修剪,并再次训练,对修剪后的模型参数通过训练进行微调,如此反复进行,直到检测不到可供裁剪的卷积核;(3)对上一步裁剪后的模型再次训练,直到训练的次数达到设定的标准为止。具体的流程如图2所示。

6368160330249990105358372.gif

上述的处理流程比较简单,重点是如何评判网络模型中神经元的重要性。本文用价值函数C(W)作为评判重要性的工具。对于数据集D,经训练后得到网络模型Model,其中的权重参数为:

6368160333748393145490252.gif

6368160334423386497570206.gif

2.2 参数评估

网络参数的评估在模型压缩中有着非常重要的作用。一般采用下面的这种方法,通过比较权重参数的l2范数的大小,删除l2范数较小的卷积核[8]。除此之外,还可以通过激活验证的方法对参数进行评判,将数据集通过网络前向传播,对于某个网络节点,若有大量通过激活函数后的数值为0或者小于一定的阈值,则将其舍去。

2.2.1 最小化l2范数

6368160338676043048249929.gif

3 实验结果

3.1 训练和剪枝结果

本设计在Ubuntu16.04系统,搭载1080Ti显卡的高性能服务器上进行实验,使用Pytorch深度学习框架进行训练和测试。本设计使用VGG16网络,对16类常见的路面障碍物图片进行训练,其中数据集中的训练集有24 000张图片,训练集12 000张图片。在VGG16网络中有16个卷积网络层,共4 224个卷积核。采用迁移学习的方法对其进行训练,设置epoch为30,训练的结果如图3所示。

6368160341543245505133610.gif

图3纵轴表示训练的准确率,横轴表示迭代次数,最后的训练准确率为97.97%。

将上面的训练参数保存为模型,对其进行剪枝,分5次对其修剪,首先会根据l2范数最小值筛选出要修剪的网络层中的卷积核,每次去除512个卷积核,修剪后模型中剩余的卷积核数量如图4所示。

6368160344351030337201847.gif

图4中纵轴表示模型中保留的卷积核的数量,从最初的4 224降到1 664,裁剪率达到60.6%。5次迭代修剪后的准确率如图5所示。

6368160346057263738960776.gif

对修剪后的网络重新训练得到最终的修剪模型,训练过程如图6所示。

6368160347963495239166655.gif

最后达到98.7%的准确率。剪枝前模型大小为512 MB,剪枝后模型可以缩小到162 MB,将模型的内存占用降低了68.35%。

3.2 嵌入式平台下的移植测试

在嵌入式平台树莓派3代B型上移植Pytorch框架,树莓派3b拥有1.2 GHz的四核BCM2837 64位ARM A53处理器,1 GB运行内存,板载BCM43143WiFi。由于树莓派运行内存有限,故增加2 GB的swap虚拟内存,用于编译Pytorch框架源码。将在GPU服务器上训练好的网络模型移植到嵌入式平台,对其进行测试。

对123张测试图片进行检测分类,载入裁剪前的原始模型,用时109.47 s,准确率为95.08%。载入剪枝后的模型,同样对123张图片进行测试,用时41.85 s,准确率达到96.72%。结果如图7所示,可以看到对模型裁剪后时间上减少了61%,速度有了很大提升。

6368160351333774869500050.gif

4 结论

目前深度学习是一个热门的研究方向,在图像检测、分类、语音识别等方面取得了前所未有的成功,但这些依赖于高性能高配置的计算机,也出现了各种深度学习框架以及网络模型,但是可以预见深度学习即将迈入一个发展平缓期,如果不能有一个宽阔的应用领域,深度学习的发展将很快被搁浅。诚然,将其应用于嵌入式平台将会是一个非常好的发展方向。相信未来深度学习在嵌入式领域会有一个更大的突破,部署于移动平台将不再是一个难题。

作者:马治楠 韩云杰 彭琳钰 周进凡 林付春 刘宇红

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    12

    文章

    3843

    浏览量

    84619
  • 函数
    +关注

    关注

    3

    文章

    3859

    浏览量

    61290
  • 卷积神经网络

    关注

    4

    文章

    283

    浏览量

    11704
收藏 人收藏

    评论

    相关推荐

    卷积神经网络的优点

    卷积神经网络的优点  卷积神经网络(Convolutional Neural Network,CNN)是一种基于深度学习的神经网络模型,在图
    的头像 发表于 12-07 15:37 2879次阅读

    卷积神经网络主要包括哪些 卷积神经网络组成部分

    卷积神经网络主要包括哪些 卷积神经网络组成部分 卷积神经网络(CNN)是一类广泛应用于计算机视觉
    的头像 发表于 08-21 17:15 1070次阅读

    卷积神经网络模型搭建

    卷积神经网络模型搭建 卷积神经网络模型是一种深度学习算法。它已经成为了计算机视觉和自然语言处理等各种领域的主流算法,具有很大的应用前景。本篇文章将详细介绍
    的头像 发表于 08-21 17:11 595次阅读

    卷积神经网络算法是机器算法吗

    卷积神经网络算法是机器算法吗  卷积神经网络算法是机器算法的一种,它通常被用于图像、语音、文本等数据的处理和分类。随着深度学习的兴起,卷积
    的头像 发表于 08-21 16:49 493次阅读

    卷积神经网络的介绍 什么是卷积神经网络算法

    卷积神经网络的介绍 什么是卷积神经网络算法 卷积神经网络涉及的关键技术
    的头像 发表于 08-21 16:49 1397次阅读

    卷积神经网络层级结构 卷积神经网络卷积层讲解

    卷积神经网络层级结构 卷积神经网络卷积层讲解 卷积神经网络
    的头像 发表于 08-21 16:49 4187次阅读

    卷积神经网络的基本原理 卷积神经网络发展 卷积神经网络三大特点

    卷积神经网络的基本原理 卷积神经网络发展历程 卷积神经网络三大特点 
    的头像 发表于 08-21 16:49 1401次阅读

    卷积神经网络三大特点

    卷积神经网络三大特点  卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,其具有三大特点:局部感知、参数共享和下采样。 一、局部感知
    的头像 发表于 08-21 16:49 3415次阅读

    卷积神经网络的工作原理 卷积神经网络通俗解释

    卷积神经网络的工作原理 卷积神经网络通俗解释  卷积神经网络(Convolutional Neu
    的头像 发表于 08-21 16:49 2633次阅读

    卷积神经网络模型原理 卷积神经网络模型结构

    卷积神经网络模型原理 卷积神经网络模型结构  卷积神经网络是一种深度学习
    的头像 发表于 08-21 16:41 645次阅读

    卷积神经网络模型有哪些?卷积神经网络包括哪几层内容?

    卷积神经网络模型有哪些?卷积神经网络包括哪几层内容? 卷积神经网络(Convolutional
    的头像 发表于 08-21 16:41 1480次阅读

    卷积神经网络概述 卷积神经网络的特点 cnn卷积神经网络的优点

    卷积神经网络概述 卷积神经网络的特点 cnn卷积神经网络的优点 
    的头像 发表于 08-21 16:41 1878次阅读

    卷积神经网络的应用 卷积神经网络通常用来处理什么

    卷积神经网络的应用 卷积神经网络通常用来处理什么 卷积神经网络(Convolutional Ne
    的头像 发表于 08-21 16:41 3832次阅读

    卷积神经网络python代码

    卷积操作,将不同层次的特征进行提取,从而通过反向传播算法不断优化网络权重,最终实现分类和预测等任务。 在本文中,我们将介绍如何使用Python实现卷积
    的头像 发表于 08-21 16:41 662次阅读

    卷积神经网络原理:卷积神经网络模型和卷积神经网络算法

    卷积神经网络原理:卷积神经网络模型和卷积神经网络算法 卷积
    的头像 发表于 08-17 16:30 882次阅读