首页 / 图像超分方法

图像超分方法实质审查 发明

技术领域

[0001] 本发明涉及一种图像处理方法,特别是涉及一种图像超分方法。

相关背景技术

[0002] 随着高清显示的普及,用户对于画质的要求越来越高。受制于拍摄设备、传输带宽、下发策略等因素的影响,会导致终端显示的画质分辨率低,显示效果不好。将低分辨率输入恢复为高分辨率输出,解决上述显示质量的问题的技术称为图像超分。目前互联网中常用超分方法为,经过云端渲染的高分辨率图片进行编码压缩后下发,由终端设备侧(即客户端、移动端)进行超分后进行高分辨率图像显示,这种方式称为端侧超分。由于超分算法对运算资源有着较大的需求,超分算法运行在终端设备上对终端设备的硬件配置有着很高的要求。相关技术中,受制于终端设备硬件的局限性,可能导致的问题有:超分效果不佳、超分方法不能灵活兼容不同配置机型、功耗大引起发热等。其中,相关技术中一般是针对540p超分分辨率,帧率要求为30fps,而在目前高清视频和云游戏的显示中需要达到720p超分分辨率,帧率达到60fps,因此需要超分方法的进一步优化。
[0003] 专利文献CN110223230A公开了一种多前端深度图像超分辨率系统,包括:深度图像超分辨率模块;微信小程序前端模块;网页前端模块;服务器后台模块。在上述相关技术中,没有解决上述超分效果不佳、功耗大引起发热等问题。

具体实施方式

[0016] 为使本发明的目的、技术方案和优点更加清楚明了,下面对本发明进行进一步详细说明。但是应该理解,此处所描述仅仅用以解释本发明,并不用于限制本发明的范围。
[0017] 除非另有定义,本文所使用的所有的技术术语和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同,本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在限制本发明。本文中所涉及的表征手段均可参阅现有技术中的相关描述,本文中不再赘述。
[0018] 为了进一步了解本发明,下面结合最佳实施例对本发明作进一步的详细说明。
[0019] 实施例1如图1所示,一种图像超分方法,包括以下步骤:
S101:将输入YUV图像的Y通道进行Y通道扩展;
S102:对所述步骤S101的输出进行超分推理;
S103:使用所述步骤S101的输出和所述步骤S102的输出进行残差计算;
S104:对所述步骤S103的输出进行像素清洗,输出超分Y通道图像;
S105:将输入YUV图像的UV通道进行UV通道扩展;
S106:将所述步骤S104的输出与所述步骤S105的输出合并后输出超分YUV图像。
[0020] 进一步地:所述超分推理使用超分推理模型,包括但不限于基于预采样的模型、残差网络模型、多级网络模型、递归网络模型、注意力机制网络模型、生成对抗网络模型等。具体地,包括但不限于:SRCNN、EDSR、SRRAM、ESRGAN、ECBSR等。
[0021] 如图10所示,是本发明一个实施例的图像超分方法的Y通道扩展示意图;其中,将每个像素复制为4份,图中所示复制数量为4,可以根据需要扩展的目标像素和当前图像像素之比进行扩展。
[0022] 通过将输入YUV图像的Y通道进行Y通道扩展使扩展后的Y通道图像与步骤S102超分推理后输出的Y通道图像长度和宽度上像素数相同,从而可以进行残差运算。
[0023] Y通道扩展的方法包括但不限于复制的方法、广播的方法、使用卷积模块进行卷积运算的方法,其中,复制的方法可以使用concat函数等;广播的方法可以使用numpy类型的属性进行操作等;使用卷积模块的方法可以使卷积模块的输出通道数/输入通道数等于扩展的倍数等。
[0024] 使用残差运算,可以修正超分模型深度增加后效果不好的问题,可以避免梯度消失的问题。
[0025] 图11为本发明一个实施例的图像超分方法的像素清洗示意图;图中像素清洗(pixelshuffle)将每四个像素的后两个像素放到下一行与前两个像素同样索引的位置。通过像素清洗,将连续的像素点在重排为分辨率大小。例如如图所示目标分辨率为6*2,通过将连续的12*1像素进行像素重排,即得到目标分辨率尺寸的图像。图中所示仅为示例用于说明像素清洗的原理,可以理解,可以根据目标分辨率设置,不限于上述示例中的分辨率大小。在上述像素清洗的示例中,每四个像素点为连续排列的像素,对于模型推理后的多通道图像,可以依次从4个通道的相同索引位置取像素点进行上述处理,也可以先将4个通道按连续方式排列后进行处理,只要能够进行上述像素清洗操作即可。
[0026] 图12为本发明一个实施例的图像超分方法的UV通道扩展示意图,如图所示,UV通道扩展将每一个UV组合在行上复制一次,再将上述处理后的行在列上复制一次。图中所示为像素扩展4倍(长、宽各扩展2倍)的示例,可以理解,可以根据需要进行设置。
[0027] UV通道扩展的作用是使其与超分Y通道图像长度方向和宽度方向像素数相同从而可以进行合并,UV通道扩展的倍数取决于最终输出超分YUV图像的放大倍数。例如超分YUV图像相对于输入YUV图像需要放大2*2倍,则UV通道扩展后UV通道图像也扩展为2*2倍。而待合并的超分Y通道图像也放大了2*2倍。
[0028] 以上示例中以目标超分YUV图像为2*2倍的情况为例。可以理解,也可以根据需要设置目标超分倍数,不限于上述示例的超分倍数。例如可以是2*3倍,3*3倍,4*4倍等。
[0029] 通过控制超分推理的复杂度可以在保证输出图像质量的同时节省运算量,使用Y通道扩展结果与超分推理结果进行残差运算,可以进一步提高输出图像,通过将计算量较小的UV通道扩展获得的UV通道扩展图像与超分Y通道图像进行合并,进一步节省了运算量,因此可以达到输出图像分辨率高、计算量小因而速度快、功耗小、发热量小的效果。
[0030] 实施例2如图1‑11所示,在实施例1的基础上,进一步地:所述步骤S101‑S104通过第一模型
100执行,所述第一模型100设置在NPU、DSP或GPU上;
所述步骤S105‑S106运行在DSP、CPU或GPU上。
[0031] 所述S105可以与步骤S101‑S104并行运行,从而可以减少处理过程的耗时,如果所述S105可以与步骤S101‑S104运行在相同设备上,可以使用不同线程NPU即嵌入式神经网络处理器,采用“数据驱动并行计算”的架构,擅长处理大量的视频、图像类的数据。
[0032] DSP (digital signalprocessor,DSP),称为数字信号处理器,是一种用于数字信号处理的可编程微处理器。
[0033] 所述NPU可以为专门的AI设备,包括但不限于APU、ANE等。
[0034] 进一步地:所述第一模型100包括:运算层,包括:
卷积运算:进行卷积运算输出运算结果;
激活函数运算:对所述卷积运算的输出的所述运算结果,使用激活函数进行映射计算;
所述运算层为M层;M≥2;M为自然数;
残差计算:
将第1层所述运算层的输出与最后一层所述运算层的输出进行残差运算;
像素清洗:
对所述残差计算的输出进行像素清洗,输出超分Y通道图像。
[0035] 使用上述模型结构处理S101‑S104时,步骤S101的结果复用上述第一层运算层的输出结果,用于进行残差计算,从而节省了运算量。第二层至最后一层运算层的运算完成步骤S102。
[0036] 所述激活函数包括但不限于:ReLU函数、Leaky Relu函数、RRelu函数等;如图8所示,是第一模型的一种示例,其中使用了ECBSR模型,ECBSR模型是目前适合于端侧运行的超分模型结构,能在效果和速度之间取得平衡。图中,模型输入为YUV420sp格式中的Y通道,将Y通道宽和高各自放大2倍之后输出。
[0037] ECBSR模型的输入为YUV420sp格式中的Y通道,输入为高720宽1280的Y通道,输入分两条支路,一条支路由上述运算层进行核心的卷积运算,另一条支路作为残差将原始输入与卷积结果进行合并(add)操作。第一层卷积(conv)将1x1x720x1280的输入变为1x8x720x1280,第二个和第三个卷积的输出均为1x8x720x1280,最后一层卷积的输出为
1x4x720x1280,然后与输入1x1x720x1280进行相加。此处相加时由于输入为1通道,但是卷积输出为4通道,所以需要将输入进行Y通道扩展(广播)再与卷积输出进行相加操作。相加完成之后再执行像素清洗操作(即图中DepthToSpace步骤)将输出变为1x1x1440x2560,最后输出结果。图中,w<4x8x3x3>表示输出通道数为4,输入通道数为8, 3×3的卷积模块,因此上述卷积运算对1x8x720x1280图像(8为通道数)进行卷积后输出图像为1x4x720x1280的
4通道图像。图中,B<8>表示8通道的偏置。
[0038] 上述M可以根据需要设置,可以根据目标超分效果、终端设备的硬件进行设置,不限于上述示例。M优选为2、3、4、5、6、7、8。
[0039] 所述第一层运算层的输入为输入YUV图像的Y通道图像,第2 M层的输入为上一层~运算层的输出,第1层、第M层运算层输出为残差运算步骤的输入,残差运算步骤的输出作为像素清洗步骤的输入。
[0040] 进一步地:在存储空间上设置第一存储空间、第二存储空间;所述第一存储空间储存所述输入YUV图像;所述CPU和所述GPU通过指针访问所述第一存储空间;
所述第二存储空间储存所述超分YUV图像;所述CPU和所述GPU通过指针访问所述第二存储空间。
[0041] 所述存储空间为CPU或GPU上的存储空间。
[0042] 进一步地:NPU、DSP和CPU、GPU之间数据共享的方式可以通过拷贝一份数据或者NPU、DSP上划分存储空间与CPU、GPU共享,CPU、GPU访问方式可根据适用于该NPU、DSP的内存共享的指令集具体设定。
[0043] 图4为本发明一个实施例的图像超分方法的使用第一模型时的存储示意图;当Y通道扩展和像素清洗两个模块包含在整个模型推理中时,则我们可以直接将原始的Y通道数据灌入模型中进行推理,推理结果直接放入要显示的超分YUV空间中(此种情况下,一般会在推理引擎内部存在额外的内存分配)。
[0044] 以针对分辨率为1280x720的输入YUV图像为例,每帧的大小约为1.5M,超分之后的大小约为6M。当帧率为60fps的时候,每秒钟传递的数据量约为450M,所以对端侧超分来说每秒的通信量十分庞大,所以数据流通在整个超分链路中非常重要,要尽可能避免数据的拷贝。
[0045] 解码之后的数据通常放在GPU的地址空间中。在移动端,CPU和GPU往往采用共享内存机制,但是不能直接访问对方的地址,常规做法是各拷贝一份,但本发明中通过指针的方式获取GPU解码之后的原始YUV数据,从而避免一次多余的内存拷贝。同样的,当超分完成之后,超分的结果也可以通过指针映射的方式传递给GPU来进行上屏从而避免一次多余的内存拷贝。
[0046] 因此通过使所述CPU和所述GPU通过指针访问所述第一存储空间、第二存储空间,可以减少数据拷贝次数,从而提高了图像处理速度。
[0047] 进一步地:所述步骤S102‑S103通过第二模型200执行,所述第二模型200设置在NPU、DSP或GPU上;所述步骤S101、S104‑S106运行在DSP、CPU或GPU上。
[0048] 进一步地:所述第二模型200包括:运算层,包括:
卷积运算:进行卷积运算输出运算结果;
激活函数运算:对所述卷积模块的输出结果,使用激活函数进行映射计算;
所述运算层为M层;M≥2;第1层所述运算层的输入为所述步骤S101的输出;
残差计算:
将所述步骤S101的输出和最后一层所述运算层的输出进行残差运算。
[0049] 如图9所示,是第二模型的一种示例,其中使用了ECBSR模型,与图8的第一模型不同的是,步骤S101由其他硬件设备例如CPU、GPU等执行,此处第二模型的输入复用了S101的输出从而节省了运算量,提升了处理效率。在这种模型结构中,将Y通道扩展、像素清洗和UV通道扩展、Y通道和UV通道合并输出超分YUV图像等操作放到其他设备如GPU或CPU中实现,充分利用所有的硬件资源从而提升处理速度。
[0050] 所述第一层运算层的输入为步骤S101的输出,第2 M层的输入为上一层运算层的~输出,步骤S101的输出、第M层运算层输出为残差运算步骤的输入,残差运算步骤的输出作为像素清洗步骤的输入。由于步骤S101和像素清洗步骤不在第二模型中进行处理,可以在其他硬件设备上并行处理,或在同一设备上开设不同线程进行处理,从而节省处理时间。
[0051] 上述M可以根据需要设置,可以根据目标超分效果、终端设备的硬件进行设置,不限于上述示例。M优选为2、3、4、5、6、7、8。
[0052] 进一步地:所述步骤S101在CPU上执行时,执行方法为:对所述输入YUV图像的Y通道像素,依次进行处理;所述步骤S101在GPU上执行时,执行方法为,对所述输入YUV图像的Y通道像素,启动k个线程执行指令集进行并行处理;k=像素点数/n;n为自然数。
[0053] 如图10所示,Y通道扩展操作,当该模块在CPU上执行时,只需要逐像素复制4份即可。当该模块在GPU上执行时,可以选择OpenCL或者metal实现一个kernel来完成,启动宽*高个线程,每个线程负责一个像素点的处理,上述以宽*高个线程为例,如果n>1,则需要k个线程n次运行kernel指令集来完成处理。n可以为2、3、4等。上述指令集为kernel,本发明不限于上述指令集。可以为其他的适用于在GPU使用的指令集。
[0054] 进一步地:所述步骤S101在DSP上执行时,使用DSP相应的指令集进行处理。
[0055] 进一步地:所述步骤S104在CPU上执行时,对所述步骤S103输出的像素,依次进行处理;所述步骤S104在GPU上执行时,对所述步骤S103输出的像素,启动k个线程执行指令集进行并行处理;k=像素点数/n;n为自然数。
[0056] 进一步地:所述步骤S104在DSP上执行时,使用DSP相应的指令集进行处理。
[0057] 像素清洗(Pixel shuffle)的流程如实施例1中所述,如图11所示将连续的像素重排为2行。以图中为例,在CPU上执行时,可以通过两层for循环遍历所有的连续4像素进行拆分,在具体实现时,可以用short类型来代替char类型来减少循环次数,在安卓和iOS机器上还可以采用neon指令集进行加速。
[0058] 在GPU上执行时,启动宽*高个线程执行kernel指令集,让每个线程来负责拆分对应位置的4个像素。上述以宽*高个线程为例,如果n>1,则需要k个线程n次运行kernel指令集来完成处理。n可以为2、3、4等。上述指令集为kernel,本发明不限于上述指令集。可以为其他的适用于在GPU使用的指令集。
[0059] 进一步地:所述步骤S105在CPU上执行,执行方法为,对所述输入YUV图像的UV通道的像素,依次进行处理;所述步骤S105在GPU上执行,执行方法为,对所述输入YUV图像的UV通道的像素,启动k个线程执行指令集进行并行处理;k=像素点数/n;n为自然数。
[0060] UV扩展的方法如实施例1所述,在CPU执行和GPU上执行的方法,与上述Y通道扩展、像素清洗同理,不再赘述;进一步地:在存储空间上设置第一存储空间、第二存储空间、第三存储空间;
所述第一存储空间储存所述输入YUV图像;所述CPU和所述GPU通过指针访问所述第一存储空间;
所述第二存储空间存储所述超分Y通道图像;所述CPU和所述GPU通过指针访问所述第二存储空间;
所述第三存储空间储存所述超分YUV图像;所述CPU和所述GPU通过指针访问所述第三存储空间。
[0061] 如图7所示,统一地址空间分为GPU地址空间和CPU地址空间,虽然CPU、GPU相互不能访问对方的地址空间,但是它们共享同一份物理内存。可以通过指针映射的方式获取其地址。例如在CPU空间中分配一块4Y大小的空间用来存放超分输出,在GPU空间分配一块可以承载超分之后的YUV空间。可以看出,总共有两条数据链路:一条负责UV扩展,一条负责Y超分。使用第二模型的情况下,需要开辟一块空间存放超分Y通道图像,在UV扩展步骤中可以通过上述指针映射访问的方式避免拷贝,将超分Y通道图像与扩展后的UV通道图像进行合并、GPU将合并后的超分YUV图像上屏的步骤中,也可以通过上述指针映射访问的方式避免多余的拷贝。
[0062] 因此通过使所述CPU和所述GPU通过指针访问所述第一存储空间、第二存储空间、第三存储空间,可以减少数据拷贝次数,从而提高了图像处理速度。
[0063] 进一步的,还包括判断步骤:通过获取待使用所述图像超分方法的设备的硬件参数,根据预设的规则,分配执行步骤S101‑S106的设备;或,通过测试程序,对执行步骤S101‑S106的设备的所有组合方式进行测试,当输出超分YUV图像的图像分辨率达到预设阈值时,选择处理时间最短的组合来分配执行步骤S101‑S106的设备;
所述设备为NPU、DSP、GPU或CPU。
[0064] 所述组合方式如下表所示:表1
模块 硬件选择
Y通道扩展 CPU、GPU、NPU、DSP
超分推理 GPU、NPU、DSP
像素清洗 CPU、GPU、NPU、DSP
UV通道扩展 CPU、GPU、DSP
在本发明的实施例中,本发明的图像超分方法可以用于终端设备,包括但不限于电脑、手机、触屏设备等,可以理解,所述图像超分方法不限于上述应用,可以应用于所有需要在硬件设备配置有限设备上进行超分处理,同时保证较高的输出图像质量、帧率以及较小的功耗、发热量的使用场景中。
[0065] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换或改进等,均应包含在本发明的保护范围之内。

当前第1页 第1页 第2页 第3页
相关技术
超方法相关技术
郭建君发明人的其他相关专利技术