张 卫,周 骅,刘宇红,张荣芬
贵州大学 大数据与信息工程学院,贵阳 550025
糖尿病视网膜病变(diabetic retinopathy,DR)也称糖网病,是糖尿病的一种眼部表现,也是当今世界上造成视力损害和失明的主要原因[1]。彩色眼底图像在利用计算机辅助诊断或筛查糖网病中得到了广泛的应用。
视盘、黄斑和血管是眼底图像中最重要的组成结构,对这些结构作特征分析是判断眼底疾病的基础[2]。视盘是视神经的始端和血管的发源端,形状为亮白色圆盘,直径约为1.5 mm,是辅助判定糖网病的主要指标。
另外,视盘也用于辅助建立眼底图像坐标系,搭建血管分割算法。黄斑与视盘的位置固定,是视力最敏锐的部分。快速、准确地定位视盘和黄斑区域对包括糖网病在内的眼底疾病尤为重要。
目前,由于成像因素或视网膜病变的影响,造成黄斑检测的难度较大,故研究视盘定位的文献较多,检测黄斑的文献较少[3]。关于视盘定位的算法大致可以分为两类,一类利用外观信息如亮度、对比度等作为定位特征[4-5],另一类是基于血管特征实现视盘定位[6-10]。关于黄斑的定位算法,一般都依赖于视盘定位和血管拱形的坐标信息[11-14],故而导致黄斑定位准确率低于视盘定位准确率,而且无法同时对视盘和黄斑进行定位。因此,探索一种有效的能对视网膜图像视盘和黄斑同时定位的智能算法具有重要意义。
今天,在FPGA芯片上部署神经网络算法实现边缘计算的思想得到人们的认可和研究,目前主要实现方式有两种,一种方式是采用Verilog HDL(Verilog hardware description language,Verilog硬件描述语言)设计底层逻辑结构,另一种方式是采用HLS(high level synthesis,高层综合语言)设计IP核[15-16]来实现各类智能算法,后者原理简单,易于实现。然而,两种方法目前可实现的神经网络层数多局限于几层、十几层的规模[15-16]。
在此背景下,本文创新性地提出了一种眼底图像视盘与黄斑定位检测新方法[17],先使用YOLOv4-tiny算法检测视盘和黄斑的位置信息,再采用HLS设计的IP核将38层神经网络算法移植到FPGA平台[18]。该方法复杂度低,检测定位准确率高、实时性强,具有良好的临床应用前景。
YOLOv4算法在目标检测领域具有较高的准确率和实时性,但网络复杂度较高。YOLOv4-tiny算法的网络参数相对于其他YOLO算法少得多,适用于嵌入式设备。本文采用YOLOv4-tiny算法来完成眼底图像中视盘和黄斑的定位检测,整体检测过程如下:输入一张彩色眼底图片,经网络检测输出后,对YOLO头部y1、y2进行输出处理,可同时得到视盘和黄斑的位置信息和置信度。
YOLOv4-tiny算法的网络结构如图1所示,该算法共38层,输入层为608×608×3的彩色眼底图片,Backbone模块是网络的骨干部分,由CSPDarknet53(即图中的CSP结构)模型组成,该模型提高了整个网络模型的检测精度,模型中带虚线阴影的CBL结构是下采样卷积层。图1中不带虚线阴影的CBL结构做正常的卷积运算。另外,图1中还包括2个头部输出:网络第31层y1层,其大小为19×19×21,网络第38层y2层,其大小为38×38×21。
图1 YOLOv4-tiny网络结构Fig.1 YOLOv4-tiny network structure
带虚线阴影的CBL结构如图2所示,该结构的操作是:先做卷积运算,再做归一化操作,最后采用Leaky Relu函数激活。图3是CSP结构图,图的上半部分包括3个CBL结构,第二个CBL与第三个CBL的结果矩阵拼接后,再通过一个CBL,最后的结果矩阵与CSP结构的初始输入做拼接操作,得到整个CSP结构的输出。
图2 CBL结构Fig.2 CBL structure
图3 CSP结构Fig.3 CSP structure
为检测到视盘和黄斑两个类别,网络的两个头部输出层y1、y2需要经过一系列操作。具体操作是:首先检测图片中类似目标特征的区域,将整个图片分为N×N个格子,使用眼底图片中目标的真实中心位置坐标落入格子负责该目标所属类别,每个格子预测B个边界框,每个边界框包含置信度和目标所属类别的概率,瞄框的预测采用公式(1)的方法:
式中,c x、c y是网格的坐标偏移量;p w、p h是预设的瞄框的边长;b x、b y、b w、b h为最终得到的边框坐标值;t x、t y、t w、t h为网络学习目标,其中,t x、t y为检测目标的边界框中心位置坐标偏移量,经过σ(x)(sigmoid)函数归一化到0和1之间,t w、t h为瞄框的尺度缩放,分别与p w、ph作用后得到边界框的宽和高。
算法采用公认的Kaggle-Diabetic Retinopathy Detection(以下简称为Kaggle-DR)竞赛中的眼底图片数据集训练学习参数。该数据集包含多个患者左右两只眼的高分辨率彩色图片,且左右眼的眼底图像分辨率相同。Kaggle-DR数据集根据糖网病视网膜病变的程度划分为正常、轻度、中度、重度和增殖型糖尿病视网膜病变五个等级,以0、1、2、3、4进行类别标注,每张图片都包含视盘和黄斑结构。
由于数据集中的图片具有不同的光照、颜色和摄像角度,以及照片裁剪方式也不相同,甚至部分图片存在失焦的情况,因此从竞赛数据集中挑选部分满足训练要求的图片,并对其进行缩放、旋转、翻转、改变亮度等操作,得到516幅包含糖网病不同患病等级的图片进行训练和测试,挑选后的部分数据集图片如图4所示。
图4 部分用于训练的Kaggle-DR数据集眼底图片Fig.4 Some retinal images in Kaggle-DR dataset for training
过拟合是机器学习和深度学习共有的弊病,一旦算法出现过拟合,那么训练生成的网络算法模型是无效的。为了防止过拟合,如图5所示,本文采用两级训练和迁移学习的方式对YOLOv4-tiny网络进行训练优化,先使用COCO数据集训练网络的前26层,迭代训练6 000次后,冻结这些层的参数值;再采用Kaggle-DR竞赛中挑选的381幅眼底图像训练剩下的12层,并设置衰减式的学习率,迭代10 000次后得到所有层的网络参数。
图5 算法的两级训练模式Fig.5 Two level training mode of algorithm
由于Kaggle-DR数据集中的眼底图片原始分辨率为3 000×4 000左右,且视盘和黄斑的位置以及整个眼球的位置多位于图片中央,故将网络的输入层调整为608×608×3,有效地保证了特征提取的区域。另外,视盘的位置通常比黄斑要大,且在图上处于不同的位置,选择大小和位置合适的瞄框将有助于提高检测的速度和准确率。
该YOLOv4-tiny黄斑与视盘定位检测算法的一个重要优点是可以移植到FPGA上运行。以下介绍将优化训练后的算法部署移植到FPGA板上的过程,整体的系统实现原理图如图6所示。在FPGA端,首先把算法训练得到的yolo.weight文件存储至SD卡中,这个文件包含了网络训练后的权重和偏置值;接着利用vivado HLS工具生成的两个IP核做网络中卷积和池化运算,IP核可以自主地从SDRAM中读取图片和网络参数;FPGA中的ARM内核重建整个神经网络算法,并将卷积和池化需要的数据参数传递给IP核,IP核获取到全部参数进行计算后将结果存储到SDRAM中。PC上位机与FPGA端通过串口进行通信,PC上位机发送眼底图片给FPGA端,FPGA端将检测结果发回给PC上位机。
图6 FPGA整体实现原理图Fig.6 Overall implementation schematic designed on FPGA
FPGA端需要在vivado SDK工具中采用C语言重现TensorFlow框架下的YOLOv4-tiny算法,算法初始化部分如下所示:
网络结构中的卷积层采用RunConv()函数来实现,该函数对应的是卷积层IP核硬件电路,该电路可以实现不同运算数据和不同运算规模的卷积层操作;网络结构中的池化层采用RunPool()函数来实现,该函数对应的是池化层IP核电路,与卷积层类似,该电路也具有计算不同池化层的通用性,本网络模型中的池化层均做最大池化操作。Runroute()函数做拼接操作,Runupsample()函数做上采样操作。
RunCSP()函数需要对7个网络层做操作,第一层是卷积操作,接下来的一层对该层做拼接;运行两个卷积层后,将这两层的结果矩阵做拼接;再做一层卷积操作后,将这层的结果矩阵与第一层做拼接,得到整个RunCSP()函数的运算结果如下:
系统设计中GPU软件训练平台使用两块1080Ti显卡。CPU软件训练平台使用Core i7-8700k处理器,主频为3.4 GHz。硬件部署使用Xilinx公司的ZYNQ-7000 xc7z010clg400-1芯片作为实验平台,该芯片片内资源较为丰富,基本能够满足该网络模型中硬件设计所需要的资源。
在TensorFlow深度学习框架下,采用COCO数据集和Kaggle-Diabetic Retinopathy Detection竞赛中挑选的部分眼底图片做两级训练,第一级训练采用COCO数据集、学习率为0.01,迭代6 000次来学习网络的前26层;第二级训练采用Kaggle-DR竞赛数据集、初始学习率为0.001,并以指数式衰减,迭代10 000次来学习整个网络。每1 000次迭代后保存此时模型的网络参数.weight文件,如图7所示,迭代4 000次后,loss值已经接近于0,网络模型趋于稳定;迭代10 000次后,保存平均正确率mAP值最高的网络模型的.weight文件,完成整个训练过程。
图7 网络模型训练mAP曲线Fig.7 mAP curve of network model on training
如图7和表1所示,训练最好的网络模型的mAP值为96.67%,其中视盘的正确率为100%,黄斑的正确率达93.34%,视盘的真阳性率(true positive rate,TPR)为100%,黄斑的真阳性率为96.85%,假阳性率(false positive rate,FPR)为3.15%,说明本文算法系统能满足视盘和黄斑的检测定位性能。另外,网络的recall值为0.94,F1-score为0.96,precision值为0.98,说明该算法模型性能较好。
表1 训练好的网络模型参数Table 1 Trained network model parameters
测试时采用135张挑选的Kaggle-DR数据集眼底图片整个迭代1次,得到的mAP值为95.97%,与训练的准确率基本一致。测试一张图片的时间约为4.72 ms,将其中部分图片的置信度图片输出,如图8所示,(a)中视盘和黄斑的置信度均为100%,(b)中视盘的置信度为100%,黄斑的置信度为94%,图中黄斑区域颜色较浅,与周围环境颜色类似,对检测定位有一定程度的干扰,但94%的准确率能满足糖网病的辅助诊断要求。
图8 网络模型输出的视盘(OD)和黄斑(Fovea)的置信度图Fig.8 Confidence degree map of optic disc and fovea from network model
表2给出了本文方法与现有最具代表的几种方法的检测定位结果。从表2中可以看出,文献[11-13]和文献[3]均是分别对视盘和黄斑做检测定位,其中文献[11]的视盘和黄斑分别检测的正确率最高,但是数据集小且未指明其中是否有病变眼底图片;文献[3]和文献[12]也取得了较好的正确率,数据集组成合理,但是采用监督分类的方法,对测试集中的病变图片正确率较低;文献[13]也得到了较好的检测定位结果,但是算法较为复杂。
表2 视盘和黄斑的检测结果与传统方法对比Table 2 Comparison of detection results of optic disc and macula with traditional methods
文献[14]先检测黄斑,再检测视盘,采用HEI-MED数据集中图片进行训练和测试,取得了较好的检测正确率,但是仍然不能同时对视盘和黄斑定位。本文能同时对视盘和黄斑进行定位,采用的数据集包含各个患病等级的图片,训练和测试都取得了不错的正确率,通过对比可以看出本文方法的检测结果并不低于现有的方法甚至更优,而且本文算法简单,黄斑定位不依赖于视盘定位,在实际的糖网病筛查及医学辅助诊断中具有很大的优势。
表3进一步给出了视盘与黄斑在YOLO算法下的检测定位结果对比,其中YOLOv3算法下的黄斑和视盘检测定位的正确率较低,测试的实时性比较差。YOLOv4算法下的视盘与黄斑检测定位的正确率为98.69%,但是网络模型的参数值高达257.7 MB,GPU传递一张图片的时间也比较长。本文采用的YOLOv4-tiny算法下的视盘与黄斑检测定位的正确率为96.67%,略低于YOLOv4算法下的正确率,但是网络参数大小下降了不止10倍,仅为24.3 MB,而且GPU传递一张图片的时间提高了不止10倍,只需要2.858 ms,这些特性表明,本文采用YOLOv4-tiny实现视盘与黄斑检测定位的系统非常适合移植于FPGA等嵌入式设备中,例如手持式糖网病智能监测仪,具有很好的边缘计算应用前景。
表3 视盘与黄斑在YOLO算法下的检测定位结果对比Table 3 Comparison of detection and location results of optic disc and macula based on YOLO algorithms
表4给出了本文算法在FPGA硬件平台以及CPU、GPU上对视盘与黄斑进行检测定位的对比,其中FPGA平台的平均识别正确率基本与CPU、GPU保持一致,三个平台下视盘定位的正确率均能维持在100%,但FPGA平台中黄斑的正确率最低,为92.21%,这是因为FPGA中采用16位无符号浮点型数据类型,降低了权重和偏置的精确度。
表4 FPGA硬件平台与CPU、GPU检测定位结果对比Table 4 Comparison of detection and location results on FPGA hardware platform with CPU and GPU
从时效性来看,FPGA平台处理一张图片的时间大约需要150.445 ms,识别时间介于CPU与GPU之间。这是因为FPGA硬件平台中只有一份卷积电路和一份池化电路,导致网络中的各个卷积层和池化层只能采用时分复用的方式去共享这两份电路,不能同时对各个网络层进行计算,使其处理时间比GPU低。但是从整体的正确率和实时性来看,本文搭载YOLOv4-tiny算法的FPGA硬件平台能满足糖网病视盘与黄斑定位及智能硬件辅助诊断的要求。
视盘、黄斑是眼底图像中最重要的组成结构,对这两个结构的预先定位检测是糖网病眼底图像的自动处理与分析的关键步骤。传统的数学形态学定位检测方法,只能从算法层面进行定位检测,没有同时定位视盘和黄斑,导致黄斑的定位准确率低,而且还未见嵌入式端的算法实现,不适合于手持式检测仪这样的边缘计算场景。基于此,本文提出了一种针对眼底图像中视盘与黄斑同时定位检测的新方法,首先使用YOLOv4-tiny算法进行定位检测,并探索了有效的眼底图像预处理、网络训练优化等方法,最后将该算法成功移植到FPGA。与传统方法相比,该方法不仅可以同时定位眼底图像中视盘和黄斑的位置,使得算法复杂度更低、准确度更高、定位速度更快,而且在FPGA上的实现方案对糖网病检测技术的嵌入式发展具有指导意义。实验主要采用公认的COCO数据集和Kaggle-Diabetic Retinopathy Detection竞赛中的眼底图像对算法进行训练和测试对比,算法移植到FPGA平台后对视盘和黄斑定位的mAP为96.11%,检测一张图片只需要150.445 ms,符合边缘计算图像处理的实际应用需求,具有良好的眼科临床应用前景。