读后感-论文Identifying Medical Diagnoses and Treatable Diseases by Image-Based Deep Learning

作者阅读了一篇用CNN对医学图片分类的论文并分享读后感。论文主要讨论致盲性视网膜疾病筛查,通过训练分类CNN对病人OCT图片自动分类。工作人员收集大量图片训练模型,用Occlusion Test可视化模型,评估显示模型比部分医生出色。文章因新颖、工作量大且意义重大被Cell接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读后感背景

最近看了一篇2018年发表在Cell期刊上的论文,主要是用CNN给一些医学图片做分类。文中在CNN或者深度学习部分并没有很多novel的贡献(当然这是从CS的视角来看),但是既然文章可以被Cell期刊接受,一定有其过人之处。

对于一些CS的同学,可能都更关注CVPR,ICCV或者NIPS这样的顶会,而对期刊鲜有关注。而在笔者所在领域(其实是笔者所属的院系,生命科学领域),大家都更关注影响因子比较高的期刊,有时候一两篇高质量的期刊论文就够毕业了,而CVPR那种顶会可能发了很多篇也达不到毕业标准。

先介绍一下Cell,摘自百度百科:《细胞》(Cell)为一份同行评审的科学期刊,主要发表生命科学领域中的最新研究发现。对于其影响力,百科里是这么说的:《细胞》刊登过许多重大的生命科学研究进展,与《自然》和《科学》并列,是全世界最权威的学术杂志之一。其2010年的影响因子为31.957,高于《科学》的影响因子(31.027),接近《自然》的影响因子(38.597),表明它所刊登的文章广受引用。

读后感主体

这篇文章叫'Identifying Medical Diagnoses and Treatable Diseases by Image-Based Deep Learning'。其作者一共有20位左右。各位作者主要来自国内外大学的医学院,生命科学相关的部门或研究机构,还有国内外的医院和疾病中心。

论文背景

首先介绍文章的主要目的和背景,文章主要对blinding retinal diseases (致盲性视网膜疾病)的screening(筛查)进行讨论。一般医院筛查致盲性视网膜疾病时,都会用optical coherence tomography(OCT,光学相干断层成像技术)对病人的retina(视网膜)照相,得到图片就叫OCT图片(简称OCT)。致盲性视网膜疾病可被简单细分为一下三种,一是age-related macular degeneration(老年性黄斑病变),二是diabetic macular edema(糖尿病黄斑水肿)。而age-related macular degeneration(老年性黄斑病变)又可分为advanced(中晚期)和early(早期)。所以就等同于有四种类别的OCT需要做分类,其中两种比较严重,需要及时筛查并用anti-vascular endothelial growth factor (anti-VEGF,抗血管内皮生长因子)药物立即治疗,不然就有致盲风险(文中描述是increased risk of bleeding, scarring, or other downstream complications that cause irreversible vision impairment),这两种严重的类别是 "中晚期老年黄斑病变""糖尿病黄斑水肿"。另外两种类别之一是"normal",还有就是"早期老年黄斑病变",其短期致盲风险很低,不需要及时用anti-VEGF治疗。所以最重要的是能将前两种类别(urgent referrals)和后两种(routine referrals)区分开来。

通过病人视网膜的OCT图片,经过医生检查后(看片子)即可诊断到底得了什么病。但因为医生不够,尤其是偏远地区,我们需要一种更有效的方法-即训练一个分类CNN对病人OCT图片进行自动分类。医生在看OCT片子的时候,是通过片子里一些具体"特征"来筛查病情的,如下图所示:

1475891-20190529210120926-294642601.png

图1对应的是 "中晚期老年黄斑病变",其对应的主要特征是choroidal neovascularization(脉络膜新生血管),图一中实心三角形指向的就是脉络膜新生血管。同时,此类病人还会产生subretinal fluid(视网膜下积液),箭头所指向位置。专家医生会通过这两项OCT图中的特征来筛查病人的病情是否为此类。

图二对应的是"糖尿病黄斑水肿",对应特征是箭头所指的retinal-thickening-associated intraretinal fluid(视网膜下积液导致的视网膜变厚)

图三对应的是早期老年黄斑病变,对应特征为多个drusen(脉络膜玻璃膜疣),如途中实心三角形所指。

图四就是正常的OCT图片,我们可以看到视网膜保持了foveal contour (中心凹轮廓),同时也没有任何视网膜积液或者肿大。

论文主要贡献

论文的工作人员一开始收集了207130张OCT图片。通过初步筛选,选取了其中的108312图片去训练模型(其中37206张中晚期老年黄斑病变,11349张糖尿病黄斑水肿,8617张早期老年黄斑病变和51140张正常图片)。然后测试或者validation数据用了1000张图片,每个类别各250张。

当然了,论文的DL部分就比较基础了,直接调用了Inception V3模型,并且在基于Inception V3在ImageNet上预训练完成的参数作为其初始化,也就是从ImageNet-pretrained的Inception V3开始做fine-tunning。但是在训练中,作者只update上层fc层的参数,而固定了conv层的参数。这似乎和一般经验反其道而行之,因为OCT图片和ImageNet图片相差很大,有些ImageNet图片训练出来的底层特征也许不适用于OCT图片,所以最好连着conv层一起训练。但是作者也说如果对整个网络进行微调,效果因为过拟合而变差。个人对此存疑,觉得有可能是论文作者不是DL背景,所以有些调参的小细节没有掌握的很好。

然后作者用了很有意思的Occlusion Test去可视化学到的模型,这个方法笔者第一次是从2014年ICCV上很有名的那篇CNN可视化论文 Visualizing and Understanding Convolutional Networks上看到的。就是用一个小区域盖住图片,每次盖住图片的一小部分,然后把被遮挡的图片放到训练好的模型里,看看对应正确分类node的softmax输出值有没有减少。同时根据对应分类softmax的输出值,也就是那个类别的probability,也可以画出和被遮挡坐标对应的heatmap图,用来可视化CNN。看看训练好的模型到底是不是在通过我们认为的特征来分类图片。

最后当然就是对方法做evaluation,基本上就是效果多好多好,也找了6位医生,让他们和训练好的模型同时对1000张测试图片做题,看看谁的得分好。最后学到的模型貌似比一两个表现较差的医生要出色些。

论文思考

至于这篇文章为什么能被Cell接收,一是DL做这些疾病筛查分类可能对Cell这种偏科学的杂志还是比较新颖。其次文章的工作量很大,当然主要体现在数据收集中。整个团队用了近5年的时间收集10万多张OCT图片,因为这些生物医学的图片收集不像ImageNet这么简单,放在网上或者外包给别人,几分钱一张就能标注好的。生物医学图片标注的人员都是专业的医生,他们的时间也很宝贵,所以对应标注成本就很高了。当然了,笔者认为最重要的,是这类工作的影像并不能仅仅用论文或者专利来衡量,其对偏远地区的疾病筛查,及时筛查和精准医疗都会有很大意义。

转载于:https://www.cnblogs.com/fledlingbird/p/10942432.html

Profiling is the process of analyzing the performance of a program or function in order to identify bottlenecks or areas for optimization. cProfile is a built-in Python module that allows you to profile your code and generate a report of the performance metrics. To optimize the performance of a slow-running function using cProfile, you can follow these steps: 1. Import the cProfile module at the top of your Python file: ``` import cProfile ``` 2. Define the function that you want to profile: ``` def my_function(): # code goes here ``` 3. Run the function with cProfile: ``` cProfile.run('my_function()') ``` This will generate a report of the performance metrics for your function. 4. Analyze the report to identify bottlenecks or areas for optimization. The cProfile report will show you the number of times each function was called, the total time spent in each function, and the amount of time spent in each function call. Look for functions that are called frequently or that take a long time to execute. 5. Make changes to optimize the function. Once you have identified the bottlenecks, you can make changes to your code to optimize the function. This may involve simplifying the code, reducing the number of function calls, or using more efficient algorithms or data structures. 6. Repeat the profiling process to measure the impact of your changes. After making changes to your code, run the function again with cProfile to see if the performance has improved. If not, you may need to make additional changes or try a different approach. By using cProfile to profile your code and identify bottlenecks, you can optimize the performance of slow-running functions and improve the overall efficiency of your Python programs.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值