剪枝实践:图像检索如何加速和省显存 ?
点击我爱计算机视觉标星,更快获取CVML新技术
本文转载自知乎,已获作者授权转载,请勿二次转载。
https://zhuanlan.zhihu.com/p/104447447
本文介绍我们最新的工作《Progressive Local Filter Pruning for Image Retrieval Acceleration》,采用剪枝方法解决深度网络图像检索的加速问题。
一、简介:
近年来,深度学习在图像检索领域取得了“垄断性”地位,而“深”层网络的应用,如Resnet, Densnet等,也在不断刷新图像检索领域的记录。然而,鲜有文章关注检索速度的优化。在实际应用中,图像检索速度是考核应用系统重要指标之一。
为提高图像检索网络的执行效率,模型压缩是一种可行的方案。现有模型压缩方法大多用于解决分类任务,其网络输出为离散的类别信息。与分类任务不同,图像检索网络的输出一般为连续的特征数据。
因此,图像检索网络对于压缩算法更加敏感。也就是说,网络微小改动,可能导致输出特征发生较大变化。为解决此问题,我们提出以下两点解决方案:
二、方法:
1. 尽量保持卷积层filter的原有分布
图1 不同剪枝方法对filter分布的影响
现有剪枝方法中,全局-中心(global center-based)法是一种被广泛应用的方法:针对某一卷积层,该类方法首先选定一个参考中心点,然后根据filter与该中心点的距离对filter进行排序,离中心越近的filter将会被优先删除(如图1(a)左边图中红色的圆点)。
然而,该剪枝方式容易造成剪枝后filter分布出现较大变化(如图1(b)的中间图)。
为解决这一问题,我们采用基于局部的方法:优先选择并删除局部关系最紧密的filter,即若某个filter与其邻接的filter足够相似,则其可被安全删除(如图1(a)右边图中红色的圆点)。由于该方法是对filter的局部修改,因此易于保持filter的整体分布不变(如图1(b)最右侧图)。
2. 尽量保持预训练模型的表征力(Representation ability)
我们希望尽量保持预训练模型表征力不变。然而,删除filter容易造成网络容量(Capacity)变小,进而影响网络输出特征。软剪枝(Soft pruning)类方法将待删除filter先置0,并在微调(finetune)过程中给予其一定机会恢复权重,能够在一定程度上缓解直接删除filter带来的网络容量损失的问题。但若删除filter的比例较大时,其也会严重影响网络表征力。为此,我们提出一种filter权重衰减策略,在训练过程中对待删除filter的权重缓慢减小,即权重乘以衰减因子г,直至其收敛为0或接近于0。
图2 剪枝方法流程
图2展示了我们方法的框架。以图中第二层网络为例,首先根据该层中filter的局部信息,筛选出冗余filter(如橘色的方框)并减小其权重值。在下一次训练(Epoch)中,所有的filter(包括冗余filter)又重新被finetune一次,这时如果有的冗余filter比较重要,则其权重会被重新恢复(如绿色方框)。重复执行此过程,直至冗余filter的权重均被置为0或者接近于0。这时,我们再从网络中删除这些冗余的filter得到压缩后的网络。
三、实验结果-局部信息重要性
我们在两个图像检索(基于VGG-16)数据集Oxford5K和Paris6K,和一个行人重识别(基于Resnet-50)Market-1501数据集上验证了所提出的方法。
表1显示了我们方法在行人重识别Market-1501数据集上的效果,其中k代表局部信息计算的范围,k越大则将在对每一个filter排序时考虑其更多邻接信息。
表1 不同方法行人重识别Market-1501数据集上的效果
从图中可以看出,我们的方法在不同剪枝比例上均优于其它方法,且剪枝比例越大,优势越大。当删除90%的filter时,我们的方法在mAP上至少超越其它方法8%。说明局部剪枝相对全局剪枝具有较大的优势。同时,我们发现,当剪枝比例较少时,大k容易获得好的效果,反之,当剪枝比例较大时,小k更有优势。这一现象有利于我们确定k的值。
同样,如下表,在图像检索应用上,我们方法同样能够在压缩率较高或者相当的情况下,取得要优于其它方法的结果。
四、实验结果-权重衰减的重要性
下图展示了我们的方法在给定不同权重衰减因子г的mAP值变化情况,其中,г越大权重衰减速度越慢,反之衰减越快。可以看出,当剪枝比例较小时,方法对于г并不敏感,反之,当剪枝比例较大时,较小г有利于获得好的结果。
同时,我们也对比了不同算法剪枝后网络(剪枝比例90%)与原始模型(未剪枝)输出特征的欧氏距离。从下表可以看出,我们的方法与原始模型输出特征最为接近。以上实验结果也验证了我们之前的假设,即当剪枝比例较大时,权重衰减策略有利于保持预训练模型表征力。
五、实验结果-特征图
下图我们的方法中(在剪枝90%情况下)Resnet-50第一个卷积层特征图(feature maps)(下标从0至63),其中红色边框图表示被剪枝的特征图。可以看出,这些被剪枝的特征图包括了行人的上衣(59)、帽子(57)、裤子(28)等的特征,这些图均可被其它特征图取代,如上衣(11,42),帽子(1,53),裤子(20,22)等。
文章链接:
https://arxiv.org/abs/2001.08878
目前作者在整理代码,后续会开源,欢迎大家持续关注。
图像视频检索交流群
关注最新最前沿的图像视频检索技术,扫码添加CV君拉你入群,(如已为CV君其他账号好友请直接私信)
(请务必注明:检索)
喜欢在QQ交流的童鞋,可以加52CV官方QQ群:805388940。
(不会时时在线,如果没能及时通过验证还请见谅)
长按关注我爱计算机视觉
剪枝实践:图像检索如何加速和省显存 ?相关推荐
- 【半精度】Pytorch模型加速和减少显存
如标题所示,这是PyTorch框架提供的一个方便好用的trick:开启半精度.直接可以加快运行速度.减少GPU占用,并且只有不明显的accuracy损失. 之前做硬件加速的时候,尝试过多种精度的权重和 ...
- GLM国产大模型训练加速:性能最高提升3倍,显存节省1/3,低成本上手
作者|BBuf.谢子鹏.冯文 2017 年,Google 提出了 Transformer 架构,随后 BERT .GPT.T5等预训练模型不断涌现,并在各项任务中都不断刷新 SOTA 纪录.去年,清华 ...
- 深度学习之GPU显存与利用率 浅析小结
相信很多人,包括我在内,都对GPU的显存抱有不小的怨念,CUDA out of memory之类的问题一直困扰着咱等,今天这篇文章就是来浅析一下,说不定会有所帮助 首先就一笔带过说一下GPU的重要性吧 ...
- 解决测试阶段显存增大问题
转自简书:解决 pytorch 在训练时由于设置了验证集导致 out of memory (同样可用于测试时减少显存占用) 问题描述 在跑pytorch的时候,在训练阶段监控到显存占用2.7G左右,但 ...
- 模型训练慢和显存不够怎么办?GPU加速混合精度训练
目录 混合精度训练 理论原理 三大深度学习框架的打开方式 Pytorch Tensorflow PaddlePaddle 混合精度训练 一切还要从2018年ICLR的一篇论文说起... <MIX ...
- 核心频率个加速频率_NVIDIA GTX 1650正式升级GDDR6显存:核心频率砍一刀
NVIDIA近日正式升级了RTX 20.GTX 16系列游戏本显卡,全部标配GDDR6显存,与此同时,桌面上唯一还在使用GDDR5显存的入门级图灵显卡GTX 1650也得到了升级,搭上了GDDR6的末 ...
- STM32CubeMX | 42 - 使用DMA2D加速显存数据传输
一.使用CPU搬运数据到显存 在上一篇文章中讲述了如何配置 LTDC 驱动 RGB 屏幕:STM32CubeMX | 41-使用LTDC驱动TFT-LCD屏幕(RGB屏). 本节中我们接着上一节的实验 ...
- 综述:PyTorch显存机制分析
作者 | Connolly@知乎(已授权) 来源 | https://zhuanlan.zhihu.com/p/424512257 编辑 | 极市平台 导读 作者最近两年在研究分布式并行,经常使用Py ...
- 3_深度学习中显卡的使用和显存的分配(20181213)
深度学习中显卡的使用和显存的分配(20181213) 1.查看机器上GPU的使用情况 2.tensorflow 中显卡使用和显存分配 1.显卡的使用,单显卡和多显卡调用 1.通过设置环境变量设置 禁用 ...
最新文章
- BYOD革命挑战企业IT安全
- 领悟Web设计模式(转)
- word图片自动换行不亮_Word自动换行版式不变形
- django安装--mac系统
- 对一致性Hash算法,Java代码实现的深入研究
- J-LINK序列号修改
- php动态渲染和静态渲染,php,vue,vue-ssr 做出来的页面有什么区别?
- (七)Vue 项目规范
- js触发asp.net的Button的Onclick事件
- delphi 异步 调用 带参数_如何在 Spring 异步调用中传递上下文
- android状态栏背景色和图标颜色更改总结
- 使用游标正确提取SQL Server数据并将其放置在Reporting Services矩阵中
- 为什么都建议学java而不是python-为什么入门大数据选择Python而不是Java?
- STM32CubeMX 安装提示需要java环境(1.8.0_45)
- 永久删除计算机文件怎么操作步骤,如何彻底删除电脑中的文件 永久删除文件方法...
- java available_关于InputStream类的available()方法
- python 在线客服_如何利用Python实现简单全双工在线客服系统!这个有点东西!...
- python如何创建一个新的文件夹
- 三种前端常用布局及其优缺点
- 已知抛物线与直线相交两点和抛物线顶点,求抛物线和直线所围成的面积?
热门文章
- php安装了openssl扩展,php如何安装openssl扩展?
- oracle数据库dblink创建语句_3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...
- JScharts快速入门
- Delphi 7下最小化到系统托盘
- 电脑qq收藏在哪里打开_外贸询盘怎么来?零成本用Linkedin批量开发客户!外贸人收藏...
- linux7给用户授权,CentOS7 添加新用户并授权
- wordpress php执行短代码_PHP 8.0发布日期和PHP中JIT的状态
- 网易云api如何调用_分析网易云音乐API的经历
- 老年机按键串号_为什么老人机依然很多人在用?
- android动态壁纸提取,[图]大神已提取出一加8T的动态壁纸:Android 8.0+设备均可使用...