天池医疗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解决方案_天池技术圈-阿里云天池

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++设计模式:抽象工厂模式(七)

1、定义与动机 抽象工厂定义:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类动机: 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,…

从ChatGPT到多模态大模型:现状与未来(多模态)

ChatGPT 训练的核心技术主要包括: 预训练语言模型;有监督微调;基于人类反馈的 强 化 学 习 (ReinforcementLearningfrom Human Feedback,RLHF) 首先,通过自监督预训练使语言模型从大规模语料库中学习语言规律,具备基础 理解和生成能力;然后,通过构造指令微调数据集 并对模型进…

uniapp在发行原始云打包ios时提示私钥证书不是有效的p12文件

uniapp在发行原始云打包ios时提示私钥证书不是有效的p12文件 解决方法: 经过我多次的创建p12证书文件,然后更换设备继续创建,仍然存在这个问题,通过排查不是.p12的本身的问题,而是命名的问题,命名不能是中…

数据仓库的概念和作用?如何搭建数据仓库?

随着企业规模的扩大和数据量的爆炸性增长,有效管理和分析海量数据成为企业数字化转型的关键。而在互联网的普及过程中,信息技术已深入渗透各行业,逐渐融入企业的日常运营。然而,企业在信息化建设中面临了一系列困境和挑战&#xf…

MKS GHW-12 RF Plasma Generator Genesis 使用说明

MKS GHW-12 RF Plasma Generator Genesis 使用说明

云平台和云原生

目录 1.0 云平台 1.1.0 私有云、公有云、混合云 1.1.1 私有云 1.1.2 公有云 1.1.3 混合云 1.2 常见云管理平台 1.3 云管理的好处 1.3.1 多云的统一管理 1.3.2 跨云资源调度和编排需要 1.3.3 实现多云治理 1.3.4 多云的统一监控和运维 1.3.5 统一成本分析和优化 1.…

适用于 Mac 的 10 大数据恢复工具,具有优点、缺点

数据丢失很常见,并且可能由于许多不同的原因而发生。这种情况在我和我们团队的其他成员身上发生过很多次,即使我们格外小心我们的个人存储设备。 幸运的是,数据恢复软件在大多数情况下都可以工作。但是,由于数据丢失场景彼此之间…

主流排序简单集合

排序算法集合 选择排序 图解&#xff1a;以此类推直至 /*选择排序*/ void select_sort(vector<int>& nums) {/*选取一个基准元素逐个与后面的比较*/for (int i 0; i < nums.size() - 1-1; i) {int min i;/*定义随之变化的基准元素*/for (int j i 1; j <…

LVS+Keepalive 实现负载均衡高可用集群_lvs+keepalived

一、LVS 介绍 目前LVS已经被集成到Linux内核模块中。LVS是Linux Virtual Server的简称&#xff0c;也就是Linux虚拟服务器&#xff0c;该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案&#xff0c;终端互联网用户从外部访问公司的外部负载均衡服务器&#xff0c;终…

【项目】棋海争锋

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 项目介绍 WebSocket介绍 使用 项目创建 数据库设计 用户模块 登录接口 注册接口 获取用户信息接口 匹配模块 …

华为S5735S核心交换配置实例

以下脚本实现创建vlan2,3&#xff0c;IP划分&#xff0c;DHCP启用&#xff0c;接口划分&#xff0c;ssh,telnet,http,远程登录启用 默认用户创建admin/admin123提示首次登录需要更改用户密码 sysname test-Hxvlan 2 description to test1…

【快捷部署】016_Ollama(CPU only版)

&#x1f4e3;【快捷部署系列】016期信息 编号选型版本操作系统部署形式部署模式复检时间016Ollama&#xff08;CPU only&#xff09;latestCentOS 7.XDocker单机2024-04-10 注意事项&#xff1a; 1、目前镜像及大模型下载速度尚可&#xff0c;但由于容量较大&#xff0c;所以…

汽车4S行业的信息化特点与BI建设挑战

汽车行业也是一个非常大的行业&#xff0c;上下游非常广&#xff0c;像主机厂&#xff0c;上游的零配件&#xff0c;下游的汽车流通&#xff0c;汽车流通之后的汽车后市场&#xff0c;整个链条比较长。今天主要讲的是汽车流通&#xff0c;汽车4S集团。一个汽车4S集团下面授权代…

gitlab、jenkins安装及使用文档二

安装 jenkins IP地址操作系统服务版本192.168.75.137Rocky9.2jenkins 2.450-1.1 jdk 11.0.22 git 2.39.3192.168.75.138Rocky9.2gitlab-ce 16.10.0 结合上文 jenkins安装 前期准备&#xff1a; yum install -y epel-release yum -y install net-tools vim lrzsz wget…

【双指针】成最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 示例 1&#xff1a; 输入&#xff1a;[1,…

科技云报道:从“奇点”到“大爆炸”,生成式AI开启“十年周期”

科技云报道原创。 世界是复杂的&#xff0c;没有人知道未来会怎样&#xff0c;但如果单纯从技术的角度&#xff0c;我们总是能够沿着技术发展的路径&#xff0c;找到一些主导未来趋势的脉络。 从Sora到Suno&#xff0c;从OpenAI到Copilot、Blackwell&#xff0c;这些热词在大…

【微服务】------微服务架构技术栈

目前微服务早已火遍大江南北&#xff0c;对于开发来说&#xff0c;我们时刻关注着技术的迭代更新&#xff0c;而项目采用什么技术栈选型落地是开发、产品都需要关注的事情&#xff0c;该篇博客主要分享一些目前普遍公司都在用的技术栈&#xff0c;快来分享一下你当前所在用的技…

Java语言实现文件分割与合并

一&#xff1a; 题目&#xff1a; 写一个方法,将feige.exe文件分割为每份1MB大小的若干份(最后一份可以不满1MB), 存储在一个temp的文件夹中(每份文件名自己定义,例如1.temp 2.temp), 然后再写一个方法,将temp文件夹中的若干份合并为一个文件fg.exe 代码&#xff1a; main…

Linux查看系统配置信息的命令【lscpu】【free】【df】【uname】【lsblk】

目录 1.查看CPU信息【lscpu】 2.查看内存信息【free】 3.查看文件系统信息【df】 4.查看系统信息【uname】 知识扩展&#xff1a;Red Hat Enterprise Linux 和 Debian GNU/Linux 两者的发展介绍 知识扩展&#xff1a;Centos 和 ubuntu的区别 知识扩展&#xff1a;更多 …

51单片机入门_江协科技_25~26_OB记录的笔记_蜂鸣器教程

25. 蜂鸣器 25.1. 蜂鸣器介绍 •蜂鸣器是一种将电信号转换为声音信号的器件&#xff0c;常用来产生设备的按键音、报警音等提示信号 •蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器&#xff08;开发板上用的无源蜂鸣器&#xff09; •有源蜂鸣器&#xff1a;内部自带振荡源&a…