一种针对深度学习超分辨率技术的gpu加速方法

文档序号:10513081阅读:756来源:国知局
一种针对深度学习超分辨率技术的gpu加速方法
【专利摘要】本发明公开一种针对深度学习超分辨率技术的GPU加速方法,所述方法将基于深度学习、卷积神经网络的超分辨率技术的所有步骤都并行化,并在GPU运行;所述并行化是对基于深度学习、卷积神经网络的超分辨率技术的卷积进行并行任务划分,将卷积操作划分为数百万个互不相关、能以任意顺序并行执行的微任务,从而使GPU超强并行计算能力得到发挥。进一步的,利用GPU储存器的特性,将卷积核数据和输入图像数据缓存到共享存储器和寄存器,从而大幅优化卷积的计算速度;融合卷积与非线性层;针对不同卷积大小选取最佳优化方法。本发明将一个高质量的超分辨率方法加速到满足视频处理的速度要求,并且不会带来任何图像质量损失。
【专利说明】
一种针对深度学习超分辨率技术的GPU加速方法
技术领域
[0001] 本发明涉及一种图像超分辨率领域和GPU加速的方法,具体是一种针对深度学习 超分辨率技术的GHJ加速方法。
【背景技术】
[0002] 图像超分辨率就是将一副低分辨率图像转换为高分辨率图像,其在图像后处理和 视频非线性编辑中有着广泛的应用。早期的超分辨率方法(如bicubic)往往基于简单的插 值,可以快速可靠地工作,也易于芯片集成;但是这些方法得到的高分辨率图像质量不佳, 会产生显著的人工痕迹,如环、混叠、模糊等效应。如此质量的超分辨率方法难以满足当前 高质量视频需求。当前性能先进的超分辨率方法能生成高质量的图像,但是伴随着巨大的 计算开销,难以满足实际应用需要。目前有一些GPU加速的超分辨率方法,这些方法达到了 足够快的运行速度,但是也牺牲了方法的运行质量。
[0003] 近年来深度学习技术得到了巨大进步,计算机视觉识别准确率显著提升,基于深 度学习、卷积神经网络的超分辨率技术也应运而生,发表于2014年欧洲计算机视觉会议的 基于卷积神经网络的超分辨率方法(Chao Dong,Chen Change Loy,Kaiming He,Xiaoou Tang. Learning a Deep Convolutional Network for Image Super-Resolution, in Proceedings of European Conference on Computer Vision(ECCV),2014,pp·184-199, 简称为SRCNN)是性能最好的方法之一。凭借精心设计的3层卷积和2层RELU(非线性层)、海 量的训练数据、巧妙细致的训练参数微调,SRCNN-度成为了性能最佳的超分辨率方法。然 而该方法依赖于巨量的计算开销,使用CHJ执行该方法每一帧需要300秒(1920*1080到 3840*2160,单通道,下文所有测试都是基于该分辨率),即使使用基于GEMM的GPU卷积、加速 方法,每一帧也需要接近1秒,不能满足实际应用需要。

【发明内容】

[0004] 为使基于深度学习、卷积神经网络的超分辨率技术能够满足实际应用需要,本发 明提供一种针对深度学习超分辨率技术的GHJ加速方法。
[0005] 为实现上述目的,本发明所述的针对深度学习超分辨率技术的GPU加速方法,所述 方法将基于深度学习、卷积神经网络的超分辨率技术的所有步骤都并行化,并在GPU运行。 本发明所述并行化是对基于深度学习、卷积神经网络的超分辨率技术的卷积进行并行任务 划分,将卷积操作划分为数百万个互不相关、可以以任意顺序并行执行的微任务,从而使 GHJ超强并行计算能力得到发挥。
[0006] 进一步的,所述方法中:按照卷积输出像素进行任务划分,每个输出像素的计算任 务被分配为一个微任务,从而卷积任务能够被大规模地并行地执行,并且相邻像素的计算 微任务依赖的数据也是相邻的,完美达到合并访问,从而充分利用GPU的显存位宽和带宽。
[0007] 进一步的,所述方法中:利用共享存储器作为卷积核参数的高速缓存,从而降低全 局内存1/0并加速卷积。具体地,首先由并发线程块将卷积核参数读取到线程块的共享存储 器中,然后每个线程再从该共享存储器获取所需的卷积核参数。该方法可以降低GHJ读取卷 积核参数所需的全局内存吞吐量,从而大幅优化、加速卷积的执行速度。
[0008] 进一步的,所述方法中:利用共享存储器或寄存器作为输入图像的高速缓存,从而 降低全局内存I/O并加速卷积。具体地,首先找出并发线程块所依赖的输入图像区域,然后 线程块将该区域数据读取到线程块的共享存储器中,最后每个线程从该共享存储器获取所 需的输入图像数据;亦或如果每线程所需输入图像数据足够小时,直接一次将所需数据读 入到线程内的寄存器中,然后进行计算。该方法可以降低GPU读取输入图像所需的全局内存 吞吐量,从而大幅优化、加速卷积的执行速度。
[0009] 进一步的,所述方法中:采用深度神经网络GPU加速技术,融合卷积运算和非线性 运算,该方法可以减少卷积、非线性层所需的全局内存吞吐量,从而加快整个过程的执行速 度。具体地,所述深度神经网络GPU加速技术,是指:将非线性层的处理过程融合在卷积计算 中,卷积计算完成后立刻在寄存器中进行非线性层运算,从而省去了一轮对全局内存的1/ 0〇
[0010] 进一步的,所述方法中:采用深度卷积网络GPU加速技术,针对不同卷积大小选取 最佳优化方法。所述深度卷积网络GPU加速技术,是指:对不同大小卷积层,测试各个优化加 速技术,进而选择最快加速技术以获得尽可能快的整体运行速度的方法。
[0011] 与现有技术相比,本发明具有以下显著优势:
[0012] 本发明针对卷积进行并行化和优化加速,将一个高质量的超分辨率方法加速到满 足视频处理的速度要求,并且不会带来任何图像质量损失。
[0013] 进一步的,按照输出像素进行任务划分实现,从而实现卷积的并行化;将基于深度 学习、卷积神经网络的超分辨率技术的所有步骤都并行化,从而能够利用GPU超强的并行计 算能力;
[0014] 进一步的,利用GPU储存器的特性,将卷积核数据和输入图像数据缓存到共享存储 器和寄存器,从而大幅优化卷积的计算速度;
[0015] 进一步的,融合卷积与非线性层、针对不同卷积大小选取最佳优化。
[0016] 本发明充分利用了 GPU的硬件和储存特性,大幅加快了卷积的计算速度,从而使一 个高质量的超分辨率方法能够以满足实际工作要求的速度运行。
【附图说明】
[0017] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其他特征、 目的和优点将会更加明显:
[0018] 图1是SRCNN的流程图;
[0019] 图2是本发明一较优实施例中卷积并行化的示意图;
[0020] 图3是本发明一较优实施例中通过共享存储器高速缓存卷积核参数改进的示意 图;
[0021] 图4是本发明一较优实施例中通过共享存储器高速缓存输入图像块改进的示意 图;
[0022] 图5是本发明一较优实施例中通过融合卷积和非线性计算改进的示意图。
【具体实施方式】
[0023]下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术 人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术 人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明 的保护范围。
[0024]如图1所示,SRCNN的流程图。作为本发明一优选实施例,本发明的超分辨率GPU加 速技术是针对SRCNN的,其流程图如图1所示,包含了bicubic预处理(未标出)、三个卷积层 和两个RELU层(分别紧跟在第一个卷积和第二个卷积后)。三个卷积层大小分别是(按照输 出通道*卷积宽度*卷积高度*输入通道):64*9*9*1、32*1*1*64、1*5*5*32。在一次1080P到 4K图像超分辨率中,所需的浮点数乘加运算量是66.6G,所需的存储I/O是800GBytes。这样 大的计算量显然无法通过CPU计算满足实际工作、生产的时间要求。因此针对该种情况,本 发明采用GPU进行处理,将SRCNN流程的每个步骤都并行化、GPU实现,并充分利用GPU硬件特 性进行优化和加速。
[0025]本发明着重针对卷积进行并行化、优化加速,这是因为bicubic预处理计算开销很 低、容易GPU实现,同时非线性层RELU的并行化实现是显而易见,超过95%的时间开销都在 卷积上。
[0026] 为理解SRCNN方法如何适配进GPU,以及如何优化GPU并行程序,首先介绍GPU的架 构。由于物理因素的制约,几年来处理器的工作频率无法大幅提升,计算机行业通过增加处 理器的核心数量提升计算能力,典型的产品有多核心中央处理器(CPU)和拥有众多核心的 图形处理器(GPU)。其中GPU拥有上千个计算单元和超高带宽的显存,例如Nvidia GTX 980TI拥有2816个CUDA核心和336GB/S的全局内存带宽。如果将一个大型计算任务分为数万 乃至数百万个微任务,然后交给GPU处理的时候,GPU会将这些微任务调度分配给这些⑶DA 核心,众多的CUDA核心能够并发地、高效地处理微任务,从而使GPU执行速度达到CPU的数百 倍。
[0027] GPU有一个层次化的储存器机制,本发明中使用了GPU的全局内存(global memory)、共享存储器(shared memory)和寄存器(register)。这三类储存器的访问带宽、延 时、容量和可访问单元有着很大的区别。全局内存可以被所有线程访问,拥有很大的容量 (数GB),但是访问带宽最低,往往成为整个过程的瓶颈。共享存储器是一种受程序员控制的 高速缓存器,GPU中整个计算单元被分成若干个线程块,每个线程块中有一定数量的线程和 一个独立的共享存储器,该共享存储器可以被这个线程块内所有线程访问,拥有很高的访 问带宽和较低的延时。寄存器位于每个线程内部,有着最高的带宽和最小的延时,但是容量 很小,如果把反复使用的数据储存在寄存器中将大幅降低储存访问的开销。
[0028]本发明阐述的GPU加速SRCNN技术中,首先将输入图像数据从内存转移到显存中, 进行bicubic预处理,然后依次进行第一层卷积(convl)、relu、第二层卷积(conv2)、relu、 第三层卷积(conv3),然后将数据从显存转移到内存中。在进行每一层卷积的时候,都采用 了按照输出像素进行任务划分的并行化,从而能够利用GHJ超强的并行计算能力;为了进一 步加快卷积的计算速度,本发明提出使用共享存储器高速缓存卷积核数据、使用共享存储 器或寄存器高速缓存输入图像块数据、融合卷积和非线性运算;进一步的,本发明针对不同 大小的卷积,测试了不同卷积方法的执行速度,选取了最快速度的组合以使整个流程尽可 能快。本发明关键技术细节如下。
[0029] 在一优选实施例中,为了使卷积并行化,本发明将卷积任务按照输出像素划分成 数百万个微任务,称为卷积直接计算法(direct GPU implementation of convolution), 如图2所示。整个卷积就是要计算每个输出像素的值,因此每个输出像素的计算任务可以作 为一个独立的微任务被分配到一个GPU线程上执行,这些微任务之间是独立的、可并发的、 无需相互通信的。这种划分方式的另一个优点在于:相邻的并发执行的线程访问的输入图 像数据也是相邻的,例如线程(x,y)访问I(a,b)的同时,线程(x+l,y)也在访问I(a+l,b),因 此这些访问请求会被GPU硬件自动合并为一次访问,从而充分利用GPU的显存位宽和带宽。 SRCNN的其余部分(relu)也被并行化,使得整个SRCNN流程都可以在GPU上执行,避免了反复 的CPU/GPU间数据转移。通过卷积的并行化,SRCNN的执行速度从300秒/帧(使用CPU)加速到 1秒/帧。
[0030] 利用GPU层次化储存器的机制,本发明将卷积核数据和输入图像数据缓存到共享 存储器或寄存器中,从而加速卷积2到10倍。
[0031] 在一优选实施例中,本发明通过将卷积核数据预读取至共享存储器中,能够节省 冗余的卷积核数据全局内存1/0开销,称为共享卷积核数据法(shared kernel),如图3所 示。在上述的卷积直接计算法中,每个线程都读取了完全相同的卷积核数据,冗余的重复读 取产生了大量的全局内存1/0浪费。在共享卷积核数据法中,一个线程块首先将卷积核数据 预读取至共享存储器中,然后线程块内所有线程再从该共享存储器中获取所需的卷积核数 据。这个共享存储器实际上就是卷积核数据的高速缓存,节省了大量读取卷积核数据的全 局内存1/0开销。
[0032] 在一优选实施例中,本发明通过将输入图像块数据预读取至共享存储器或寄存器 中,能够节省冗余的输入图像数据全局内存1/0开销,称为共享输入图像块法(shared patch)或寄存器缓存的输入图像块法(registered pixel),如图4所示。在进行宽或高大于 1的卷积时,相邻的输出像素依赖于互相重叠的输入图像块。卷积直接计算法没有考虑这种 重叠关系,因此输入图像数据被冗余地读入到各个线程中,也带来了全局内存1/0的浪费。 当卷积宽和高较大的时候,这种1/0浪费会变得非常严重。在本发明的共享输入图像块法和 寄存器缓存的输入图像块法中,首先找到一个线程块所依赖的输入图像块区域,然后将该 区域读入到共享存储器或寄存器(仅在区域比较小,寄存器能够容纳的情况下可行),接着 每个线程再从共享存储器中获取所需的输入图像数据。这时共享存储器或者寄存器就是输 入图像数据的高速缓存,节省了大量读取输入图像数据的全局内存1/0开销。
[0033] 在一优选实施例中,本发明通过融合卷积与非线性层,免去了非线性层的1/0开 销,如图5所示。传统的对卷积神经网络的加速集中在对卷积的加速上,这是因为卷积是计 算时间的瓶颈,同时也因为非线性层难以取得加速。然而,当卷积加速到如此快程度的时 候,非线性层的时间开销已经不可忽略。在卷积神经网络中,非线性层总是跟随在卷积层 后,并且非线性层的每个输出像素仅仅依赖于对应的一个输入像素。因此,本发明将卷积和 非线性层融合为一个过程,在执行了卷积之后,每个线程立即对输出值进行非线性操作,然 后再写回全局内存。如此做法可以免去卷积层写回全局内存和非线性层读全局内存的开 销,这相当于几乎完全消除了非线性层的计算时间。
[0034] 在一优选实施例中,本发明针对不同大小卷积层测试各个优化加速技术的运行时 间,进而选择最快加速技术以获得尽可能快的整体运行速度的方法,运行时间测试结果见 表1。其中cuDNN是Nvidia提供的卷积运算库内的方法。从中可以看到,第一层卷积采用 cuDNN、第二层卷积采用共享卷积核参数和寄存器缓存的输入图像块、第三层卷积采用共享 卷积核参数和输入图像块时,整个流程可以做到最快,最终达到0.15秒/帧,这是CPU速度的 2000倍。
[0035] 表1使用各个优化加速方法时,各个卷积层的运行时间
[0037] 上表中:使用Nvidia GTX980TI和双路Intel E5-2697V2@2.7GHz 12 cores processers,测试1920*1080到3840*2160单通道超分辨率。
[0038] 综上,本发明将一个高质量的超分辨率方法加速到满足视频处理的速度要求,并 且不会带来任何图像质量损失。
[0039] 以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述 特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影 响本发明的实质内容。
【主权项】
1. 一种针对深度学习超分辨率技术的GPU加速方法,其特征在于:所述方法将基于深度 学习、卷积神经网络的超分辨率技术的所有步骤都并行化,并在GPU运行;所述并行化是对 基于深度学习、卷积神经网络的超分辨率技术的卷积进行并行任务划分,将卷积操作划分 为数百万个互不相关、能以任意顺序并行执行的微任务,从而使GHJ超强并行计算能力得到 发挥。2. 根据权利要求1所述的针对深度学习超分辨率技术的GPU加速方法,其特征在于:所 述方法中:按照卷积输出像素进行任务划分,每个输出像素的计算任务被分配为一个微任 务,从而卷积任务能够被大规模地并行地执行,并且相邻像素的计算微任务依赖的数据也 是相邻的,完美达到合并访问,从而充分利用GHJ的显存位宽和带宽。3. 根据权利要求1所述的针对深度学习超分辨率技术的GPU加速方法,其特征在于:所 述方法中:利用共享存储器作为卷积核参数的高速缓存,从而降低全局内存I/O并加速卷 积。4. 根据权利要求3所述的针对深度学习超分辨率技术的GPU加速方法,其特征在于:所 述利用共享存储器作为卷积核参数的高速缓存,是指:首先由并发线程块将卷积核参数读 取到线程块的共享存储器中,然后每个线程再从该共享存储器获取所需的卷积核参数。5. 根据权利要求1所述的针对深度学习超分辨率技术的GPU加速方法,其特征在于:所 述方法中:利用共享存储器或寄存器作为输入图像的高速缓存,从而降低全局内存I/O并加 速卷积。6. 根据权利要求5所述的针对深度学习超分辨率技术的GPU加速方法,其特征在于:所 述利用共享存储器或寄存器作为输入图像的高速缓存,是指:首先找出并发线程块所依赖 的输入图像区域,然后线程块将该区域数据读取到线程块的共享存储器中,最后每个线程 从该共享存储器获取所需的输入图像数据;亦或如果每线程所需输入图像数据足够小时, 直接一次将所需数据读入到线程内的寄存器中,然后进行计算。7. 根据权利要求1所述的针对深度学习超分辨率技术的GPU加速方法,其特征在于:所 述方法中:采用深度神经网络GPU加速技术,融合卷积运算和非线性运算,减少卷积、非线性 层所需的全局内存吞吐量,从而加快整个过程的执行速度。8. 根据权利要求7所述的针对深度学习超分辨率技术的GPU加速方法,其特征在于:所 述深度神经网络GPU加速技术,是指:将非线性层的处理过程融合在卷积计算中,卷积计算 完成后立刻在寄存器中进行非线性层运算,从而省去了一轮对全局内存的I/O。9. 根据权利要求1-8任一项所述的针对深度学习超分辨率技术的GPU加速方法,其特征 在于:所述方法中:采用深度卷积网络GHJ加速技术,针对不同卷积大小选取最佳优化方法。10. 根据权利要求9所述的针对深度学习超分辨率技术的GPU加速方法,其特征在于:所 述深度卷积网络GPU加速技术,是指:对不同大小卷积层,测试各个优化加速技术,进而选择 最快加速技术以获得尽可能快的整体运行速度的方法。
【文档编号】G06T1/20GK105869117SQ201610184129
【公开日】2016年8月17日
【申请日】2016年3月28日
【发明人】宋利, 赵章宗, 解蓉
【申请人】上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1