幼儿视力检查的自动评测方法

2018-12-07 09:08艾丽蓉周晓京
西安电子科技大学学报 2018年6期
关键词:视力卷积小儿

李 雪,艾丽蓉,周晓京,张 凯

(1. 西北工业大学 计算机学院,陕西 西安 710072;2. 西安电子科技大学 计算机学院,陕西 西安 710071)

婴幼儿视力检查对婴幼儿眼部疾病的早期发现和预防有着重要的作用,是提升儿童盲防治水平的关键.婴幼儿具有较低的认知能力、语言和肢体表达能力,他们的注意力不能长时间地集中,医生在进行常规视力检查时配合度很低.因此婴幼儿视力检查在临床检查中是一个难点问题.这种情况不仅仅存在于婴幼儿视力检查中,甚至对一些智障儿童也是如此,他们往往对上下左右的提示很不敏感.

Teller视力卡在1985年由文献[1]设计完成,是使用强制优先注视法,通过医生观察婴幼儿对不同等级条栅的反应来评估婴幼儿视力水平.这种方法易于临床操作,并且视力测评结果有很高的准确性和可靠性,在国内外的临床中被广泛使用.医生评估小儿视力时对小儿的注视有很多不确定结果,并受到主观的影响,所以Teller视力卡检查过程需要被记录下来,以便于多个医生参与评估讨论.

Teller视力卡检查同步视频系统[2]是一个记录婴幼儿视力检查过程的系统.该系统在被检查者的前后放置了两个摄像头,实现了婴幼儿画面和医生放置视力卡的画面同步拍摄.在一个相对密闭的检查环境里,医生每次放置一个Teller视力卡,观察被检查者的注视情况,包括眼球运动、注视方向等.视力检查同步视频记录了放置不同视力卡时婴幼儿的注视反应,用来准确地评估小儿的视力.医生可以使用检查视频进行视力评估和教学练习.根据不同被检查者的配合程度,熟练操作的医生测每个小儿的视力需要 30~ 40 min,医生评估每个患儿的视力水平要耗费更多的时间,同时无法避免走神或经验不足造成检查结果的主观误差.

当数字格式的医疗记录基本完善后,医疗成像的成本将降低,计算机成为临床诊断和治疗中不可缺少的辅助手段[3].文献[4]研究了基于卷积神经网络的糖尿病视网膜病变筛查,提出了具有4个卷积层的卷积神经网络,根据是否存在糖尿病视网膜病变的异常对图像进行分类.文献[5]对眼科图像自动诊断图像分类方法进行了对比分析,比较了眼部图像的复杂性,对比了诊断眼科疾病的多种图像分类算法的效果.文献[6]选择了 52 690 个正常黄斑图像和 48 312 个黄斑变性图像,训练深层神经网络将图像分类为正常或黄斑变性,分类结果峰值灵敏度和特异度分别为92.64%和93.69%.文献[7]提出了一种ConvNet架构,共同执行检测和跟踪,以简单有效的方式解决问题.由于视频检测需要大量医生的先验经验,每种视频的判断规则不同,所以不能找到一个合适的现有视频分类算法解决这个问题.笔者在识别视频中重点目标的基础上,完全模拟医生经验,分别设计了不同类别的判断方法对小儿视力实现自动评估,取得了较好的结果.

1 方 法

1.1 整体流程

将幼儿视力评测过程分为对象定位阶段和等级评估阶段.通过检测视频的每一帧,定位每一帧中Teller视力卡、卡上的条栅、小孩的头部、小孩的眼睛和每个眼睛的眼珠,完全模拟医生经验,分析小儿注视行为,评估小孩的视力等级.图1是幼儿视力自动评价流程图.

图1 幼儿视力自动评价流程图

在对象定位阶段,建立目标识别模型,识别并定位Teller视力卡和条栅、小孩的头部、眼睛及眼珠.在等级评估阶段,对每种视力等级的视频都模拟医生经验,针对不同视力等级的视频特征使用了不同的评估方法,按照寻找单双眼检测分界帧、是否配合、视力优于0.21、视力介于0.08到0.21之间、视力介于0.05到0.01之间的顺序依次判断.

1.2 对象定位

为了分析不同视力卡下幼儿的注视反应,首先识别定位视频每帧的感兴趣区域,包括每帧中视力卡、频率最大条栅和一般条栅、被检查者的头部、眼睛和眼珠.由于小孩的眼睛和眼珠很小,很难直接定位,于是先定位并分割出小孩的头部图像,再在将头部图像放大3倍的基础上识别眼睛.同样地,对眼睛做相同的处理,识别定位出眼珠的位置.

使用Faster R-CNN[8]建立模型定位识别所有目标.Faster R-CNN把区域建议网络和Fast R-CNN[9]结合在一起,将区域建议网络产生的候选集直接连接到感兴趣区域的池化层.Faster R-CNN实现了将特征提取、候选区域选择、分类和边框回归整合在一个网络中,形成了端到端的目标检测网络.图2是Faster R-CNN的网络结构图.

图2 Faster R-CNN网络结构图

Faster R-CNN主要分为4个部分:

(1) 卷积层.将图像输入到卷积层,提取图像的特征图,共享于后续的区域建议网络和全连接层.

(2) 区域建议网络.区域建议网络用全卷积神经网络产生候选区域,采用滑动窗口机制.该网络使用 3×3 的卷积核对特征图进行卷积运算,获得特征向量.使用锚盒机制,对每个滑动窗口的中心点位置预测出不同长宽比的k个(一般k=9) 锚盒.为每个锚盒分配一个二进制标签,将与真实框的交集和并集之比最高或大于0.7的锚盒标为正标签,低于0.3的锚盒标为负标签,训练区域建议网络,在所有锚盒中选择建议区域.

(3) 感兴趣区域池化层.每个感兴趣区域将在这一层被统一成固定大小的特征图.

(4) 分类与边框回归.特征图分别连接两个全连接层,这两个全连接层分别用于优化分类和边界回归.

1.3 自动评估

为了能准确地评估视频中小孩的双眼视力,首先确定出双眼检测和单眼检测的分界点,随后将视力评估结果分为不配合、视力盲、视力优于0.21、视力介于0.21与0.08之间和视力介于0.01与0.08之间.具体的评估方法如下.

(1) 定位双眼检测和单眼检测边界.在视频中双眼检测和单眼检测是无缝连接的.在双眼检测结束后,大人使用遮挡物覆盖小孩的一只眼睛,检查单眼视力,所以通过检查视频中每一帧的眼睛的个数来判断双眼检查的结束位置.笔者采用滑动窗口的方法寻找单双眼检测边界,滑动窗口的大小为35帧,每次向前滑动一帧,直到滑动窗口中识别到双眼的帧数在80%以上,则滑动窗口的最后一帧为单双眼检测的边界帧.

(2) 判断不配合视频.通过观察不配合视频,发现不配合的主要原因有哭闹、头部出镜、闭眼、注视不集中等.因此,不配合视频分3种情况进行判断: 第1种,统计视频中识别到小儿头部、双眼、眼珠的帧数,计算其占整个视频的比例.若这个比例小于阈值,则该视频为不配合.第2种,统计视频中小孩不看条栅的帧数占识别到条栅的帧数的比例.如果大于阈值,则为不配合.第3种情况是在视频中小孩因固定性内斜视造成全程对眼,统计视频中小儿双眼眼珠方向不一致的帧,计算其占的比例.若大于阈值,则结果为不配合.

(3) 视力为盲.对两类视频评估结果判断为视力盲: 看不到最宽条栅的视力卡和只能看到最宽条栅视力卡.对于识别到最宽条栅的视力板的帧,判断小孩的眼珠方向.如果没有注视到条栅,则该视频的结果为视力盲;如果有看到条栅方向,则判断被检查者是否看到较细的条栅;如果没有看到,则视力结果为盲.

(4) 视力优于0.21.由于大于0.21的视力卡的条栅在视频中只有视力卡而没有条栅,在评估视频结果优于0.21时,从视频结尾向前选择 1/a的帧,计算识别到视力卡而没有识别到条栅的帧所占的比例.若大于阈值,则评估结果为视力优于0.21;若没有找到视力卡,则增加选择帧的比例.

(5) 视力介于0.21与0.08之间和视力介于0.08与0.01之间的判断.使用AlexNet网络[10]对被检查者能看到的最后一帧中放置的视力卡的条栅进行分类.将条栅分为大于等于0.08和小于0.08两类,从而得出该视频的评估结果.

图3是AlexNet网络结构图.AlexNet网络的总体架构为5个卷积层、3个全连接层,最后输入到一个softmax层.前7层用于从原始图像中提取多维和高级特征,最后的softmax层用于分类.

图3 AlexNet网络结构图

卷积层具有两个重要优点:局部感知和权重共享.每个卷积核是一个局部特征提取器,用来识别原始图像像素间的关系,从而提取有效且合适的高级特征以增强模型的泛化能力.此外,权重共享可以大量减少训练参数的数量.AlexNet网络采用重叠最大池化层,旨在通过减少特征图的数据维度来实现空间不变性并增强抗噪声能力.采用的函数为非饱和的线性整流(Rectified Linear Units,ReLU)函数.ReLU函数的收敛明显快于饱和函数,如S形和双曲正切.另外,激活函数可以防止过拟合,提高精度.增加样本数量也是一个防止过拟合的有效方法.AlexNet采用两种数据增加方法,即变换图像和水平反射.随机提取训练数据集 224× 224个原始图像的补丁并进行水平翻转,使数据量扩大了 2 048 倍.为了进一步解决过拟合问题,失落被采纳.具体来说,在训练期间,隐性层的一半神经元被随机地选择参与;而在测试期间,所有神经元的输出被计算并乘以0.5的因子.通过这种技术,可以显著地减少不同神经元的共同适应,并且可以提高整个网络的性能.文中的训练集为{(x(1),y(1)),…,(x(n),y(n))},输入的特征x(i)∈Rn,标签y(i)∈ {1,…,P}.在网络中使用softmax分类器,所以一个小批次训练的总损失函数L(w)定义为

(1)

2 实验结果

2.1 数 据

文中的实验视频数据是使用中山大学眼科中心的Teller视力卡检查同步视频系统获得的检查视频,视频画面如图4所示.为了确保获得具有代表性和准确的视频数据,由一位有丰富操作经验的医生录制视力检查视频,由3个医生讨论并确认该视频的视力评估结果.经过讨论,排除了医生无法给出确定结论的视频.最终的数据集包括588个视频,其中视力盲的视频有56个,视力介于0.01、0.05之间的视频有80个,视力在0.08~0.21的视频有200个,视力大于0.21的视频有70个,不配合的视频有182个.笔者选择了88个数据用于调整参数,500个视频用于测试.

图4 视力检查同步视频画面

2.2 实验环境

文中的相关实验使用图形处理器在4块NVIDIA TitanX 12GB的显卡进行训练和测试,实验在Linux 14.04系统上进行.Faster R-CNN模型和AxleNet模型使用深度学习框架(caffe[11]框架)进行训练和测试.Faster R-CNN网络分4个模型进行训练: 第1个模型的类别为视力卡、条栅、最大条栅;第2个模型类别为小孩头部;第3个模型类别为小儿眼睛;第4个模型类别为小儿眼珠.4个模型训练的学习率为0.001,迭代次数为 8 000.AlexNet模型训练的学习率为0.01,迭代次数为 4 000.整个系统使用python语言实现.

2.3 调 参

本方法中共有13个参数.在调整参数的过程中,首先给每个参数一个经验值,固定所有经验值,依次调整每个参数,最终选择准确率最高的参数值.对于每个参数的调整,从88个视频中选择50个视频来进行实验.

2.4 结果与讨论

为了增加目标检测模型的可靠性和泛化能力,将数据随机分为k份,使用k折交叉验证方法来测试.Faster R-CNN提供了平均精确度(Average Precision,AP)来评价实验结果,得到了很好的效果.

对象定位的平均精确度如表1所示.

表1 对象检测平均精确度

目标检测网络识别到的条栅输入到AlexNet网络中分类.实验结果表明,该网络能很好地分类视力卡.实验同样采用k折交叉验证方法进行验证和测试,验证的平均精确度为 0.98± 0.066,测试的平均精确度为 0.99± 0.041.在进行了大量实验后将参数调整到最优,视频分类方法的准确率达到了70%.

笔者在分析此类视频的基础上,运用目标定位首先识别重点目标,使用神经网络分类不同等级的视力卡,再分析不同视频的特点,运用不同的方法对视频进行判断,最后能较好地完成视频分类任务.

2.5 临床应用

目前,小儿视力自动评估系统已经在中山眼科中心投入使用,负责儿童视力检查的医生检查后会使用该系统进行复查以确认结果.该系统运行近1年以来效果良好.

3 总 结

笔者提出了一个基于机器学习的小儿视力自动评估框架,用于对小儿视力检查视频进行自动评估.首先,使用Faster R-CNN网络来检测视频每帧中的重点对象,采用AlexNet网络分类视力卡.在获得每帧对象数据的基础上,重点分析了每一类视频的特点,并结合医生的经验知识,针对不同类别设计了评估方法.笔者进行了大量实验来调整数据以改善实验结果.最终,本方法满足了婴幼儿视力检查结果评估困难的迫切需求,达到了客观评价小儿视力的目的.笔者提出的方法可以纠正医生容易犯的主观错误,为检查小儿视力节省了大量时间,最终为实现全自动小儿视力检查做了准备工作.

猜你喜欢
视力卷积小儿
上午给眼睛“充电”或可改善视力
基于3D-Winograd的快速卷积算法设计及FPGA实现
夜盗小儿(下)
夜盗小儿
小儿涵之三事
卷积神经网络的分析与设计
保护视力等
好奇:20/20视力到底是什么?
从滤波器理解卷积
视力测试