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

医学物理挑战赛

重要通知

初赛通过队伍名单公布

初赛通过队伍名单如下, 按照答辩获得分数排列, 会以 10 分计入总评分.

排名队伍名初赛分数
1Luo92.6
2BCD90.6
3我是后背89.8
4十五边形87.0
5睡大觉86.4
6上道队85.4
7啊对对对85.2
8斯塔克工业84.2
9请输入文本82.8
10嘟嘟嘟嘟79.0
11一个队23.8
12空白22.5

初赛规则调整

为了使更多选手可以参加赛事决赛, 对初赛规则做如下调整:

  • 原有的第 2 次小作业要求代码 ci 评分超过 1 分, 对于在初赛截止前实在无法满足达到 1 分要求的队伍, 请至少在示例代码基础上完成一次有效的修改 commit 并评分, 最终初赛的答辩分数将乘上 min[max(代码得分,0.5),1]\min[ \max(\text{代码得分}, 0.5), 1 ] .
  • 如果因为时间冲突等原因无法参加初赛答辩, 可以提交 pdf 格式的书面报告, 提交方式与截止时间与答辩 PPT 相同, 但初赛答辩获得分数不会超过 60 .

第二届医学物理挑战赛

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

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

大赛背景

医学影像技术是临床诊疗的基石,而辐射成像作为精准医疗的核心工具,在疾病筛查、手术规划和疗效评估中发挥着不可替代的作用。随着人工智能技术的快速发展,医学影像的智能化处理已成为全球研究热点。为激发学生对交叉学科的兴趣,推动医学影像分析技术的创新应用,清华大学工程物理系学生科协倾力打造第二届医学物理挑战赛!本次赛事依托赛事组筹备的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 制, 只要完成小作业, 参加答辩就算通过

初赛答辩 PPT 请提交到清华云盘; 如果因为时间原因无法参加初赛答辩, 可以提交 pdf 格式的书面报告, 但初赛答辩获得分数不会超过 60 .

注:

  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 的分数. 如果在初赛截止前未能达到 1 分, 请至少在示例代码基础上完成一次有效的修改 commit 并评分, 最终初赛的答辩分数将乘上 min[max(代码得分,0.5),1]\min[ \max(\text{代码得分}, 0.5), 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 ...