这一期我们将给大家带来的是第三届全国大学生FPGA创新设计竞赛特等奖作品——基于PYNQ的散射成像相机CC Cam。该作品由来自东南大学的陈欣玥,雷弈,刘可同学设计完成。她们的作品同样基于Xilinx的PYNQ开源软件框架,同时也使用Xilinx的高级综合工具HLS设计了加速算法IP核。
第一部分 设计概述
本作品CC Cam基于计算光学的方法实现散射体成像,利用PYNQ-Z2制作了集成标定、摄像、重建算 法、人机交互于一体的小型系统。散射图像重建须首先在点光源标定过程获取点扩散函数,然后获取物体 的散射图像,再通过 ADMM 算法和FISTA算法对散射图像进行运算,迭代得到重建图像。在本系统中,PL 部分利用HLS设计了重建算法中计算量最大的梯度计算的IP核,该计算IP核提升了算法的并行度、实现了计算加速的性能,同时视频流通路也在PL部分构建;PS部分则负责交互界面、机械臂控制、预处理、 整体迭代等功能。透过散射介质成像在透过云雾进行遥感测绘、观察生物深层组织等方面有着应用前景,同时无透镜的计算光学成像对相机突破透镜尺寸限制和分辨率限制有着革新意义。
图1 作品总览
图2 图像重建举例(PSF、真实图像、未处理的散射图像与重建图像)
图3 散射体成像概念图
第二部分 系统组成及功能说明
2.1 系统总体框架
图4 系统框图
PYNQ实现总体系统控制,图像重建算法,与控机械臂51单片机的串口通信。PL 部分:负责实现图像还原算法的梯度计算部分,通过对点扩散函数与原始拍摄图像的频域及空间域处理,得到梯度结果;负责摄像头驱动部分及HDMI显示驱动部分。PS 部分:负责图像重建算法中除梯度计算以外的部分,与 51单片机通信控制机械臂及人机交互界面控制。
摄像头:由无透镜的OV5640及散射体组成,将图像信息回传PYNQ进行捕获及处理。
机械臂:夹持摄像头并调整摄像头姿态,控制方式有:
(1)PC在Jupyter Notebook界面通过滑动杆控件调节六个舵机
(2)PS部分处理图像并自动调整舵机位置,使图像位于屏幕中央 (3)通过板卡上按动按键对两个舵机进行粗调。
显示屏:用HDMI线连接PYNQ,使用640*480@60Hz的显示格式,呈现可视化的交互效果和展现摄像、重建结果。
2.2. ADMM 算法快速重建
使用 ADMM(Alternating Direction Method of Multipliers)交替方向乘子算法进行散射图像的重建,是对精度要求不高时的一种快速方案。基于[1]使用ADMM进行重建的方案,我们将这一快速重建的环节在P端通过运行 Python 脚本实现。尽管作为快速算法,同样迭代1次在PC上能够达到流畅的实时效果,在PYNQ的嵌入式级别处理器上则实时性稍差。因此设计了3帧缓存的结构,开辟分别负责捕捉预处理和ADMM重建的双线程进行运算,改善时延。与下一节阐述的速度较慢但能保证收敛、细节更丰富的梯
度下降类算法相比,基于ADMM重建提供了一种快速扫描的功能:让使用者可以先大致确定目标物的位置,并由屏幕上粗略的重建结果选取合适的拍摄姿态,从而使目标物的散射光全部被图像传感器接收,这样有利于迭代收敛以及获取更清晰的重建图像。相比于物点一一对应像点的传统相机,本设计提供ADMM快速重建功能是对使用者不能立即从原始散射图像对应出重建结果这一缺点的一种补偿。经过ADMM的快速模式大致锁定目标位置后,下一阶段可以选择使用基于梯度下降法改进的FISTA迭代算法进行更细节的重建,在这个耗时长的环节,本设计在PL端定制了硬件加速 IP。
2.3. FISTA 算法硬件加速
首先将摄像头捕获的RGB图转至灰度图,经过尺缩、平滑、归一化等预处理后,通过PSF、拍摄图像和当前预测值计算梯度,梯度下降法多次迭代后预测值即重建后的图像。其中计算量最大的梯度计算由HLS设计的IP核在PL内实现,整体的迭代过程通过Python脚本在PS端运算。图5和图6分别展示了梯度计算IP的综合报告和各部分计算的耗时详情。
图5 梯度计算IP的HLS综合报告
图6 各计算阶段用时分布
2.4. 串口通信控制机械臂
本功能的添加是为了方便PSF的标定过程,而已有的机械臂代码中只有移动到指定位置的串口指令, 不能满足我们的需求。因此我们添加了四条串口指令,可以控制机械臂在当前位置的基础上实现前后左右 基本的姿态调整。根据PSF图像的特点结合Python强大的图像处理功能,我们在PYNQ的PS端采用中值 滤波、开闭运算、边缘检测等图像处理方法,从而获得图像中心位置;利用该位置通过串口进一步控制机 械臂的移动,最终使PSF图像近似位于屏幕中央,获得较好的PSF图像,这将方便后面的图像恢复过程。非常流行的类脑模拟器开源软件,势是可用于模拟任何规模的脉冲神经网络,如可模拟哺乳动物的视觉或听觉皮层这样的信息处理模型。也可模拟网络活动的动力学模型,比如层状皮质网络或平衡随机网络以及学习和可塑性模型。同时NEST的另一大优势就是支持集成式的MPI、OpenMP通讯协议,可以进行分布式计算大大提高仿真速度。
2.5. 人机交互
有两种方式可以控制整个系统:
通过usb wifi(网卡型号 RT5370)可以进行远程访问,在jupyter notebook上运行交互式脚本,可以逐块运行功能块、查看打印出的状态、使用网页控件对机械臂各关节进行调整,wifi功能主要用于远程监视和调试。
在初始化完毕,显示屏上输出开始界面表示系统已准备好。以后的任务可以完全脱离 PC 执行,使 用者通过操作板卡上的按键 BTN[3:0]和拨动开关 SW[1:0]进行切换不同的功能。
图7板卡上用于人机交互的部分
2.6. Block Design
图8系统的Block Design
图9 梯度计算IP的接口
图10 OV摄像头驱动模块
图11 HDMI显示驱动模块
第三部分 完成情况及性能参数
系统实现的功能:机械臂可以自动调整姿态,使得图像位于显示屏中央;ADMM快速重建在只迭代1次时帧率在3 FPS左右;FISTA算法在迭代50次后能获得较好的重建图像,平均重建一张图片耗时约36秒(包含每隔5次迭代输出图像显示到屏幕),算法处理中单次计算梯度的时间为0.39秒,是纯PS端运行(0.80 秒)速度的两倍。系统目前LUT占用84%,BRAM占用67%,DSP占用84%,FF占用48%。
图12 PYNQ 资源消耗
图13 片上功耗
第四部分 总结与展望
考虑到算法的易实现性、重建效果、PYNQ 计算资源,我们选择了运算速度较慢,重建效果较稳定的 FISTA 算法,假以更多时间尝试改进,对 ADMM 进行硬件加速可以真正做到实时重建的效果,应用于 只需获取位置以及大小的大范围扫描,例如使用近红外光进行活体的肿瘤检测就是一个面向小物体的 扩散方程问题。
目前计算参与计算的图片都是灰度形式,可以对三个颜色通道分别进行运算来获取彩色图片的重建。目前梯度计算硬核的速度受访存速度限制,需要进一步优化缓存设计、优化数据流水线。
由于散射体材料的选取局限,图像还原效果还有待进一步优化,并且可以制作焦距不同的散射体实现 不同尺寸场景的重建。我们使用的光源是普通的生活照明光源,例如手机闪光灯等,一些面向实际散 射体成像应用的场景采用的是特殊光源,这可能更贴近应用实际。更进一步,散射成像的本质是对扩 散方程的求解,而这是诸多无损探伤的领域中的普遍问题,传感器读入的不一定是光子的强度,还可 以是热、声等物理量,按照这样的思路可以拓宽应用范围。
对于数学物理方程反问题的迭代法求解中,对初值和迭代终止条件的设置是关键问题之一。目前本设 计使用快速算法 ADMM 的少量迭代作为 FISTA 初值,依然是两种迭代法的叠加,尚未引入严格意义上 的非迭代计算,而数学方面关于非迭代法计算扩散方程已有数量可观的研究,这是初值设置方面可以 考虑改进的地方。关于迭代终止条件,目前本设计中使用的是设置一个固定值,但我们实验发现不同物体需要的迭代次数是不一样的,并且梯度下降法的“振荡”问题会在迭代次数过大时显现,清晰的 重建图片再次发散,因此需要对设置一种迭代终止的判断方法。
参考文献
[1] Laura Waller - Computational Imaging Lab. https://waller-lab.github.io/DiffuserCam/tutorial/algorithm_guide.pdf .5-9