一种深度网络相机图像处理方法、系统及应用

文档序号:26403207发布日期:2021-08-24 16:16阅读:123来源:国知局
本发明属于数字图像处理
技术领域
:,尤其涉及一种深度网络相机图像处理方法、系统及应用。
背景技术
::目前,在数字图像处理系统中,相机原始输入图像的质量对系统后续图像质量提升、智能分析和压缩存储等都有重要的影响。相机输出图像的质量在很大程度上决定于图像处理器(isp,imagesignalprocessor)的性能。传统的isp系统结构复杂,处理流水线长,不同的isp芯片所设计的功能模块在处理流水线上的顺序不尽相同,大部分情况下取决于工程师的设计经验。到目前为止,isp芯片仍存在部分场景下处理效果不佳,处理流水参数无法满足所有应用场景的痛点。图像处理是计算机视觉和图形学领域的重要分支,随着计算机、通信技术、人工智能技术的高速发展,图像信号处理近年来得到了极大的重视和发展,在科学技术、医疗健康、教育培训、灾害防治、娱乐休闲等方面取得了广泛的应用。isp(imagesignalprocessor)作为相机系统的核心,对图像处理具有极其重要的作用。它是将摄像头采集到的原始图像数据作为处理对象,对前端图像传感器输出的信号进行线性校正、噪声去除、坏点去除、内插、白平衡、自动曝光控制、去除电流噪声、锐化、色彩空间转换、gamma校正等处理,以达到在不同的光学环境下都能较好的还原现场细节的目的,使图像变的更加细腻,提高摄像机的成像质量。现有的isp系统虽然具有去噪、白平衡、颜色增强等功能,但由于传感器较小、镜头相对紧凑等硬件方面的限制,导致其结构相当复杂、处理速度较慢,而且重建的照片往往会具有细节丢失、较高的噪声以及低质量的色彩渲染等问题。针对以上问题,考虑采用基于深度学习模型的算法来解决。深度学习是一种模仿人脑思考能力分析并解决问题的神经网络系统,具有强大的信息处理能力,可以解决图像处理中的特定问题。基于深度学习模型的算法可以潜在地处理传统isp系统所存在的问题,可以隐式的完成所有isp过程(比如图像去马赛克、图像去噪、白平衡、颜色与对比度校正等)。除此之外,基于深度学习的isp系统还可以将传感器采集的raw数据直接转换到rgb空间,效果媲美于高端数码相机。与在标准isp中独立地解决任务序列的传统方法相比,基于深度学习的isp系统允许联合解决多个任务,可以在执行不同任务的网络部分之间共享信息,具有很大的缓解计算负担的能力。作为图像处理中不可或缺的一部分,isp具有很好的发展前景,但目前大多数isp算法是在软件层面实现的,具有复杂度高、处理速度慢的缺点,针对于实时应用的场景无法真正做到实时性。相对于单纯用软件进行图像处理,利用硬件来实现图像去噪、增强、复原等操作具有软件无法比拟的速度优势。在目前多种领域的应用中,单纯利用软件对图像进行操作已经不再现实,但是以硬件处理isp可以出色的胜任此种任务,实现对图像最为真实的还原。卷积神经网络(cnns)在图像处理任务领域得到了广泛的应用,由于这些标准的神经网络具有大量的操作和参数,因此在实际实现过程中,很难将其真正应用到嵌入式设备中。随着科技的进步,图像处理技术近些年来得到极大的重视和发展,其中isp图像处理技术作为相机图像处理技术的关键部分显得尤为重要。对于基于深度学习isp算法,目前主流的算法硬件实现平台有gpu、asic和fpga三种。图像处理器(gpu)经常被用于神经网络的训练,先对于cpu,其多线程处理的特点能够加速神经网络的运行速度。但其运行时功耗较大,很难在当前isp应用较多的嵌入式平台上得到实际应用。专用集成电路(asic)可以通过被设计成相应的硬件架构来对神经网络的加速,虽然其具备体积小、高性能和低功耗的特点,但同时也有着开发周期长、成本高以及灵活性低的缺点。现场可编程门阵列(fpga)可以针对不同功能设计实现相应的硬件电路,适合神经网络的硬件实现,fpga具有可配置、低功耗和灵活性高等优点可以很好的弥补专用集成电路的缺点,且相较于专用集成电路的成本更低。因此本发明主要研究在fpga上实现基于深度学习的isp算法架构的实现部署。利用fpga对神经网络进行加速。传统的算法部署到fpga上实现要经过漫长的开发周期,且主要以单向开发为主,要依次经历硬件算法架构设计,代码编写,功能仿真,在fpga上进行综合实现,时序分析,最后进行板上调试。中间任一个环节有问题都必须返回对前面的环节进行修改,从算法架构设计到最终板上验证的时间跨度极大,很难对算法进行验证优化,使得开发方式效率低下,开发周期长。基于模型的开发方式(mbd)通过自动代码生成技术和在环仿真技术可以大大缩短算法架构设计到板上验证的时间,在模型设计搭建过程中就可以对算法进行优化修改,非常适合硬件算法架构设计。(1)传统isp算法国内外研究现状图像信号处理流水线isp,用于处理图像信号传感器输出的图像信号。它在相机系统中占有核心主导的地位,是构成相机的重要设备。主要作用是对前端图像传感器输出的信号做后期处理,目前传统isp算法是分模块实现的,各个模块级按照流水线结构联构成整体的isp算法。主要功能模块有线性纠正、坏点去除、颜色插值、饱和度增强、噪声去除、白平衡、伽马矫正、自动曝光和自动增益控制等,每个模块在级联顺序上有着严格的顺序,各个模块的处理效果决定整体isp的处理效果。(2)基于深度学习的isp算法的国内外研究现状2006年,geofferyhinton提出了深度学习的概念,经过十几年的发展,深度学习技术在高级计算机视觉任务上取得了巨大的成功。2012年,通过深度学习训练的卷积神经网络在图像识别比赛imahenet中以巨大的优势超越了传统的算法,取得了冠军。2014年,facebook推出了基于深度学习的deepface项目,该项目的人脸识别正确率与人类相当。通过上述分析,现有技术存在的问题及缺陷为:(1)传统的isp系统结构复杂,处理流水线长,不同的isp芯片所设计的功能模块在处理流水线上的顺序不尽相同,大部分情况下取决于工程师的设计经验;同时,isp芯片仍存在部分场景下处理效果不佳,处理流水参数无法满足所有应用场景的痛点。(2)现有的isp系统由于传感器较小、镜头相对紧凑等硬件方面的限制,导致其结构相当复杂、处理速度较慢,而且重建的照片往往会具有细节丢失、较高的噪声以及低质量的色彩渲染等问题。(3)目前大多数isp算法是在软件层面实现的,具有复杂度高、处理速度慢的缺点,针对于实时应用的场景无法真正做到实时性。(4)图像处理器(gpu)经常被用于神经网络的训练,但其运行时功耗较大,很难在当前isp应用较多的嵌入式平台上得到实际应用。(5)专用集成电路(asic)可以通过被设计成相应的硬件架构来对神经网络的加速,但同时也有着开发周期长、成本高以及灵活性低的缺点。解决以上问题及缺陷的难度为:基于卷积神经网络这种端到端的处理方法可以替换传统isp系统,解决传统isp存在的问题。难点在于:针对isp的实际应用,需要综合考虑成本、功耗和灵活性,来寻找一种硬件平台来对卷积神经网络进行硬件部署实现。fpga是一种比较理想的实现平台。由于卷积神经网络的结构十分复杂,运算量巨大。部署到fpga上的难度在于:如果直接部署到fpga上会消耗大量的fpga资源,且运行速度非常慢,无法满足实际应用需求。因此需要针对卷积神经网络设计出一种硬件加速结构,提高卷积神经网络的运行速度,使其具备实际应用价值。同时,使用fpga开发卷积神经网络的难点在于:要消耗大量时间,开发周期长,且对卷积神经网络进行迭代非常困难。这里本文使用基于模型的开发方式能够解决传统fpga开发方式的难点。解决以上问题及缺陷的意义为:通过对基于卷积神经网络的isp架构进行硬件架构设计和实现。证明了在实际应用过程中使用卷积神经网络替代传统isp架构的可行性,并且本文设计的卷积神经网络isp硬件架构可在基于fpga的嵌入式设备上运行,具有很高的实际应用价值。同时本文设计的卷积神经网络加速结构也可对其他图像处理任务的卷积神经网络进行加速,为其他卷积神经网络加速提供参考,具有一定的参考价值。技术实现要素:针对现有技术存在的问题,本发明提供了一种深度网络相机图像处理方法、系统及应用,尤其涉及一种基于模型定义设计的深度网络相机图像处理方法、系统及应用。本发明是这样实现的,一种深度网络相机图像处理方法,所述深度网络相机图像处理方法包括:通过sensor输出的bayer格式raw数据送入板卡,经过阴影矫正预处理,开始进行cnn部分的运算;其中,所述运算加速部分包括池化模块、乘加阵列、缓存累加模块和激活模块;运算部分由运算逻辑控制模块进行控制,片上缓存使用完毕后,由运算逻辑控制模块给访问逻辑控制模块反馈;片外访问逻辑控制模块通过axi4总线与外部ddr进行通信;其中,所述逻辑控制模块还包含存储各个网络层信息、地址信息的寄存器;cnn运算完成后,根据图像特点送入后处理模块进行流水处理加以完善,最终输出rgb图像。进一步,所述卷积模块的实现模式,包括:3×3的卷积的完成过程为:一个慢时钟周期,卷积窗口向前滑动一次,快的时钟周期为慢时钟周期的三倍频率,在一个慢时钟周期下可完成以下三次操作:result=w01×f01+w04×f04+w07×f07result=w02×f02+w05×f05+w08×f08+result;result=w03×f03+w06×f06+w09×f09+result;由此完成一次卷积操作,窗口向前滑动一次。进一步,所述卷积模块的实现,包括:首先需要进行行缓存操作,通过级联fifo实现;级联fifo主要是通过串并转换的思想实现数据传输;左侧为使能信号划分,作用是根据原始使能信号生成七行数据对应的使能信号;右侧为级联fifo,实现行缓存功能;将初始使能信号通过计数器判断,依次向后延时1-7行缓存周期,包括原始使能信号,生成8个不同的使能信号,作用于七个级联fifo实现读写功能,每个级联fifo的输出均要比上一个fifo延时一个输出周期,实现方法为:(1)使能信号高电平到达时,控制第一个fifo的写使能,第一个fifo开始写入数据;(2)使能信号1,相比于原使能信号延时一个周期控制第一个fifo的读使能和第二个fifo的写使能;当第一个fifo的写使能有效时,第二个fifo写入第一个fifo输出的第一行数据;(3)一共级联七个fifo;分别由使能信号1-7控制,作用于读使能和写使能;在第一个级联fifo输出第7行时,第五个级联fifo恰好输出第1行数据,由此完成七行数据的缓存,进入卷积运算;选取一个小的运算单元进行说明,行缓存后通过rate_transition模块进行速率转换,行缓存得到一列数据后,与缓存的卷积核参数进行乘加运算,三个块时钟周期后,得到特征图上一个点的中间值,数据以流式传输完毕后,即可得到完整的单通道特征图。进一步,所述模拟外存模块的实现,包括:(1)数据组织方式,对于输入特征图,按照以下优先级进行数据划分:输入通道分块,输入特征图行数据,输入特征图列数据;即以分块的思想,按照行的形式对其进行一维展开进行存储;同样,对于权重数据,按照以下优先级进行存储:输出通道分块,输入通道分块,卷积核行数据,卷积核列数据;即卷积核的存储是将n个m通道输入权重块进行一维展开后,再按照行展开的形式进行;对于m×n加速结构,在输入输出通道上采取了并行运算;第一组数据为m个01位置的数据,按行的顺序进行存储直至第一块m个通道的特征图存储完毕,然后进行第二块的数据存储,将相关的分块参数存入寄存器;在第一个输出通道的m个01存储完毕之后,接下来存入第二个通道的m个01,直至所有输出通道的01存储完,返回第一个输出通道存储02,按照特征图存储的思想,完成所有权重数据的存储;对于k×m×n结构,由于行缓存的存在,数据划分并不需要重新安排,借助缓存操作即可满足并行运算需求;在输入特征图和权重数据的存储上是相同的;(2)借助ddr实现外存,模拟外存模块根据数据索引,在模型中模拟外存的作用;在后续的优化,使用axi总线结构,连接ddr存储;特征图ddr模拟模块根据输入的索引值,输出对应的特征图数据;原始bayer格式输入图以数据流的形式送入以模拟sensor真实输出,以constant器件的形式将控制逻辑需要的参数存储在模型中,后续会综合成寄存器形式;通过selector器件对constant器件内存储的数值进行选择输出;对于外部存储,对于权重数据本发明选择look_up_table器件进行模拟,进行写入操作的用dual_port_ram或fifo器件进行模拟;输入为板上控制模块反馈的控制信号,使能模块内的look_up_table等模块向板内送入数据;将不同的权重数据存入不同的look_up_table中,使用反馈的地址卷积层序号和卷积核序号换算成设定的编号,检测编号为真的查找表开始输出权重数据,所有查找表的输出通过multiportswitch进行选通,输出和当前序号符合的一路输出。进一步,所述池化模块的设计,包括:池化模块在预处理时被使用,其作用是将高分辨率的原图像降低到一个较低的尺度进行处理;其功能主要分为两部分,左侧的使用双端口ram实现的行缓存;池化模块实现的难点在于池化操作窗口滑动的步长为2,选取四个ram实现列维度上的缓存控制行缓存,使用跨时钟域处理,使其输出为连续的两行一组;送入池化运算模块;送入行缓存模块后,进行比较操作;值得注意的是,由于横向移动的步长也为2,所以,在每两个时钟周期才会输出一个值,用到的操作是使用一个模2的计数器进行计数,当有效值输出后将其送入寄存器,接下来的一个时钟周期的运算结果是无效值,取寄存器中的值作为输入;每两个时钟周期会更新一个有效值,由此完成有效数据的传输;输入为四行缓存输出,输出为最终的池化结果;这样的设计方式符合数据流的传输方式。进一步,所述激活模块与正则化模块的设计,包括:pynet网络结构运用到两种激活函数;双曲正切tanh以及leakyrelu;simulink提供了满足hdl生成的tanh模块,根据leakyrelu函数进行其运算结构设计;使用比较器和选择器完成整体运算,大于0保留原值,小于0则取原值0.2倍数;增加神经网络各层间的非线性关系,并在顶点精度为1/216的情况下较好的完成整流运算。进一步,所述累加模块,包括:累加操作的目的是为了解决由于分块操作造成的一次卷积运算无法输出完整的特征图结果;累加模块的输入为上一级卷积的运算结果以及控制信号;控制信号中包含传入的k,m,n,con_num卷积层序号,d_num操作序号;对于两个不同的卷积结构,其对于累加运算的要求也是不同的;首先介绍对累加操作要求比较小的kmn设计模式;kmn设计模式每次运算出的结果为n个通道上m个输入通道的卷积乘加结果;因此其需要需要进行m/m次累加操作,需要一个fifo即可以完成累加操作,若使用kmn设计模式的卷积模块,则累加模块设计为:一共有输出通道的分块数n个累加模块,并行的进行n个输出通道的运算;每个累加模块内为一个fifo和其他控制逻辑;输出包括累加结果,卷积结果有效信号conv_v,当前卷积全部完成layer_done信号;内包含32个累加模块,可以并行输出32个输出通道的解算结果;读写fifo期间对前序的卷积结果进行行缓存,当下一行数据就进入模块时,读出读出缓存结果进行累加,并将累加结果存入fifo中;该设计的巧妙之处在于本发明没有直接缓存第一行的结果,而是将其接入加法器,加0后进行缓存,这样在不影响第一次结果的前提下,避免使用了多余的fifo,缓解了板上紧张的资源情况;当得到当前是最后一块时,数据有效信号拉高开始向外输出;对于mn设计模式,一共需要进行两次累加操作:第一次累加操作完成k×k次特征图输入后得到的完整m个输入通道的特征图结果,第二次累加为进行m/m次累加操作后完成的完整特征图结果;该模块的模型搭建如下:第一次累加的思想与kmn设计模式相同,但是在通道数大于m后,需要将有效累加结果压入下一个fifo中,等待32个通道再次完成一个分块的累加后,第二块的读使能拉高,开始一次累加操作,并缓存回fifo中;直到所有卷积运算完成,通过switch模块进行选通,输出有效数据;累加模块输出的有效的数据根据逻辑控制模块的输出存入ddr或返回卷积模块进行下一步卷积,其输出的卷积完成信号,有效信号conv_v,layer_done等也作用于控制逻辑进行反馈。进一步,所述反卷积模块,包括:pynet网络在训练时采用金字塔结构,首先在一个较低尺度的网络上进行训练;因此,为了恢复到原输入的bayer格式的尺度,pynet采用了加入了反卷积的操作,使得其恢复到原分辨率;反卷积根据放大倍数,填充方式具体操作不同,以2倍反卷积为例,讲解反卷积的运算过程;进行卷积前,需要对原始图片进行填0操作,为使其卷积后大小为原分辨率二倍,卷积操作为:在像素间先填一个0,在图像上方填充两行0,在图像下方填充一行0,在图像左侧填充两列0,在图像右侧填充两列0;这样,用一个大小为3×3大小的卷积核卷积过后就可以得到原分辨率二倍的结果;在搭建模型实现过程中,卷积模块仍然复用本发明之前设计的乘加阵列以及累加模块,在每层卷积执行完最后一次卷积后,将卷积结果缓存在板上,从板上缓存读出时,利用一个模二的计数器,使其数据每间隔一个时钟周期读出,完成像素点间填充操作的完成;而对于行填充,在第一个图像数据读出前,先将0送入卷积累加模块即可;使用了三个计数器进行逻辑控制,三个计数器的功能分别为列技术,列计数记满使能行计数,行计数大于2,小于最后一行序号时,且列数大于2小于末尾列数时,开始每隔一个时钟周期压出一个数据;仿真结果如下:第一行为压入原始数据,第二行为输出结果,可以看到,在压入前两行数据时,进行0填充,第三行开始,进行隔0输出;放大波形中,每行的开始会填充两个0,然后再隔0输出,仿真结果正确;所述逻辑控制模块控制逻辑根据当前的运算进度,从外部ddr中取出相应的权重值,并判断累加模块的输出何时是有效的;设计逻辑控制模块时,初始设计思路如下:控制模块需要能够输出卷积操作开始信号,卷积操作复位信号;同时,由于每次卷积操作的权重大小不同,卷积次数不同,因此需要对当前处理进度进行标记;simulink提供stateflow进行设计,以模拟状态机过程,为了方便整体设计,本发明并没有采用状态机设计,而是采用计数器进行状态更新;整个逻辑控制模块的基础就在于卷积层数和操作序号的更新,如果能设置晚辈的更新逻辑既可以通过此逻辑来进行完成信号,有效信号,外存的读写使能信号以及外存的地址更新逻辑的设计;直接设计pynet的逻辑控制模块较为复杂,因此先设计较为简单的原型验证模块;逻辑控制模块的原理模型输入为使能信号,使能信号为高时逻辑控制模块开始控制整个模型运行;与padding模块类似,使用三个计数器进行逻辑控制,第一个计数器的作用为记录时钟周期数,第二个计数器作用为记录卷积层数conv_num;第三个计数器作用为记录本次操作为卷积层中的第几步卷积;下方为两个multiportswitch模块,根据conv_num选择当前卷积层共几次卷积操作及每次卷积操作需要多少时钟周期;因此只要把相应的常数进行更改就可以完成对模型的更新;示波器第一行显示conv_num的更新,第二行显示卷积序号的更新,第三行显示每个卷积层计数器复位信号,该信号可以充当卷积完成的标志,进行输出;对整个神经网络的运算过程做出相应的时序分析,将运算步数更新到模型中的constant模块,即可完成逻辑控制模块单位设计;对于mn卷积运算结构,卷积模块的并行结构为m输入通道和n输出通道,对于k×k的卷积结构,当全图遍历k2遍可以输n张特征图,若总输入通道为m,总输出通道为n,则完成一次卷积运算需要的时钟周期为:k×k×h×w×(m/m)×(n/n)其中h为当前卷积层的尺度下特征图的高,w为当前卷积层尺度下特征图的宽,可以通过conv_num计算得到;对于kmn设计模式,每次m输入通道的特征图和n个卷积核进行运算,得到n张特征图,则完成一次卷积运算需要的时钟周期为:h×w×(m/m)×(n/n)通过以上公式,计算每次卷积运算的时间节点,捕捉每次卷积的开始信号和结束信号,并输出外存地址等其他必要信号,得到逻辑单元控制模型。本发明的另一目的在于提供一种实施所述深度网络相机图像处理方法的深度网络相机图像处理系统,所述深度网络相机图像处理系统包括:卷积模块、模拟外存模块、池化模块、激活模块、正则化模块、累加模块、反卷积模块和逻辑控制模块;卷积模块:卷积模块完成卷积神经网络中卷积运算的部分,输出多通道特征图。模拟外存模块:模拟实际设计中的ddr模块以在模型中实现内外存数据交换的功能。池化模块:完成深度网络中池化层的功能,实现图像降采样。激活模块:完成深度网络中激活函数的功能,有leaky_relu和tanh两种。累加模块:完成缓存特征图计算中间值并执行累加直到输出完整特征图结果。反卷积模块:实现填充0功能,扩充特征图尺度满足反卷积运算的需求,将填充后的数据送入卷积模块,实现反卷积功能。逻辑控制模块:控制模型整体数据流向,外存地址更新,读写使能,累加数据输出。mbd总体模型中,外部连接两个ddr模拟模块,外部模块受板上模块的读写逻辑控制,输出相应的权重数据与特征图数据;整体模块的输入为时钟信号,使能信号,卷积核输入,特征图输入,输出的控制信号包括两个ddr共用的读使能,两个ddr的写使能,conv_num和d_num进入模拟ddr模块经过逻辑运算换算为地址,索引其输出相应地址;卷积内部模型中,数据进入后根据使能信号选择是否填充,在本发明的网络中始终需要进行填充;填充后的数据送入行缓存,行缓存数据送入cnn模块,cnn模块进行一次卷积运算后送入累加模块进行缓存,等下一次卷积完成运算后也送入累加模块完成一次累加;受逻辑控制模块控制,决定累加模块何时输出有效特征图。本发明的另一目的在于提供一种数字图像处理终端,所述数字图像处理用于实现所述的深度网络相机图像处理方法。结合上述的所有技术方案,本发明所具备的优点及积极效果为:本发明提供的深度网络相机图像处理系统,基于深度学习,允许联合解决多个任务,可以在执行不同任务的网络部分之间共享信息,具有很大的缓解计算负担的能力。附图说明为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图做简单的介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下还可以根据这些附图获得其他的附图。图1(a)是本发明实施例提供的三星公司isp框架示意图。图1(b)是本发明实施例提供的ti公司算法框架示意图。图1(c)是本发明实施例提供的xilinxisp框架示意图。图2是本发明实施例提供的pynetcnn网络架构示意图。图3是本发明实施例提供的在输入通道m上以m为单位进行分块,在输出通道上以n为单位进行分块的示意图。图4是本发明实施例提供的在特征图的长宽维度上进行展开并行的原理图。图5是本发明实施例提供的在卷积核的3×3维度进行并行运算的示意图。图6是本发明实施例提供的并行分块策略读写和资源分析示意图。图7是本发明实施例提供的并行情况以及板上资源情况的分析结果示意图。图8是本发明实施例提供的传统的fpga设计流程示意图。图9是本发明实施例提供的基于模型的设计方法工作流程示意图。图10是本发明实施例提供的仿真与验证过程示意图。图11是本发明实施例提供的在simulink中可以进行手动定点化或借助fixed-point-tool进行自动定点化的示意图。图12是本发明实施例提供的生成代码的功能通过hdlworkflowadvisor实现的示意图。图13是本发明实施例提供的在环测试整体架构示意图。图14是本发明实施例提供的pynet网络的预处理部分示意图。图15是本发明实施例提供的pynet网络的网络主体示意图。图16是本发明实施例提供的通用的基于深度学习的isp处理架构示意图。图17是本发明实施例提供的一个3×3的卷积的完成过程示意图。图18是本发明实施例提供的将初始使能信号通过计数器判断,依次向后延时1-7行缓存周期的示意图。图19是本发明实施例提供的行缓存模块结果示意图。图20是本发明实施例提供的完整的单通道特征图。图21是本发明实施例提供的特征图数据存储方式示意图。图22是本发明实施例提供的其权重数据的存储思想示意图。图23是本发明实施例提供的模型搭建示意图。图24是本发明实施例提供的模型结构示意图。图25是本发明实施例提供的行缓存波形示意图。图26是本发明实施例提供的池化运算操作模块模型搭建示意图。图27是本发明实施例提供的双曲正切tanh以及leakyrelu。simulink提供了满足hdl生成的tanh模块示意图。图28是本发明实施例提供的leaky_relu模型设计示意图。图29是本发明实施例提供的激活模块与正则化模块的设计流程图。图30是本发明实施例提供的累加模块设计示意图。图31是本发明实施例提供的mn设计模式示意图。图32是本发明实施例提供的卷积操作示意图。图33是本发明实施例提供的反卷积模块的原理模型搭建示意图。图34-图35是本发明实施例提供的放大波形示意图。图36是本发明实施例提供的原型验证模块的设计原理图。图37是本发明实施例提供的仿真结果示意图。图38是本发明实施例提供的逻辑单元控制模型示意图。图39是本发明实施例提供的mbd总体模型示意图。图40是本发明实施例提供的卷积内部模型整体示意图。图41是本发明实施例提供的波形对比结果和实际结果示意图。图42是本发明实施例提供的原始raw格式图。图43是本发明实施例提供的mbd硬件架构模型输出结果示意图。图44是本发明实施例提供的软件算法结果示意图。图45是本发明实施例提供的深度网络相机图像处理系统结构框图;图中:1、卷积模块;2、模拟外存模块;3、池化模块;4、激活模块;5、正则化模块;6、累加模块;7、反卷积模块;8、逻辑控制模块。图46是本发明实施例提供的深度网络相机图像处理方法流程图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。针对现有技术存在的问题,本发明提供了一种深度网络相机图像处理方法、系统及应用,下面结合附图对本发明作详细的描述。如图45所示,本发明实施例提供的深度网络相机图像处理系统包括:卷积模块1、模拟外存模块2、池化模块3、激活模块4、正则化模块5、累加模块6、反卷积模块7和逻辑控制模块8。卷积模块1:卷积模块完成卷积神经网络中卷积运算的部分,输出多通道特征图。模拟外存模块2:模拟实际设计中的ddr模块以在模型中实现内外存数据交换的功能。池化模块3:完成深度网络中池化层的功能,实现图像降采样。激活模块4:完成深度网络中激活函数的功能,有leaky_relu和tanh两种。累加模块6:完成缓存特征图计算中间值并执行累加直到输出完整特征图结果。反卷积模块7:实现填充0功能,扩充特征图尺度满足反卷积运算的需求,将填充后的数据送入卷积模块,实现反卷积功能。逻辑控制模块8:控制模型整体数据流向,外存地址更新,读写使能,累加数据输出。mbd总体模型中,外部连接两个ddr模拟模块,外部模块受板上模块的读写逻辑控制,输出相应的权重数据与特征图数据。整体模块的输入为时钟信号,使能信号,卷积核输入,特征图输入,输出的控制信号包括两个ddr共用的读使能,两个ddr的写使能,conv_num和d_num进入模拟ddr模块经过逻辑运算换算为地址,索引其输出相应地址。卷积内部模型中,数据进入后根据使能信号选择是否填充,在本发明的网络中始终需要进行填充。填充后的数据送入行缓存,行缓存数据送入cnn模块,cnn模块进行一次卷积运算后送入累加模块进行缓存,等下一次卷积完成运算后也送入累加模块完成一次累加。受逻辑控制模块控制,决定累加模块何时输出有效特征图。如图46所示,本发明实施例提供的深度网络相机图像处理方法包括:s101,通过sensor输出的bayer格式raw数据送入板卡,经过阴影矫正预处理,开始进行cnn部分的运算;其中,所述运算加速部分包括池化模块、乘加阵列、缓存累加模块和激活模块;s102,运算部分由运算逻辑控制模块进行控制,片上缓存使用完毕后,由运算逻辑控制模块给访问逻辑控制模块反馈;s103,片外访问逻辑控制模块通过axi4总线与外部ddr进行通信;其中,所述逻辑控制模块还包含存储各个网络层信息、地址信息的寄存器;s104,cnn运算完成后,根据图像特点送入后处理模块进行流水处理加以完善,最终输出rgb图像。下面结合实施例对本发明的技术方案作进一步的描述。1、针对现有技术存在的问题,本发明考虑采用基于深度学习模型的算法来解决传统isp系统存在的问题,通过数据驱动的算法设计方式解决场景适应性问题。并且将算法部署到fpga上实现算法的功能和性能验证。由于isp的处理质量更多地取决于主观质量,数据标注难度大,目前针对isp的数据集相对较少,但后续随着参与改进的人员不断增加,数据集将逐步扩大,深度网络结构也将不断改进。鉴于传统的fpga设计方式不适用于持续改进的算法硬化任务,本发明研究了基于模型定义设计(mbd,modelbaseddesign)的设计和验证方式,将这一设计方式应用于isp的深度网络fpga设计实现,并完成了整个验证平台的搭建。论文的主要创新包括以下三个方面:(1)深入研究了传统isp的框架和相关处理算法,通过对比不同isp处理流水线的处理模块和流水顺序,分析了传统isp设计的不足。在此基础上研究了基于卷积神经网络的isp框架,对基于卷积神经网络的isp框架进行硬件加速研究,提出了针对一种基于卷积神经网络的isp框架进行硬件加速的方法。(2)为了在数据集不断扩充,算法网络结构不断更新的情况下,快速实现isp的硬件验证,本发明提出了一种基于mbd的深度网络isp设计和验证平台设计方法。平台采用matlab的simulink作为基本工具,在matlab中实现完整的测试数据生成和传输、isp神经网络处理和处理结果验证。所有的设计采用高级语言完成。(3)采用mbd的设计方法,本发明完成了所提出的深度神经网络的模型设计,论文详细指出了设计的难点,并对关键模块的设计进行了深入分析。为满足现实中相机系统中实时和高质量的isp处理需求,本发明基于深度学习的isp算法面向硬件设计了一种快速高效的mbd算法架构,并设计了一套低成本高效并行全流水线的硬件架构,并最终将该架构部署到fpga上,进行实验评估后,该算法架构相较于传统isp算法架构的效果性能更优,同时能做到实时、高效和快速的处理效果,具有非常重要的学术意义和实际应用价值。本发明采用基于深度学习模型的算法来解决传统isp系统存在的问题,并且将算法部署到fpga上来对算法进行加速处理,由于传统fpga开发方式迭代验证周期长,本发明采取基于模型的方式来进行算法的开发验证,设计了一种基于深度学习的mbdisp硬件架构。2、基于卷积神经网路的isp算法目前传统isp算法框架并没有形成一个特定的标准,各个模块的级联顺序和具体的算法选用在很大程度上依赖设计者的经验,目前主流的isp框架各不相同,但却都有着很好的处理效果。如图1所示为各个公司的isp框架。2.1基于深度学习的isp算法研究与传统的方法不同,基于深度学习的isp算法用一个深度学习模型来学习整个isp处理流程。通过训练该深度学习模型,将原始bayer数据从相机传感器映射到目标高质量的rgb图像,从而本质上整合了所有图像处理步骤所需的细粒度照片恢复。2.1.2基于pynet卷积神经网络的isp算法研究isp处理中的关键问题在于从raw格式图像转换为rgb图像过程中的全局图像增强和局部图像增强,全局图像增强用来改变图像的内容和图像的高级属性,如亮度,白平衡和色彩饱和度。局部图像增强用来处理图像低层次的处理,如边缘增强,锐化,噪声去除以及去模糊化。全局和局部之间的处理是相互作用的,对于边缘增强或局部颜色校正等任务来说,语义理解是至关重要的。目前基于深度学习的isp处理算法有很多,但绝大部分算法是针对全局图像增强和局部图像增强的其中的一个方面进行设计的。这些模型在完成raw图像到rgb图像的映射或者通用的图像增强时会都会遇到相应的问题:vgg-、resnet-和基于densenet的网络不能显著改变图像,而依赖于u-net和pix2pix架构的模型不能很好地改善图像的局部属性。近些年来有许多学者针对上述存在的问题开展对神经网络模型的优化研究。andreyignatov等人提出了一种名为pynetcnn的一种新的金字塔cnn体系结构。这种端到端的深度学习网络结构专为细粒度图像恢复而设计,结合了所有isp步骤,可以隐式学习执行所有isp步骤,如颜色插值,去噪,白平衡,颜色和对比度校正等等。此外,pynetcnn网络模型在不同尺度上对图像进行处理,并将并将学习到的全局和局部特征结合在一起,从而使得该模型具备全局和局部相结合的图像增强能力。pynetcnn网络架构如图2所示。pynetcnn网络模型为一种倒金字塔形状的网络结构,并且在五个不同维度对图像进行处理。该网络结构使用大小从3x3到9x9的卷积核并行地对特征图进行处理。为了使卷积神经网络学习到所有不同维度的特征,每一层网络与的输出都级联起来,较低维度的输出经过上采样与高维度相叠加后进行卷积运算,卷积运算完成后使用leakyrelu激活函数进行处理,输出层使用tanh函数将结果映射到(-1,1)区间,除顶层外,第二层到第五层网络全都进行实例化处理。该模型从最低层开始进行逐层训练,在最底层训练完之后再下一层网络的训练,直到在原始分辨率的图像上完成最终的训练。进行通过在较低分辨率上执行全局图像处理,使得图像在低尺度上实现较好的图像重建效果。由于每个模型的高层融合了低层的高质量特征,因此高层主要学习重建缺失的低层细节并对结果进行细化。损失函数整个卷积神经网络分为五层,每一层网络学习图像在对应尺度上的特征,层级越高学习到的图像局部属性就越多。在不同尺度上使用不同的损失函数对模型进行训练。模型第五层输入的图像是对原始图像进行16倍下采样后的图像,对原始图像进行8倍下采样后输入到模型第四层进行处理,同时将第五层处理完后的图像又进行上采样到第四层,和第四层的输入图像进行叠加后一并处理。模型的第四层和第五层主要是处理的是图像的全局特征,包括全局色彩增强、全局亮度矫正、对比度增强等。由于感知损失在这两个层级上是无效的,因此模型的第四层和第五层主要被训练来减小均方误差(mse)。模型第三层输入的图像是对原始图像进行4倍下采样后的图像,对原始图像进行2倍下采样后输入到模型第二层进行处理,将第四层处理完后的图像进行上采样到第三层,和第三层的输入图像进行叠加后一并处理,同样的将第三层处理完后的图像又进行上采样到第二层,和第二层的输入图像进行叠加后一并处理。第三层和第二层针对图像较低级的全局属性进行处理,在对图像进行语义理解的基础上,对图像中的物体进行颜色的增强和锐化处理等。这两个层级上所使用到的损失函数是vgg网络的感知函数和mse损失函数的叠加,叠加的比例是4:1。模型第一层的输入图像是原始分辨率的图像,处理时需要叠加第二层上采样的图像。第一层进行的是图像局部处理,主要包括:图像纹理增强、去噪、局部色彩增强。使用下面的损失函数进行第一层网络的训练。式中的损失函数值归一化成1。结构相似性损失函数(ssim)在这里使用,是为了增强重建图像的动态范围,mse损失函数为了减小色彩偏差。3、基于卷积神经网络的isp算法硬件加速虽然基于卷积神经网络的isp算法架构相较于传统isp算法架构的算法性能更优,但由于pynet卷积神经网络的结构复杂、规模巨大,计算过程中涉及到大量的参数,需要消耗大量的计算单元,使得这种卷积神经网路在中央处理器(cpu)上的计算效率低下,运行时间较长,对isp处理无法做到实时性。因此有必要对卷积神经网络进行加速处理。基于fpga平台的cnn加速器,由于其具有性能高、可重构、功耗低等优点,近些年来大量学者对其进行广泛研究。本发明主要研究在fpga平台上对基于卷积神经网络的isp算法架构进行加速,利用fpga的并行处理特性以及设计流水线处结构,来提高整个系统的吞吐量。3.1面向硬件基于深度学习的isp加速结构设计cnn网络中的运算主要由卷积计算、反卷积计算、池化计算、激活函数、正则化等运算组成。其中卷积运算为整个cnn网络加速结构设计的核心和难点。限制硬件上加速运算的关键因素主要有计算资源限制、内存大小。计算资源限制计算速度及并行度,片外内存限制数据的吞吐量和访问速率,片上内存可以减少数据的交换次数,决定单位时间可以完成的运算数量。三者结合起来影响一个加速结构的加速效果。在fpga等硬件中合理地设计运算单元的结构,有效地组织划分权重weight,偏置参数bias等数据,通过某些单元的复用缓解片上资源紧张的问题是设计卷积运算的核心。cnn网络中的卷积运算可以视为一个6层的嵌套循环,六个维度分别为卷积核大小(k×k)、输出特征图尺寸(h×w)和输入和输出通道(m×n)。3.2.1.1循环运算分析由于板上资源有效,把所有数据全部缓存同时完成所有乘加运算是不现实的。因此需要多次分步运算,将上述提到的循环结构进行进一步展开。在6个维度中,特征图的高h,宽w,输入通道m和输出通道往往数值较大,因此需要在这四个维度进行分块运算。下面依次对这四个维度进行分析:在输入通道m上进行的是乘加运算,在m个通道上分别进行卷积运算最后相加得到m个通道上同一位置的卷积结果。若对m进行分块,需要对所有分块均完成运算后才能得到结果,这样不可避免地设计多次计算结果的读写,增加板上数据和板外数据的交换次数因此应尽量避免在该维度上多次分块。在输出通道n上进行的是并行运算。对n进行分块,各个并行运算的结果并不会互相影响,得到的结果是一个输出通道上的特征图,不会因为分块增加数据的吞吐次数,因此是比较合理的分块策略。观察我们使用的网络结构,均为32的倍数,因此可以以32个通道为一块进行分块循环。在二维平面hw上进行循环展开即将一张较大的图片分为几部分,分块处理后最后拼接在一起。块与块之间进行的是并行运算,计算步骤相同。在本次设计的网络中,随着网络层数的加深,h,w越来越大。最大的h,w是最小的h,w的16倍数,因此我们可以选择最小特征图或较小的特征图作为单元特征图,以此为单位完成对特征图的划分。作为。除此之外,这两个维度的分块还需要解决padding和分块间重叠部分的特征图,这会影响数据的访问量。3.2.2.2并行运算分析出色的并行运算能力使得使用fpga进行推断成为非常高效的方法,也可以为后续asic设计打下基础。尽可能地以数据流的形式进行并行处理可以有效的减少对同一数据的重复读取,同时有效减少运算步数,从而得到更快的运行速度。结合上一小节的循环运算和并行运算,可以在资源消耗合理的前提下获得较高的运算速度。并行运算单元的设计应同时考虑板上的计算资源与数据读写存储的逻辑,以便卷积神经网络中最关键的乘加部分可以高效完成。在卷积运算的六重循环中,乘加运算直接进行乘加矩阵的设计,设计到乘法累加运算的部分则需要考虑完成方式,进行分块运算后通过板上缓存或板外存储数据交换即可完成累加。考虑六个维度,卷积核的二维维度k*k上,直接送进乘加单元进行运算;在特征图维度w*h上,采用分块并行后进行拼凑的方法,为了获得较高的并行度需要设计较为复杂的数据控制逻辑。在输出输入维度上,在前述分块的单位块内进行多通道的并行运算,分块结果经过反复存储读写最后完成累加得到的特征图。下面详细说明分块与并行结合的策略。在输入和输出通道m×n上进行展开,在输入通道m上以m为单位进行分块,在输出通道上以n为单位进行分块。如图3所示,输入特征图被分为m/n块,每块为(w×h×m)/m个特征值,每个k×k×m的卷积核被分为m/n块,每个权重块含(w×h×m)/m个特征值。每次进行乘加运算,取出特征值的一块,每次同时使用n个卷积核进行卷积运算。则每块输入特征图需要完成n/n次数据读取可以完成一块特征图的卷积运算,每次读入的权重数据量为k×k×m×n。我们称一次读入输入特征图和权重后完成的乘加运算为一次并行运算,则一张输入特征图的所有卷积运算需要(m/m)×(n/n)次并行运算。如图4所示,在特征图的长宽维度上进行展开并行的思路是,在w维度上以w为单位进行分块,在h维度上以h为单位进行分块。则输入大小为w×h×m大小的特征图总共被划分为(w/w)×(h/h)×m块特征图区域。依次与各个权重进行乘加运算,可以得到(w/w)×(h/h)×n块输出特征图,最终在wh维度上进行拼接则可以完成所有运算。对于改种并行策略,需要将特征图数据分块存入,在n个输出通道同时进行运算的情况下,需要完成(w/w)×(h/h)次数据读写。但是在实际设计中,直接在wh维度上的展开并行难以满足资源要求,在mn维度上分块并行策略相同的情况下,wh维度的分块策略会使资源消耗达到原来的(w/w)×(h/h)。因此要合理平衡两个维度的分块情况。且在相机中以数据流的形式传输过程中,w维度上的分块需要借助大量板上缓存,因此对于该维度上的分块需要进一步探讨。在卷积核的维度同样可以进行并行运算,在这里可以需要运用行缓存的思想。以3×3的如图5所示,每一行数据以数据流的形式从外存读入到板上,通过乒乓操作完成三行缓存,再经过延时操作,可以同时得到一个3×3的单元。在二维输入图只输入一次的情况下,可以通过3×3的乘加阵列一次性完成卷积运算。3.2.2.3并行分块策略读写,资源分析若将上述三个维度完全展开,如图6所示,在输入输出通道mn维度上分别以m,n为单位进行分块,在特征图长宽维度上分别以w,h为单位进行分块,在卷积核的维度上做全展开并行处理。下面主要针对板上缓存资源以及计算资源进行分析。输入输出特征图的长宽均为w,h,输入特征图大小为w×h×m,输出特征图大小为w×h×m,权重为k×k×m×n。完成一次完整的卷积操作,总共需要完成的乘法操作数如下:sum(mul)=k×k×w×h×m×n完成的加法总数为:sum(add)=(k×k-1)×w×h×m×n+(m-1)×w×h×n考虑全展开并行的情况,在时刻t,全展开并行操作可以完成k×k×m×n×(w/w)×(h/h)次乘法操作。带入实际数据举例分析,假设卷积核大小为5×5(k=5),特征图长宽为1920×1080,以160×120进行分块,输入通道32(m=32),输出通道64(n=64),以32为单位对输入输出通道进行分块展开,则在一个时钟周期,需要同时完成的乘法操作数量为:5×5×32×32×12×9=2764800即至少需要2764800块dsp资源,仅需38400个时钟周期即可得到运算结果。但是如此多的资源消耗显然不符合实际设计需求,因此要在在考虑数据读取、板上资源情况下合理设计并行展开逻辑,才能效率最高地平衡资源和并行度的矛盾问题。在避免全展开的情况下,不可避免地需要进行数据服用。对于数据复用有两种情况:特征图数据复用以及权重数据复用。特征图数据复用即将特征图分块缓存于板上,不断地从外存中读取权重数据,权重数据复用则相反。对于特征图数据复用,特征图读入的总量是确定的:w×h×m,假设需要读入权重数据a次,则完成一次卷积运算的总数据访问量为:e=w×h×m+a×k×k×m×n访问次数即分块情况由每个分块的大小决定,在特征图复用的情况下,假设每个分块的大小为b1,则有:a=w×h×m/b1决定若为权重复用,则完成一次卷积运算的总数据访问量和访问次数为:e=b×w×h×m+k×k×m×nb=k×k×m×(n/b2)根据上述推导关系,带入pynet网络的第四层卷积,其输入输出特征图大小为736×992×64,卷积核大小为3×3×64×64,代入数据得到片上缓存大小与数据访问量关系如下。分析并行情况以及板上资源情况,得到以下限制条件:以上限制条件决定了片上缓存数据不可能无条件的增长,由图7可以看出对于第四层网络该部分的卷积,特征图复用的方式整体情况优于权重数据复用的形式。与此同时,结合资源情况可以以此为依据得到合适的分组依据:假设板上dsp资源为1500,若以权重复用的形式设计,应选取m=32,n=32或k=3,m=8,n=16的分块方式,两种分组方式消耗的dsp资源依次为1024和1152,从而最大化地利用板上资源。依据板上资源实际情况,按照数据访问量尽量小的原则进行后续的硬件结构设计。近年来,基于深度学习算法的现代应用的迅速发展,进一步促进了研究和实现。特别是基于fpga平台的深度cnn加速器,由于其具有性能高、可重构、开发周期快等优点而被提出。虽然目前的fpga加速器比一般处理器表现出了更好的性能,但加速器的设计空间还没有得到很好的利用。一个关键的问题是计算吞吐量可能不能很好地匹配fpga平台提供的内存带宽。因此,由于逻辑资源或内存带宽利用率不足,现有的方法不能达到最佳性能。与此同时,深度学习应用程序的复杂性和可扩展性的提高也加剧了这一问题。4、基于深度学习的isp算法架构mbd硬件架构设计实现深度学习的训练过程需要运用反向传播算法,对损失函数的求导等操作,经过多次迭代过程得到最终的网络模型参数。这一过程并不适合在fpga上进行实现。而深度学习的推理过程具有单向运算的特点,通过合适的定点运算,可以在保证推理精度的情况下提高运算效率。fpga的可编程特性,使得在fpga上进行部署验证多种网络模型结构成为可能,且可以为专用的深度学习asic设计提供架构原型。因此在fpga上进行相关深度学习网络模型结构的部署具有十分深远的意义。mbd作为一种高层设计方法,在可以有效深入到底层算法结构优化的同时,还具有高效进行周期迭代,便于验证测试的特点。本章工作继承前序的算法改进,硬件结构设计思想,在权重偏差的数据组织和访问方式进行创新,合理进行分块和并行运算的结合,提出一种通用的卷积神经网络硬件架构,并针对本发明使用的基于深度学习的isp算法模型pynet进行专门的优化,从而实现基于深度学习的isp算法的硬件加速部署。4.1基于模型的设计方法传统的fpga设计流程是自上到下的,如图8所示。由系统工程师使用高级语言如matlab,c语言等对各个模块的功能进行描述复现,进而综合起来进一步建立系统模型,输出代码与文档交给硬件工程师。硬件工程师在理解算法及系统后,用verilog,vhdl等硬件描述语言对各个模块进行rtl级描述,进而仿真,综合,针对出现的问题向系统人员进行反馈,系统人员进行修正后进行反复调整迭代,完成整个系统的设计。传统的fpga开发模式有诸多弊端,首先自上而下的开发模式效率低下,系统工程师和硬件工程师的沟通迭代极度依赖文档,而文档协作避免不了歧义性的问题。其次,将基于cpu运行的顶层代码进行针对硬件电路的改写需要大量时间经历,硬件工程师在处理算法改进的问题的同时还需要注重时许、接口、量化误差等诸多问题。同时,传统的fpga开发方法在进行图像算法的落地实现时,其测试数据往往只能通过输入向量进行验证,并不能第一时间方便、直观地看到算法优化后的实际效果如何。除此之外,当设计规范不可避免的会进行调整,例如码流通道的改变,需要进行前后接口、时序的不断调整,这样的工作方式是十分效率低下的。基于模型的设计方法在一定程度上,较好地克服了传统开发流程的这些缺点。相较于传统的设计方法,基于模型的设计方法(mbd)很好的集成了系统工程师和硬件工程师两个角色。基于模型的设计方法工作流程如图9所示。这种设计方法以创造可执行算法的模型为核心,消除了设计的不确定性,使得开发人员可以在不不考虑底层结构设计的情况下,在simulink中进行建模,对参数进行配置。专注于待部署算法的模型搭建。且模型在开发完成后,会生成verilog或vhdl代码,自动调用vivado,modelsim等平台对工程进行仿真综合实现,完成在板卡上的部署。除了工程文件,在simulink中进行模型设计还可以输出设计报告、模型报告等文档资源。对于测试验证部分,mbd设计方法可以进行硬件在环验证,借助来自pc端的输入,可以连续、方便地进行不同数据源测试验证,并可以直观地看到验证效果。基于模型的设计方法借助simulink图形化的设计仿真环境,以此作为桥梁完成算法到硬件的转移落地。如图10所示,仿真验证过程中,可以方便地通过内置的scope或display原件观察中间结果,也可以使用toworkspace模块将数据输出至matlab工作区,借助matlab语言直接做出观察与分析。从simulink到fpga主要分为以下几个步骤:1)算法分析:常见的卷积神经网络模型通常在tensorflow、pytorch等框架下使用python进行复现。虽然xilinx等厂商推出了如hls等顶层fpga开发工具,但是由于其没能深入到底层,本发明不能对其直接进行结构方面的优化。因此需要在充分理解卷积神经网络的运算过程、深度学习基本框架的复现代码以及算法思想后,才能进行后续的模型搭建工作。2)模型搭建:基于模型的设计方法,顾名思义模型是整个设计的核心。在模型搭建时主要关心的是功能需求,因此在第一步的基础下,结合流水思想、已开发完善的ip单元,并行思想等进行模型设计。利用stateflow、模块复用等工具进行模型优化。结合simulink边设计边仿真的优势,本发明可以即时地发现模型中的问题,做出调整,在模型层面对运算结果有一个初步的验证。3)定点化:在fpga上不可能以浮点形式处理数据,因此,需要将浮点数据通过定点操作转换为定点数据。定点化的原则是满足精度要求。在simulink中可以进行手动定点化或借助fixed-point-tool进行自动定点化,如图11所示。进行手动定点化需要开发人员对硬件中每个中间数据的精度都有着精准的把握,而借助自动定点化工具fixed-point-tool可以通过自动分析得到数据取值范围从而方便本发明完成定点化。常用的开发模式为借助fixed-point-tool完成定点化后再对不合理的部分进行手动调整。4)代码生成:simulink支持vhdl,verilog两种hdl代码的生成。在生成过程中,还提供testbench生成,联合仿真模型生成,资源评估,文档生成,自动构建vivado、quartus工程等功能。生成代码的功能通过hdlworkflowadvisor实现,如图12所示。5)在环验证:在环验证fil(fpgaintheloop)作为mbd设计方法的一个突出优势,方便开发者使用真实的板卡i/o,借助pc端产生的信号源,快速确认和验证fpga设计在系统中按预期方式工作,在实际的fpga中运行并验证设计结果,与模型端结果进行比较分析,从而节省开发时间。在环测试整体架构如图13所示。6)软件集成:在fpga设计中,往往需要与顶层的上位机、底层的驱动结合。这一部分难以通过模型来实现,因此,在验证设计结果与功能无误后,需要将整体软件进行系统集成。在完成软件集成后,就可以进行传统流程中配置管脚,设置自动烧录等流程,从而完成了从算法到模型,再到fpga的完整mbd开发流程。由此高效地完成基于深度学习的isp模型开发。4.2基于mbd的isp系统根据系统硬件架构综述4.2.1pynet网络结构概述pynet网络是andreyignatov等人提出的一种新的金字塔结构的端到端的卷积神经网络,他以bayer格式的raw图像作为输入,输出三通道rgb图像。其可以分为预处理和和主体网络两个部分。预处理部分如图14所示,该模型是按顺序训练的,从最底层开始,这允许在较小的尺度下获得良好的图像重建结果,在这些尺度上处理非常低分辨率的图像,并且主要执行全局图像操作。因此需要先通过池化的操作将图像降采样到低尺度。网络主体如图15所示,整体网络结构呈现自下而上的倒金字塔形状,共五层。尺度的特征图,共有四种不同尺度的卷积。在较低层获得的输出用反进行上采样,和来自上层的特征图堆叠,然后在随后的卷积层中进行处理。在每个卷积操作完成后使用leakyrelu函数进行激活,最终输出全分辨率的rgb图像。接下来的工作将针对pynet网络结构,提出一种卷积神经网络的硬件加速结构,以和传统的isp流水做出比较。4.2.2网络整体架构的设计对pynet网络进行分析,整个网络结构的乘加数量和参数量非常巨大,这对数据组织和硬件加速实现造成了巨大困难。以结合通用性和专业性为目的,本发明提出了一种通用的基于深度学习的isp处理架构,如图16所示。sensor输出的bayer格式raw数据送入板卡,经过阴影矫正等预处理,开始进行cnn部分的运算。运算加速部分主要包含池化模块,乘加阵列,缓存累加模块,激活模块等。运算部分由运算逻辑控制模块进行控制,片上缓存使用完毕后,同样由运算逻辑控制模块给访问逻辑控制模块反馈。片外访问逻辑控制模块通过axi4总线与外部ddr进行通信。除了图中给出部分,还包含存储各个网络层信息、地址信息的寄存器。cnn运算完成后,根据图像特点送入后处理模块进行流水处理加以完善,最终输出rgb图像。4.3各个模块的设计和实现4.3.1卷积模块的实现4.3.1.1卷积模块实现模式在一般的相机系统内,图像数据都是以流的形式进行传输,同时fpga也更适合对单点数据和数据流进行处理。因此在设计模型时,需要符合实际的传输模式并遵循fpga的处理习惯。在上一节本发明讨论过,如果以全展开并行的方式进行设计会导致fpga板上资源不足,不符合实际的设计情况,为最大化利用资源提升速度,基于不同的并行维度提出了一种卷积模块实现方式。如图17所示,一个3×3的卷积的完成过程为:一个慢时钟周期,卷积窗口向前滑动一次,快的时钟周期为慢时钟周期的三倍频率,因此在一个慢时钟周期下可以完成以下三次操作:result=w01×f01+w04×f04+w07×f07result=w02×f02+w05×f05+w08×f08+resultresult=w03×f03+w06×f06+w09×f09+result由此完成一次卷积操作,窗口向前滑动一次。这样的设计更加灵活,避免了数据的反复读写。4.3.1.2卷积模块的实现首先需要进行行缓存操作,行缓存操作如图所示,通过级联fifo实现。级联fifo主要是通过串并转换的思想实现数据传输。左侧为使能信号划分,作用是根据原始使能信号生成七行数据对应的使能信号;右侧为级联fifo,实现行缓存功能。将初始使能信号通过计数器判断,依次向后延时1-7行缓存周期,如图18所示。由此,包括原始使能信号,生成了8个不同的使能信号,作用于七个级联fifo实现读写功能,每个级联fifo的输出均要比上一个fifo延时一个输出周期。具体实现方法为:1.使能信号高电平到达时,控制第一个fifo的写使能,第一个fifo开始写入数据。2.使能信号1(相比于原使能信号延时一个周期)控制第一个fifo的读使能和第二个fifo的写使能。当第一个fifo的写使能有效时,第二个fifo写入第一个fifo输出的第一行数据。3.同样的方法,一共级联七个fifo。分别由使能信号1-7控制,作用于读使能和写使能。在第一个级联fifo输出第7行时,第五个级联fifo恰好输出第1行数据,由此完成七行数据的缓存,进入卷积运算。行缓存模块结果如图19所示。选取一个小的运算单元进行说明,行缓存后通过rate_transition模块进行速率转换,行缓存得到一列数据后,与缓存的卷积核参数进行乘加运算,三个块时钟周期后,得到特征图上一个点的中间值,数据以流式传输完毕后,即可得到一张完整的单通道特征图,如图20所示。4.3.3模拟外存模块的实现两种卷积结构的虽然在运算步骤、内容、步骤均不相同,但是本小节经过分析发现二者在数据使用顺序上的共同点,以此为依据,需要对数据进行划分以便满足卷积运算的需要。4.3.3.1数据组织方式两种卷积运算加速结构虽然有差别,但是对于数据划分的思想也存在共同点。对于输入特征图,应按照以下优先级进行数据划分:输入通道分块,输入特征图行数据,输入特征图列数据。即以分块的思想,按照行的形式对其进行一维展开进行存储。同样,对于权重数据,两种结构对应的数据划分方法也存在一致性,应按照以下优先级进行存储:输出通道分块,输入通道分块,卷积核行数据,卷积核列数据。即卷积核的存储是将n个m通道输入权重块进行一维展开后,再按照行展开的形式进行。对于m×n加速结构,在输入输出通道上采取了并行运算。其特征图数据存储方式如图21所示,第一组数据为m个01位置的数据,按行的顺序进行存储直至第一块(蓝色区域)m个通道的特征图存储完毕,然后进行第二块(红色区域)的数据存储,将相关的分块参数存入寄存器,以便后续取数逻辑的设计。其权重数据的存储思想与其类似,如图22所示。相比于特征图数据,由于需要同时并行n个输出通道数据,因此在第一个输出通道的m个01存储完毕之后,接下来存入第二个通道的m个01,直至所有输出通道的01存储完,返回第一个输出通道存储02,接下来按照特征图存储的思想,完成所有权重数据的存储。对于k×m×n结构,由于行缓存的存在,数据划分并不需要重新安排,借助缓存操作即可满足并行运算需求。在输入特征图和权重数据的存储上是相同的。4.3.3.2模拟外存模块外存的实现,往往需要借助ddr。然而在simulink中并没能提供ddr模块供本发明使用。模拟外存模块根据数据索引,在模型中模拟外存的作用。在后续的优化,可以使用axi总线等结构,来连接ddr存储。特征图ddr模拟模块根据输入的索引值,输出对应的特征图数据。原始bayer格式输入图以数据流的形式送入以模拟sensor真实输出,以constant器件的形式将控制逻辑需要的参数存储在模型中,后续会综合成寄存器形式。通过selector器件对constant器件内存储的数值进行选择输出。对于外部存储,对于权重数据本发明选择look_up_table器件进行模拟,需要进行写入操作的用dual_port_ram或fifo器件进行模拟。模型搭建如图23所示。输入为板上控制模块反馈的控制信号,使能模块内的look_up_table等模块向板内送入数据。设计思想为,将不同的权重数据存入不同的look_up_table中,使用反馈的地址卷积层序号和卷积核序号换算成设定的编号,检测编号为真的查找表开始输出权重数据,所有查找表的输出通过multiportswitch进行选通,输出和当前序号符合的一路输出。4.3.4池化模块的设计池化模块在预处理时被使用,其作用是将高分辨率的原图像降低到一个较低的尺度进行处理。其模型结构如图24所示。其功能主要分为两部分,左侧的使用双端口ram实现的行缓存。池化模块实现的难点在于池化操作窗口滑动的步长为2,在数据流传输的过程中数据量减少,因此本发明选取四个ram实现列维度上的缓存控制行缓存,使用跨时钟域处理,使其输出为连续的两行一组。送入池化运算模块。行缓存波形如图25所示。送入行缓存模块后,进行比较操作。值得注意的是,由于横向移动的步长也为2,所以,在每两个时钟周期才会输出一个值,这里用到的操作是使用一个模2的计数器进行计数,当有效值输出后将其送入寄存器,接下来的一个时钟周期的运算结果是无效值,因此取寄存器中的值作为输入。这样操作,每两个时钟周期会更新一个有效值,由此完成有效数据的传输。池化运算操作模块模型搭建如图26所示。输入为四行缓存输出,输出为最终的池化结果。这样的设计方式符合数据流的传输方式。4.3.4激活模块与正则化模块的设计pynet网络结构运用到两种激活函数。双曲正切tanh以及leakyrelu。simulink提供了满足hdl生成的tanh模块,如图27所示。因此本发明需要根据leakyrelu函数进行其运算结构设计。leaky_relu模型设计如图28所示。使用比较器和选择器完成整体运算,大于0保留原值,小于0则取原值0.2倍数。增加神经网络各层间的非线性关系。整流结果如图29所示。在顶点精度为1/216的情况下较好的完成了整流运算,保证了精度收到的影响较为微弱。4.3.5累加模块累加操作的目的是为了解决由于分块操作造成的一次卷积运算无法输出完整的特征图结果。累加模块的输入为上一级卷积的运算结果以及控制信号。控制信号中包含传入的k,m,n,con_num卷积层序号,d_num操作序号。对于两个不同的卷积结构,其对于累加运算的要求也是不同的。首先介绍对累加操作要求比较小的kmn设计模式。kmn设计模式每次运算出的结果为n个通道上m个输入通道的卷积乘加结果。因此其需要需要进行m/m次累加操作,需要一个fifo即可以完成累加操作,若使用kmn设计模式的卷积模块,则累加模块设计如图30所示:一共有输出通道的分块数n个累加模块,并行的进行n个输出通道的运算。每个累加模块内为一个fifo和其他控制逻辑。输出包括累加结果,卷积结果有效信号conv_v,当前卷积全部完成layer_done信号。内包含32个累加模块,可以并行输出32个输出通道的解算结果。读写fifo期间对前序的卷积结果进行行缓存,当下一行数据就进入模块时,读出读出缓存结果进行累加,并将累加结果存入fifo中。该设计的巧妙之处在于本发明没有直接缓存第一行的结果,而是将其接入加法器,加0后进行缓存,这样在不影响第一次结果的前提下,避免使用了多余的fifo,缓解了板上紧张的资源情况。当得到当前是最后一块时,数据有效信号拉高开始向外输出。如图31所示,对于mn设计模式,一共需要进行两次累加操作:第一次累加操作完成k×k次特征图输入后得到的完整m个输入通道的特征图结果,第二次累加为进行m/m次累加操作后完成的完整特征图结果。该模块的模型搭建如下:第一次累加的思想与kmn设计模式相同,但是在通道数大于m后,需要将有效累加结果压入下一个fifo中,等待32个通道再次完成一个分块的累加后,第二块的读使能拉高,开始一次累加操作,并缓存回fifo中。直到所有卷积运算完成,通过switch模块进行选通,输出有效数据。累加模块输出的有效的数据根据逻辑控制模块的输出存入ddr或返回卷积模块进行下一步卷积,其输出的卷积完成信号,有效信号conv_v,layer_done等也作用于控制逻辑进行反馈。4.3.6反卷积模块pynet网络在训练时采用了金字塔结构,首先在一个较低尺度的网络上进行训练。因此,为了恢复到原输入的bayer格式的尺度,pynet采用了加入了反卷积的操作,使得其恢复到原分辨率。反卷积根据放大倍数,填充方式具体操作不同,本发明以2倍反卷积为例,讲解反卷积的运算过程。进行卷积前,需要对原始图片进行填0操作,为使其卷积后大小为原分辨率二倍,卷积操作如图32所示:在像素间先填一个0,在图像上方填充两行0,在图像下方填充一行0,在图像左侧填充两列0,在图像右侧填充两列0。这样,用一个大小为3×3大小的卷积核卷积过后就可以得到原分辨率二倍的结果。在搭建模型实现过程中,卷积模块仍然复用本发明之前设计的乘加阵列以及累加模块,在每层卷积执行完最后一次卷积后,将卷积结果缓存在板上,从板上缓存读出时,利用一个模二的计数器,使其数据每间隔一个时钟周期读出,完成像素点间填充操作的完成。而对于行填充,在第一个图像数据读出前,先将0送入卷积累加模块即可。原理模型搭建如图33所示。使用了三个计数器进行逻辑控制,三个计数器的功能分别为列技术,列计数记满使能行计数,行计数大于2,小于最后一行序号时,且列数大于2小于末尾列数时,开始每隔一个时钟周期压出一个数据。仿真结果如下:第一行为压入原始数据,第二行为输出结果,可以看到,在压入前两行数据时,进行0填充,第三行开始,进行隔0输出。放大波形如图34-35所示,每行的开始会填充两个0,然后再隔0输出,仿真结果正确。4.3.7逻辑控制模块逻辑控制模块的作用在于,由于乘法模块进行了复用,需要有一个控制逻辑根据当前的运算进度,从外部ddr中取出相应的权重值,并判断累加模块的输出何时是有效的。设计逻辑控制模块时,初始设计思路如下:控制模块需要能够输出卷积操作开始信号,卷积操作复位信号;同时,由于每次卷积操作的权重大小不同,卷积次数不同,因此需要对当前处理进度进行标记。simulink提供stateflow进行设计,以模拟状态机过程,为了方便整体设计,本发明并没有采用状态机设计,而是采用计数器进行状态更新。整个逻辑控制模块的基础就在于卷积层数和操作序号的更新,如果能设置晚辈的更新逻辑既可以通过此逻辑来进行完成信号,有效信号,外存的读写使能信号以及外存的地址更新逻辑的设计。直接设计pynet的逻辑控制模块较为复杂,因此本发明先设计了一个较为简单的原型验证模块,设计模块如图36所示。逻辑控制模块的原理模型输入为使能信号,使能信号为高时逻辑控制模块开始控制整个模型运行。与padding模块类似,使用三个计数器进行逻辑控制,第一个计数器的作用为记录时钟周期数,第二个计数器作用为记录卷积层数conv_num;第三个计数器作用为记录本次操作为卷积层中的第几步卷积。下方为两个multiportswitch模块,根据conv_num选择当前卷积层共几次卷积操作及每次卷积操作需要多少时钟周期。因此只要把相应的常数进行更改就可以完成对模型的更新。仿真结果如图37所示,可以看到其完成了正确的逻辑功能:示波器第一行显示conv_num的更新,第二行显示卷积序号的更新,第三行显示每个卷积层计数器复位信号,该信号可以充当卷积完成的标志,进行输出。综上,只要需要对整个神经网络的运算过程做出相应的时序分析,将运算步数更新到模型中的constant模块,即可完成逻辑控制模块单位设计。对于mn卷积运算结构,卷积模块的并行结构为m输入通道和n输出通道,对于k×k的卷积结构,当全图遍历k2遍可以输n张特征图,若总输入通道为m,总输出通道为n,则完成一次卷积运算需要的时钟周期为:k×k×h×w×(m/m)×(n/n)其中h为当前卷积层的尺度下特征图的高,w为当前卷积层尺度下特征图的宽,可以通过conv_num计算得到。对于kmn设计模式,每次m输入通道的特征图和n个卷积核进行运算,得到n张特征图,则完成一次卷积运算需要的时钟周期为:h×w×(m/m)×(n/n)通过以上公式,计算每次卷积运算的时间节点,捕捉每次卷积的开始信号和结束信号,并输出外存地址等其他必要信号,得到逻辑单元控制模型如图38所示。4.3.8总体设计概述mbd总体模型如图39所示,外部连接两个ddr模拟模块,外部模块受板上模块的读写逻辑控制,输出相应的权重数据与特征图数据。整体模块的输入为时钟信号,使能信号,卷积核输入,特征图输入,输出的控制信号包括两个ddr共用的读使能,两个ddr的写使能,conv_num和d_num进入模拟ddr模块经过逻辑运算换算为地址,索引其输出相应地址。卷积内部模型整体如图40所示,数据进入后根据使能信号选择是否填充,在本发明的网络中始终需要进行填充。填充后的数据送入行缓存,行缓存数据送入cnn模块,cnn模块进行一次卷积运算后送入累加模块进行缓存,等下一次卷积完成运算后也送入累加模块完成一次累加。受逻辑控制模块控制,决定累加模块何时输出有效特征图。4.4实验结果分析使用xilinx的zynqultrascale+系列板卡进行在环验证。生成的综合验证模型如下。在环验证可以直观地看到与模型仿真的误差以及便于以实际图像作为输入,并将结果返回至matlab工作区进行查看。由于在环验证速度受限于pc顶层与fpga的通信方式,本次采用的zcu106板卡使用jtag进行通信,因此选择1000×1000的raw作为测试输入,得到波形对比结果和实际结果如图41所示。波形第一行为fil结果,第二行为模型结果,第三行为误差,可见整体设计可以在板卡上正确运行,没有误差。本发明的基于深度学习的mbd硬件框架可以完成基本的isp处理,可以将原始raw格式图像处理成为高质量rgb图像,得到rgb输出图像,如图42-图44所示,与软件算法结果进行对比,图像无明显差别,证明本发明的设计是可行可靠的。在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输)。所述计算机可读取存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,都应涵盖在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1