眼底多病种分类模型训练

二、眼底多病种分类模型训练

(一)眼底多病种数据集

本次眼底疾病分类数据集来源于本地3家医院,分别是南京明基医院、江苏省人民医院以及江苏省省级机关医院,共获得约6.5万张眼底图像,从中挑选出本节所需图片,其中健康眼底图像19 058张,高度近视8 305张,黄斑病变1 144张,视网膜静脉阻塞329张,青光眼1 045张,糖尿病视网膜病变1 778张,其他眼底疾病4 703张,共计7类36 362张眼底图像,训练集、验证集、测试集的比例为8∶1∶1。所有图像均已脱敏处理。所有图像均经过预处理,预处理方法同上一节的预处理方法,但并未进行扩展,预处理后图像大小为224×224像素,同Efficient Net-B0的输入大小。

(二)眼底多病种分类模型训练策略

我们使用Efficient Net-B0进行网络训练,网络输入大小为224×224,Batch大小为32,随机失活概率为0.2,最后分类层采用Softmax作为输出。初步实验中采用的优化器为SGDM,以验证集准确率作为模型的评价指标。对于学习率的选择,使用了Smith L.N.所述的方法进行学习率的搜索。搜索结果见图7-30。

图7-30 学习率搜索曲线

根据该曲线可见当学习率处于0.005时单次训练的损失值能达到最小,进行训练的效率也将更高,因此使用此学习率作为基准模型的学习率。为了提高收敛速度,后期实验优化器选择Adam,学习率设置为0.000 5,权重衰减因子为0.000 1,学习率优化策略采用学习率预热(Gradual Warmup)+余弦退火(CosineAnnealing LR)。

Warmup是于ResNet论文中提出的一种学习率预热方法,具体做法是在训练阶段前几轮使用一个较小的学习率,经过一定轮次的训练之后改为预设的学习率进行训练,这样做可以保证模型前期训练的稳定性,提高模型的收敛速度。但从一个较小的学习率阶跃为预设的较大学习率会导致训练误差突然增大,为此,Gradual Warmup使用一个线性函数以约束学习率每次增大固定值,避免了训练误差突然增大的问题。Cosine Annealing LR使学习率以余弦函数变化,其定义如下:

其中epoch表示当前训练轮次,newlr表示新学习率,initiallr表示初始学习率,etamin表示最小学习率,Tmax表示余弦函数周期的1/2。学习率预热参数设置multiplier为1,total epoch为5,余弦退火参数设置epoch为50,其余则为默认参数。学习率变化见图7-31。

图7-31 学习率变化图

损失函数采用Focal Loss,主要是为了解决正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,使得模型在训练时更专注于难分类的样本,公式定义如下:

其中pt是模型的预测概率,γ是聚焦参数,(1-ptγ代表权重调整因子。

此外,采用mixup方法提升模型性能。这是一种对图像进行混合增强的算法,将不同图像进行混合,从而扩充训练数据集,mixup主要增强了训练样本之间的线性表达,增强网络的泛化能力。其定义如下:

其中,xi和xj代表图像数据,代表新的图像,同理,yi和yj代表标签数据,代表新的标签。

在回归问题或分类问题中,损失函数用于衡量模型得出的预测值和真实值的差距,得出的差异又称为“惩罚”。对于使用神经网络的回归模型,最常用的损失函数为均方误差(MSE),见公式(7-8)。其中yi为第i个数据的真实值,yi′为第i个数据的预测值,n为总数据个数。

而对于分类模型,由于最终的输出结果为每个类别的预测概率,因此一般输出层采用Sigmoid函数(用于二分类)或softmax函数(用于多分类),损失函数使用交叉熵的结合方法。Sigmoid函数与softmax函数最终的输出结果都为[0,1]之间的值,可用于表示分类的概率。交叉熵损失函数与信息论里的熵类似,定义如下。

预测值越接近真实值,交叉熵损失函数越小。由于它的普遍性,我们已经将其运用在基准模型当中。然而使用one-hot编码(即指将类别改写为二进制数组,如二分类模型中属于第二类的样本标签为[0,1])后使用交叉熵函数有一个弊端,就是在训练时会使网络过于相信训练样本,导致鲁棒性差。若人为地减少样本标签正确值的概率,提高错误值的概率(如将上述例子中标签改为[0.1,0.9]),可有助于建模,进一步提高预测能力,避免极端情况的发生。该方法称为标签平滑技术,在许多分类模型中它的表现都比原标签更出色。在眼底多病种分类模型训练中我们也将其作为训练的策略之一。