【技术实现步骤摘要】
用于3D图像处理的3D
‑
CNN加速方法及装置、电子设备
[0001]本申请涉及数据处理
,尤其涉及一种用于3D图像处理的3D
‑
CNN加速方法及装置、电子设备。
技术介绍
[0002]卷积神经网络(CNN)近年被广泛应用于计算机视觉中,包括分类、检测、分割等任务。这些任务一般都是针对图像进行的,使用的是二维卷积(即卷积核的维度为二维)。而对于基于视频分析的问题,2D convolution不能很好得捕获时序上的信息,因此3D convolution就被提出来了。
[0003]随着CNN识别精度的提升,CNN模型越来越大,网络结构越来越复杂,随之而来的是对计算能力的要求不断提升。由于传统的CPU处理器已无法应对CNN网络强大的并行计算需求,各种类型的加速器如GPU、华为昇腾AI加速卡,FPGA等。在这些加速平台中,GPU由于具备完善的开发工具链以及强大的计算能力,渐渐得到了研究人员的青睐。GPU提供商如Nvidia陆续推出和完善了GPU编程框架cuda以及众多官方库如cuDNN、cuBLAS,使得GPU编程难度得到有效地降低,GPU加速器开发周期大大缩短,更让GPU成为加速CNN的最佳选择之一。Nvidia推出的最新GPU装备了Tensor Core加速部件,大大提升了GPU的计算性能,如何充分利用GPU 上的Tensor Core进行计算是能否设计出高效的3DCNN以处理三维医学图像和科学数据的关键。
[0004]目前基于GPU Tensor core的CN ...
【技术保护点】
【技术特征摘要】
1.一种用于3D图像处理的3D
‑
CNN加速方法,其特征在于,包括:将3D图像进行预处理,得到3D特征图数据,将所述3D特征图数据存放到全局内存;将所述全局内存中的3D特征图数据进行隐式数据转化,所述隐式数据转化包括:将所述全局内存中的3D特征图数据进行指针起始位置和偏移量的预先计算,得到每个线程读取3D特征图数据的地址,根据所述地址,对所述3D特征图数据进行布局调整和去重处理,得到第一中间数据;将所述第一中间数据写入到共享内存中;在所述共享内存中分配出读取缓冲区与写入缓冲区;向所述写入缓冲区写入共享内存中第n批第一中间数据,向所述读取缓冲区写入共享内存中第n+1批第一中间数据,同时,将所述写入缓冲区中的第n批第一中间数据读取到寄存器中,在第n批第一中间数据完成写入寄存器之后,交换所述读取缓冲区与写入缓冲区的内容,重复本步骤,直到所有第一中间数据都写入寄存器;对所述寄存器中的第一中间数据进行分块;将分块后的第一中间数据进行计算,得到第二中间数据;对所述第二中间数据进行所述隐式数据转化的逆过程,重新转化成新的3D特征图数据;将所述新的3D特征图数据存放到所述全局内存中。2.根据权利要求1所述的方法,其特征在于,将3D图像进行预处理,得到3D特征图数据,将所述3D特征图数据存放到全局内存,包括:将所述3D图像进行文件格式转换;将转换后的3D图像依次进行以下处理得到3D特征图数据:缩放成统一的大小、通过直方图均衡增强图像对比对、去噪处理;检查处理后的3D特征图数据的通道数是否是GPU一个线程束中线程数量的倍数,如果不是其倍数则填充空数据将通道数补足成线程束中线程数量的倍数,补足通道数后,将图像的通道维度进行分组,每个分组中通道的数量等于线程束中线程数量,一个分组中通道连续的存放在全局内存中;分组存放之后,将每个分组的3D图像数据,按照宽度、高度、深度这几个不同维度顺序地址变化由快到慢的存放在全局内存中。3.根据权利要求1所述的方法,其特征在于,将所述全局内存中的3D特征图数据进行指针起始位置和偏移量的预先计算,得到每个线程读取3D特征图数据的地址,包括:将3D
‑
CNN的卷积核的长、宽、高,通道四个维度相乘得到卷积核每次要处理元素的数量;将每次卷积核处理元素的数量与GPU每个线程束中线程的数量相乘,得到每个线程束每次卷积的元素个数;将每个线程的线程ID整除每个线程束每次卷积的元素个数,得到每个线程所属的卷积核处理3D特征图数据的起始位置;将每个线程的线程ID对每个线程束每次卷积的元素个数进行求余操作,得到每个线程在所属的卷积核处理3D特征图数据的块内偏移量;根据所述起始位置和块内偏移量,得到线每个线程读取3D特征图数据的地址。
4.根据权利要求1所述的方法,其特征在于,根据所述地址,对所述3D特征图数据进行布局调整和去重处理,得到第一中间数据,包括:根据所述的地址,得到对应的内存;根据所述内存对应的地址,从GPU的一级缓存和二级缓存中查看所述3D特征图数据是否在缓存中,3D特征图数据中的每个数据第一次加载都需要从全局内存中读取,第一次读取完成之后就会被缓存到GPU的一级缓存和二级缓存中,下一次如果3D特征图中还有相同的元素就会从一级缓存和二级缓存中读取,以实现去重处理;根据所述内存对应的地址,每个线程每次从全局内存中读取GPU 缓存行 大小的3D特征图数据;将所述3D特征图数据进行重新排列;将重新排列后的3D特征图数据写入共享内存,得到第一中间数据;其中,将所述3D特征图数据进行重新排列,包括:将每个线程读取的一个缓存行大小的3D特征图数据按照一个单精度浮点数类型为单位交替相邻存放在共享内存中作为一组,一个线程束中的所有线程写完第一个单精度浮点数之后,依次存放一个线程束中的所有线程读取的下个单精度浮点数大小的元素;...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。