Spark“数字人体”AI挑战赛_脊柱疾病智能诊断大赛_GPU赛道亚军比赛攻略_triple-Z团队

news2024/10/1 0:56:12

关联比赛:  Spark“数字人体”AI挑战赛——脊柱疾病智能诊断大赛

triple-Z团队答题攻略

1 赛题分析
1.1 赛题回顾

本次比赛的任务是采用模型对核磁共振的脊柱图像进行智能检测。首先需要对5个椎体和6个椎间盘进行定位,这部分实际上就是11个关键点的检测任务;之后需要对每一个关键点对应的椎体/椎间盘进行疾病分类。因此,整个比赛的任务可以分解为关键点检测和关键点分类两类大问题。

1.2 赛题分析

在开始建模之前,我们需要对数据有清晰的认识。通过对初赛训练集的分析,我们认为本次比赛存在如下三点挑战:

  • 相比自然图像的大数据集,数据量比较少(毕竟医学影像获取和标注成本都比较高)

  • 类别间的样本不均衡(如下图左图)

  • 标注噪声(如下图右图)

    enter image description here

针对上述三个挑战,我们的解决方案如下:

  • 设计了一个简洁高效的定位+分类的单阶段检测模型

  • 调整损失函数以适应类别不均衡

  • 数据增强、关键点标注抖动、基于先验统计的二分类阈值调整

2 模型方法
2.1 模型整体框架

我们首先将关键点定位分解为:粗定位和精回归两个子任务,并且在关键点检测的时候同时预测对应位置的关键点类别。模型整体框架如下图,主要由三部分组成:

  • backbone:采用resnet18[1]的前4个特征层(16倍下采样)提取图像的特征(注:这里去掉最后一个特征层不仅减少参数量且更容易训练,效果更好)

  • neck:通过几个特征融合块融合多尺度特征并且扩大模型的感受野

  • output:最后通过四个1X1卷积分别输出:关键点粗定位、关键点y轴上的细回归、关键点x轴上的细回归、关键点分类
     

    enter image description here


    我们这种设计方案,相比于主流的heatmap-based关键点检测方法,不需要上采样层,不需要resnet最后一个特征提取层,使得学习任务更加简单,因此参数量和计算量都会更少(实验部分会有详细的对比分析)。

2.2 neck模块细节

neck部分的DetNet block[2]、ASPP Block[3]和SPP Block[4]都是用来融合多尺度特征且扩大模型感受野的,具体设计如下,DetNet block与原论文保持一致,ASPP/SPP Block都做了适应性的修改。

enter image description here

2.3 关键点粗定位

对于5个椎体+6个椎间盘共11个关键点进行检测,可以通过输出11个通道的张量分别代表11个关键点的预测。对于第k个关键点的粗定位,我们用一个网格图来表示,该图分辨率为原图下采样​之后的分辨率,粗定位图上的每一个网格的值为其中心点与关键点的关系度量,如下图:

enter image description here

2.4 关键点细回归

有了关键点的粗定位图,我们可以找到离目标关键点最近的网格中心点,但每一个网格对应原图是一个​的区域,显然直接取中心点离目标关键点有一定的误差,因此我们需要额外的两个与粗定位分辨率一样的定位细回归图(x轴和y轴两个方向),其每一个网格的值为其中心点到关键点在x/y轴上面的偏移,如下图。这里直接用偏移量的话由于范围太大了模型不太好学,因此我们把偏移量除以​,使得关键点附近的网格的值都分布在1附近。

enter image description here

2.5 关键点分类

模型在进行粗定位和细回归的时候实际上已经学到了椎体/椎间盘的特征和位置信息,因此我们直接通过一个并行分支对相应网格位置进行分类预测。如下图,对于一个网格,如果其为椎体,那么需要一个5维度的向量表示对5个椎体的二分类;如果是椎间盘,那么需要一个4*6维度的向量表示对6个椎间盘的四分类,此外椎体内疝出(v5)可以与其他四类共存,因此我们额外采用6维度的向量进行表示。综上,一个网格应该对应35维度的向量。

enter image description here

2.6 损失函数

损失函数是一个多任务学习损失函数,由三部分构成:

  • 对于关键点粗定位图的损失函数,直接采用MSELoss进行学习;

  • 对于关键点细回归图的损失函数,首先过滤出粗定位图中激活值高的网格,而后只对细回归图上的这部分网格计算损失函数,如下图左边图中红框框所示。实际上这种做法能够使得模型更加关注目标区域,减少对无关区域的关注;

  • 对于关键点分类图的损失函数,同样过滤出需要关注的网格,而后对于每一个网格,若该关键点是椎体,则计算前5维度向量的损失;若是椎间盘,则计算后4*6+6维度的损失。为了适应类别不平衡的问题,对于BCELoss和CrossEntropyLoss都采用了类别样本数倒数作为相应类别的权重。

总的损失函数是上面各部分的加权求和,权重我们根据经验值直接设置的。

enter image description here

2.7 推理过程

推理的时候取关键点粗定位图值最高的网格(关系最密切的网格),再在细回归图和分类图取相同位置的网格,即可以解析出关键点坐标和关键点类别,如下图:

enter image description here

2.8 其他一些小技巧

我们统计了初赛训练集上不同位置椎体的类别分布,如下图,我们发现不同位置其v1/v2的比例有所不同,靠近胸椎的椎体病变概率相对低一些,而在靠近尾椎的椎体更容易产生病变,这个发现和我们的直觉是一致的。因此我们模型会根据这个先验统计结果进行二分类的阈值调整,调整后的阈值如下图。同样地,对于椎体内疝出,我们也做了同样的策略。

此外,为了使得模型鲁棒性更强,减少标注噪声的影像,我们还采用了多种数据增强,如下图。其中对于关键点随机抖动,具体做法是对于标签关键点,我们会加上一个随机的小偏移量,以模拟医生标注可能抖动的问题。

enter image description here

2.9 模型融合

医学影像处理在数据不多的情况下,一般采用多折交叉验证使得模型验证更加稳定,因此我们采用了5折交叉验证训练了5个模型,而后将他们在测试集上的结果进行平均,得到最终成绩。

enter image description here

3 实验结果
3.1 复赛成绩及模型性能测试

enter image description here

3.2 定位模型与主流模型的性能对比

由于复赛数据不可见,且每天一次提交,机会宝贵,因此我们额外在关键点检测的公开数据集[6]上进行我们模型与主流模型[5]的对比实验,如下图。证明了我们模型的有效性和高效性,且更容易收敛(小模型就可以达到不错的效果)。

enter image description here

4 总结及展望
4.1 可行性讨论

希望我们的模型能够实际运用到现实生活中,因此在设计模型的时候就考虑了模型的高效性,并且我们实验表明该模型能够达到实时性的要求。我们设想以后患者的影像图片可以和我们模型的预测结果一并传输到医生的电脑上,医生可以根据模型的预测进行一些修正和调整,但就可以节省了大量的手动查询和定位等时间。相当于把“是什么”的问题转化成了“是不是”,感觉一定程度可以提高医生的工作效率。

4.2 总结

我们本次比赛主要做了如下几个工作:

  • 设计了一个简洁高效的定位+分类模型

  • 设计了合适的损失函数有效地训练模型

  • 充足实验证明模型的有效性和高效性

  • 结合实际考虑模型的落地方式

4.3 展望

我们认为我们的工作还有如下几点提升空间:

  • 横断面的数据没有利用到,而医生诊断的时候往往是依据矢状位+横断面,应该进一步模拟专家诊断的过程

  • 我们团队没有相应的专业知识,应该加入更多的一些临床专家先验知识提高模型性能

  • 我们模型实际上是一个多任务预测模型,因此模型结构存在优化的空间

  • 多任务的学习也是一个热门研究方向,不同任务间的权重分配我们是采用经验值设置的,可以通过一些前沿工作进一步优化

5 核心代码

核心代码主要是4个输出张量的构建,如下

enter image description here

6 比赛经验总结及感想

在参加比赛的时候,不要急着搭建和训练模型,需要先对比赛数据进行分析和总结。比赛的数据一般更贴近实际运用,和平时科研所用的公开数据集还是有所区别,因此在分析数据的过程中可以总结数据的难点和挑战,对应的再选用或者自己设计合适的模型。

本次比赛赛题新颖、充满挑战,并且一有问题主办方都能够及时解决,同时让我们学习到了很多知识、提高了实践能力!

7 参考资料

[1] Deep Residual Learning for Image Recognition

[2] Detnet: A backbone network for object detection

[3] Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs

[4] Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

[5] Simple Baselines for Human Pose Estimation and Tracking

[6] 2d human pose estimation: New benchmark and state of the art analysis

查看更多内容,欢迎访问天池技术圈官方地址:Spark"数字人体"AI挑战赛_脊柱疾病智能诊断大赛_GPU赛道亚军比赛攻略_triple-Z团队_天池技术圈-阿里云天池

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

B2B商城交易解决方案:赋能企业有效重塑采购与销售新生态

在电商零售领域,商城系统始终是企业搭建商城的关键利器。 伴随着电商行业的蓬勃发展,各类新模式层出不穷,各种商城系统也应运而生,其中B2B商城更是最为常见的一种。 近年来,得益于电子商务的迅猛发展,B2B商…

C++入门基础知识92(实例)——实例17【实现一个简单的计算器】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于实现一个简单的计算器的相关内容&#x…

详细整理!!html5常用标签

文章目录 前言一、HTML简介1.HTML文件结构2.各标签意义 二、HTML标签介绍1.标题标签2.段落标签3. 换行标签4.hr标签5. span标签6.div标签7.img标签8.超链接标签9.注释标签10.空格11.格式化标签12.sup上标和sub下标13. pre预格式化标签14.table 表格标签table 标签基础内容合并单…

Java中异常的认识和创建

文章目录 前言一、异常的概念与体系结构 1.1 异常的概念1.2 异常的体系结构1.3 异常的分类二、异常的处理 2.1.防御式编程2.2 异常的抛出2.3 异常的捕获2.4 异常的处理流程三、自定义异常类 一、异常的概念与体系结构 1.1 异常的概念 在生活中,一个人表情痛苦&…

TI DSP TMS320F280025 Note16:EPWM的原理与使用

TMS320F280025 模数转换器(ADC) ` 文章目录 TMS320F280025 模数转换器(ADC)时基TB子模块计数比较CC子模块动作AQ子模块死区DB子模块斩波PC子模块错误联防模块TZ子模块数字比较DC子模块中断ET子模块EPWM的使用EPWMDriver.cEPWMDriver.h每个EPWM模块都包含多个子模块:时基TB子模…

系列二、案例实操

一、创建表空间 1.1、概述 在Oracle数据库中,表空间是一个逻辑存储单位,它是Oracle数据库中存储数据的地方。 1.2、超级管理员登录 sqlplus / as sysdba 1.3、创建表空间 create tablespace water_boss datafile C:\Programs\oracle11g\oradata\orcl\…

【NTN 卫星通信】基于NR的NTN RAN架构

1 引言 3GPP中,38.821协议中,研究了如何最大限度地减少对NG-RAN中新接口和协议的需求,以支持非地面网络。 研究了包括透传星和再生星的RAN架构。 2 基于透传星的NG-RAN架构 2.1 概述: 对于透传模式,卫星有效载荷在上行链路和下行链路方向上实现频率转换和射频放大器。它…

Python的异步编程

什么是协程? 协程不是计算机系统提供,程序员人为创造。 协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法: greenlet&…

推荐4个精准高效的录音转文字软件。

录音转文字在很多的场景中都能够为我们提供便利,比如:可以将课堂录音转换为文字,方便复习和整理笔记,可以将会议录音转换为文字,快速准确地记录内容,可以将采访录音转成文字,提高新闻稿件的撰写…

在VMware虚拟机上部署polardb

免密登录到我们的虚拟机之后,要在虚拟机上部署polardb数据库,首先第一步要先克隆源码: 为了进SSH协议进行传输源码需要先进行下面的步骤: 将宿主机上的私钥文件复制到虚拟机上 scp "C:\Users\waitw\.ssh\id_rsa" ann…

BCJR算法——卷积码的最大后验译码

定义:输入序列为 其中每比特,同时相应的输出序列为 其中每一码字的长度为n,定义在i时刻的编码器的状态为,对于时刻里有 表示输出码字和卷积码第i时刻的输入和第i-1时刻的状态有关(包括寄存器和输出部分)&am…

grafana全家桶-loki promtail收集k8s容器日志

loki是grafana旗下轻量级日志收集工具,为了减少loki对集群的影响,把loki的agent日志收集端promtail部署在k8s集群中,loki server部署在集群外面。这样简单做一个解耦,避免大量读写的应用影响到集群内业务服务。 一、promtail部署…

docker学习笔记(1.0)

docker命令 下载镜像相关命令 检索:docker search 比如:docker search nginx 是查看有没有nginx镜像 后面的OK表示是不是官方镜像,如果有就是官方镜像,如果没有就是第三方的。 下载:docker pull 比如&#xff1a…

USB 3.1 标准 A 型插头到 USB 3.1 Micro-B 型插头电缆组件的电线连接

电线分配 下表定义了电线编号和电线的信号分配: Unshielded twist pair:非屏蔽双绞线Shielded differential pair:屏蔽差分对Braid:编织层Cable external braid to be 360 terminated on to plug metal shell:电缆外部…

JAVA开源项目 大学生就业招聘系统 计算机毕业设计

本文项目编号 T 058 ,文末自助获取源码 \color{red}{T058,文末自助获取源码} T058,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 企…

21.1 k8s接口鉴权token认证和prometheus的实现

本节重点介绍 : k8s接口鉴权方式serviceaccount和token的关系手动curl访问metrics接口 k8s对象接口鉴权 以容器基础资源指标为例 对应就是访问node上的kubelet的/metrics/cadvisor接口,即访问https://nodeip:10250/metrics/cadvisor 直接curl访问 会报错&…

无人机在救灾方面的应用!

一、灾害监测与评估 实时监测与评估:无人机可以快速到达灾害现场,通过搭载的高清摄像头、红外热成像仪等设备,对灾区进行实时监测和灾情评估。根据捕捉到的受灾范围、火势大小、建筑物损坏情况等关键信息,为救援行动提供决策依据…

Matplotlib 使用 LaTeX 渲染图表中的文本、标题和数学公式

Matplotlib 使用 LaTeX 渲染图表中的文本、标题和数学公式 Matplotlib 是一个功能强大的 Python 库,用于绘制各种高质量的图表和图形。在许多科研和技术文档中,数学公式是不可或缺的一部分,LaTeX 提供了精美的数学公式渲染能力。Matplotlib …

TI DSP TMS320F280025 Note15:串口SCI的使用

TMS320F280025 串口SCI的使用 ` 文章目录 TMS320F280025 串口SCI的使用框图分析串口特点可编程数据格式SCI端口中断非FIFO/FIFO模式下SCI中断的操作/配置UartDriver.cUartDriver.h串口时钟由PCLKCR7控制使能,默认位系统时钟4分频 串口接收与发送都可以触发中断 串口使用的引脚…

uniapp微信小程序,获取上一页面路由

在进入当前页面的时候,判断是不是从某个页面跳转过来的(一般是当前页面为公共页面是出现的),比如 A-->B C-->B ,那么 要在 C跳转到B页面的时候多个提示语什么的 而在A跳转到B时不需要,那么就要判断 上一页面的…