非常幸运,在最近的第二届全国眼科人工智能大会算法挑战赛中,我们组队参加了两个比赛:“① 糖尿病视网膜病变分期”,② “多种眼底疾病诊断”,我们取得了前者第二,后者第一不错的成绩。这里其实非常感谢实验室的小伙伴们,帮忙一块儿调整模型,修改模型融合策略,再加上最后有那么一点运气,才取得了这么好的成绩。
本篇博客将介绍本次算法挑战赛中,我们的模型与解决策略。
下面先介绍一下整个比赛的流程与规则(了解流程与规则,其实对我们最后模型准确率的提升有着非常大的帮助)。
1. 比赛流程与规则
比赛分为两个阶段:
a) 热身赛阶段
:针对比赛 ① 公布30张没有标注的图片;针对比赛 ② 公布35张没有标注的图片。然后给一周的时间进行训练,训练完成后邮件发送至组委会邮箱,然后组委会会告知能否进入决赛(不会告知你的准确率与排名,也不会公布热身赛数据的 label)。
b) 决赛阶段
:针对两个比赛分别提供30张眼底彩照,现场限时15分钟,用自己的笔记本进行结果预测,并按照指定的Excel格式进行输出与提交,最终现场直接公布排名结果。
这里需说明一点:本次比赛不提供训练数据。
① 糖尿病视网膜病变分期,原本要求是如下图所示的七分类分级,但在热身赛提交的前一天,由于目前网上能够找到的开源数据集均为五分类数据,因此临时修改为五分类预测。
但在这里需要注意,中国的分期标准,即使是五分类,我们对增殖期的定义也与美国的定义不同。凭借着过去一年多的项目积累,仔细观察 Kaggle 2019年的糖网分级比赛数据集后可以发现,比赛中的数据集很多地方都将 视网膜前膜出血 与 纤维膜 分到了三期,而非四期,这与我们的比赛要求的分级标准是不一致的。
这也就说明,即使我们在 Kaggle 比赛的10万张数据集上取得了极高的准确率,在真正的热身赛与决赛中也不一定能取得非常优异地成绩。那么我们针对这种情况是怎么来做的呢?后面会进行详细地说明。
② 多种眼底疾病诊断:要求进行七分类疾病诊断(正常,年龄相关性黄斑变性,病理性近视,高血压,糖尿病性视网膜病变,青光眼,其他病变),且不提供训练数据,所有数据都需要网上查找。
这个题目的最大难点在于网上公开的数据集非常非常少,那我们应该如何有效地应用小样本数据进行训练,并取得不错的预测效果呢?同样我们也会在后面进行详细介绍。