基于可编程SOC的图像边缘检测系统

2020-05-28 09:36胡龙宝李丕丁
软件导刊 2020年3期
关键词:边缘计算边缘检测

胡龙宝 李丕丁

摘 要:随着人工智能的不断发展,云计算面临数据量大、实时性低等问题。为了解决该问题,一种新的计算方式——边缘计算进入了人们的视野。边缘计算推动人工智能走向嵌入式系统,与传统嵌入系统相比,边缘人工智能要复杂得多,传统嵌入式设备计算能力弱、效率低的问题更为突出。基于Xilinx公司Zynq-7000系列的全可编程SOC完成系统设计,实现对视频的边缘检测。测试结果显示,硬件边缘检测速度比纯软件边缘检测速度快10倍,为边缘人工智能在嵌入式应用方面提供了可行方向。

关键词:边缘人工智能;边缘计算;可编程SOC;软硬件协同;边缘检测;嵌入式应用

DOI:10. 11907/rjdk. 191606

中图分类号:TP317.4   文献标识码:A                文章编号:1672-7800(2020)003-0244-04

Image Edge Detection System Based on Programmable SOC

HU Long-bao, LI Pi-ding

(School of Medical Devices and Food Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)

Abstract: With the continuous development of artificial intelligence, cloud computing is facing the problems of large amount of data and low real-time. To solve this problem, a new computing method, edge computing, has come into peoples vision. Edge computing drives AI to embedded systems. Compared with traditional embedded systems, edge AI is much more complex. Traditional embedded devices have weak computing power and low efficiency. In this paper, based on Xilinx Zynq-7000 series of fully programmable SOC to complete the system design, to achieve video edge detection. The test results show that the speed of hardware edge detection is 10 times faster than that of software edge detection, which provides a feasible direction for the application of edge artificial intelligence in embedded system.

Key Words: edge artificial intelligence; edge computing; programmable SOC; software and hardware cooperation; edge detection; embedded applications

0 引言

云计算技术能够将大量计算资源、存储资源与软件资源链接在一起, 形成巨大规模的共享虚拟IT资源池, 為远程计算机用户提供强大的计算能力和大量存储空间[1-2],但随着网络边缘检测设备的迅速增加,云计算很难实现如此庞大规模数量的即时计算,无法保证应用的实时性[3]。如一辆自动驾驶的汽车每秒会产生1GB以上的数据[4],并且还要求对这些数据进行实时处理。大量自动驾驶的汽车同时向云服务器请求计算会占用大量内存、计算资源和带宽[5],而且在数据传输过程中任何延时都可能导致车祸发生。

因此,边缘计算的重要性尤为突出。边缘计算是指将计算任务在接近本地数据源的计算资源上运行, 实现数据就近处理[6-7]。边缘计算有以下3个优点:①减轻了网络带宽和数据中心功耗的压力;②更快的传输和响应速度;③摆脱了网络环境制约,也更加安全[8-9]。

边缘计算使用的嵌入式处理器大致分为ARM、FPGA、DSP和GPU。4种嵌入式处理器优缺点如表1所示。

面向视频监控、汽车驾驶辅助、航空与国防等市场领域的新型应用,ARM具有比较强的事务管理功能,可以用于运行界面及应用程序等,其优势主要体现在控制方面,但在计算方面比较吃力;DSP主要是用来计算,比如进行加密解密、调制解调等,优势是强大的数据处理能力和较高的运行速度;FPGA适合于控制功能算法简单且含有大量重复计算的工程使用,面对复杂控制实现难度大;GPU主要用于图像处理,不适用于控制。单一种类处理器的嵌入式方案已无法满足边缘人工智能计算量大、低延时的要求。

针对以上问题,本文采用Zynq-7000系列的全可编程SOC芯片完成软硬件协同设计[10],以双核ARM为核心 ,高性能FPGA为外设,将复杂算法通过Vivado高层次综合(High-level Synthesis,HLS)工具优化,将优化后的算法生成硬件模块在ARM上加载,通过AXI4总线实现两者数据交互[11-12]。

1 系统硬件结构设计

本系统在ARM处理器上搭建Linux系统,使用AXI4总线实现Zynq的可编程逻辑(Progarmmable Logic,PL)和处理器系统(Processing System,PS)之间的大量数据传输[13]。使用Xilinx公司的FPGA开发工具Vivado2017.4设计硬件模块并搭建系统。系统硬件结构如图1所示。

其中,PL部分负责图像采集、边缘检测、图像显示,PS部分负责内存单元DDR3的数据存取和人机交互界面。

硬件系统包括3个模块:图像采集模块、边缘检测模块、图像显示模块。

1.1 图像采集模块

图像采集模块包括OV7725摄像头及其周围电路。OV7725摄像头通过CEP(Cmos Expand Port)与ZYNQ-7000系列的开发板连接,可输出640×480分辨率、16位色彩深度的图像信息[14];OV7725摄像头一个时钟周期只能写入8位数据,因此在视频格式转换IP中将前后两个8位数据合并成16位数据,得到RGB565类型数据,再将数据扩充为RGB888格式方便转成AXI4-Stream协议,最后通过VDMA1模块通过AXI_HP接口将数据存入PS端的DDR3缓存。

1.2 基于HLS的边缘检测模块

Vivado HLS工具是Xilinx推出的高层次综合工具,能够将C、C++、System C代码综合成硬件电路,支持浮点运算,并封装多种图像处理函数核数学运算函数,相对于Verilog实现硬件边缘检测模块,开发过程更简单[15-16]。HLS工具还提供了OpenCV的函数库,可以直接调用其中的图像处理函数[17]。

边缘检测模块的工作流程如图2所示。

在边缘检测IP 中,将数据转换成Mat格式,将图像灰度化后调用hls::Duplicate函數将灰度图复制成两路图像,对两路图像分别进行横向和纵向Sobel边缘检测,将两路图像结果相加,得到更加明显的边缘检测图像。

Sobel算子根据像素点上、下、左、右邻点灰度加权差,在边缘处达到极值这一现象时检测边缘。它对噪声具有平滑作用,能提供较为精确的边缘方向信息,但边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

1.3 图像显示模块

该部分包括HDMI输出模块和相应输出时序控制模块。输出时序控制模块由Vivado自带的IP核VTC(Video Timing Controller)实现,通过配置VTC的输出视频分辨率和时钟,可以输出行同步信号和场同步信号,输出模块按照同步信号将视频传输到HDMI显示器上。

2 软件系统设计

2.1 嵌入式Linux系统搭建

为了在ARM处理器上进行人机交互界面程序开发以及其它逻辑控制,需要在ARM上移植嵌入式Linux系统和QT函数库[18]。

系统移植包含以下7个步骤:①搭建编译环境;②编译u-boot启动引导文件;③配置设备树文件;④编译内核;⑤制作文件系统;⑥生成BOOT.bin文件;⑦编译Qt库,生成Qt镜像文件;⑧将BOOT.bin、uImage、devicetree.dtb、uramdisk.image.gz、Qt.img文件拷贝至启动SD卡。

设置开发板为SD卡启动模式,启动开发板可以看到Linux启动界面,完成嵌入式系统移植。

2.2 图像采集驱动

图像采集驱动主要功能是通过SCCB协议初始化OV7725摄像头,通过GPIO接口对图像采集模块寄存器进行配置。系统中采用Platform驱动模型,Platform总线是虚拟平台总线,是Linux设备驱动模型为了保持设备驱动的统一性而虚拟出来的总线。

总线将设备和驱动绑定,系统每注册一个设备时,会寻找与之匹配的驱动;相应地,系统每注册一个驱动时,会寻找与之匹配的设备,而匹配由总线完成。驱动包含以下几个主要函数:①probe函数:也被称为探针函数,用于检测总线上该驱动对应的设备;②remove函数:用于移除总线上驱动;③read函数:从模块寄存器读取数据;④write函数:向模块寄存器写入数据。

2.3 边缘检测模块驱动

用户空间I/O框架(Userspace I/O Framework)可直接映射物理地址,文中图像预处理模块驱动将模块的AXI Lite寄存器基地址映射出来,对寄存器进行操作;通过Vivado HLS综合的IP,会自动生成Linux下UIO用户端的驱动代码,可以直接使用。

边缘检测模块驱动主要包括几个函数:①XEdge_detection_Initialize:初始化模块,从/dev下找到边缘检测模块对应设备,并获得句柄,将模块的寄存器地址映射到内存;②XEdge_detection_Release:释放句柄和取消内存映射;③XEdge_detection_IsReady:检测模块是否准备好处理下一张图片;④XEdge_detection_SetRows:设置图像高度;⑤XEdge_detection_SetCols:设置图像宽度;⑥XEdge_detection_Start:开始运行边缘检测模块。

2.4 VDMA Framebuffer驱动

AXI VDMA是Xilinx提供的IP,用于将AXI Stream格式数据流转换为Memory Map格式,或将Memory Map格式的数据转换为AXI Stream数据流,从而实现与DDR3通信[19]。AXI VDMA结构框架如图3所示。

可以看出,VDMA的主要接口有3个,分别为AXI4 Memory Map、AXI4-Lite、AXI4-Stream。

AXI4-Lite:用于读写VDMA内部寄存器,从而实现对VDMA的控制和状态获取。

AXI4-Stream:写通道(s2mm):VDMA获取来自axis接口的数据并将之写入帧存;读通道(mm2s):VDMA从帧存读取数据,然后送至axis接口输出。

AXI4 Memory Map:用于操作DDR,通过互联模块连接至Zynq的HP接口[20]。

本系统通过VDMA3实现Framebuffer的显示功能,因此需要VDMA3从DDR3中读取数据,输出到HDMI显示器上。

3 系统测试及结果分析

为了对搭建的视频处理系统进行功能及性能测试,对采集到的视频图像分别用纯软件和软硬件结合的方式进行边缘检测处理。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域[21]。Soble边缘检测算法比较简单,虽然Soble边缘检测准确度低于Canny边缘检测,但是实际应用中,Sobel边缘效率比Canny边缘检测效率要高。在要求效率、忽视细节纹理时,Sobel边缘检测成为首选。

系统实现Sobel边缘检测算法,效果对比如图4所示。

图4(a)为纯软件使用OpenCV库实现边缘检测算法效果,图4(b)为使用HLS工具实现边缘检测算法效果。

软硬件两种边缘检测方式处理所需时间如表2所示。

从图4和表2可以看出,软硬件结合方法实现边缘检测算法,与纯ARM实现图像处理算法效果基本相同,但处理速度方面有很大提升。本次边缘检测实验中软硬件协同处理比纯软件处理速度提高10.89倍。

4 结语

本文设计并实现了基于可编程SOC的边缘检测系统,在系统中使用HLS工具生成一个基于ZYNQ PL部分的硬件Sobel边缘检测IP核,并与软件边缘检测进行了比较。结果表明,硬件边缘检测与软件边缘检测效果基本相同,但在耗时上,前者只需要后者的1/10。这使得基于嵌入式系统的图像处理实时性大幅度提升,为边缘人工智能中边缘设备处理数据量大、时间长的问题提供新的方向。该设计方案可应用于自动驾驶、机器人以及智能监控等场景,减少嵌入式系统计算耗时、增强系统运行可靠性、提高数据隐私性,同时可以通过网络将结果传输至云服务器进行大数据分析。

参考文献:

[1]张玉. 虚拟化技术在智慧城市建设中的应用[J]. 中国高新技术企业, 2014, (34): 43-44.

[2]馮登国, 张敏, 张妍,等. 云计算安全研究[J]. 软件学报,2011,22(1): 71-83.

[3]CHANDRA S R,YAFENG W. Cloud things construction - the integration of Internet of things and cloud computing[J]. Future Generation Computer Systems,2016,56(C):684-700.

[4]STAUDENMAIER M, HERRMANN S. 基于视觉的驾驶员辅助嵌入式系统[J]. 中国电子商情:基础电子,2014(9): 38-43.

[5]施巍松,孙辉,陈彦明. 基于边缘计算的新型视频监控系统展望[J]. 自动化博览,2018,35(12):60-63.

[6]徐恩庆,董恩然. 云计算与边缘计算协同发展的探索与实践[J].  通信世界,2019(9): 46-47.

[7]SHARMAN R,BIOOKAGHAZADEH S,LI BAOXIN, et al. Are existing knowledge transfer techniques effective for deep learning with edge devices?[C]. IEEE International Conference on Edge Computing,2018:42-49.

[8]施巍松,张星洲,王一帆,等. 边缘计算:现状与展望[J]. 计算机研究与发展, 2019,56(1): 69-89.

[9]周知,于帅,陈旭. 边缘智能:边缘计算与人工智能融合的新范式[J]. 大数据,2019,5(2): 53-63.

[10]李朗,张索非,杨浩. 基于Zynq-7000的视频处理系统框架设计[J]. 计算机技术与发展, 2017,27(5):192-195.

[11]XILINX. Vivado design suite tutorial high-level synthesis[EB/OL]. https://www.xilinx.com/support/doc-umentation/sw_manuals/xilinx 2017_1/ug871-vivado-high-level-synthesis-tutorial.pdf.

[12]XILINX. Vivado design suite user guide high-level synthesis[EB/OL]. https://www.xilinx.com/support/doc-umentation/sw_manuals/xilinx 2017_1/ug902-vivado-high-level-synthesis.pdf.

[13]邓健峰,谢云. 基于FPGA+ARM的视频采集平台设计与实现[J]. 工业控制计算机,2017,30(12): 97-98.

[14]曾永西,黄梅红,陈伟豪. 基于FPGA+OV7725的视频监控系统[J]. 福建电脑, 2015, 31(09): 8-9,39.

[15]党宏社,王黎,王晓倩. 基于Vivado HLS的FPGA开发与应用研究[J]. 陕西科技大学学报:自然科学版,2015,33(1):155-159.

[16]郭丰收. Xilinx FPGA/Zynq设计中使用HLS实现OpenCV的开发流程[J]. 电子产品世界,2014,21(Z1):50-52.

[17]赵睿. 基于Xilinx的HLS实现OpenCV的研究与设计[J]. 科技创新与应用, 2016(21): 56-57.

[18]贺丹丹,张帆,刘峰. 嵌入式Linux系统开发教程[M]. 北京: 清华大学出版社,2010.

[19]Xilinx. Zynq-7000 SoC Technical reference manual[EB/OL]. https://www.xilinx.com/support/doc-umentation/user_guides/ug585-Zynq- 7000-TRM.pdf.

[20]陆佳华,潘祖龙,彭竞宇. 嵌入式系统软硬件协同设计实战指南[M]. 北京:机械工业出版社, 2014.

[21]温建飞,岳凤英,李永红. 基于FPGA硬件架构的实时高速图像特征检测系统[J]. 电子世界,2015(21):124-125.

(责任编辑:孙 娟)

收稿日期:2019-05-09

作者简介:胡龙宝(1996-),男,上海理工大学医疗器械与食品学院硕士研究生,研究方向为医疗电子仪器;李丕丁(1973-),男,博士,上海理工大学医疗器械与食品学院讲师、硕士生导师,研究方向为生物医学信号处理、医疗电子仪器。

猜你喜欢
边缘计算边缘检测
边缘计算下移动智能终端隐私数据的保护方法
从“边缘计算”看未来企业办公场景