图像太大,显存放不下?来看看跑FCN网络的高效方法

2019 年 11 月 18 日 计算机视觉life

点击上方“计算机视觉life”,选择“星标”

快速获得最新干货

作者Liad Pollak Zuckerman

编译:ronghuaiyang(AI公园)


导读

一种使用全卷积网络的trick,用来跑大尺寸的输入图像。


全卷积(deep neural)网络通常用于计算机视觉任务,如语义分割、超分辨率等。它们的最佳属性之一是,它们适用于任何大小的输入,例如不同大小的图像。然而,在大规模输入(如高分辨率图像或视频)上运行这些网络可能会消耗大量GPU内存。在这篇文章中,我将提供一个简单的方法来缓解这个问题。该算法将GPU内存使用量降低到3-30%。

什么是全卷积网络?

全卷积网络(从现在开始叫做FCN)是一个仅由卷积层组成的网络。为了简单起见,在这篇文章中,我们将重点讨论图像,但同样的方法也适用于视频或其他类型的数据。

一个全卷积网络做分割

对于图像处理中的许多任务,要求输入和输出图像具有相同的大小是很自然的。这可以通过使用FCNs加上适当的填充来实现。由于这是一个标准的程序,从现在开始,我们将假定它成立。

在这种架构下,输出图像中的每个像素都是对输入图像中相应的patch进行计算的结果。

patch的大小称为网络的感受野(RF)。

这是一个关键点。我们将很快看到算法如何使用这个属性。

一层使用3x3卷积的FCN,每个像素的输出对应输入图像的3x3的patch

2层的FCN:每层都是3x3卷积,每个输出像素对应5x5大小的输入图像

上面我们可以看到一个(顶部)和两个(底部)3x3 conv层FCNs的图。对于一个层(顶部),右边的蓝色输出像素是对左边的蓝色输入块的计算结果。当有两个层(底部)时,我们在输入和输出之间有一个特征映射。feature map(中间)中的每个绿色像素都是计算超过3x3的绿色输入patch(左边)的结果,就像在单层情况下一样。类似地,每个蓝色输出像素(右)是计算一个蓝色3x3 feature map patch(中)的结果,该patch起源于一个5x5蓝色输入patch(左)。

那么,问题在哪儿呢?

如前所述,理论上,我们可以将网络应用于任何输入大小。然而,实际上,计算通过网络的前向通道需要在内存中保存大量的特征图,这会耗尽GPU资源。

我在研究视频和3d图像时遇到了这个限制。网络无法在我们的NVIDIA v100 GPU上运行,这导致我开发了这个解决方案。

高效的使用FCN处理大分辨率图像

传统的cnn以全连接的层结束。因此,每个输出像素都是对整个输入进行计算的结果。FCNs不是这样的。正如我们所看到的,只有接收域大小的输入patch影响单个输出像素。因此,要计算单个输出像素,不需要将整个feature map保存在内存中!

换句话说:

我们可以一次计算输出值的一小部分,同时只从输入中传递必要的像素。这大大降低了GPU的内存使用。

让我们来看看下面的例子:

我们的输入是一个28x28的图像,如下图所示。由于内存限制,我们可以通过大小为12x12的网络patch。简单的方法是从原始输入输入12x12个patch(如下图所示),然后使用12x12个输出patch构建28x28个输出图像。

每个输出像素是通过网络的不同patch的结果。例如,橙色像素是传递橙色12x12patch的结果。

不幸的是,这种方法不会产生与同时传递整个28x28输入相同的结果。原因是边界效应。

处理边界效应

为了理解这个问题,让我们看看下图中标记的红色像素。周围的红色方块代表感受野,在本例中大小为5x5,并跨越蓝色和橙色斑块。为了正确地计算红色输出像素,我们需要同时计算蓝色和橙色像素。因此,如果我们分别运行蓝色和橙色的patch,就像在naive方法中那样,我们将没有必要的像素来精确地计算它的值。显然,我们需要另一种方式。

红色 :一个边界上的像素和它周围的感受野

那么我们如何才能让它正确呢?我们可以使用重叠的patch,这样每个5x5的patch都包含在通过网络的12x12的patch中。重叠量应比感受野(RF -1)小1个像素。在我们的例子中,感受野RF=5,所以我们需要4个像素的重叠。下面的动画演示了如何在给定的限制下通过网络传递不同的图像补丁。它显示每个12x12输入patch(边框)在输出(填充)中贡献的像素量更少。例如,蓝色正方形的轮廓要比蓝色像素填充的区域大。

重叠的patch,例如,橙色像素是传递橙色12x12patch的结果。

回到我们标记的红色像素。现在,如下图所示,由于重叠,它可以被正确计算。它周围的5x5的patch完全包含在橙色的12x12的patch中(边框)。

实际上,每个像素都有一个12x12的patch,其中包含了其感受野大小的周围像素。通过这种方式,我们可以确保和运行整个28x28图像的结果是相同的。

红色 :一个边界上的像素和它周围的感受野

结果

下表给出了一些关于GPU内存使用和运行时间的实验结果。正如承诺的那样,内存消耗将显著减少!

注意:虽然每个图像的运行时间较慢,但使用此方法我们可以并行传递多个图像,因此节省时间。以第三行为例,使用该算法我们可以同时运行13幅图像,与直接运行6幅图像所花费的时间相同。

通过使用patch by patch算法,与标准方法相比,GPU的内存使用减少了67%-97%。

实验在NVIDIA Tesla K80 GPU上进行。


END


英文原文:https://towardsdatascience.com/efficient-method-for-running-fully-convolutional-networks-fcns-3174dc6a692b


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、检测分割识别、三维视觉、医学影像、GAN、自动驾驶、计算摄影、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

推荐阅读

最全综述 | 医学图像处理

最全综述 | 图像分割算法

最全综述 | 图像目标检测

目标检测技术二十年综述

综述 | CVPR2019目标检测方法进展
参加 CVPR 2019 技术见闻总结

现在投身于计算机视觉是否明智?

如何激怒一个自动驾驶(无人驾驶、智能汽车)爱好者?

原来CNN是这样提取图像特征的。

AI资源对接需求汇总:第1期
AI资源对接需求汇总:第2期
AI资源对接需求汇总:第3期

计算机视觉方向简介 | 人体骨骼关键点检测综述

计算机视觉方向简介 | 人脸识别中的活体检测算法综述

计算机视觉方向简介 | 目标检测最新进展总结与展望

计算机视觉方向简介 | 人脸表情识别

计算机视觉方向简介 | 人脸颜值打分

计算机视觉方向简介 | 深度学习自动构图

计算机视觉方向简介 | 基于RGB-D的3D目标检测

计算机视觉方向简介 | 人体姿态估计


最新AI干货,我在看  

登录查看更多
0

相关内容

[ICML-Google]先宽后窄:对深度薄网络的有效训练
专知会员服务
33+阅读 · 2020年7月5日
专知会员服务
31+阅读 · 2020年4月24日
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
28+阅读 · 2020年3月5日
【ICLR-2020】网络反卷积,NETWORK DECONVOLUTION
专知会员服务
37+阅读 · 2020年2月21日
专知会员服务
41+阅读 · 2020年2月20日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
手把手解释实现频谱图卷积
AI科技评论
9+阅读 · 2019年9月9日
DRN - 扩张残留网络(图像分类和语义分割)
AI科技评论
18+阅读 · 2019年8月19日
卷积神经网络四种卷积类型
炼数成金订阅号
18+阅读 · 2019年4月16日
深入探究深度卷积语义分割网络和 Deeplab_V3
AI研习社
6+阅读 · 2019年4月13日
DeepLabv1 & DeepLabv2 - 空洞卷积(语义分割)
AI研习社
12+阅读 · 2019年3月25日
特征金字塔网络FPN的直觉与架构
论智
11+阅读 · 2018年8月6日
深度 | 图像语义分割的工作原理和CNN架构变迁
机器之心
9+阅读 · 2018年6月13日
全连接网络到卷积神经网络逐步推导
炼数成金订阅号
7+阅读 · 2018年4月25日
如何利用深度学习识别千万张图片?
InfoQ
4+阅读 · 2017年12月30日
模型汇总23 - 卷积神经网络中不同类型的卷积方式介绍
深度学习与NLP
5+阅读 · 2017年10月12日
A survey on deep hashing for image retrieval
Arxiv
14+阅读 · 2020年6月10日
Image Segmentation Using Deep Learning: A Survey
Arxiv
43+阅读 · 2020年1月15日
Arxiv
11+阅读 · 2018年5月13日
Arxiv
5+阅读 · 2018年3月6日
VIP会员
相关VIP内容
相关资讯
手把手解释实现频谱图卷积
AI科技评论
9+阅读 · 2019年9月9日
DRN - 扩张残留网络(图像分类和语义分割)
AI科技评论
18+阅读 · 2019年8月19日
卷积神经网络四种卷积类型
炼数成金订阅号
18+阅读 · 2019年4月16日
深入探究深度卷积语义分割网络和 Deeplab_V3
AI研习社
6+阅读 · 2019年4月13日
DeepLabv1 & DeepLabv2 - 空洞卷积(语义分割)
AI研习社
12+阅读 · 2019年3月25日
特征金字塔网络FPN的直觉与架构
论智
11+阅读 · 2018年8月6日
深度 | 图像语义分割的工作原理和CNN架构变迁
机器之心
9+阅读 · 2018年6月13日
全连接网络到卷积神经网络逐步推导
炼数成金订阅号
7+阅读 · 2018年4月25日
如何利用深度学习识别千万张图片?
InfoQ
4+阅读 · 2017年12月30日
模型汇总23 - 卷积神经网络中不同类型的卷积方式介绍
深度学习与NLP
5+阅读 · 2017年10月12日
Top
微信扫码咨询专知VIP会员