天池医疗AI大赛[第一季] Rank5解决方案

一、赛题说明

数据格式

本次大赛数据集包含数千份高危患者的低剂量肺部CT影像(mhd格式)数据,每个影像包含一系列胸腔的多个轴向切片。每个影像包含的切片数量会随着扫描机器、扫描层厚和患者的不同而有差异。原始图像为三维图像。这个三维图像由不同数量的二维图像组成。其二维图像数量可以基于不同因素变化,比如扫描机器、患者。Mhd文件具有包含关于患者ID的必要信息的头部,以及诸如切片厚度的扫描参数。

数据由大赛合作医院授权提供,全部是肺部CT影像(mhd格式)数据。主办方为医院开发了专业的脱敏软件,所有CT影像数据严格按照国际通行的医疗信息脱敏标准,由医院进行脱敏处理,脱敏信息包括:医院信息、患者信息和标注医师信息,所有数据不可溯,切实保障数据安全。

训练集和验证集的所有数据全部都有结节,除了进行病理分析的结节外,其它结节都由三位医生进行标记确认。csv文件标注了结节的位置和大小,具体示例如下:

------------------------------------------------

Seriesuid,coordX,cordY,coordZ,diameter_mm

LKDS_00001,-100.56,67.26,-231.81,6.44

------------------------------------------------

参赛者提交一个CSV文件,第一行标记每一列的名称,一共五列,分别为图像ID号,坐标和概率。从第二行之后的每一行都标记一个检测到的结节,坐标为检测到的结节的中心坐标x, y, z的数值。例如:

------------------------------------------------

seriesuid,coordX,coordY,coordZ,probability

LKDS-00012,75.5,56.0,-194.254518072,6.5243e-05

LKDS-00022,-35.5999634723,78.000078755,-13.3814265714,0.00269234

LKDS-00049,80.2837837838,198.881575673,-572.700012,0.00186072

LKDS-00056,-98.8499883785,33.6429184312,-99.7736607907,0.00035473

LKDS-00057,98.0667072477,-46.4666486536,-141.421980179,0.000256219

------------------------------------------------

字段定义:

------------------------------------------------

列名                        类型            含义

seriesuid               string          患者ID

coordX                  float             X方向位置

coordY                  float             Y方向位置

coordZ                  float             Z方向位置

diameter_mm      float             结节大小

probability            float             预测为结节的概率

------------------------------------------------

二、赛题解读

这是一个目标检测(object detection)的问题,在3D的CT图像中找到结节的位置。

目前在目标检测做的最好的是Kaiming He团队提出的RCNN系列结构(2D)。我们进行了code编写,但是效果不理想。主要的原因在于:

1. Faster RCNN开销特别大,导致我们只能实现2D版本的,但2D版本丢失了3D的context信息,导致我们的模型得出的结果并不好。

2. 如果切换到3D版本,Faster RCNN由于需要先提proposal,再做detection,时间开销巨大。

放弃Faster RCNN之后,我们参考了以直接预测著称的SSD、YOLO系列,最后决定采用3D版本的YOLO。做出来以后,效果得到了飞速提升。

三、数据预处理—肺部区域提取

根据以往比赛的经验,肺结节检测需要先把肺部区域提取出来。我们的实战经验发现,这一点很重要。提取肺部区域的好处也很明显:主要体现在减少了无关区域对model的影响,使model在更小的区域规模进行预测。

由于之前有类似比赛,我们综合了前面比赛的一些经验,实现了我们的肺部区域提取代码。大致的流程如下:

  1. 根据图形学信息进行label标注,使相邻区域有相同的label。这一过程需要注意,由于实际影像没有严格的区域的划分,导致存在一些很小的区域,这些小区域包含在更大的区域里面,单从label层面讲,他们属于小区域,但它们真正的label其实是和大区域一致的。具体的实现就是参考周围区域的label,进行区域label扩散。可参考scipy.ndimage.binary_dilation函数

  2. 提取面积最大的两个label区域,这两个区域就是两个肺结节

  3. 由于不同影像的拍摄参数一样,导致影响的origin、spacing等信息也不一样。所以数据重采样是必须的,主要是通过插值把图像的分辨率统一起来。

  4. 进行相应的坐标变换,并进行元信息保存。坐标变换需要注意,除去根据origin、spacing进行世界坐标转换外,还需要根据肺部区域,从新更新ground truth的位置信息。

还有一些特殊的影像,依靠上面的步骤很难提取出肺部区域。此时,我们需要进行一些统计分析,总结出这类影像的分布规律,直接对原始影像进行处理。

这部分由于用到了很多图形学知识,很难进行详细说明。我们也是参考了很多前人的实现,所以,想了解更多的可以直接参考我们的实现。

四、模型构建

模型构建就是3D版本的yolo,大家可以去看看yolo相关的文章。Yolo v2获得 cvpr最佳论文提名。需要注意的是,我们的基础网络架构与原paper的有两点重要不同。

1. 基本网络结构我们采用了类似Unet的形式,它的好处是使网络的receptive filed 变得很大,使网络可以同时融合深层网络的语义信息以及浅层网络的context信息。网络结构如下。

2. 我们把采样的数据在原始图形的位置信息利用起来,融入我们的网络。我们认为位置信息有助于肺结节检测。

我们的网络结构如图所示,整体来说先做4次卷积操作和pooling操作,然后做2次反卷积(deconvolution),最后得到的输出比原图要小。最后再做一次卷积,num_output为5*5,第一个5表示有5种结节anchor大小,第二个5代表对每一个bounding box预测5个数字,分别代表该bounding box的xyz方向的偏移量、直径大小偏移量、肺结节概率。卷积操作都用了2-3层的ResNet结构(图中没有展示细节),以及BatchNorm操作和ReLU激活函数,每一次反卷积都会先和前面卷积时候对应大小中间结果连接(concat),第二次连接还加入了Coord(大小为[3,32,32,32]),这表示对应每一个点在原图中的xyz坐标。

其他需要注意的有:

  1. Online data sample:由于每一个患者的图像大小都不同,每一次获取数据的时候会以结节位置为中心随机crop图像的一部分,大小为128*128*128,这样不仅能提高训练速度,也能增加数据多样性。此外,我们也对crop后的图像做augmetation的操作,随机地翻转、旋转、放大缩小图像。在sample的时候,会控制crop的图像位置,使得70%的crop图像都包含肺结节,剩下30%的图像可能没有肺结节。

  2. Hard mining:Kaiming研究组在最新的研究(Focal Loss for Dense Object Detection)中指出。影响物体检测的关键因素是负样本数量太大,占总的loss的大部分,而且多是容易分类的,因此使得模型的优化方向并不是我们所希望的那样。文中提出了focal loss解决这一问题。由于时间原因,我们没有采用focal loss,但是这篇论文揭示了hard mining的重要性。它告诉我们,网络应该关注于那些不容易分类的样本。

  3. 结节大小的影响。结节的大小也对网络的构建有很重要的参考意义。小结节(直径为5-10mm)的比例在初赛为50%,复赛为70%。大部分结节都是小结节,因此对预测结果影响极大。而小结节在神经网络中经过几次pooling之后可能就消失了,而大结节不存在这个问题,所以大结节能加速模型的训练。因此在训练过程中要有效地平衡大结节和小结节的数量。

  4. NMS(Non-Maximum Suppression):为了丰富肺结节检测的位置分布,我们采用了业界通用的NMS。

  5. 模型融合(model ensemble):由于肺结节大小分布的不均匀,导致很难用一个模型或者一个模型的一组参数照顾到所有的肺结节。所以,我们最终的结果集成了多个model/多组参数的结果。做法很简单,做nms的时候同时在多组预测上做。这一点是从google学来的,可参考paper :Speed/accuracy trade-offs for modern convolutional object detectors。

查看本文全部内容,欢迎访问天池技术圈官方地址:天池医疗AI大赛[第一季] Rank5解决方案_天池技术圈-阿里云天池

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/528677.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣经典150题(1)

文章目录 6.Z字形变换82.删除排序链表中的重复元素||61.旋转链表100.相同的树 6.Z字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下&#xff1…

【讲解如何OpenCV入门】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

数据库之DQL操作(数据查询语言)

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。查询关键字: SELECT。 本节介绍以下表为例: create table emp(id int comment 编号,workno varchar(10) comment 工号,nam…

基于SpringBoot+MyBatis-Plus的代码生成器

一、功能说明 数据源管理:实现多个数据库的表代码生成表管理:从数据源导入表,配置表和字段默认配置:配置项目默认信息,配置字段数据类型映射操作日志 功能截图 二、代码实现 基于velocity-engine模板代码生成 pack…

工单管理系统设计方案,工单系统的流程

工单管理系统是一种用于管理和跟踪工作流程的软件系统。它可以帮助企业和组织更好地分配任务、优化工作流程、提高生产效率和客户满意度。下面是一个基本的工单管理系统设计方案:需求分析  在设计工单管理系统之前,需要进行需求分析,确定系…

三极管原理特性介绍,课堂上可不这么讲!

原文来自微信公众号:工程师看海,与我联系:chunhou0820 看海原创视频教程:《运放秘籍》 大家好,我是工程师看海,原创文章欢迎点赞分享! 今天介绍下三极管的特性,清晰易懂&#xff0c…

C语言进阶课程学习记录-第27课 - 数组的本质分析

C语言进阶课程学习记录-第27课 - 数组的本质分析 数组实验-数组元素个数的指定实验-数组地址与数组首元素地址实验-指针与数组地址的区别小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录 数组 实验-数…

Ubuntu 22上安装Anaconda3。下载、安装、验证详细教程

在Ubuntu 22上安装Anaconda3,你可以遵循以下步骤: 更新系统存储库: 打开终端并运行以下命令来更新系统存储库: sudo apt update安装curl包: 下载Anaconda安装脚本通常需要使用curl工具。如果系统中没有安装curl&#x…

如何提升产品用户体验?4个工具+6张案例,让你快速吃透!

在数字时代的浪潮中,产品用户体验早已不再是简单的“好用”或“不好用”的评判标准,它不仅仅是功能的堆砌,更是情感的连接、智慧的体现。在这个竞争激烈的市场中,只有那些能够深入理解用户需求、精准把握用户心理的产品&#xff0…

HarmonyOS 开发-应用新功能引导实现案例

介绍 本文介绍如何使用high_light_guide三方库完成应用新版本功能导航。通过高亮区域与蒙版背景的明暗度对比,让用户快速锁定重点功能,了解版本变更和业务入口。 效果图预览 使用说明 点击页面上对应按钮或空白区域进入下一个提示,直至提示…

MiniApp SDK 是什么?

介绍 MiniApp SDK 是提供开发、部署、产品体验分析、上线全流程各种需求的解决方案。接入此 SDK,您就可以只关注于代码开发本身,剩余的所有事情都可以交由 SDK 及其依赖方解决。另外,能够有效降低多端开发的技术门槛和研发成本,提…

一篇文章学会进程替换

进程替换是什么 fork之后,父子进程各自执行父进程的代码的一部分,父子代码共享,数据写时拷贝各自一份。 但是,如果子进程不想执行父进程的代码,就想执行一个全新的代码呢? 这就需要用到 进程程序替换 所谓的…

MybatisPlus分页插件的使用

目录 &#x1f9c2;1.添加mybatisPlus依赖 &#x1f953;2.添加配置类 &#x1f32d;3.添加分页接口 &#x1f37f;4. 添加实现类 &#x1f95e;5.测试 1.添加mybatisPlus依赖 <!--mybatisPlus--><dependency><groupId>com.baomidou</groupId>&l…

linux中查看占用端口的进程方法

1、netstat -tlnp | grep 端口号 netstat -tlnp|grep 3306 其中&#xff1a;95115是进程号&#xff0c;mysqld是进程名称 2、ss -ltnp | grep 端口号 注意&#xff1a;-tlnp和-ltnp ss -ltnp|grep 3306其中&#xff1a;mysqld是进程名称&#xff0c;95115是进程id 3、lsof…

【Python 基础知识课程】Python的第一个程序

Python 简介 Python 是一种功能强大且用途广泛的编程语言&#xff0c;广泛用于数据科学、Web 开发、自动化等高需求领域。 幸运的是&#xff0c;对于初学者来说&#xff0c;它也是一种很好的学习语言&#xff0c;因为Python代码更容易阅读和编写。它的简单性使其成为初学者的完…

R语言绘图 | 散点小提琴图

原文链接&#xff1a;R语言绘图 | 散点小提琴图 本期教程 写在前面 本期的图形来自发表在Nature期刊中的文章&#xff0c;这样的基础图形在日常分析中使用频率较高。 获得本期教程数据及代码&#xff0c;后台回复关键词&#xff1a;20240405 绘图 设置路径 setwd("You…

我是如何从功能测试成功转岗测试开发的?记录下我的面试经验

由于这段时间我面试了很多家公司&#xff0c;也经历了之前公司的不愉快。所以我想写一篇文章来分享一下自己的面试体会。希望能对我在之后的工作或者面试中有一些帮助&#xff0c;也希望能帮助到正在找工作的你。 一 找工作 壹&#xff0f; 我们总是草率地进入一个自己不了解…

岩土工程监测振弦采集仪在隧道工程中的监测与应用

岩土工程监测振弦采集仪在隧道工程中的监测与应用 岩土工程监测是隧道工程的重要环节之一&#xff0c;而振弦采集仪作为岩土工程监测中的关键设备之一&#xff0c;在隧道工程中的应用十分重要。本文将从振弦采集仪的基本原理、在隧道工程中的监测与应用以及其优点和局限性等方…

面试(01)————JVM篇,最大白话的一集,常见概念的讲解以及GC监控调优等等

一、JDK体系结构图 二、JVM整体架构 三、JVM组成 3.1、JVM内存区域的执行底层原理 ​编辑 3.1.1、程序计数器 3.1.2、堆栈关系的发现 3.1.3、方法去和堆的关系 3.1.4、堆&#xff08;重点&#xff09; 3.1.4.1、可达性分析算法 3.1、内存泄漏测试以及堆区的GC监控 3.…

【论文解读】大模型事实性调查(上)

一、简要介绍 本调查探讨了大型语言模型&#xff08;llm&#xff09;中的事实性的关键问题。随着llm在不同领域的应用&#xff0c;其输出的可靠性和准确性变得至关重要。论文将“事实性问题”定义为llm产生与既定事实不一致的内容的概率。论文首先深入研究了这些不准确性的含义…