医学物理挑战赛
- 赛事平台
- 赛事介绍与规则
- 赛事培训
- 常见问题
第二届医学物理挑战赛
工物科协第二届医学物理挑战赛火热来袭!
面向全校本科生,全程培训,零基础也能冲!
大赛背景
医学影像技术是临床诊疗的基石,而辐射成像作为精准医疗的核心工具,在疾病筛查、手术规划和疗效评估中发挥着不可替代的作用。随着人工智能技术的快速发展,医学影像的智能化处理已成为全球研究热点。为激发学生对交叉学科的兴趣,推动医学影像分析技术的创新应用,清华大学工程物理系学生科协倾力打造第二届医学物理挑战赛!本次赛事依托赛事组筹备的600份高质量医学影像样本(500个CT和100个MR扫描)数据集,覆盖15类腹部核心器官的精细化标注,要求参赛者设计算法,同时适应CT与MR两种模态,在仅输入单一模态的前提下,完成15个腹部器官的精细分割。这不仅是一次算法比拼,更是一次贴近临床真实场景的医学人工智能实践。
参赛对象
(参赛人数:每支队伍1-3人均可)
-
专业不限!无论你是计算机、人工智能、生物医学工程、物理学、数学还是其他领域学生,只要对医学AI充满热情,均可报名参与!
-
鼓励跨院系、跨年级组队。欢迎兄弟院校同学与社会各界人士参赛!
-
零基础友好:赛事组提供样例代码、详细赛前培训及在线答疑,助力快速入门。
赛题任务
核心任务
- 腹部器官医学图像分割
数据特色
-
影像维度:3D容积数据(.nii.gz格式),保留完整空间信息。
-
标注类别:涵盖脾、肝、肾、胰腺、胃等15类关键器官,部分器官标注难度极高(如细小肾上腺、易变形的十二指肠)。
评价指标
- 采用Dice系数、Hausdorff距离等多维度评估分割精度与边界贴合度。
奖项设置
医学物理挑战赛赛程安排
| 周数(清华校历) | 日期 | 内容 |
|---|---|---|
| 5-6 | 2026.3.23-2026.4.5 | 比赛报名 |
| 7-13 | 2026.4.6-2026.5.24 | 赛事培训 |
| 14 | 2026.5.31 | 初赛开题答辩 |
| 15-夏季学期 | 2026.6.1-夏季学期 | 代码设计 |
| 秋季学期初 | 2026秋季学期初 | 决赛总结 |
赛事规则
初赛规则
初赛的任务为 赛事小作业 以及 初赛开题答辩
- 初赛截止日期: (清华校历)第十四周周日(2026.5.31)
- 初赛通过标准: 初赛为 P/F 制, 只要完成小作业, 参加答辩就算通过
注:
- 赛事小作业与开题答辩同一天截止.
- 开题答辩需要各组针对图像分割领域开展深入调研, 答辩内容应涵盖该领域的算法综述, 拟定的研究方案及其可行性分析等维度.
- 开题答辩会给出百分制分数, 按照 10% 计入决赛.
决赛规则
- 决赛分数构成:
| 项目 | 比例 |
|---|---|
| 初赛答辩 | 10% |
| 决赛答辩 | 10% |
| 代码得分 | 80% |
在代码得分中, 单模态 CT 分割分数占 80% , 混合 CT/MRI 分割分数占 20% , 具体的评分方式见决赛代码评分规则.
- 决赛提交方式
请在清华大学gitlab-医学物理挑战赛2026自己所属的小组中创建项目, 并将代码推送至项目中以完成提交. 手动运行 ci 可以触发评分, 评分会自动上传至排行榜. 请注意 ci 评分仅供参考, 最终会使用隐藏测试集进行统一评测.
在决赛截止前一周, 将会进行预评测以判断代码在最终评测环境下是否可正常运行, 同时也会给出指定最终提交版本的方式.
注:
- 受限于 ci 的运行时长限制, 允许选手在 ci 上仅运行评测过程, 训练过程可以在本地或云平台上进行.
- 请尽量保持 git 仓库的整洁, 不要将比赛数据集内的文件添加到远程 git 仓库中 (它们已经被
.gitignore所忽略, 默认是不会被上传的), 如果被发现 git 仓库中上传了比赛数据集文件, 可能会被警告甚至罚分; 你的模型参数文件可以上传, 但最好使用git lfs, 或者修改Makefile使用云盘链接下载的方式获取模型参数文件, 尽量保证远程 git 仓库不对大文件本体进行追踪. - 在 ci 评测中, 选手可以自行更改
Makefile选择测试集范围, 是否评测 MRI 也可自行决定. - 如果需要下载额外的 python 包, 可在
.gitlab-ci.yml中使用pip install命令自行下载. 一旦对.gitlab-ci.yml进行修改, 请注意需要在报告中指出.
决赛代码评分规则
决赛的核心目的是对提供的数据集进行腹部器官医学图像分割,根据分割准确度进行评分。
任务要求
参赛选手可使用 Pytorch 完成模型训练,在给出的样例代码的基础上进行修改(或者直接重写,亦可不用神经网络~),实现一个可以输入原始 CT/MRI 图像,得到对应器官分割标签图的神经网络模型。并将评分集的原始图片(后缀为 .nii.gz )作为输入,得到与标签图格式完全相同的图像(后缀为 .nii.gz ),最终得分将通过其与评分集的真实标签图做对比得到。
选手还应完成一份简要的比赛报告(参考给出的 report.md 模版),重点说明所需的额外运行环境要求和本队的优化修改思路。
评分标准
完整的评分代码见 grade.py 文件,选手不能修改此文件,如果发现此代码存在 bug ,请向赛事组委会反馈,组委会将统一说明并修改。
one-hot 编码
对于分割好的 3 维标签图像,会转化为 4 维的 numpy 数组,其中前三个维度表示图像的空间分辨率,第四个维度对应 15 个不同的器官分割通道,按照 one-hot 编码填充数据。
通道索引与器官标签的映射关系为:通道0对应标签1(即第一个器官),通道1对应标签2(依此类推),直至通道14对应标签15(第十五个器官)。每个通道为严格的二值化分割结果,即仅包含0和1两种数值——数值1表示该像素被判定为对应器官区域,0则表示非该器官区域。
Dice 系数
评分采用 Dice 相似系数(Dice Similarity Coefficient, DSC)作为核心评价指标。对于每个器官独立计算其 Dice 分数,具体计算公式为:
式中:
- 表示器官编号
- 为图像分辨率(即
img_size) - 为指示函数,条件满足时取 ,否则为
- 为平滑项,用于避免分母为零的情况
背景区域(标签0)不参与任何器官的Dice计算。最终得分为15个器官Dice分数的宏平均(算术平均),计算结果保留四位小数(如0.8573)。针对特殊情形设定补充规则:当某器官在真实标注中不存在(即真实掩膜全为0)且预测结果也全为0时,该器官Dice分数记为1;若真实标注存在但预测结果全为0,则按正常公式计算(此时分子为0,分母非零)。评分系统将对所有测试样本独立计算后取平均,确保评估结果的客观性。
最终得分为所有器官的得分平均值,并转化为以 100 为满分。得分会被上传到排行榜中,最终评测前的得分与排行仅供参考。
第一次赛事培训:赛事宣讲 & python 与神经网络基础
前言
在医学影像智能分析迅速发展的今天,如何从复杂的CT与MRI数据中精准提取关键信息,正成为医学物理与人工智能交叉领域的重要挑战。本次医学物理挑战赛聚焦“医学图像器官分割”这一核心问题,引导参赛者从实际临床需求出发,探索高效、可靠的智能算法解决方案。
为帮助参赛选手顺利入门、快速上手,我们安排了第一次赛事宣讲与基础培训。本次培训将系统介绍赛题背景与技术难点,解析比赛评分机制,并结合实际案例,讲解医学图像处理与神经网络的基础知识。同时,还将提供Python与NumPy相关的必要技能培训,帮助大家打好实践基础,为后续建模与算法设计做好充分准备。
无论你是初次接触医学影像处理,还是已有一定机器学习基础,本次培训都将为你搭建清晰的入门路径。我们期待与你一起,从基础知识出发,逐步解决医学影像难题。
基本信息
- 主讲人: 唐裕胜
- 时间: 2026年4月11日 14:30-16:30
- 活动形式: 线下+线上会议
- 地点: 三教3200
- 线上会议: 腾讯会议: 831-332-040
- 会议议程:
- 14:30-14:50: 赛事宣讲
- 赛题内容
- 评分方式
- 14:50-15:30: python 基础
- python 基本语法
- python 数组与计算
- numpy 的基本用法
- 15:30-16:10: 神经网络入门与代码示例
- 神经网络基础知识
- MNIST代码示例
- 16:10-16:30: 答疑与自由交流
预习材料
在本次培训前, 需要选手自行准备 linux 环境, 如果你用的是 Windows 系统, 那么可以在管理员模式下打开 PowerShell , 使用如下命令安装 WSL2:
wsl --install -d Debian
完成安装后, 可以自行完成用户名与密码的配置 (注意输入密码时, 在终端中不会显示).
如果遇到问题, 可以参考以下材料或自行查找视频资料, 也可以在培训会正式开始前半个小时线下向组委会寻求帮助:
- 官方文档: 如何使用 WSL 在 Windows 上安装 Linux
- 实验物理的大数据方法课程文档: WSL2 安装教程
- 实验物理的大数据方法课程文档: macOS 环境配置
- 实验物理的大数据方法课程视频资料: 在 macOS 上使用 UTM 安装 debian
如有需要, 可以自行完成软件源的更改配置, 以下给出清华大学 TUNA 镜像源的配置参考文档:
培训材料
第一次培训的材料如下,包含本次培训录屏与PPT,以及深度学习资料:
- 第一次赛事培训材料
- 第一次赛事小任务: 手写数字识别(具体内容见培训材料ppt最后一页)。
第二次赛事培训:pytorch训练基础
概念介绍
深度学习
深度学习是机器学习的一个子领域,基于多层人工神经网络(如卷积神经网络、循环神经网络等)进行特征学习和模式识别。其核心是通过分层结构自动提取数据的多层次抽象表示(从低级到高级特征),利用反向传播算法优化网络参数。典型应用包括图像识别、自然语言处理和语音识别。关键特点为:依赖大数据训练、计算密集型(常需GPU/TPU)、端到端学习能力,以及可处理高维非线性关系。
神经网络
神经网络是一种受生物神经元启发的计算模型,由相互连接的人工神经元(节点)组成,通过权重和激活函数处理输入数据并输出预测结果。其核心是通过训练(如反向传播)自动调整参数,以学习输入与输出之间的映射关系。传统神经网络通常较浅(1-2层),而深度学习通过堆叠多个隐藏层提取多层次特征,实现更复杂的模式识别。因此,深度学习是神经网络的扩展,核心区别在于深度(层数)和自动特征学习能力。
Pytorch
PyTorch 是一个基于 Python 的开源机器学习框架,由 Facebook(现 Meta)开发,主要用于深度学习。其核心特点包括:
- 动态计算图(Dynamic Computation Graph):支持即时执行的自动微分(Autograd),便于调试和灵活建模。
- 张量计算(Tensor):类似 NumPy,但支持 GPU 加速,适合高效数值计算。
- 模块化设计:提供 torch.nn 等高级 API,方便构建和训练神经网络。
- 生态系统:集成工具链(如 TorchVision、TorchText),支持研究到生产部署。优势:易用性强,适合学术研究,且被工业界广泛采用。对比框架如 TensorFlow,PyTorch 更偏向动态图编程范式。
基本信息
- 主讲人: 黄浩,陈泽睿
- 时间:5月10日9:30-11:30
- 培训内容:
- 神经网络的原理
- 基于pytorch的MLP
培训材料
第二次培训的材料如下,包含本次培训录屏与讲义:
第三次赛事培训: git与平台使用及赛题讲解
Git与平台介绍
- Git是目前世界上最流行的分布式版本控制系统。 版本控制是一种随着时间保存更改而不覆盖之前版本的方法;分布式意味着每个使用 Git 仓库的开发者都拥有整个仓库的副本——每一次提交、每个分支、每一个文件。
- 在本次比赛中,我们不仅将 Git 作为代码托管工具,更将其作为全自动评分流水线的核心:委员会通过“示例代码仓库”分发示例代码与实验数据,同时每一组选手都拥有专属的 GitLab 仓库。当执行
git push将代码推送到远程仓库后,可以手动运行 CI(持续集成),然后评分脚本会自动运行你的代码,并在评分完成后将结果同步至得分排行榜。
赛题与示例代码
赛题:
本项挑战赛专注于医学影像的自动分割技术,旨在通过深度学习算法实现对多模态医学图像(CT和MRI)中器官的精确分割。参赛者需要设计出具有强跨模态泛化能力的分割模型。
挑战赛提供的数据集包含完整CT和MRI图像,部分伴随器官分割标签。数据采用严格的编号和命名规范:
训练集 (Training Set):
0至500号:对应 CT 影像数据。- 大于
500号:对应 MRI 影像数据。 - 带 “
-nolabel” 后缀:可选的无标签增广数据,供半监督学习等策略使用。
测试集 (Test Set):
- 采用混合模态设计,完全进行随机化处理。
- 不提供任何显式的模态标签,且文件命名随机或统一,执行盲测评估。
评分权重: 单 CT 模态评分占总成绩的 80%,混合模态评分占 20%。选手应以 CT 数据的训练为核心重点,同时兼顾跨模态鲁棒性。
评分细则:
- 输入输出约束:推理脚本必须接受标准的
.nii.gz格式路径作为输入。 - 独立预测约束:每例样本的预测过程必须完全独立,严禁遍历整个测试集合反推整体分布。
- 禁止硬编码:严禁通过文件名逻辑切换预测分支。
示例代码
-
数据处理模块 (
dataset.py)
功能:负责读取原始医学数据(如.nii.gz文件),将其统一转化为深度学习框架所需的 Tensor 格式。支持数据批处理(DataLoader)与各类数据增强(Data Augmentation)策略。 -
模型搭建模块 (
net.py) 功能:搭建深度学习网络结构。 -
模型训练模块 (
train.py) 功能:搭建完整的训练框架。 -
模型推理模块 (
predict.py) 功能:执行测试集推理。 加载保存的预训练权重(如unet.pth),对盲测的测试样本进行模态自动识别与预处理,输入模型完成前向传播。若采用 2D 切片策略,需在此阶段将 2D 输出重新拼接恢复为 3D 形状[B, C, D, H, W],最终生成标准格式的分割结果。
基本信息
- 主讲人: 唐裕胜、樊玉博
- 时间:5月16日14:30-16:30
- 宣讲与培训内容:
- git与平台使用教程
- 决赛赛题介绍
- 样例代码讲解
材料
- 回放与材料: 清华云盘
- 第二次赛事小作业: 修改示例代码并push,运行CI评分后得到大于1的分数。
环境配置问题
pytorch 安装的问题
pytorch 版本过高导致只能使用 CPU 训练
在运行模型训练时, 若出现类似于如下报错, 请查看本节内容.
UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 12060). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:119.)
return torch._C._cuda_getDeviceCount() > 0
最简单的解决方法
如果您仅想要快速解决问题, 可以直接阅读此小节内容; 如果想了解更多, 请阅读详细的问题分析与解决小节.
最简单的解决方法是降低 pytorch 版本, 首先需要卸载当前版本的 pytorch 及相关包:
pip uninstall torch torchvision torchaudio -y
然后使用如下命令安装指定版本的 pytorch:
pip install torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0
如果安装时遇到了空间不足的问题, 请参考安装 pytorch 时缓存空间不足一节.
详细的问题分析与解决
如果您想要详细了解问题发生的原因, 以及各种解决方式, 可以阅读此小节内容; 如果仅想快速解决问题, 请阅读最简单的解决方法小节.
对于出现的报错信息, 其大致的含义是: 在 CUDA 初始化时, 发现您系统的 NVIDIA 驱动版本太旧了 (上述例子中是 CUDA 12.6), 解决方法是在 http://www.nvidia.com/Download/index.aspx 网站下载新版本的显卡驱动, 或者在 https://pytorch.org 网站下载在与您的驱动版本匹配的 pytorch.
出现此问题的原因是, pytorch 官方在 2026-03-24 发布了 PyTorch 2.11.0 Release, 从该版本开始, CUDA 13.0 将成为 PyPI 上发布的 PyTorch 轮子的"稳定" CUDA 变体. 而对于 NVIDIA RTX 40 系显卡, 常见的 CUDA 版本是 12.x , 可以通过如下命令查看
nvidia-smi
在表格第一行最后可以看到 CUDA 版本.
更新显卡驱动是一种解决方案, 可以自行研究; 这里主要是从 pytorch 层面给出两种解决方案. 第一种是直接用 Pytorch 2.10.0 , 按照最简单的解决方法小节操作即可; 如果仍想使用 Pytorch 2.11.0 , 可以下载指定驱动的版本, 在卸载完之前不适配的 pytorch 版本之后, 根据上述查询到的 CUDA 版本, 如果是 CUDA 12.6 , 使用如下命令安装:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
如果是 CUDA 12.8 , 使用如下命令安装:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
下载 pytorch 时缓存空间不足
如果在下载 pytorch 时, 报错最后出现:
pip._vendor.urllib3.exceptions.ProtocolError: ("Connection broken: OSError(28, 'No space left on device')", OSError(28, 'No space left on device'))
表明设备的剩余空间不足, 无法完成 pytorch 的下载, 如果您确认 C 盘空间充足 ( WSL 默认安装在 C 盘), 可能是由于 WSL 分配的 /tmp 目录所在磁盘分区过小所致, 可以使用
df -h /tmp
查看 /tmp 目录所在磁盘分区的使用情况, 如果 Filesystem 是 tmpfs , 表明 /tmp 的数据放在内存中, 此时空间通常较小, 只有几 GB 大小, 有时可能不能满足 pytorch 下载的需要, 此时可以通过修改 pip 缓存目录来完成下载.
首先新建一个缓存文件夹 (仅示例, 可修改文件夹名)
mkdir ~/pip-cache/
然后指定以该文件夹为缓存文件夹下载 (自行补全 ... 下载项)
TMPDIR=~/pip-cache/ pip install ...