眼底图像识别报告

简介

本次实验的目的是对眼底图像进行分类识别,数据的标签分为【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](http://upload-images.jianshu.io/upload_images/2563527-e190e0077b75e00d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
可以看到,对于糖尿病视网膜病变的识别率能达到约92%左右,误报率为8%左右。

整个训练耗时约30+小时,使用一块GTX1080显卡。

你可能感兴趣的:(眼底图像识别报告)