一种针对a+超分辨率技术的gpu加速方法
【专利摘要】本发明公开一种针对A+超分辨率技术的GPU加速方法,所述A+超分辨率技术步骤包括bicubic插值、差分、收集差分特征、主成分分析、锚特征搜索匹配和回归、低高频特征叠加、高分辨率块重叠映射回高分辨率图像;所述方法将A+超分辨率技术上述的所有步骤并行化,并移植到GPU上运行。进一步的,通过调整图像和特征数据存放格式以满足GPU全局内存的合并访问、GPU内核程序指令级优化以达到尽可能快的GPU运行速度、使用CPU/GPU联合计算加快处理视频的速度。本发明将一个高质量的超分辨率技术加速到满足视频处理需要的速度,并且不会带来任何图像质量损失。
【专利说明】
一种针对A+超分辨率技术的GPU加速方法
技术领域
[0001] 本发明涉及一种图像超分辨率领域和GPU加速的方法,具体是一种针对深度学习 A +超分辨率技术的GPU加速方法。
【背景技术】
[0002] 图像超分辨率就是将一副低分辨率图像转换为高分辨率图像,其在图像后处理和 视频非线性编辑中有着广泛的应用。早期的超分辨率技术(如bicubic)往往基于简单的插 值,可以快速可靠地工作,也易于芯片集成,但是这些技术得到的高分辨率图像质量不佳, 会产生显著的人工痕迹,如环、混叠、模糊等效应。如此质量的超分辨率方法难以满足当前 高质量视频需求。当前性能先进的超分辨率方法能生成高质量的图像,但是伴随着巨大的 计算开销,难以满足实际应用需要。目前有一些GPU加速的超分辨率方法,这些方法达到了 足够快的运行速度,但是也牺牲了方法的运行质量。
[0003] 发表于2014年亚洲计算机视觉会议的A+图像超分辨率方法是一种性能领先的超 分辨率技术(R.Timofte,V.De Smet,and L.Van Gool.A+:Adjusted anchored neighborhood regression for fast super-resolution. In Proceedings of Asia Conference on Computer Vision,pp. 111-126,2014),它是业界图像质量最好的超分辨率 方法之一,同时相对其他方法有较低的计算复杂度。它的基本思路是:在训练阶段,在数量 众多的候选图像块样本中挑选出最具有代表性的1024个锚点图像特征以及其对应的超分 辨率变换;在方法运行阶段,对每一个待超分辨率块搜索匹配一个最临近锚点图像特征,然 后施加相应的超分辨率变换。这种锚点搜索匹配再施加相应变换的策略,使得整个超分辨 率方法针对性地作用于各种图像块,获得了极佳的图像质量和较低的运行复杂度。尽管如 此,A+超分辨率技术处理1920*1080到3840*2160的单通道超分辨率变换仍需要超过45秒/ 帧。为了使A+超分辨率技术能够满足实际应用需要,需要采用全新的计算系统大幅加快A+ 超分辨率技术的处理过程。
【发明内容】
[0004] 本发明的目的在于针对现有的A+超分辨率技术运行时间的不足,提供一种针对A+ 超分辨率技术的GPU加速方法,将A+超分辨率技术进行并行化、利用GPU加速并充分优化A+ 超分辨率技术的GHJ执行过程,实现大幅加快A+超分辨率技术的处理速度。
[0005] 本发明采用的技术方案是:
[0006] -种针对A+超分辨率技术的GPU加速方法,其中:所述A+超分辨率技术步骤包括 bicubic插值、差分、收集差分特征、主成分分析、锚特征搜索匹配和回归、低高频特征叠加、 高分辨率块重叠映射回高分辨率图像;所述方法将A+超分辨率技术上述的所有步骤并行 化,并移植到GPU上运行。
[0007] 进一步的,所述方法中:对于差分、高分辨率块重叠映射回高分辨率图像这两个步 骤,按照输出像素进行任务划分,计算任务被分割成数百万个互不相关的微任务进行并行 计算;对于收集差分特征、锚特征搜索匹配和回归、低高频特征叠加这三个步骤,按照输出 特征进行任务划分,各个输出特征可以被并行地计算,从而发挥GHJ超强的并行计算能力。
[0008] 进一步的,所述方法中:在并行化执行中,如果对图像数据格式不加约束,GPU每个 内存访问时钟周期仅有一小部分位宽得到利用,GPU全局内存带宽将会大量浪费,严重降低 A+超分辨率技术执行效率。为此,本发明调整了图像和特征数据的存放方式。使得相邻线程 总是同时访问相邻的数据,即:相邻图像或特征同一参数的存放位置是相邻的,使得访问它 们的相邻线程的每个指令总是访问相邻的数据,达到完美的合并访问。满足合并访问的请 求会被GHJ内的硬件自动合并,使得GPU带宽得到最大利用。
[0009] 进一步的,所述方法:在并行化的锚特征搜索匹配和回归步骤中,由于投影矩阵在 运行前不确定,所以其无法合并访问,每次全局内存I/O只有一小部分得到使用。本发明提 出针对性的指令级并行技术,在一个周期内读入多个待计算的数据,然后进行计算,从而增 大全局内存I/O位宽利用率,可以更大化利用GPU全局内存,加快执行速度。
[0010] 进一步的,所述方法中:采用CPU/GPU联合计算技术,将GPU和CPU的计算资源结合 起来,在GPU计算Y通道的A+超分辨率的同时,CPU的两个线程也在分别计算U、V通道的 bicubic超分辨率,从而节省U、V通道产生的CPU/GPU数据传输开销,降低视频超分辨率执行 时间。
[0011] 与现有技术相比,本发明具有以下显著优势:
[0012] 本发明将A+超分辨率技术并行化,可以利用GPU超强并行计算能力;并优化图像数 据格式使之实现完美的合并访问,进一步的,将锚特征回归过程指令级并行化,从而充分利 用GHJ超强的并行计算能力,将A+超分辨率技术加速到实际生产应用所需的速度;充分优化 了 A+超分辨率过程的GPU执行效率,并且进一步利用了 CPU/GPU联合计算,尽可能加速了整 个A+过程,最终将执行速度从使用CPU的47秒/帧加速到GPU的0.16秒/帧。
【附图说明】
[0013] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其他特征、 目的和优点将会更加明显:
[0014] 图1是A+超分辨率技术流程示意图;
[0015] 图2是本发明一优选实施例中按输出特征进行任务划分并行化进行收集特征示意 图;
[0016] 图3是本发明一优选实施例中锚特征搜索匹配与回归的并行化示意图;
[0017] 图4是本发明一优选实施例中高分辨率块重叠映射回高分辨率图像的并行化示意 图;
[0018] 图5是本发明一优选实施例中合并访问优化示意图;
[0019] 图6是本发明一优选实施例中使用指令级并行示意图;
[0020] 图7是本发明一优选实施例中CPU/GPU联合处理示意图。
【具体实施方式】
[0021]下面结合具体实例对本发明进行详细说明。以下实施将有助于本领域的技术人员 进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员 来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保 护范围。
[0022]针对现有的A+超分辨率技术运行时间的不足,本发明将A+超分辨率技术进行并行 化、利用GPU加速并充分优化执行过程。
[0023]由于物理因素的制约,几年来处理器的工作频率无法大幅提升,计算机行业通过 增加处理器的核心数量提升计算能力,典型的产品有多核心中央处理器(CPU)和拥有众多 核心的图形处理器(GHJ)。其中GHJ拥有上千个计算单元和超高带宽的显存,例如Nvidia GTX 980TI拥有2816个CUDA核心和336GB/S的全局内存带宽。如果将一个大型计算任务分为 数万乃至数百万个微任务,然后交给GPU处理的时候,GPU会将这些微任务调度分配给这些 CUDA核心,众多的CUDA核心能够并发地、高效地处理微任务,从而使GPU执行速度达到CPU的 数百倍。能够利用GPU超强计算能力的前提是计算任务并行化,使GPU执行数百万个可并发 的微任务。
[0024]如图1所示,A+超分辨率技术的过程分解为7个步骤,包括bicubic预处理、差分、收 集差分特征、主成分分析、锚特征搜索与回归、低高频图像块相加、高分辨率图像块重叠映 射为最终高分辨率图像。为了最大程度地加速A+超分辨率技术,本发明将全部步骤都并行 化(bicubic插值的并行化、差分的并行化、收集差分特征的并行化、主成分分析的并行化、 锚特征搜索匹配和回归的并行化、低高频特征叠加的并行化、高分辨率块重叠映射回高分 辨率图像的并行化),并移植到GPU上运行。本发明必须全部步骤并行化,否则未并行的部分 将成为整个系统的瓶颈,而且串行步骤和并行步骤的衔接会导致反复的CPU/GPU数据转移 和时间开销。
[0025] 在一优选的实施方式中,本发明对差分、收集差分特征、低高频图像块相加的并行 化技术是相似的,计算任务被按照输出特征(对收集差分特征、低高频图像块而言)或输出 像素(对差分而言)进行任务划分,分割成数万个(对收集差分特征、低高频图像块而言)或 数百万个(对差分而言)微任务。每个微任务的计算被指配到一个线程上,GPU会自动地调度 ⑶DA核心去处理这些微任务。由于这些微任务之间是没有相互关联和依赖的,因此它们可 以被并发地执行,不需要相互通信,并且可以以任意次序运行。
[0026] 在一优选的实施方式中,如图2所示,是本发明实施例中收集特征的并行化的示意 图,其按照输出特征进行任务划分。一个单独的线程负责计算一个输出特征,它只需要读对 应区域的差分图像数据,然后形成输出特征。并且应该注意到,线程间对同一区域的读操作 不会带来竞态,因此可以并发的执行。
[0027] 本发明中最重要的一个步骤:锚特征搜索匹配与回归的并行化。具体的,在一优选 的实施方式中,该步骤它包含三个部分:一次矩阵-矩阵乘法,对每个匹配特征中最大绝对 值搜索,每个特征右乘对应的投影矩阵。矩阵-矩阵乘法的并行化是通过CUDAcuBLAS矩阵乘 法库实现的。本发明将剩下的两个部分按照特征进行任务划分,每个输出特征的锚特征匹 配、回归计算任务作为一个微任务分配给了一个线程,其并行化如图3所示。每个线程从匹 配矩阵的对应列中搜索绝对值最大的行下标index,然后用该下标index对应的投影矩阵乘 以该低分辨率特征得到对应的高频图像块。
[0028] 本发明设计了高分辨率块重叠映射回高分辨率图像的并行化。在传统的块叠加回 图像的技术中,计算机创建两个初始化为〇的图像SR Image和权值weights。随着输入特征 的不断处理,SR Image对应区域产生累加,和weights也不断更新。最后将SR Image除以 weights已得到最终结果。但是这种方法无法直接并行化,因为并行处理的特征可能同时 读/写SR Image和weights的同一区域,导致竞态,产生错误的运行结果。在一优选的实施方 式中,为了解决这个问题,本发明从输出像素的角度去处理这个问题,如图4所示。计算任务 按照输出像素进行任务划分,从而使得该步骤能够并行化。一个线程负责计算一个输出像 素,首先它找出了该像素包含在哪些块之中,然后在这些块的对应位置上获取像素的值进 行叠加和计数,最后平均后得到计算结果。这种并行化方法在计算结果和串行方法一致的 前提下,避免了竞态,从而可以在GPU上正确运行。
[0029] 对bicubic和主成分分析(PCA)的并行化方式是众所周知的,本发明不再陈述。
[0030] 如图5所示,在一优选的实施方式中,本发明通过调整GPU内图像和特征数据格式, 使得A+超分辨率过程中达到尽可能的全局内存合并访问,从而大幅加快其执行速度。当GPU 线程访问全局内存的时候,GPU硬件会自动地将相邻的访问请求合并在一起,从而充分利用 显存的位宽和带宽。例如GTX980TI有384位的显存位宽,可以同时存/取24个单精度浮点数。 只有在相邻线程访问相邻全局内存空间的时候合并访问才能生效,否则每次存取只有很小 一部分位宽和带宽起作用,大幅影响A+超分辨率技术的运行速度。本发明精心调整了GPU内 图像和特征的数据格式,使之尽可能满足GHJ合并访问。在bicubic、差分、收集差分特征、主 成分分析、低高频特征相加和高分辨率块重叠映射回高分辨率图像步骤中,全局内存访问 达到了完美的合并访问;在锚特征搜索匹配与回归的矩阵-矩阵乘法和最大绝对值搜索也 达到了完美的合并访问,唯独投影矩阵与低分辨率特征的乘法无法访问,这是由于只有在 运行时才能决定访问哪一个投影矩阵,因此相邻线程访问的投影矩阵很可能不一样,也就 无法合并访问。
[0031] 在一优选的实施方式中,本发明通过对锚特征回归中投影矩阵与低分辨率特征乘 法进行指令级并行,达到了尽可能大的A+超分辨率技术加速。在未指令级并行的时候,线程 每次访问投影矩阵数据会触发一次全局内存32字节的读操作,其中只有4字节是有效的,其 余都被丢弃了,这意味着低全局内存位宽和带宽利用率。为了改善这个状况,本发明调整了 指令和线程内核中的数据访问方式,使用fl〇at4数据结构在一个周期内一次读入多个待计 算的数据(共16字节),之后再进行计算,如图6所示。通过指令级并行,投影矩阵与低分辨率 特征乘法以及A+整体速度大幅提升。
[0032] 在一优选的实施方式中,本发明采用CPU/GPU联合计算技术,将计算开销小但CPU/ GPU I/0开销大的步骤(U、V通道的bicubi c)保持在CPU内执行,使用CPU和GPU同时处理视频 超分辨率任务,如图7所示。在对视频进行超分辨率时,往往对Y通道采取高质量的超分辨率 技术,而对U、V通道采用较快的超分辨率技术,因为U、V通道的重要性和对质量影响较小,而 且A+超分辨率技术本身是针对亮度信息而非色彩信息的。因此在超分辨率视频时,本发明 使用GPU处理Y通道的A+超分辨率,同时启用两个CPU线程处理U、V通道的bicubic超分辨率。 由于bicubic复杂度极低,因此CPU总是率先于GPU完成处理。
[0033]综上所述,本发明通过A+超分辨率技术全过程并行化,进一步的调整GPU内图像和 特征数据格式满足合并访问、用于锚特征回归的指令级并行化、CPU/GPU联合计算技术将A+ 超分辨率技术的运行速度加快了 295倍,同时保持了完全相同的运行质量。其各个步骤的运 行速度和加速比如表1所示。
[0034] 表1GPU对各个步骤的加速比
[0036] 上表中:使用Nvidia GTX980TI和双路Intel E5-2697V2@2.7GHz 12cores processers,测试1920*1080到3840*2160单通道超分辨率。
[0037] 由以上实施例可以看出,本发明将A+超分辨率过程划分为7个步骤,并行化每个步 骤以适配到GPU上,调整图像和特征数据存放格式以满足GPU全局内存的合并访问,GPU内核 程序指令级优化以达到尽可能快的GPU运行速度,使用CPU/GPU联合计算加快处理视频的速 度。与现有技术相比,本发明将一个高质量的超分辨率技术加速到满足视频处理需要的速 度,并且不会带来任何图像质量损失。
[0038] 以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述 特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影 响本发明的实质内容。
【主权项】
1. 一种针对A+超分辨率技术的GPU加速方法,所述A+超分辨率技术步骤包括bicubic插 值、差分、收集差分特征、主成分分析、锚特征搜索匹配和回归、低高频特征叠加、高分辨率 块重叠映射回高分辨率图像;其特征在于:所述方法将A+超分辨率技术上述的所有步骤并 行化,并移植到GHJ上运行。2. 根据权利要求1所述的针对A+超分辨率技术的GPU加速方法,其特征在于:所述方法 中: 对于差分、高分辨率块重叠映射回高分辨率图像这两个步骤,按照输出像素进行任务 划分,计算任务被分割成数百万个互不相关的微任务进行并行计算; 对于收集差分特征、锚特征搜索匹配和回归、低高频特征叠加这三个步骤,按照输出特 征进行任务划分,各个输出特征被并行地计算,从而发挥GPU超强的并行计算能力。3. 根据权利要求2所述的针对A+超分辨率技术的GPU加速方法,其特征在于:所述按照 输出像素进行任务划分,是指:一个线程负责计算一个输出像素,首先它找出该像素包含在 哪些块之中,然后在这些块的对应位置上获取像素的值进行叠加和计数,最后平均后得到 计算结果。4. 根据权利要求1所述的针对A+超分辨率技术的GPU加速方法,其特征在于:所述方法: 调整了图像和特征数据的存放方式,使得相邻线程总是同时访问相邻的数据。5. 根据权利要求4所述的针对A+超分辨率技术的GPU加速方法,其特征在于:相邻图像 或特征同一参数的存放位置是相邻的,使得访问它们的相邻线程的每个指令总是访问相邻 的数据,满足合并访问的请求会被GHJ内的硬件自动合并,使得GPU带宽得到最大利用。6. 根据权利要求1-5任一项所述的针对A+超分辨率技术的GPU加速方法,其特征在于: 所述方法:在并行化的锚特征搜索匹配和回归步骤中,采用指令级并行技术,在一个周期内 读入多个待计算的数据,然后进行计算,从而增大全局内存I/O位宽利用率。7. 根据权利要求1-5任一项所述的针对A+超分辨率技术的GPU加速方法,其特征在于: 所述方法:采用CPU/GPU联合计算技术,在GPU计算Y通道的A+超分辨率的同时,CPU的两个线 程也在分别计算U、V通道的bicubic超分辨率,从而节省U、V通道产生的CPU/GPU数据传输开 销,降低视频超分辨率执行时间。
【文档编号】G06T1/20GK105869105SQ201610184146
【公开日】2016年8月17日
【申请日】2016年3月28日
【发明人】宋利, 赵章宗
【申请人】上海交通大学