1.介绍 (Introduction)
早期眼病检测是预防由糖尿病,青光眼,白内障,年龄相关性黄斑变性(AMD)和许多其他疾病引起的失明的经济有效方法。 根据世界卫生组织(WHO)的目前,全世界至少有22亿人有视力障碍,其中至少有10亿人本来可以预防。 快速和自动检测疾病对于减轻眼科医生的工作量并防止患者视力损害至关重要。 提供高质量的医学眼底图像后,计算机视觉和深度学习可以自动检测眼部疾病。
2.数据集 (Dataset)
眼病智能识别(ODIR)是一个结构化的眼科数据库,包含5,000名年龄的患者,左眼和右眼的彩色眼底照片以及医生的医生诊断关键字。 该数据集旨在代表由上工医疗技术有限公司从中国不同医院/医疗中心收集的“真实”患者信息集。 在这些机构中,眼底图像由市场上的各种相机(例如佳能,蔡司和Kowa)捕获,从而产生不同的图像分辨率。 注释由经过培训的人类读者进行质量控制管理来标记[2]。 他们将患者分为八个标签,包括正常(N),糖尿病(D),青光眼(G),白内障(C),AMD(A),高血压(H),近视(M)和其他疾病/异常(O) 。
经过初步的数据探索,我发现了ODIR数据集的以下主要挑战:
(1)高度不平衡的数据。 有的类别的图像上千张图,而有的仅由一两百。
(2)数据集包含多标签疾病,因为每只眼睛不仅可以患有一种疾病,而且可以患有多种疾病。
(3)标记为“其他疾病/异常”(O)的图像包含与10多种不同疾病相关的图像,这些图像在更大程度上扩展了变异性。
(4)非常大且不同的图像分辨率。 大多数图像的大小约为2976x2976或2592x1728像素。
所有这些问题都会对准确性和其他指标造成重大损失。
3.数据预处理 (Data Pre-Processing)
首先,调整所有图像的大小。 如果所有图像的大小都resize到很小的尺寸,虽然可以显着加快训练过程,也会丢失很多重要的图像信息,因此准确性非常低。 所以我是resize到了256
其次,标label。 data.csv文件中的图像注释存在问题,因为label一次涉及到两只眼睛(左右),而每只眼睛可能患有不同的疾病。 例如,如果左眼患有白内障而右眼具有正常眼底,则标签将是白内障,还有左眼是AMD,右眼是青光眼之类的,但都只有一个label。我认为,从这种模型的最终用户的角度来看,这是没有意义的,最好分别为每只眼睛进行预测,以了解例如应治疗哪只眼睛。 因此,通过在诊断关键字与疾病标签之间创建映射来丰富了数据集。 这样,每只眼睛都被分配了一个适当的标签。 此外,一些注释与特定疾病本身无关,但与图像质量低下有关的图像(例如“镜头尘”或“照相上看不见的光盘”)会从数据集中删除,因为它们在图像处理中不起决定性作用。确定患者的疾病。 最后生成full_df.csv文件,该文件包含经过预处理的图片的label信息,每张图都被分配了一个适当的label,如下图所示:
第三,经过预处理之后的图片还有6392张,按7:2:1随机随机分配来创建训练集、验证集和测试集。
接下来,将少数群体类别的数据增强应用于训练集以平衡数据集。 应用了随机缩放,随机旋转,左右翻转,上下翻转。 如果通过应用对比度限制的自适应直方图均衡化(CLAHE)来增强所有图像,以提高图像局部细节的可见度的话会给图像增加很多额外的噪音(尤其是背景(本来是黑色的))
最后是训练,使用Resnet-50的预训练模型,为了避免过拟合的问题,我选择了batchsize等于32的批量大小。batchsize较小的缺点是训练所需的时间比batchsize较大的要长得多,可能需要更多的epoch才能收敛。所选损失函数是NLLLoss,分类器是softmax,优化器是Adam,实验表明,epoch设置在50以内就能收敛(根据不同数据集选择),因为只做几组对比实验,没有上传到服务器上训练,显卡用的是祖传的GTX1050,
4.实验与结果 (Experiments and Results)
为简单起见,我开始训练一个简单的模型来检测眼睛是否具有正常的眼底或白内障,仅对标记为N(正常)或C(白内障)的图像进行训练。 结果非常令人满意,在15个epoch内我的模型的验证准确性达到97%左右。 这已经表明,使用ResNet-50可以自动检测眼睛白内障! 在接下来的每个实验中,我都将另一个类的图像添加到数据集中。 第四个实验加入DR后验证精度几乎大大降低。我想是因为DR与正常眼底长得很像。检测白内障、青光眼和AMD是一个容易得多的任务,因为这些图像彼此之间以及与正常眼底之间存在很大差异。 数据集及实验结果如下:
对于所有实验,分别使用不同的网络架构。 唯一的区别是每个实验的epoch略有不同
5.总结
在以上实验中,证明了可以使用Resnet检测各种眼部疾病。 最令人满意的结果是以97%左右的准确度检测白内障。 一次检查所有疾病,结果明显偏低。 利用ODIR数据集,不可能总是向训练模型提供特定疾病的所有重要变化,这会影响最终指标。 虽然,我相信拥有更大的数据集会提高预测的准确性,并最终使眼部疾病的检测过程自动化。