眼底增强型疾病感知蒸馏模型 FDDM:无需配对,fundus 指导 OCT 分类
眼底增强型疾病感知蒸馏模型 FDDM:fundus 指导 OCT 分类
- 核心思想
- 设计思路
- 训练和推理
- 效果
- 总结
- 子问题: 疾病特定特征的提取与蒸馏
- 子问题: 类间关系的理解与建模
核心思想
论文:https://arxiv.org/pdf/2308.00291.pdf
代码:https://github.com/xmed-lab/FDDM
主要解决的是使用 OCT图像进行视网膜疾病分类 的问题。
OCT图像非常详细,但它们收集起来成本高昂。
为了解决这个问题,作者原本尝试用一种称为 多模态学习 的方法,即同时利用OCT图像和眼底照片。
问题在于,要找到同一个病人的这两种图像是相当困难的,这在现实中几乎是不可能的。
那么,研究者们是怎么解决这个问题的呢?
他们提出了一种叫做 眼底增强型疾病感知蒸馏模型(FDDM) 的新方法。
这个方法的聪明之处在于,它只用到了 未配对的眼底图像 来增强OCT图像的处理能力。
这就意味着,即使我们没有同一个病人的两种图像,我们也能提高诊断的准确性。
最关键的是,这个模型采用了两种特别的技术,叫做 类原型匹配 和 类相似性对齐。
就好像我们有一个专门学习眼底照片的“老师模型”,然后这个模型会把它学到的关于疾病的知识传递给专门学习OCT图像的“学生模型”。
这样,即使学生模型只看到OCT图像,它也能利用从眼底图像中学到的信息来做出更好的判断。
如果眼底图像模型学会了识别一种特定的视网膜病变,即使OCT图像呈现的角度或细节不同,OCT 模型也能用这个知识来更准确地识别出类似的病变。
总之,通过这种方式,我们能在 没有成对数据 的情况下,更有效地使用 OCT 图像进行视网膜疾病的分类。
三种不同的学习方法在视网膜疾病分类的应用中的差异:
-
单模态学习 (Single-modal Learning)
- 在训练阶段,只使用OCT图像。
- 在测试阶段,同样只使用OCT图像进行疾病的分类。
-
多模态学习 (Multi-modal Learning)
- 在训练阶段,同时使用眼底照片和OCT图像。
- 在测试阶段,仍然需要同时使用这两种图像来进行分类。
-
蒸馏增强方法 (Proposed Distillation Enhancement Method)
- 在训练阶段,使用眼底照片作为“教师”模型来增强OCT图像的“学生”模型。
- 在测试阶段,仅使用OCT图像进行分类,不需要眼底照片。
关键点是,使用蒸馏增强方法,附加的模态(即眼底照片)只在训练过程中使用,而在实际的推理或测试过程中则不需要。
这可以简化实际应用中的流程,因为在测试阶段不需要收集额外的眼底照片,降低了成本和复杂性。
设计思路
我们现在有一堆复杂的视网膜图像,我们需要从这些图像中识别出各种不同的眼疾。
但这个任务有点像在一个嘈杂的房间里试图听到一个人的声音,因为每张图像都有可能带有它自己的“噪声”,也就是一些我们不需要的信息。
首先,我们有类原型匹配这个技巧:
- 问题是:每个单独的图像都可能有自己的噪声,这会干扰我们准确识别疾病。
- 所以解法就是:我们把所有同一种疾病的图像放在一起,然后找到一个平均值,这样就能代表这个疾病的一般特征,而不是某个个别图像的特点。就好比我们从一大堆人的声音中找到一个平均的音调,这样我们的模型就能更清楚地“听到”疾病的声音。
然后是类相似性对齐:
- 这里的问题是:有时候,不同的疾病之间会有一些相互关系,这对于诊断也很重要,尤其是当一个病人可能同时有多种眼疾的时候。
- 解法:我们让模型学会识别这些疾病间的关系,就像是教它们理解不同声音之间的和谐或不和谐。这帮助我们的模型更全面地理解每种疾病,以及它们如何可能一起出现。
最后,整个框架的目的是将这些知识结合起来:
- 我们面临的问题:我们需要一种方式来确保我们的模型能同时学习到如何识别疾病和它们之间的关系。
- 所以作者用了:一个综合的损失函数,这是一个计算公式,用来指导模型在训练时如何调整自己,以便它能同时在两方面做得很好。
所以,FDDM 就像是在给模型上了两门课程:
- 类原型匹配 是基础课,教模型如何识别每种疾病的基本特征。
- 然后,类相似性对齐 是高级课,教模型理解不同疾病是如何相互联系的。
- 而 整体框架 则确保模型能把这两门课学好,最终能在真实世界中准确地诊断出视网膜疾病。
- 这样做的好处是,我们甚至不需要所有的图像都是成对的,模型仍然能学到很多有用的信息。
训练和推理
在训练阶段:
- 眼底图像通过眼底模型 ( F_t ) 处理,而OCT图像通过OCT模型 ( F_s ) 处理。
- 两个模型分别产生特征图,这些特征图通过全局平均池化(GAP)层来减少维度。
- 对于眼底图像特征 ( v_f ),采用多层感知机(MLP)投影器进行处理,并计算出类原型,这是类原型匹配的一部分。
- 同时,OCT图像特征 ( v_o ) 经过Sigmoid激活后进入分类器。
在推理阶段:
- 分别对眼底和OCT模型得出的特征进行类别均值计算,得到类原型。
- 对于OCT模型,它还包括计算类别均值的logits ( q_s ),并通过余弦相似度进行类相似性对齐。
类原型匹配的目的是将眼底模型中关于疾病的特定特征提炼到OCT模型中。
它通过计算每个类别的特征均值来建立一个“原型”,这个原型代表了该类疾病的平均或典型特征。
类相似性对齐则是在推理阶段对OCT图像的类别关系进行调整,以使其与眼底图像的类别关系保持一致。
这通过比较类别均值的logits的余弦相似性矩阵来实现,促使OCT模型学习到不同疾病间的关系。
上图解展示了一个两阶段的过程,其中利用眼底图像来增强OCT图像分类的能力,而在实际应用时,只需要使用OCT图像。
这个过程利用了深度学习,包括特征提取、降维、非线性激活和分类器,同时注重在两种不同模态之间转移和蒸馏知识。
效果
在实验中,研究者面对的问题是确定新方法——基于类原型匹配和类相似性对齐的方法——在性能上是否优于现有的单模态、多模态和知识蒸馏方法。
为了解决这个问题,他们采取了以下步骤:
-
性能比较:他们将新方法的性能与其他几种方法进行了比较。
这些方法包括仅使用OCT图像的单模态方法、同时使用OCT和眼底图像的多模态方法,以及使用知识蒸馏技术的方法。
-
评估指标:他们使用了准确性指标,如平均精度(MAP)和F1分数,来衡量每种方法的性能。
MAP是一种衡量模型对所有类别平均表现的指标,而F1分数则是精确度和召回率的调和平均,这两个都是多标签分类任务中常用的性能评估指标。
-
实验数据:他们使用了新收集的数据集TOPCON-MM,这个数据集包含了来自369只眼睛的成对的眼底和OCT图像,以及另一个公开可用的多模态数据集MMC-AMD。
解决方案的目的是展示新方法在视网膜疾病多标签分类任务上的优越性。
通过与现有方法的直接比较,研究者可以展示出以下几点:
- 如果新方法在MAP和F1分数上都优于现有方法,那么它就可以被认为在统计上是有效的。
- 这种比较可以揭示新方法是否能更好地利用眼底图像中的信息来辅助OCT图像的分类,即使眼底图像不是在所有情况下都可用或是质量较差的情况。
- 通过在多个数据集上验证新方法,可以证明其稳健性和广泛的适用性,这对于临床实践中的应用尤其重要。
上图表展示了不同模型在视网膜疾病分类任务上的性能比较,具体是通过平均精度(MAP)指标来衡量的。
在图(a)中,我们看到了几种不同模型在 MMC-AMD 数据集上的MAP得分:
- “Fundus CNN” 表示仅使用眼底图像的卷积神经网络模型。
- “OCT CNN” 是仅使用OCT图像的卷积神经网络模型。
- “Two-Stream” 是一个多模态学习模型,同时使用眼底和OCT图像。
- “FitNet” 可能是一种网络结构,用于多模态学习或知识蒸馏。
- “KD” 代表知识蒸馏模型。
- “Ours” 是指提出的FDDM模型。
可以看到,“Ours”(即作者们提出的模型)在MAP得分上优于其他所有模型,达到了92.29%。
在图(b)中,我们看到了模型从其他眼底数据集转移到TOPCON-MM数据集时的MAP得分:
- “OCT CNN” 表示的是基准OCT卷积神经网络模型。
- “Ours” 代表应用了提出的FDDM模型。
在两种不同的转移设置中:
- 从 MMC-AMD 数据集转移到 TOPCON-MM 数据集。
- 从 RFMiD 数据集转移到 TOPCON-MM 数据集。
在这两种情况下,"Ours"模型的性能都优于仅使用OCT图像的卷积神经网络模型,分别提高了4.26%和2.21%。
这些图表证实了提出的FDDM模型在处理多模态视网膜图像分类任务时,无论是在单一数据集上还是从其他数据集转移学习时,都能取得比现有技术更好的性能。
总结
FDDM 的逻辑关系可以拆解成两个主要的子问题。
子问题: 疾病特定特征的提取与蒸馏
- 问题: 如何确保OCT模型能够学习到疾病的核心特征,而不是由于图像中的噪声或样本差异造成的误差?
- 解法: 类原型匹配(CPM)。
- 为什么: 类原型匹配通过计算同一疾病类别内所有样本特征的平均值来生成代表性的特征向量(即原型),这样可以提炼出与个体样本噪声无关的疾病核心特征。
- 目的: 这个解法使OCT模型能够集中学习对疾病诊断最重要的特征,而忽略样本间的非疾病相关变异。
子问题: 类间关系的理解与建模
- 问题: 如何使OCT模型理解不同疾病类别之间的关系,尤其是在多标签分类场景中,这些关系可能包含对诊断有用的信息?
- 解法: 类相似性对齐(CSA)。
- 为什么: 类相似性对齐通过比较不同疾病类别的特征表示之间的相似度,从而使模型能够学习到疾病间的共现模式和关联性。
- 目的: CSA的目的是使OCT模型能够在不仅识别单一疾病的同时,也理解和识别疾病间可能存在的复杂关系,这对于精确的疾病分类和诊断至关重要。
假设我们的OCT模型正在尝试学习识别黄斑变性,这是一种常见的视网膜疾病。
每个患有黄斑变性的患者的OCT图像可能会因为机器的差异、扫描的角度、病情的严重程度等因素而有所不同,因此,这些图像可能包含很多个体特异性的噪声。
类原型匹配(CPM)就像是在找到所有黄斑变性图像的“共同语言”。
它把所有黄斑变性的图像特征取平均,创建一个典型的黄斑变性特征向量,这个向量捕获了与这个疾病相关的关键特征,而忽略了每个单独图像中的个别差异。
因此,OCT模型通过学习这个“共同语言”,即类原型,就能更准确地识别出黄斑变性,而不会被单个图像中的噪声所干扰。
FDDM = 类原型匹配 + 类相似性对齐
- 类原型匹配的目的是提供稳健的疾病特征表示,以便模型能够更准确地识别每种疾病。
- 类相似性对齐的目的是提高模型对不同疾病类别之间关系的理解,这对于多疾病识别和诊断非常关键。
在很多情况下,眼睛疾病并不是孤立发生的,比如,糖尿病视网膜病变(DR)和黄斑水肿(DME)经常一起出现。
类相似性对齐(CSA)的目标是帮助OCT模型捕捉到这些疾病间的联系。
例如,如果模型在训练时发现当DR出现时,DME的几率也增加,那么在实际应用中,当模型在一个图像中检测到DR的特征时,它会考虑到DME的可能性,即使DME的特征不是非常明显。
这种对类间关系的理解,提高了模型在真实世界复杂病例中的准确性和可靠性。
归纳:这两个子解法共同构成了FDDM的核心,它们使得该模型能够在未配对的数据上进行训练,并且在测试时不需要眼底图像,大大提高了模型的实用性和效率。
通过这种方式,FDDM能够在复杂的临床场景中提供更精确的疾病分类性能。
应用场景:提高OCT图像的疾病分类性能
- 知识蒸馏:即使你没有足够的OCT图像,FDDM可以帮助你从现有的眼底图像中蒸馏疾病相关的信息,以增强OCT图像分类器的性能。
- 多模态学习:如果你有成对的眼底和OCT图像,FDDM能够提取这两种图像模式中的互补信息,从而提高疾病分类的准确性。
相关文章:

眼底增强型疾病感知蒸馏模型 FDDM:无需配对,fundus 指导 OCT 分类
眼底增强型疾病感知蒸馏模型 FDDM:fundus 指导 OCT 分类 核心思想设计思路训练和推理 效果总结子问题: 疾病特定特征的提取与蒸馏子问题: 类间关系的理解与建模 核心思想 论文:https://arxiv.org/pdf/2308.00291.pdf 代码:https://github.c…...

代码随想录算法刷题训练营day17
代码随想录算法刷题训练营day17:LeetCode(110)平衡二叉树 LeetCode(110)平衡二叉树 题目 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(…...
Java集合如何选择
为什么使用集合 当需要存储一组类型相同的数据时,数组是最常用且最基本的容器之一。但是,使用数组存储对象存在一些不足之处,因为在实际开发中,存储的数据类型多种多样且数量不确定。这时,Java 集合就派上用场了。与数…...

简单介绍----微服务和Spring Cloud
微服务和SpringCloud 1.什么是微服务? 微服务是将一个大型的、单一的应用程序拆分成多个小型服务,每个服务负责实现特定的业务功能,并且可以通过网络通信与其他服务通信。微服务的优点是开发更灵活(不同的微服务可以使用不同的开…...

Jenkins邮件推送配置
目录 涉及Jenkins插件: 邮箱配置 什么是授权码 在第三方客户端/服务怎么设置 IMAP/SMTP 设置方法 POP3/SMTP 设置方法 获取授权码: Jenkins配置 从Jenkins主面板System configuration>System进入邮箱配置 在Email Extension Plugin 邮箱插件…...

硬件知识(1) 手机的长焦镜头
#灵感# 手机总是配备好几个镜头,研究一下 目录 手机常配备的摄像头,及效果举例 长焦的焦距 焦距的定义和示图: IPC的焦距和适用场景: 手机常配备的摄像头,及效果举例 以下是小米某个手机的摄像头介绍:…...

华为机考入门python3--(3)牛客3-明明的随机数
分类:集合、排序 知识点: 集合添加元素 set.add(element) 集合转列表 list(set) 列表排序 list.sort() 题目来自【牛客】 N int(input().strip()) nums set()for i in range(N):nums.add(int(input().strip()))# 集合转列表 nums_list l…...
vue父子组件传值问题
在Vue中,父子组件之间的数据传递可以通过props和事件来实现。 使用props传递数据:父组件可以通过props将数据传递给子组件,子组件可以在模板中直接使用这些数据。父组件可以通过v-bind指令将数据绑定到子组件的props上。例如: v…...
Rider 打开Unity项目 Project 全部显示 load failed
电脑自动更新,导致系统重启,第二天Rider打开Unity 工程,没有任何代码提示,字符串查找也失效。 现象: 1.所有的Project均显示laod failed。点击load failed。右侧信息显示Can not start process 2.选中解决方案进行Bui…...
Maven(下):依赖管理、依赖传递、依赖冲突、工程继承及工程聚合
1. 基于IDEA 进行Maven依赖管理 1.1 依赖管理概念 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中…...

网络基础---初识网络
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、局域网…...
【Java】Java类动态替换Class
Java类动态替换Class 通过Java的Class对象,可以实现动态替换Class。 预习几个知识点 getClassLoader Java提供的ClassLoader可用于动态加载的Java类,可以通过多种形式获取ClassLoader。比如通过Class类获取 // 通过Class获取 ClassLoader classLoade…...

【驱动系列】C#获取电脑硬件显卡核心代号信息
欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《驱动系列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点…...

AutoGen实战应用(二):多代理协作(Multi-Agent Collaboration)
AutoGen是微软推出的一个全新工具,它用来帮助开发者创建基于大语言模型(LLM)的复杂应用程序. AutoGen能让LLM在复杂工作流程启用多个角色代理来共同协作完成人类提出的任务。在我之前的一篇博客: AutoGen实战应用(一):代码生成、执行和调试 中我们通过一…...
c++文件操作 (1) -- 读写文件
目录 为什么使用文件操作 文件输入流和输出流 -- 相对于内存而言 文件操作 1. 文件操作常用类以及头文件 2. 文件输入流(写文件操作) 1. 写文本文件 1)文件操作是使用对象来实现的 2)文件输出 3)打开文件 open函数 ÿ…...
PHP操作Mysql记录数多引发的空白错误
1 错误由来 php操作三张表,一张表有近四十万条记录,另外两张表记录数在三万左右,三张表又关联。应用左连接left join。 $qLStr "select pu.pd_no, pu.common_name, pu.purchase_cost, pu.medication_area, pu.total_dosage, pu.contro…...

transformer和vit学习笔记
以下记录自己对transformer的学习笔记,可能自己看得懂【久了自己也忘了看不懂】,别人看起来有点乱。以后再优化文档~ 小伙伴请直接去看学习资源: Transformer的理解T-1_哔哩哔哩_bilibili 首先,时序处理:一些模型的出…...

人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示)
人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示) FaceNet的简介Facenet的实现思路训练部分 FaceNet的简介 Facenet的实现思路 import torch.nn as nndef conv_bn(inp, oup, stride 1):return nn.Sequential(nn.Conv2d(inp, oup, 3, stride…...

Python tkinter (6) Listbox
Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 GUI 目录 Listbox 创建listbox 添加元素…...

优雅的python(二)
🌈个人主页:小田爱学编程 🔥 系列专栏:c语言从基础到进阶 🏆🏆关注博主,随时获取更多关于c语言的优质内容!🏆🏆 😀欢迎来到小田代码世界~ &#x…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...