简介
本次实验的目的是对眼底图像进行分类识别,数据的标签分为【0,1,2,3,4】五类,分别代表糖尿病视网膜病变的5个阶段,0为健康,4为最严重。
我们的任务就是利用深度学习根据训练集训练模型,对测试集的数据进行预测分类,达到尽可能高的准确率。
原始数据集
- train set
包括 35126 张眼底图像的数据,分辨率不一,质量不一。
划分出其中的10%作为validation set。 - test set
包括 53576 张眼底图像的数据,但是kaggle并未给出label,kaggle根据对这个测试集结果的评判来给出比赛的得分。
图像预处理
- resize
以图像中的圆形眼底图片为边界进行裁剪,取中心部分。
调整分辨率分别为128x128,256x256,512x512,用于之后的训练。 - Data augmentation
通过360度旋转,镜像等扩增数据集。
网络结构
Paste_Image.png-
为了减少训练时间,只选用了一个网络net B进行训练
-
使用10%的train set作为validation set
-
用128x128像素图片训练1-11 和 20-25层。
-
用256x256像素图片训练1-15 和 20-25层。初始时,使用上一次训练得到的权重作为1-11层的权重。
-
用512x512像素图片训练全部层。初始时,使用上一次训练得到的权重作为1-15层的权重。
-
最后得到三组权重(weights)
[best kappa weight, best validation score weight, final weight]
特征提取
从 RMSPooling Layer提取特征。为了提升质量,重复进行20次特征提取,但是使用的是随机的data argumentation。然后在20次循环之后提取出 RMSPooling Layer的平均值和标准差,作为下一层blend network的输入。
左右眼混合
对于每个病人,使用下面的特征作为网络的输入
[this_eye_mean, other_eye_mean, this_eye_std, other_eye_std, right_eye_indicator]
训练一个简单的全连接神经网络。
网络结构:
Input 8193
Dense 32
Maxout 16
Dense 32
Maxout 16
```
根据上文训练的三组weights,会生成三个blend network。然后对这三个network的输出取平均值,并且设置阈值为[0.5,1.5,2.5,3.5]来生成最终的分类结果。
## 评分标准
kaggle对此比赛的评分基于 quadratic weighted kappa 算法。得分范围为0-1,分数越高证明模型的效果越好。
简单地说就是对于多分类问题,预测的越不准得分越低,比如把class=0预测成class=4的惩罚会比把class=0预测成class=1的惩罚重很多,进行随机预测的得分约为0。
具体的算法实现内容参见[此链接](https://www.kaggle.com/c/diabetic-retinopathy-detection/details/evaluation)
## 实验结果
提交到kaggle进行评分,结果为8.42,略低于原队伍的8.44,但是考虑到我们所大幅度简化的网络,实际得到的结果还是不错的。
validation set的confusion matrix如下:
![confusion matrix](https://img.haomeiwen.com/i2563527/e190e0077b75e00d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
可以看到,对于糖尿病视网膜病变的识别率能达到约92%左右,误报率为8%左右。
整个训练耗时约30+小时,使用一块GTX1080显卡。
网友评论