眼底多病种分类模型评估
(一)评价指标
1.平均分类准确率
我们使用平均分类准确率来评估眼底多病种分类模型的性能。眼底图像数据集被划分为7类,分别统计各类的分类准确率Class_ACC,即各类眼底图像中被正确分类的图像数占该类图像总数的比例,再根据每一类的分类正确数计算总体分类准确率ACC,公式如下:
其中Classi代表第i类的数量,corri代表第i类被分类正确的数量。
2.Kappa值
Kappa值计算基于混淆矩阵,用于衡量分类模型的性能,值域在[-1,1]之间,一般Kappa值大于0。其定义如下:
其中,po代表混淆矩阵对角线元素之和与整个矩阵元素之和的比例,pe代表所有类别的真实与预测数量之积总和与整个矩阵元素之和的平方的比例,w代表分类混淆矩阵。混淆矩阵是一种特定的矩阵,用来呈现算法性能的可视化效果,混淆矩阵中的元素wi,j代表真实标签和预测标签分别为i,j的图像个数,类别总数为7,i,j∈[0,6]。
(二)分类效果评估
我们使用Efficient Net-B0网络对常见眼底疾病进行分类,第0类代表健康眼底,第1类代表高度近视,第2类代表年龄相关性黄斑病变,第3类代表视网膜静脉阻塞,第4类代表青光眼,第5类代表糖尿病视网膜病变,第6类代表其他眼底疾病。我们分别以单模型和集成模型的方法训练网络,分类结果如表7-4所示。考虑到部分病种训练数据较少,直接进行多分类训练会导致模型分类性能欠缺,因此,我们考虑使用集成模型的方法将多分类任务拆成权重加权的两个分类任务,分别是区分健康图像与患病图像的二分类任务和区分多种患病情况的六分类任务,记二分类任务为A,六分类任务为B,权重加权规则给出如下:
其中A2,0代表二分类任务第一类的概率,A2,1代表二分类任务第二类的概率,B6为六分类任务结果向量,new7为权重加权之后的七分类结果向量。从表7-4可以看出,集成模型的分类准确率和Kappa值均要优于单模型的结果,其次从各病种的分类准确率来看,集成模型的健康图像分类准确率明显高于单模型,这是因为轻微症状的高度近视、青光眼和其他病种图像与健康图像非常相似,仅在视盘区域有轻微区别。在青光眼的诊断上,单模型的效果优于集成模型。单模型的多分类是将青光眼与健康眼底图像一起训练,模型学习到了二者在视盘亮度以及视杯上的区别,而集成模型由于训练样本中健康图像占多数,模型会倾向于把图像判断为健康图像,因此在加权时会影响青光眼的准确率。图7-32是不同模型的混淆矩阵。可以看出集成模型的分类准确率要高于单模型,但其他病种的分类准确率不够理想,原因可能是在加权时减小了其他病种的概率值,与健康图像产生混淆。
表7-4 各病种分类准确率
(三)部署性能评估
最后我们对算法部署的不同方式进行简单性能比较与分析。首先是单进程方式,每发起一次诊断请求,AI算法模块需要模型加载、完成预测,返回结果。考虑到实际应用场景下,单进程方式比较耗时,时间主要耗费在模型加载上,因此,我们采用多进程方式,将模型加载模块与模型预测模块分离,分别从属于一个进程,将模型加载进程设置为守护进程,使其在后台运行,实时监听Redis消息队列。不同部署方式性能比较如表7-5所示。
图7-32 不同模型的混淆矩阵
表7-5 不同部署方式性能比较
单进程方式每请求一次,模型需要加载一次,这是十分耗时的,随着请求次数增加,模型加载时间和算法预测时间大致呈线性增长趋势。多进程方式仅加载一次模型,可以进行多次预测,节省了多次模型加载的时间。多进程方式的压力测试结果如表7-6所示。在小的访问量下,模型加载时间占比较大,因此,我们可以预先加载模型以节省时间,此时时间主要为算法预测时间。
表7-6 多进程方式的压力测试结果
上述是在本地客户端环境下的简单测试,不包含网络IO等开销,每次测试模拟真实环境下一张图片的实际用例。