镜像版本: v1.0
构建日期: 2025-04-16
联系方式: SemiTeethSegChallenge@aliyun.com
计算机辅助诊断工具在现代牙科实践中越来越流行,特别是用于治疗计划或全面预后评估。随着口头数字化和三维扫描技术的进步,锥形束计算机断层扫描(CBCT)和口腔内扫描(IOS)已广泛应用于临床牙科处理中。INTRAORAL扫描(IOS)模型可提供高分辨率,可提供高分辨率,仅依靠IOS数据来依靠IOS数据,可带来不可能的根源信息的风险。相反,CBCT提供了有关牙冠和根部的全面信息,但其扫描分辨率较低,并且包含更多冗余信息。因此,结合两者可以更好地利用它们的互补优势,从而提高牙科治疗的精度和效率。
本 Docker 镜像旨在为 MICCAI STSR 2025 挑战赛 - Task 2(牙冠和牙根配准)提供一个开箱即用的深度学习基线(Baseline)解决方案。镜像内预装了所有必要的依赖库(PyTorch, PyTorch Lightning, MONAI, Trimesh, Hydra 等),并包含了两种不同的配准基线方法的完整代码工程,方便参赛者快速启动并进行开发和实验。
任务目标: 利用深度学习预测一个 4x4 刚体变换矩阵,将一个未对齐(模拟的)口内扫描 STL 文件(代表牙冠表面)精确地对齐到其在 CBCT 扫描坐标系中的正确位置(该位置由我们提供的 _gt.npy
真值矩阵定义)。
本镜像集成了两种不同思路的 Baseline 方法,存放于镜像内的 /workspace/
目录下:
多模态配准 Baseline (/workspace/multi_modal_registration_baseline/
)
EfficientNetBN-B0 3D
)作为 CBCT 编码器,提取体积特征。点云配准 Baseline (/workspace/point_cloud_registration_baseline/
)
重要说明 (两种 Baseline 共有):
_gt.npy
)。模型将在训练集上进行训练和参数优化。last.ckpt
)。参赛者可以修改此配置(见下文)。我们鼓励参赛者在这些 Baseline 的基础上进行创新和优化。以下是一些常见的修改方向:
配置文件 (configs/*.yaml
):
data.data_base_dir
): 必须修改此路径,指向您存放解压后数据集(包含Train-Labeled
, Validation-Public
, Test-Labeled
文件夹)的宿主机目录。在 docker run
时需要将此宿主机目录挂载到容器内(通常是 /dataset
或 /data
)。trainer.*
): 调整 max_epochs
, accelerator
(gpu/cpu), devices
(GPU ID), precision
(16/32/bf16)。data.*
): 调整 batch_size
, num_workers
, num_points
(点云采样数量), cbct_img_size
(CBCT 输入尺寸,仅多模态), augment_train
(是否开启 CBCT 增强,仅多模态)。model.*
): 调整编码器输出维度 (output_dim
), MLP 隐藏层大小 (mlp_hidden_dims
), fusion_dim
(仅多模态), dropout_rate
。optimizer.*
): 调整学习率 (lr
), 权重衰减 (weight_decay
)。loss.*
): 调整不同损失分量的权重 (translation_weight
, rotation_weight
)。predict.*
): 修改 checkpoint_path
(指定训练好的模型进行预测), output_dir
(保存预测结果的位置), predict_set
(指定在哪个数据集子集上进行预测)。模型架构 (src_*/models/
):
损失函数 (src_*/losses/
):
PointDistanceLoss
(需要加载原始点云,并在训练/验证步骤中应用预测/真值矩阵进行计算),这通常比参数损失效果更好。可以将其与参数损失结合。数据增强与预处理:
src_*/datasets/*.py
: 在 Dataset 或 DataModule 中添加更丰富的数据增强。对点云可以加入随机旋转、平移、缩放、抖动等。对 CBCT (仅多模态) 可以使用 MONAI 提供的更多 Rand*
变换。normalize_points
: 尝试不同的点云归一化策略。NormalizeIntensityd
)、裁剪 (CropForegroundd
) 等。训练流程 (src_*/lightning/*.py
, scripts/train_*.py
):
ModelCheckpoint
的参数,例如设置 save_top_k
(如果能找到合适的监控指标,如 train_loss
,但不推荐)或 every_n_epochs
来定期保存。修改配置文件:
nano
或 vim
编辑 configs/multi_modal_config.yaml
(或 point_cloud_config.yaml
)。data.data_base_dir
的值修改为您在容器内挂载的数据集路径,例如 /dataset
(如果您的数据集根目录,即包含Train-Labeled
的目录,被挂载到了 /dataset
)。batch_size
, devices
等)。启动训练:
# 如果使用多模态 Baseline
python scripts/train_mm.py
# 或者,如果使用点云 Baseline
# python scripts/train_pc.py
训练日志和模型检查点将默认保存在 /workspace/.../training_logs_*
目录下(具体路径见配置文件 trainer.default_root_dir
)。
监控训练 (可选): 如果您将容器的端口映射出来,可以在宿主机浏览器中通过 TensorBoard 查看日志。首先在容器内启动 TensorBoard:
# 在容器内,训练运行时或训练结束后
tensorboard --logdir ./training_logs_multimodal --bind_all
# 或者
# tensorboard --logdir ./training_logs_pointcloud --bind_all
然后在宿主机的浏览器访问 http://<容器IP或localhost>:6006
(如果端口映射正确)。
训练完成: 等待训练完成,或者选择一个您认为合适的检查点 (.ckpt
文件)。
修改配置文件: 编辑相应的配置文件 (multi_modal_config.yaml
或 point_cloud_config.yaml
):
predict.checkpoint_path
为您选择的 .ckpt
文件的完整路径 (在容器内的路径)。predict.output_dir
为您希望保存预测结果的目录 (例如 /workspace/.../submission_files
)。predict.predict_set
为您想要进行预测的数据集部分 (Validation
或 Test
)。确保 data.data_base_dir
指向包含相应 Validation-Public/Images
或 Test-Labeled/Images
的目录。运行预测脚本:
# 如果使用多模态 Baseline
python scripts/predict_mm.py
# 或者,如果使用点云 Baseline
# python scripts/predict_pc.py
脚本将在指定的 predict.output_dir
下生成符合提交规范的 .npy
文件。
PointDistanceLoss
)通常能显著提高配准精度,但这需要额外的实现工作(在 Dataset 中传递原始点云,在 Lightning Module 中加载 GT 矩阵并应用变换)。pl.seed_everything
) 和 deterministic=True
,但这可能无法完全保证跨不同硬件或库版本的绝对可复现性,并且可能略微降低性能。希望这份详细的描述能帮助参赛者更好地理解和使用这个 Baseline Docker 镜像!祝您在比赛中取得好成绩!