一根烟上热搜,先让AI看看你的肺
作者 | 李翔,国内某互联网大厂AI民工,前携程酒店图像技术负责人,计算机视觉和深度学习重度爱好者,在ICCV和CVPR等会议上发表论文十余篇;马杰超,任职于某医学图像创业公司,医学图像AI领域资深从业者,在MICCAI和Radiology等会议和期刊上发表论文十余篇。
来源 | 视说AI
写在前面
前些天某当红流量明星吸烟的消息在网上引起热议,谈起青少年吸烟尤其是在公共场所吸烟,持不赞成甚至批评态度的人占了绝大多数。吸烟以及所产生的二手烟会对人体的呼吸系统造成伤害,是肺癌的重要致病因素之一。
据统计主动/被动吸烟者肺癌的发病率比普通人高20~25倍,所以对大家来说定期对肺进行深度地检查显得特别的重要。借着这个机会,在这里我们和大家分享一些业余期间在肺部疾病的AI诊断上的实践和探索,希望让大家能够了解AI在肺部诊断上的技术应用,也能够对吸烟/二手烟说再见,更好地珍惜自己的身体。
为什么要用AI来诊断?
肺癌在中国乃至全球范围内,都是发病率及死亡率最高的恶性肿瘤,其早期的表现形式是直径不超过30mm的肺内圆形或不规则形结节。肺结节检测当前主要通过电子计算机断层扫描(CT)检查来实现,低剂量的CT已经成为当前主流的肺结节检查工具。
然而通过医生来诊断肺结节当前存在两方面的困难:1)CT图像是分辨率高的三维断层扫描成像,数据量非常大,每位检查者都会生成上百张图像序列,导致了医生诊断速度慢;2)肺部结节大部分尺寸很小肉眼不易发现,而不同医生的经验存在差异,导致检测结果容易出现偏差。所以引入AI技术辅助医生进行肺结节的定位和识别从而提升对肺结节的检测率显得尤为重要。
AI如何来诊断?
对肺结节的诊断属于一种特殊的分类/检测任务,基于深度学习的图像分类和目标检测算法被广泛地应用在肺结节检测中。当前业界比较常用的是采用预检测+精检测的诊断方式来进行肺结节的检测。
在预检测过程中,一般使用深度卷积神经网络实现肺结节的初步定位,在实际应用中,我们常用U-net网络来实现肺结节的分割,或者使用Faster R-CNN网络来实现肺结节的检测。无论是分割网络还是检测网络,我们最终的目的都是为了获取候选的肺结节区域,从而产生高召回率候选结节池,尽可能地降低肺结节的漏检率。
在精检测过程中,一般用深度卷积神经网络对预检测得到的候选结节区域进行分类以区分肺结节的真假性,比如使用ResNet和基于Inception的一系列分类网络,在这一步中我们希望能够通过深度学习模型更精确地识别肺结节,从而降低误判率。
在实际的肺部CT检查中,每位检查者采集的是肺部的断面或立体图像,往往通常是连续的上百张图像序列,这些图像提供了肺部的完整三维信息。在医生的诊断过程中,往往会同时参考多幅CT图像来综合判断,一组典型的肺部CT图像如上图所示。
所以为了构建连续图像序列之间的上下文信息,模拟医生的诊断方式,常常会将基于2D图像理解的网络扩展为基于3D图像理解的网络。即先利用3D U-net来实现连续图像序列的分割,或者利用3D Fast R-CNN来实现连续图像序列的检测,再利用3D CNN来完成最终的结节分类。
让AI诊断得更准更快
上一节我们介绍了常用的肺结节AI检测方式,但是现有的方法仍然有三个问题摆在我们面前:
1)预检测+精检测的两步建模方式在检测速度上不能让人满意,同时结构也不够优雅,如何能够设计出结构优雅速度理想的模型?
2)连续的肺部CT图像序列,图像之间的关系信息对最终结果的诊断非常重要,如何能够更好地对这些图像之间的关系进行建模?
3)对单独的一张CT图像,因为结节所占的位置往往都很小,如何能够让模型将更多的注意力集中在这些目标上,提升检测的精度?
针对上述三个问题,我们分别做了一些探索。对于第一个问题,我们采用3D SSD检测框架来取代以往的两步建模方式,直接通过一个深度网络输出结节的位置和类别。SSD是一种单阶段的目标检测算法,通过一个网络中直接回归出目标的类别和位置,因此检测速度很快。
SSD利用了Faster R-CNN的候选框概念,同时在检测的过程中,使用了不同卷积层上对应的候选框来检测不同大小的目标。由于肺结节的尺寸很小,所以我们进一步加入了特征金字塔网络结构(FPN),促进了SSD的不同卷积层之间的信息传递,从而保证极小结节的检测效果。
对于第二个问题,我们在网络结构中引入群卷积,考虑各个特征通道之间的关系,让模型自主地去学习价值较高的特征图,同时群卷积的使用也大幅提升了模型的性能。对于第三个问题,我们引入自然语言处理中流行的注意力机制,对于通过群卷积得到的贡献程度较高的特征图,引导网络去关注图中的一些关键信息,弱化一些造成干扰的背景因素。群卷积和注意力机制模块的具体计算流程如上图所示。
最后,我们把这三个问题的解决方案融合在一起,提出了一种基于群卷积和注意力机制的SSD检测模型 Group-Attention SSD(GA-SSD),完整的检测框架如上图所示。我们的方法在漏检率和误检率上都胜过当前的方法。我们可视化了部分肺结节检测的结果,可以看出对于一些很小的结节,我们的模型依然可以检测得很好。
写在最后
不管是主动吸烟和被动吸二手烟都会让我们的肺受到伤害,利用AI来实现肺结节的检测可以较好地提升肺部检查的准确性。通过这篇文章我们介绍了肺结节AI检测的常用技术,也进一步分享了我们在AI检测肺结节上的一些研究成果,更多的细节大家可以在arXiv上搜索《Group-attention single-shot detector (GA-SSD): Finding pulmonary nodules in large-scale CT images》进行查看。最后祝大家都有一个健康的身体,这样才能更好地感受生活的美好。
一些资料:
[1] Group-attention single-shot detector (GA-SSD): Finding pulmonary nodules in large-scale CT images
[2] Attention is all you need
[3] SSD: Single shot multibox detector
推荐阅读
不得了!这个 AI 让企业家、技术人员、投资人同台“互怼”
空缺近十年,百度宣布王海峰升任CTO
各方最新回应!如何看待IEEE官方声明“学术禁令”?
数据可视化,还在使用Matplotlib?Plotly,是时候表演真正的技术了(附代码)
代码整洁之道-编写 Pythonic 代码
谷歌临时工达 12 万,外包程序员的出路在哪里?
直接拿来用!灵跃模组机器人硬核评测(编程篇)
这些方法解决了数据清洗80%的工作量 | 技术干货
敲代码时,程序员戴耳机究竟在听什么?
敲诈团伙将黑手伸向宅男, 你在家看不可描述的视频, 竟被骗走100万美元!
点击阅读原文,查看更多精彩内容。
相关文章:

mongodb主从设置,capped collections等常用命令集合
############### Mongodb 主 <> 从切换的时候要删除 ############## ############### use local ############################### ############## db.sources.remove() ############################### # 主#/data/mongodb-linux-x86_64-2.0.2/bin/mongod --por…

调侃吴恩达,Diss特斯拉,吐槽OpenAI…《AI寒冬将至》作者点评2019“AI小丑秀”...
作者 | Piekniewski编译 | 夕颜出品 | AI科技大本营(ID: rgznai100)导读:去年,一篇《AI寒冬将至》的文章在AI圈爆红,作者观点鲜明地指出AI领域出现泡沫,并预言AI寒冬将会到来,引起巨大争议。一年…

max_semi_space_size 设置值与实际值不一致的原因分析
问题由来 因为业务的需求,某 Node.js 性能平台用户需要调节新生代大小,Node.js 的启动参数里面的max_semi_space_size可以设置新生代堆空间的大小。 node --v8-options | grep max_semi -A 3 -B 2--min_semi_space_size (min size of a semi-space (in M…

【FFmpeg】函数详解(二)
FFmpeg函数详解 9、av_dump_format10、avio_open11、avformat_write_header12、avcodec_send_frame13、avcodec_receive_packet9、av_dump_format 原型: void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output);说明: 打印输入输出格式的详…

【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
游戏开发笔记二十七 Direct3D 11入门级知识介绍作者:毛星云 邮箱: happylifemxy163.com 期待着与志同道合的朋友们相互交流上一节里我们介绍了在迈入DirectX 11的学习旅程之后第一个demo创建的全过程。但由于知识衔接的需要,我们的第一…

英特尔蚕食AMD和NVIDIA?
作者 | Daniel Newman译者 | 苏本如,责编 | 郭芮转载自CSDN(ID:CSDNnews)【编者按】一个鲜为人知的事实是,英特尔凭借其在集成显卡上的领先地位,持续占据着电脑显卡市场的头把交椅。但是随着过去两年中首席…

使用phpStudy运行伊人集项目
1.首次运行时,需要把system/config/install.look.php以及system/config/database.php(后面这个文件可以先不删除,若是安装过程中数据库报错,再来删除它)删除2.若只有一个项目版本需要运行的话,可以把项目拷…

【FFmpeg】函数详解(三)
FFmpeg函数详解 14、av_write_frame15、av_interleaved_write_frame16、av_write_trailer17、avio_close18、av_image_get_buffer_size19、av_image_fill_arrays20、av_rescale_q21、视频格式尺寸转换22、音频重采样:23、将像素格式由索引值转换成字符串24、MD5相关25、avio_h…

php时区问题导致php页面显示不正常
cacti安装成功,但报时区错误,已经做了如下操作,后来发现如上设置还是有此问题 将 /usr/local/php5/php.ini文件内修改如下 date.timezone asia/Chongqing 遂解决之。 转载于:https://blog.51cto.com/itnihao/916148

【FFmpeg】降低转码延迟方法、打印信息详解、refcounted_frames详解
文章目录 1、FFmpeg降低转码延迟方法2、ffmpeg打印信息:源码里打印的这段是这样定义的3、解码时 refcounted_frames 标志的使用3.1 启动该标志3.2 解码后,记得释放3.3 详解1、FFmpeg降低转码延迟方法 关闭sync-lookahead降低rc-lookahead,但别小于10,默认是-1降低threads(比…

速度提升270倍!微软和浙大联合推出全新语音合成系统FastSpeech
作者 | 谭旭转载自微软研究院AI头条(ID: MSRAsia)【编者按】目前,基于神经网络的端到端文本到语音合成技术发展迅速,但仍面临不少问题——合成速度慢、稳定性差、可控性缺乏等。为此,微软亚洲研究院机器学习组和微软&a…

Linux —— 目录(文件夹)及文件相关处理指令
可参考这篇文章:https://mp.weixin.qq.com/s?__bizMzU4MTU3OTI0Mg&mid2247484269&idx1&sn38869a1df48d8cdb6278518b51601ce0&chksmfd443be8ca33b2fe937531e061c406786f0e587d8ab10ff15594442265658d08cd8271ae52c5&mpshare1&scene23&s…

工业级3G路由器
宏电工业级3G路由器的特点,工业级标准设计,适应零上60度的高温,零下30度的低温,存工业级制造工艺,适应交通,环保,矿山,电力等工业级应用,欢迎来电索取解决方案,沈阳宏电办事处 刘冰 15940556464 024-31296279 限东三省地区.转载于:https://blog.51cto.com/lbing/916441

【FFmpeg】AVOutputFormat/AVInputFormat 成员变量 flags 总结
1、分类 AVOutputFormat中flags允许的值: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVEAVInputFormat中flags允许的值…

基础必备 | Python处理文件系统的10种方法
作者 | Jeff Hale 译者 | 风车云马;责编 | Jane,Rachel出品 | Python大本营(ID:pythonnews)【导读】在编写一些Python程序的时候,我们常常需要与文件系统进行交互。在本文中,营长为大家整理了10…

安装Oracle11g先决条件检查失败
体系结构 - 此先决条件将测试系统是否具有认证的体系结构。预期值:?N/A实际值:?N/A?错误列表:?-?PRVF-7536 : 无法在节点 "mywin7" 上执行体系结构检查 ?- Cause:? 无法确定系统体系结构。 ?-Action:? 确保正在使用正确的软件包。 处理 转载于:https://www.…

Windows Forms高级界面组件-使用状态栏控件
状态栏(StatusStrip)控件通常显示在窗体的底部,向用户提供有关应用程序状态的信息。如Word应用程序使用状态栏提供页码、行数和列数的信息。StatusStrip派生于ToolStrip,通常由ToolStripStatusLabel对象组成,用于显示指…

【Qt】在QtCreator中编译log4cplus
在QtCreator中编译log4cplus 一、在QtCreator中配置cmake二、编译log4cplus1、下载2、编译、安装一、在QtCreator中配置cmake 参见博客:https://blog.csdn.net/u010168781/article/details/107613606 log4cplus使用cmake来编译,因此需要QtCreator支持cmake 二、编译log4cpl…

IEEE“撑不住”了?声明解除对华为评审限制
整理 | 琥珀出品 | AI科技大本营(ID:rgznai100)6 月 2 日,IEEE 官方发表声明表示:经美国商务部就出口管制条例在 IEEE 出版活动中的适用性做出的说明,华为及其子公司的员工可以参加 IEEE 出版过程的同行评审和编辑工作…

关于软件产业的两个契机
软件产业是一个产业 , 和其它的产业一样 , 有各种角色分工 。 未来的软件是跨行业的 。 未来 , 软件会将各个行业联系在一起 。 云计算是第一代互联网发展到成熟的标志 。 网格计算是第二代互联网的开始 。 软件产业 在 未来 会 分为 平台&a…

java继承中的一些该注意的问题
关于继承,我想大多数人都知道,它是面向对象语言中的三大特性之一,所以在这里,关于继承的概念等我就不做详细介绍了,我主要就讲一下大家对他的认识中一些比较容易犯的错误吧。 错误认识1、继承,是将父类中所…

【C】printf warning: unknown conversion type character ‘l‘ in format [-Wformat=]
1、问题描述 在使用printf、fprintf打印long long类型时报错 printf warning: unknown conversion type character l in format [-Wformat=]2、原因分析 “%lld” 和 “%llu” 是 linux 下 gcc/g++ 用于 long long int 类型 (64 bits) 输入输出的格式符。 而 “%I64d” 和 “…

史上最强最贵Mac Pro诞生,iPadOS和iOS分家!WWDC19全面总结
作者 | 俞佳兴、胡巍巍转载自CSDN(ID:CSDNnews)图片&视频 | 余佳兴摄自美国圣何塞WWDC现场一年一度的WWDC终于来了!43岁的苹果,产品经验位居世界前列。一个迈入中年的公司,该如何持续做出让人惊艳的产品…

Java 抽象类与接口的区别
接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人&…

XMOVE3.0手持终端——软件介绍(五):在2KB内存的单片机上实现的T9中文输入法
编者注: X-MOVE是作者在业余时间于2010年6月份启动的以运动传感开发,算法和应用的平台,目前已经发展了三个版本,第四版的开发接近尾声。发布在博客园仅为交流技术,不存在商业目的,作者保留一切权利。 一. 综…

推荐系统遇上深度学习,9篇阿里推荐论文汇总!
作者 | 石晓文转载自小小挖掘机(ID: wAIsjwj)业界常用的推荐系统主要分为两个阶段,召回阶段和精排阶段,当然有时候在最后还会接一些打散或者探索的规则,这点咱们就不考虑了。前面九篇文章中,有三篇是召回阶…

ReSharper修改命名风格
默认情况下,ReSharper会建议你全局变量命名使用下划线开头,且第一个字母小写。否则,会给你标记出来,如下: 但我个人不喜欢这种风格,一般使用首字母大写且不带下划线,可以通过配置来调整…

【Qt】Log4Qt(一)下载、编译
Log4Qt(一)下载、编译 1、下载2、编译2.1 单独编译成库2.2 将源码添加到项目中2.2.1 log4qt.pri分析2.2.2 pro示例如下1、下载 github上星最多的是这个:https://github.com/MEONMedical/Log4Qt 下载log4qt最新(截止2021-12-04)的稳定版本v1.5.1(Qt版本需要Qt5.7.0以上)…

android:退出程序
http://kofi1122.blog.51cto.com/2815761/703751 使用的是定义全局变量的方法

ubuntu中使用apt命令安装ipython失败解决方案
在最近使用ubuntu安装ipython时,出现如下报错: 出现这个问题,主要是因为apt还在运行,故解决方案为: 1、找到并且杀掉所有的apt-get 和apt进程 运行下面的命令来生成所有含有 apt 的进程列表,使用ps和grep命…