一种基于改进的ResNeSt卷积神经网络模型的糖尿病性视网膜病变图像分类方法
技术领域
本发明属于医学图像处理
技术领域
,具体涉及一种基于改进的ResNeSt卷积神经网络模型的糖尿病性视网膜病变图像分类方法。背景技术
糖尿病是一种发病率比较高的身体代谢疾病,多发于年龄较大的群体,它不仅会对人体正常的血糖代谢产生严重的影响,还会对身体其他部位造成伤害,其中糖尿病性视网膜病变(DR)就是一种典型的糖尿病的并发症。DR不仅会对人的视力造成很大的影响,同时也会导致脑部神经受损。DR从早期到致盲一般存在一个长达10-15年的潜伏期,并且早期阶段也不突出,因此往往不会引起人们的注意。
糖尿病性视网膜病不仅会造成患者的致盲,同时给患者和家属造成了严重的精神和经济负担。如果糖尿病性视网膜病在前期能够得到及时的确诊,并采取有效的治疗手段,能最大程度的改善患者的健康,甚至能让患者视力得到恢复。
所以,对于尿病性视网膜病的准确诊断与鉴别对于患者来说具有重要的意义。传统的对糖尿病性视网膜病的检测主要依靠专业的眼科医生进行人工识别,但这个过程耗时耗力且效率低下,甚至容易造成误诊。加之目前中国眼科医生严重短缺,诊断水平参差不齐。人工智能的辅助诊断系统可以很好地解决这些问题。
发明内容
本发明要解决的技术问题是,提供一种基于改进的ResNeSt卷积神经网络模型的糖尿病性视网膜病变图像分类方法,利用改进的ResNeSt卷积网络分类算法,实现了对糖尿病性视网膜病变图像分类更加准确,分类时间更短。为了解决上述技术问题,本发明采用的技术方案是:基于改进的ResNeSt卷积神经网络模型的糖尿病性视网膜病变图像分类方法,具体包括以下步骤,相关流程图参见图1:
步骤1.从医院获取糖尿病性视网膜病变的医学图像;
步骤2.对收集的医学图像首先进行预处理,然后请专业的眼科医生对医学图像中病灶部分进行手动标注,从而构成训练ResNeSt卷积神经网络分类模型所需的带有标注信息的数据集,将带有标注信息的数据集划分为训练集,验证集和测试集三个部分;
步骤3.搭建实验所需的深度学习服务器平台,然后编写python代码,准备模型的搭建;
步骤4.通过在ResNeSt卷积神经网络中引入OctConv和SPConv两种轻量且高效的卷积操作,并引入Warm Restart和余弦退火的学习率调解机制,从而有效的提高了分类精度和训练速度;
步骤5.采用ILSVRC2012数据集对改进的ResNeSt网络进行预训练,再将得到的初始模型迁移到预处理后的糖尿病性视网膜数据集上进行微调学习,从而得到最终的糖尿病性视网膜图像分类模型;
步骤6.载入测试集,用来测试训练好的ResNeSt卷积神经网络分类模型,得出分类的结果,看各分类指标是否符合要求。
进一步地,步骤2中所述的对收集的医学图像首先进行预处理,然后请专业的眼科医生对医学图像中病灶部分进行手动标注,从而构成训练ResNeSt卷积神经网络分类模型所需的带有标注信息的数据集,将带有标注信息的数据集划分为训练集,验证集和测试集三个部分,具体为:
步骤2.1.去除收集的视网膜病变医学图像数据集中没有任何意义的视网膜图像;
步骤2.2.切除每幅视网膜图像上会给分类带来干扰的黑边框;
步骤2.3.对剩余的视网膜图像统一采取直方图拉伸;
步骤2.4.对数据集中的所有视网膜图像采取颜色归一化的处理方法;
步骤2.5.对数据集图像进行图像增强处理;
步骤2.6.请专业的病理医生对数据集进行标注;
步骤2.7.在以上6个步骤的基础上进行数据扩增操作,主要扩增步骤包括对视网膜图像按0.8的比例进行缩放,旋转90°/180°/270°,仿射处理,垂直和水平方向做镜像等;
步骤2.8.将处理好的数据集分为训练集,验证集和测试集三个部分;其中训练集有17392张图像,验证集有2319张图像,测试集有3478张图像。训练集用于构建模型,验证集用于验证模型,测试集用于对模型进行测试。
进一步地,步骤3中所述的搭建实验所需的深度学习服务器平台,然后编写python代码,准备模型的搭建,具体为:
步骤3.1.在桌面安装Ubuntu 20.10操作系统并且下载cuda 10.2;
步骤3.2.然后下载Anaconda 3软件库并创建python编程环境;
步骤3.3.在Anaconda 3上下载并安装PyTorch 1.8.0所需的各种环境;
步骤3.4.最后写基于PyTorch 1.8.0框架的python代码。
进一步地,步骤4中所述的通过在ResNeSt卷积神经网络中引入OctConv和SPConv两种轻量且高效的卷积操作,并引入Warm Restart和余弦退火的学习率调解机制,从而有效的提高了分类精度和训练速度,具体为:
步骤4.1.搭建ResNeSt网络模型,用OctConv替换其卷积核为3X3的卷积层.在OctConv初始层中基础卷积层的卷积核采用SPConv,以减少训练参数,从而减少训练所需时间,提高分类准确率。
步骤4.2.学习率每间隔一定周期后,重新初始化为某个预先设定的值,然后逐渐衰减。每次重启后模型参数不是从头开始优化,而是从重启前的参数基础上继续优化。
步骤4.3.其次再结合余弦退火的方式,有利于提高分类精度。以上两种方式的结合提升了模型的准确率和速度。
进一步地,步骤5中所述的采用ILSVRC2012数据集对改进的ResNeSt网络进行预训练,再将得到的初始模型迁移到预处理后的糖尿病性视网膜数据集上进行微调学习,从而得到最终的糖尿病性视网膜图像分类模型,具体为:
步骤5.1.首先采用ILSVRC2012数据集对搭建好的ResNeSt模型进行预先训练,并将经过10000次训练迭代后的模型进行保存;
步骤5.2.将上面保存的模型迁移到我们收集的,经预处理的训练集和验证集上进行再训练和验证,从而实现糖尿病性视网膜图像深度特征的提取。
进一步地,步骤6中所述的载入测试集,用来测试训练好的ResNeSt卷积神经网络分类模型,得出分类的结果,看各分类指标是否符合要求,具体为:
步骤6.1.将已经预处理过的具有3478张糖尿病性视网膜病变图像的测试集作为输入,得到分类输出结果;
步骤6.2.计算每个分类评价指标(包括AUC,Accuracy,Sensitivity,Specificity,F1-score),看模型效果是否达到预期。
与现有技术相比,本发明的有益效果是:
(1)本发明改进了ResNeSt的结构,通过加入OctConv和SPConv两种轻量且有效的卷积操作,大大减少了模型的参数,提高了分类准确度和降低了训练的时间。
(2)本发明的分类方法先经过了ILSVRC2012数据集的预训练,能够有效的提高准确度。
(3)本发明的目标数据集经过了预处理,将一些对模型分类效果有影响的因素进行了去除,不会出现目标类别数量不均衡,颜色有较大差异等问题,经测试所得到的分类结果很好。
(4)本发明采用了Warm Restart和余弦退火的学习率调解机制,能够有效的缩短训练的时间,同时提高分类的准确度。
附图说明
图1为本发明中基于改进的ResNeSt卷积神经网络模型的糖尿病性视网膜病变图像分类方法的流程示意图;
图2为本发明中ResNeSt网络模型结构示意图;
图3为本发明中改进的ResNeSt网络算法的流程图;
图4为本发明中OctConv过渡层的结构示意图;
图5为本发明中带Warm Restrat的余弦退火学习率调解机制示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明:
一种基于改进的ResNeSt卷积神经网络模型的糖尿病性视网膜病变图像分类方法,具体包括以下步骤:
步骤1.从医院获取糖尿病性视网膜病变的医学图像;
步骤2.对收集的医学图像首先进行预处理,然后请专业的眼科医生对医学图像中病灶部分进行手动标注,从而构成训练ResNeSt卷积神经网络分类模型所需的带有标注信息的数据集,将带有标注信息的数据集划分为训练集,验证集和测试集三个部分;
步骤3.搭建实验所需的深度学习服务器平台,然后编写python代码,准备模型的搭建;
步骤4.通过在ResNeSt卷积神经网络中引入OctConv和SPConv两种轻量且高效的卷积操作,并引入Warm Restart和余弦退火的学习率调解机制,从而有效的提高了分类精度和训练速度;
步骤5.采用ILSVRC2012数据集对改进的ResNeSt网络进行预训练,再将得到的初始模型迁移到预处理后的糖尿病性视网膜数据集上进行微调学习,从而得到最终的糖尿病性视网膜图像分类模型;
步骤6.载入测试集,用来测试训练好的ResNeSt卷积神经网络分类模型,得出分类的结果,看各分类指标是否符合要求。
进一步地,步骤2中所述的对收集的医学图像首先进行预处理,然后请专业的眼科医生对医学图像中病灶部分进行手动标注,从而构成训练ResNeSt卷积神经网络分类模型所需的带有标注信息的数据集,将带有标注信息的数据集划分为训练集,验证集和测试集三个部分,具体为:
步骤2.1.去除收集的视网膜病变医学图像数据集中没有任何意义的视网膜图像;
步骤2.2.切除每幅视网膜图像上会给分类带来干扰的黑边框;
步骤2.3.对剩余的视网膜图像统一采取直方图拉伸;
步骤2.4.对数据集中的所有视网膜图像采取颜色归一化的处理方法;
步骤2.5.对数据集图像进行图像增强处理;
步骤2.6.请专业的病理医生对数据集进行标注;
步骤2.7.在以上6个步骤的基础上进行数据扩增操作,主要扩增步骤包括对视网膜图像按0.8的比例进行缩放,旋转90°/180°/270°,仿射处理,垂直和水平方向做镜像等;
步骤2.8.将处理好的数据集分为训练集,验证集和测试集三个部分;其中训练集有17392张图像,验证集有2319张图像,测试集有3478张图像。训练集用于构建模型,验证集用于验证模型,测试集用于对模型进行测试。
进一步地,步骤3中所述的搭建实验所需的深度学习服务器平台,然后编写python代码,准备模型的搭建,具体为:
步骤3.1.在桌面安装Ubuntu 20.10操作系统并且下载cuda 10.2;
步骤3.2.然后下载Anaconda 3软件库并创建python编程环境;
步骤3.3.在Anaconda 3上下载并安装PyTorch 1.8.0所需的各种环境;
步骤3.4.最后写基于PyTorch 1.8.0框架的python代码。
进一步地,步骤4中所述的通过在ResNeSt卷积神经网络中引入OctConv和SPConv两种轻量且高效的卷积操作,并引入Warm Restart和余弦退火的学习率调解机制,从而有效的提高了分类精度和训练速度,具体为:
步骤4.1.搭建ResNeSt网络模型,用OctConv替换其卷积核为3X3的卷积层.在OctConv初始层中基础卷积层的卷积核采用SPConv,以减少训练参数,从而减少训练所需时间,提高分类准确率。这样做的原因是:(1)OctConv结构包括初始层,过渡层和输出层。初始层是单输入双输出,负责接收输入特征图。原始图像经过一层卷积核大小为3X3的卷积层输出高频特征图(AH),对原始图像进行平均池化后经过相同的卷积层输出低频特征图(AL),然后对高频部分进行高频到高频的卷积操作,得到特征图(BH→H)。再将高频部分进行平均池化,再经过卷积,得到最终的特征图(BH→L)。对低频部分进行低频到低频的卷积操作,得到特征图(BL→L).再将低频部分进行上采样操作,再经过卷积,得到最终的特征图(BL→H),将BH→H和BL→H,BH→L和BL→L分别进行相加操作,得到高,低频特征图BH,BL.可表示为:
BH=BH→H+BL→H
BL=BL→L+BH→L
(2)SPConv是基于特征冗余而设计的,它将输入特征分为两组分别进行处理,相比常规卷积,SPConv不仅精度更高,而且推理速度更快,同时具有更低的参数量。
步骤4.2.采用Warm Restart来代替学习率衰减的方法。具体为:假设在梯度下降过程中重启X次,第x次重启在上次重启开始第Mx个回合后进行,Mx称为重启周期。在第x次重启之前,用余弦退火的方式来降低学习率。第i次迭代的学习率为:
其中分别为第x个周期中学习率的上限和下限,可以随着x的增大而逐渐降低;Mrep为从上次重启之后的epoch数。重启周期Mx可以随着重启次数逐渐增加。
进一步地,步骤5中所述的采用ILSVRC2012数据集对改进的ResNeSt网络进行预训练,再将得到的初始模型迁移到预处理后的糖尿病性视网膜数据集上进行微调学习,从而得到最终的糖尿病性视网膜图像分类模型,具体为:
步骤5.1.首先采用ILSVRC2012数据集对搭建好的ResNeSt模型进行预先训练,并将经过10000次训练迭代后的模型进行保存;
步骤5.2.将上面保存的模型迁移到我们收集的,经预处理的训练集和验证集上进行再训练和验证,从而实现糖尿病性视网膜图像深度特征的提取。
进一步地,步骤6中所述的载入测试集,用来测试训练好的ResNeSt卷积神经网络分类模型,得出分类的结果,看各分类指标是否符合要求,具体为:
步骤6.1.将已经预处理过的具有3478张糖尿病性视网膜病变图像的测试集作为输入,得到分类输出结果;
步骤6.2.计算每个分类评价指标(包括AUC,Accuracy,Sensitivity,Specificity,F1-score),看模型效果是否达到预期。
所述步骤6中对图像分类模型的性能评价指标,具体为,评价方程为AUC,F1-score,其中TP为:正样本被正确识别的数量;TN为:负样本被正确识别的数量;FP为:负样本被错误识别为正样本的数量;FN为:正样本被错误识别为负样本的数量。
以上所述仅为本发明的一个实施方式而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改,等同替换,改进等,均应包含在本发明的保护范围之内。