基于卷积神经网络的左右眼识别
2018-08-06钟志权唐晓颖
钟志权 袁 进 唐晓颖
1(广东顺德中山大学卡内基梅隆大学国际联合研究院 广东顺德 528300)2(中山大学电子与信息工程学院 广州 510006)3(眼科学国家重点实验室(中山大学) 广州 510060)4 (南方科技大学电子与电气工程系 广东深圳 518055) (zhongzhq9@mail2.sysu.edu.cn)
左右眼识别是一个基本的二分类问题.一般来说,临床上左右眼图片的分类是由医生的视觉判断来完成,在得出检查数据或拍摄眼睛图像后,人工填写当前检查眼睛是左眼还是右眼,这是主观和定性的,比较容易出现人为错误,同时费时费力.2012年,魏悦等人[1]提出一种基于光学仪器的左右眼识别装置,避免了人为错误,但是结构较为复杂,存在成本高、安装复杂、不易实现等问题.2017年,代黎明等人[2]利用数字图像处理技术,提出一种基于眼底图像特征的左右眼识别方法.该方法是根据视盘和血管的不同特征来联合进行左右眼的判别,克服了以往通过单一判定视盘位置方法可能存在判定错误的不足,具有较高的准确性,但容易受到视盘和血管形变、图像本身的亮度、对比度及其他病变区域的影响.
最近,随着深度学习[3]的发展,尤其是卷积神经网络(convolutional neural network, CNN)在图像识别中表现的优越性能,使得越来越多的人尝试着将卷积神经网络应用于各种各样的图像识别及分类领域.传统的识别方法是基于特征的匹配技术,使用较为广泛的特征方法包括SIFT[4],BRISK[5]等.卷积神经网络与之相比可以避免对输入图像做比较复杂的特征提取,从而节省了人工、半自动或者自动提取特征的大量工作.龚丁禧等人[6]将卷积神经网络用于植物的叶片分类,林升等人[7]将卷积网络用于机场图像目标识别.在左右眼识别领域,尚没有深度学习方面相关的应用.本文在深度学习的基础上,首次在左右眼识别的问题上引入卷积神经网络,让网络在大量的训练样本数据中自主学习眼底图像[8]特征,同时通过改变图像的亮度和对比度的方法扩充训练数据集来消除拍摄眼底照时光照等环境因素的影响,大大提高了分类识别的速度和准确率.在训练过程中,本文采用五重交叉验证的训练方法,避免了学习模型的过拟合,鲁棒性好.在分类器的选择上,本文在薛迪秀[9]提出的CNN-SVM结构的基础上比较了分类器softmax和SVM[10]对左右眼识别的不同效果.
基于以上分析,本文主要做了4方面工作:收集大量的临床眼底图像资料构建数据集;对图像进行预处理和数据扩充,提升神经网络的性能;选择合适的框架结构和网络,并在其模型基础上调整网络权值参数、网络深度,选择不同的分类器,设计适合左右眼识别的学习模型;验证测试识别效果.
1 方 法
1.1 数据集
本文收集了一批来自不同医院使用不同成像设备拍摄的眼底彩照,详细的图像数据信息如表1所示:其中,手持式眼底照相机所获取的图片中788张图片由欧视博手持式眼底照相机所拍摄,图片尺寸为1 536×1 152,其余297张图片由苏州微清手持式眼底照相机所拍摄,图片尺寸为1 920×1 088.台式眼底照相机固定在桌子上,拍摄的图像分辨率更高;手持式眼底照相机由医生手持移动拍摄,由于受操作人员稳定性和设备传感器的限制,在图像质量和清晰度方面都不如台式眼底照相机.为了验证模型在实际应用时的正确性和鲁棒性,本文还从kaggle网站①下载了一批公共眼底图像数据集用于最终模型的测试.所有图片都是JPG格式的RGB图像.所有左右眼的类别都经过了人工识别,保证了其类别标签的可靠性.
Table 1 Introduction of Image Data Sets表1 图像数据集介绍
1.2 数据集分类
我们将数据集分为:训练集、验证集、测试集.
1) 训练集.是指在训练过程中实际使用的数据.训练集参与了模型普通参数的优化,起到了拟合模型的作用.本文以肇庆市高要人民医院的8 243张眼底彩照作为模型的输入,由于采用了五重交叉验证的训练方式,所以实际使用的训练集只有输入图片的五分之四.
2) 验证集.是指在每个epoch完成后,用来测试当前模型准确率的那部分数据集.验证集没有参与梯度下降的过程,即没有参与普通参数s的优化.验证集的作用是调节迭代数、学习率等超参数.本文使用的验证集为上述8 243张眼底彩照的五分之一.
3) 测试集.是指在通过训练集和验证集得出最优模型后,用来进行模型测试的那部分数据集.本文用到的测试集为肇庆市高要人民医院的1 085张手持式眼底照和中山大学附属第三医院的903张眼底照.公共图片数据集存在的目的是为了进一步验证模型的泛化能力,以保证模型在实际应用时的有效性和正确性.
1.3 数据预处理
图像的预处理主要包括图像的裁剪、图像亮度和对比度的随机调整、图像的标准化处理.
1) 图像的裁剪
所获取的眼底彩照中包含圆形视网膜区域和黑色背景区域,如图1中左图所示.我们只对视网膜区域信息感兴趣.为了消除黑色无效区域对图像识别的干扰并减少数据量,需要对图像中的有效区域进行提取.这里通过设置阈值的方法获取有效区域的4个边缘(图1左图中的A,B,C,D),然后通过自动算法可以直接得到裁剪后的图像,如图1中右图所示:
Fig. 1 The schematic of image cropping图1 图像裁剪示意图
2) 对图片进行亮度和对比度的随机调整来扩充数据
在基于深度学习的图像识别中,图像的亮度和对比度的差异会影响模型的识别效果,为了消除这种影响,需要通过调整图像的亮度和对比度来扩充训练集的数据量.我们使用式(1)改变图像的亮度和对比度扩充训练数据集:
g(x)=a×f(x)+b,
(1)
其中,f(x)表示原图像像素;g(x)表示输出图像像素;参数a被称为增益,常常被用来控制图像的对比度,我们设置a的取值范围为[0.5,1.5],每次对图像操作时从该范围中随机取值;参数b被称为偏置,常常被用来控制图像的亮度,我们设置b的取值范围为[-50,50],每次对图像操作时从该范围中随机取值.本文通过改变图像的亮度和对比度,将训练集扩充至原来的4倍.
3) 图像的标准化处理
由于特征的差异,当不同的特征组合在一起时,会导致各个特征对模型识别效果的影响程度不一致.图像的标准化处理可以使得不同的特征具有相同的尺度.这样,在使用反向传播算法学习参数时,不同的特征对参数的影响程度一致[11].同时,对图像进行标准化处理可以加快神经网络的训练和测试速度.
1.4 模型的设计
传统的神经网络主要是点对点的全连接层,卷积神经网络与之最大的区别是加入了卷积层和池化层.图像识别常采用卷积神经网络.我们的目的是设计合适的卷积神经网络结构和选择合适的分类器.
1) 网络结构
本文以常用的Alexnet和Resnet两种经典网络结构为基础进行网络的设计.
① Alexnet网络
经典的Alexnet网络包含5个卷积处理操作以及某些处理操作后连接的最大池化层和3个全连接层,最后一个全连接层的输出被送到一个n维的softmax层,从而输出一个n类标签的概率分布.左右眼识别作为一个二分类问题,其相应的Alexnet网络结构如图2所示:
Fig. 2 The network structure of classical convolutional neural network Alexnet图2 经典卷积神经网络Alexnet的网络结构示意图
卷积处理操作Conv用于提取特征,其中最重要的卷积核设计一般涉及卷积核的大小、卷积核的数量以及卷积核的步长[11].Pooling层的作用是基于局部相关性原理进行亚采样,通过在小领域内下采样得到新的特征,不仅减少了数据量,同时还保留了某些特征不变性.全连接层Fc是传统的神经网络层,上一层的所有输出节点和下一层的所有输入节点两两相连,网络参数量在全连接层处大大增加[12].
② Resnet网络
与Alexnet网络相比,Resnet增加了残差结构.残差结构通过在输出和输入之间引入一个快捷连接通道,解决了网络在很深时出现的梯度弥散的问题,从而可以在有需要时把网络做得足够深.残差结构如图3所示.本方案选择的Resnet有50层,深度是Alexnet(8层)的6倍多.
Fig. 3 Residual structure图3 残差结构
③ 左右眼识别网络
我们所设计的左右眼识别卷积神经网络包含4个卷积层和2个全连接层,每一个卷积层后都接了一个最大池化层.前2层卷积层的卷积核的大小为5×5,后面2层卷积层和所有的最大池化层统一采用3×3大小的核.考虑到左右眼识别只是一个二分类问题,我们将全连接层的节点数大大减少,尤其是最后一层全连接层的输入节点数.具体的网络参数配置如表2所示:
Table2NetworkParametersoftheProposedLeft-vs-RightEyeDiscriminationModel
表2 所设计左右眼识别模型的网络参数设置
2) 分类器的选择
CNN具有优异的特征表达能力,在很多图像识别任务中可以直接采用CNN网络作为一种特征提取器,这时分类器则可以不限于CNN中的softmax[9].本文对softmax和支持向量机(support vector machine, SVM)分类器进行了比较.
① softmax
卷积神经网络一般采用的分类器是softmax,softmax层接在全连接层后.softmax层的输出为一个概率分布,可以得到输入属于每一种类别的概率,且输出概率总和为1,输出概率的计算为
(2)
② SVM
SVM是一个分类算法,通过找到一个分类平面,将数据分隔在平面两侧,从而达到分类的目的.SVM的求解实际上就是构建一个数学问题:y=wx+b,即求解参数w和b.
对于本文中左右眼识别的二分类问题,通过最后一层全连接层后,每一张图片都转变成了尺寸为2×1的logit,我们将logit导入到SVM模块,计算得到线性分离器的函数模型为
y=0.929 3x-1.112 3.
(3)
3) 模型细节说明
一个完整的模型除了基本的结构和分类器外,还需要对优化函数、激活函数、学习率等参数进行配置,这里将模型训练时的细节说明列举如下:
① 训练数据集为8 243张眼底彩照,包括左眼眼底照4 166张、右眼眼底照4 077张.
② 对输入的每一张图片都进行缩放,缩放至512×512的大小.
③ 设置学习率为0.001,每个batch的大小为32,正则化系数为0.001.
④ 训练过程采用GPU的训练方式.
⑤ 使用AdamOptimization优化函数进行权值参数的优化.
⑥ 使用relu激活函数.
⑦ 使用五重交叉验证来判断何时终止训练.
本文使用的深度学习框架是TensorFlow,这是一个神经网络开源库,它使用数据流图的形式进行网络张量的计算.TensorFlow还支持GPU的运算,本文使用的GPU型号是Quadro K2200.
2 结 果
基于第1节介绍的3种网络结构和2种分类器,我们通过五重交叉验证训练完成后,将获取到的学习模型对测试图片(包括医院图片数据和公共图片数据)进行测试,所得到的测试结果如表3所示:
Table 3 The Recognition Rate of Different Network Models表3 不同网络模型的识别率
从表3可以看出,对于左右眼识别,以50层Resnet为基础的学习模型的综合识别率为98.11%,经典的Alexnet模型和我们设计的网络的识别率均达到了99%以上.而且从表3中最后2个网络还可以发现,以SVM为分类器的学习模型的识别率与以softmax回归为分类器的学习模型的识别率基本没有差别,所以选择分类器为softmax回归还是SVM对左右眼的识别率基本没有影响.但是,通过softmax分类器,可以得到图片属于每个类别的概率.所以,本文最终选择的分类器为softmax.
虽然表3中我们所设计的网络和经典的Alexnet网络相比在左右眼识别率上差别不是很大,但是,我们所设计的网络只有6层网络,减少了一层卷积层和一层全连接层,精简了网络结构,大大减少了参数量和计算量.在同等的硬件条件和同样的测试情况下,耗时大大降低,训练时每轮batch的迭代时间约为1.09 s,测试一张图片耗时约为0.04 s.而经典的Alexnet网络训练时每轮batch的迭代时间则约为20.60 s,测试一张图片的耗时约为0.30 s.因此,在速度上,所设计网络的训练速度是经典的Alexnet网络的训练速度的约20倍,测试速度则约为7.5倍.
在训练的过程中,每个batch的大小为32,每经过一个batch的训练对权值系数进行优化,并计算相应的损失函数loss和相应的准确率accuracy.我们所设计的网络的loss与accuracy的变化曲线如图4所示.可以看出,在经过约1000轮的迭代后,loss与accuracy的变化幅度已经很小,系统基本趋于稳定.
Fig. 4 The changing trend of loss and accuracy of the proposed network model during training图4 所设计网络模型在训练时相应的loss和accuracy的变化曲线
综合以上分析,本文最终选择使用了softmax分类器并经过优化精简后的6层网络结构对实验中的眼底图像进行训练和分类,分类的错误率不到1%.识别错误主要是因为干扰性亮斑和图像模糊2类原因.部分识别错误的眼底彩照如图5所示.图5(a)和图5(b)是2张患有糖尿病视网膜病变的眼底彩照,由于硬性渗出或棉绒斑症状的原因,图像中含有许多干扰性亮斑,导致算法将它们识别错误,即算法将图5(a)识别成左眼,但实际上图5(a)是右眼,图5(b)实际是左眼,算法将它识别成右眼.图5(c)和图5(d)是2张左眼眼底彩照,由于图像比较模糊,导致算法最终将它们都识别成了右眼.
Fig. 5 The samples of some representative misclassified images图5 部分识别错误的代表性图片
3 讨 论
本文在收集大量的临床眼底图像资料构建数据集后,利用一个深度卷积神经网络提出并验证了一种能自动判别左右眼的新方法.该方法首度将深度学习应用于左右眼识别领域,最高识别率达到了99%以上.与以往的左右眼识别方法相比,该方法具有更强的可操作性和实用性,用户只需要进行简单的操作就可以得到想要的结果.而且本文基本对网络模型进行了精简的最大化,识别的反馈速度快,实时性强.在基础网络模型上本文首先选择了2个常用的卷积神经网络Alexnet和Resnet,Resnet的深度更深,但是在本文的左右眼识别效果上却不如Alexnet,可能的原因是对于本文这种特征明显的简单分类问题,类似Alexnet这种不太深的网络就能起到意想不到的效果.其次,本文用到的Alexnet网络使用了dropout来防止过拟合,而采用的Resnet-50并没有使用dropout.还有,深度神经网络中权值参数的初始化特别重要,初始化不好也很容易陷入局部最优.所以在以后的研究中需要特别重视这些问题,尽量减少可控因素对实验结果的影响.
4 结束语
左右眼识别是一个基本的二分类问题,本文在TensorFlow深度学习框架上,首次利用卷积神经网络用于左右眼识别,测试准确率达到99%以上.与经典的Alexnet网络相比,在保证精度的同时,大大减少了计算量,加快了模型的训练和测试速度.除此之外,本文通过现有的图像数据发现softmax和SVM分类器对左右眼的识别效果基本没有影响.本文实验结果也表明,对于简单的图像分类问题,只需要少数几层卷积神经网络就可以达到不错的识别效果.这对未来深度学习方面的研究提供了一个很好的借鉴.
ZhongZhiquan, born in 1994. MSc candidate. His main research interests include data mining and machine learning.
YuanJin, born in 1977. PhD and professor. His main research interests include diagnosis and treatment of corneal, and ocular surface diseases.
TangXiaoying, born in 1988. PhD and professor. Her main research interests include medical image analysis, computational neuroinformatics, and machine learning.