Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

医学物理挑战赛

第二届医学物理挑战赛

工物科协第二届医学物理挑战赛火热来袭!

面向全校本科生,全程培训,零基础也能冲!

大赛背景

医学影像技术是临床诊疗的基石,而辐射成像作为精准医疗的核心工具,在疾病筛查、手术规划和疗效评估中发挥着不可替代的作用。随着人工智能技术的快速发展,医学影像的智能化处理已成为全球研究热点。为激发学生对交叉学科的兴趣,推动医学影像分析技术的创新应用,清华大学工程物理系学生科协倾力打造第二届医学物理挑战赛!本次赛事依托赛事组筹备的600份高质量医学影像样本(500个CT和100个MR扫描)数据集,覆盖15类腹部核心器官的精细化标注,要求参赛者设计算法,同时适应CT与MR两种模态,在仅输入单一模态的前提下,完成15个腹部器官的精细分割。这不仅是一次算法比拼,更是一次贴近临床真实场景的医学人工智能实践。

参赛对象

(参赛人数:每支队伍1-3人均可)

  • 专业不限!无论你是计算机、人工智能、生物医学工程、物理学、数学还是其他领域学生,只要对医学AI充满热情,均可报名参与!

  • 鼓励跨院系、跨年级组队。欢迎兄弟院校同学与社会各界人士参赛!

  • 零基础友好:赛事组提供样例代码、详细赛前培训及在线答疑,助力快速入门。

赛题任务

核心任务

  • 腹部器官医学图像分割

数据特色

  • 影像维度:3D容积数据(.nii.gz格式),保留完整空间信息。

  • 标注类别:涵盖脾、肝、肾、胰腺、胃等15类关键器官,部分器官标注难度极高(如细小肾上腺、易变形的十二指肠)。

评价指标

  • 采用Dice系数、Hausdorff距离等多维度评估分割精度与边界贴合度。

奖项设置

医学物理挑战赛赛程安排

周数(清华校历)日期内容
5-62026.3.23-2026.4.5比赛报名
7-132026.4.6-2026.5.24赛事培训
142026.5.31初赛开题答辩
15-夏季学期2026.6.1-夏季学期代码设计
秋季学期初2026秋季学期初决赛总结

赛事规则

初赛规则

初赛的任务为 赛事小作业 以及 初赛开题答辩

  • 初赛截止日期: (清华校历)第十四周周日(2026.5.31)
  • 初赛通过标准: 初赛为 P/F 制, 只要完成小作业, 参加答辩就算通过

注:

  1. 赛事小作业与开题答辩同一天截止.
  2. 开题答辩需要各组针对图像分割领域开展深入调研, 答辩内容应涵盖该领域的算法综述, 拟定的研究方案及其可行性分析等维度.
  3. 开题答辩会给出百分制分数, 按照 10% 计入决赛.

决赛规则

  • 决赛分数构成:
项目比例
初赛答辩10%
决赛答辩10%
代码得分80%

在代码得分中, 单模态 CT 分割分数占 80% , 混合 CT/MRI 分割分数占 20% , 具体的评分方式见决赛代码评分规则.

  • 决赛提交方式

请在清华大学gitlab-医学物理挑战赛2026自己所属的小组中创建项目, 并将代码推送至项目中以完成提交. 手动运行 ci 可以触发评分, 评分会自动上传至排行榜. 请注意 ci 评分仅供参考, 最终会使用隐藏测试集进行统一评测.

在决赛截止前一周, 将会进行预评测以判断代码在最终评测环境下是否可正常运行, 同时也会给出指定最终提交版本的方式.

注:

  1. 受限于 ci 的运行时长限制, 允许选手在 ci 上仅运行评测过程, 训练过程可以在本地或云平台上进行.
  2. 请尽量保持 git 仓库的整洁, 不要将比赛数据集内的文件添加到远程 git 仓库中 (它们已经被 .gitignore 所忽略, 默认是不会被上传的), 如果被发现 git 仓库中上传了比赛数据集文件, 可能会被警告甚至罚分; 你的模型参数文件可以上传, 但最好使用 git lfs , 或者修改 Makefile 使用云盘链接下载的方式获取模型参数文件, 尽量保证远程 git 仓库不对大文件本体进行追踪.
  3. 在 ci 评测中, 选手可以自行更改 Makefile 选择测试集范围, 是否评测 MRI 也可自行决定.
  4. 如果需要下载额外的 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(第十五个器官)。每个通道为严格的二值化分割结果,即仅包含01两种数值——数值1表示该像素被判定为对应器官区域,0则表示非该器官区域。

Dice 系数

评分采用 Dice 相似系数(Dice Similarity Coefficient, DSC)作为核心评价指标。对于每个器官独立计算其 Dice 分数,具体计算公式为:

Dicep=2×i=1Lj=1Wk=1HI(ypred(p)(i,j,k)=1ytrue(p)(i,j,k)=1)i=1Lj=1Wk=1HI(ypred(p)(i,j,k)=1)+i=1Lj=1Wk=1HI(ytrue(p)(i,j,k)=1)+ε \text{Dice}p = \frac{2 \times \sum{i=1}^L \sum_{j=1}^W \sum_{k=1}^H \mathbb{I}\left( y_{\text{pred}}^{(p)} (i,j,k) = 1 \cap y_{\text{true}}^{(p)} (i,j,k) = 1 \right)}{\sum_{i=1}^L \sum_{j=1}^W \sum_{k=1}^H \mathbb{I}\left( y_{\text{pred}}^{(p)} (i,j,k) = 1 \right) + \sum_{i=1}^L \sum_{j=1}^W \sum_{k=1}^H \mathbb{I}\left( y_{\text{true}}^{(p)} (i,j,k) = 1 \right) + \varepsilon}

式中:

  • p{1,2,...,15}p \in {1, 2, ..., 15} 表示器官编号
  • L×W×HL \times W \times H 为图像分辨率(即img_size
  • I()\mathbb{I}(\cdot) 为指示函数,条件满足时取 11 ,否则为 00
  • ε=107\varepsilon = 10^{-7} 为平滑项,用于避免分母为零的情况

背景区域(标签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
  • 会议议程:
    1. 14:30-14:50: 赛事宣讲
    • 赛题内容
    • 评分方式
    1. 14:50-15:30: python 基础
    • python 基本语法
    • python 数组与计算
    • numpy 的基本用法
    1. 15:30-16:10: 神经网络入门与代码示例
    • 神经网络基础知识
    • MNIST代码示例
    1. 16:10-16:30: 答疑与自由交流

预习材料

在本次培训前, 需要选手自行准备 linux 环境, 如果你用的是 Windows 系统, 那么可以在管理员模式下打开 PowerShell , 使用如下命令安装 WSL2:

wsl --install -d Debian

完成安装后, 可以自行完成用户名与密码的配置 (注意输入密码时, 在终端中不会显示).

如果遇到问题, 可以参考以下材料或自行查找视频资料, 也可以在培训会正式开始前半个小时线下向组委会寻求帮助:

如有需要, 可以自行完成软件源的更改配置, 以下给出清华大学 TUNA 镜像源的配置参考文档:

培训材料

第一次培训的材料如下,包含本次培训录屏与PPT,以及深度学习资料:

第二次赛事培训:pytorch训练基础

概念介绍

深度学习

深度学习是机器学习的一个子领域,基于多层人工神经网络(如卷积神经网络、循环神经网络等)进行特征学习和模式识别。其核心是通过分层结构自动提取数据的多层次抽象表示(从低级到高级特征),利用反向传播算法优化网络参数。典型应用包括图像识别、自然语言处理和语音识别。关键特点为:依赖大数据训练、计算密集型(常需GPU/TPU)、端到端学习能力,以及可处理高维非线性关系。

神经网络

神经网络是一种受生物神经元启发的计算模型,由相互连接的人工神经元(节点)组成,通过权重和激活函数处理输入数据并输出预测结果。其核心是通过训练(如反向传播)自动调整参数,以学习输入与输出之间的映射关系。传统神经网络通常较浅(1-2层),而深度学习通过堆叠多个隐藏层提取多层次特征,实现更复杂的模式识别。因此,深度学习是神经网络的扩展,核心区别在于深度(层数)和自动特征学习能力。

Pytorch

PyTorch 是一个基于 Python 的开源机器学习框架,由 Facebook(现 Meta)开发,主要用于深度学习。其核心特点包括:

  1. 动态计算图(Dynamic Computation Graph):支持即时执行的自动微分(Autograd),便于调试和灵活建模。
  2. 张量计算(Tensor):类似 NumPy,但支持 GPU 加速,适合高效数值计算。
  3. 模块化设计:提供 torch.nn 等高级 API,方便构建和训练神经网络。
  4. 生态系统:集成工具链(如 TorchVision、TorchText),支持研究到生产部署。优势:易用性强,适合学术研究,且被工业界广泛采用。对比框架如 TensorFlow,PyTorch 更偏向动态图编程范式。

基本信息

  • 主讲人: 黄浩,陈泽睿
  • 时间:5月10日9:30-11:30
  • 培训内容
    1. 神经网络的原理
    2. 基于pytorch的MLP

培训材料

第二次培训的材料如下,包含本次培训录屏与讲义:

第三次赛事培训: git与平台使用及赛题讲解

Git与平台介绍

  • Git是目前世界上最流行的分布式版本控制系统。 版本控制是一种随着时间保存更改而不覆盖之前版本的方法;分布式意味着每个使用 Git 仓库的开发者都拥有整个仓库的副本——每一次提交、每个分支、每一个文件。
  • 在本次比赛中,我们不仅将 Git 作为代码托管工具,更将其作为全自动评分流水线的核心:委员会通过“示例代码仓库”分发示例代码与实验数据,同时每一组选手都拥有专属的 GitLab 仓库。当执行 git push 将代码推送到远程仓库后,可以手动运行 CI(持续集成),然后评分脚本会自动运行你的代码,并在评分完成后将结果同步至得分排行榜

赛题与示例代码

赛题:

本项挑战赛专注于医学影像的自动分割技术,旨在通过深度学习算法实现对多模态医学图像(CT和MRI)中器官的精确分割。参赛者需要设计出具有强跨模态泛化能力的分割模型。
挑战赛提供的数据集包含完整CT和MRI图像,部分伴随器官分割标签。数据采用严格的编号和命名规范:
训练集 (Training Set):

  • 0500 号:对应 CT 影像数据。
  • 大于 500 号:对应 MRI 影像数据。
  • 带 “-nolabel” 后缀:可选的无标签增广数据,供半监督学习等策略使用。

测试集 (Test Set):

  • 采用混合模态设计,完全进行随机化处理。
  • 不提供任何显式的模态标签,且文件命名随机或统一,执行盲测评估。

评分权重: 单 CT 模态评分占总成绩的 80%,混合模态评分占 20%。选手应以 CT 数据的训练为核心重点,同时兼顾跨模态鲁棒性。
评分细则:

  1. 输入输出约束:推理脚本必须接受标准的 .nii.gz 格式路径作为输入。
  2. 独立预测约束:每例样本的预测过程必须完全独立,严禁遍历整个测试集合反推整体分布。
  3. 禁止硬编码:严禁通过文件名逻辑切换预测分支。

示例代码

  1. 数据处理模块 (dataset.py)
    功能:负责读取原始医学数据(如 .nii.gz 文件),将其统一转化为深度学习框架所需的 Tensor 格式。支持数据批处理(DataLoader)与各类数据增强(Data Augmentation)策略。

  2. 模型搭建模块 (net.py) 功能:搭建深度学习网络结构。

  3. 模型训练模块 (train.py) 功能:搭建完整的训练框架。

  4. 模型推理模块 (predict.py) 功能:执行测试集推理。 加载保存的预训练权重(如 unet.pth),对盲测的测试样本进行模态自动识别与预处理,输入模型完成前向传播。若采用 2D 切片策略,需在此阶段将 2D 输出重新拼接恢复为 3D 形状 [B, C, D, H, W],最终生成标准格式的分割结果。

基本信息

  • 主讲人: 唐裕胜、樊玉博
  • 时间:5月16日14:30-16:30
  • 宣讲与培训内容
    1. git与平台使用教程
    2. 决赛赛题介绍
    3. 样例代码讲解

材料

  • 回放与材料清华云盘
  • 第二次赛事小作业: 修改示例代码并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 目录所在磁盘分区的使用情况, 如果 Filesystemtmpfs , 表明 /tmp 的数据放在内存中, 此时空间通常较小, 只有几 GB 大小, 有时可能不能满足 pytorch 下载的需要, 此时可以通过修改 pip 缓存目录来完成下载.

首先新建一个缓存文件夹 (仅示例, 可修改文件夹名)

mkdir ~/pip-cache/

然后指定以该文件夹为缓存文件夹下载 (自行补全 ... 下载项)

TMPDIR=~/pip-cache/ pip install ...