delira
统一PyTorch/TensorFlow等后端的深度学习训练框架,医学影像场景增强是其特色亮点
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
统一PyTorch/TensorFlow等后端的深度学习训练框架,医学影像场景增强是其特色亮点
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
在医学影像领域,深层神经网络(DNN)的应用研究长期面临一个尴尬局面:研究人员往往需要在多个深度学习框架之间反复横跳——用 PyTorch 快速迭代新想法、换 TensorFlow 做生产部署、再用 Chainer 跑一些前沿实验。代码重复不说,每次切换框架都要重新学习 API,心智负担极重。正是在这种背景下,德国亚琛工业大学(RWTH Aachen University)医学影像与计算机视觉研究所的科研团队,于 2017 年左右启动了 delira 项目。
delira 最早是 DEep Learning In RAdiology( radiology 的缩写,意为"放射学中的深度学习")的缩写。项目最初目标是为医学影像分析提供统一的深度学习训练框架,核心作者包括 Justus Schock、Michael Baumgartner、Oliver Rippel 和 Christoph Haarburger 等人。后来随着框架能力扩展,团队将 delira 重新定位为"后端无关(backend-agnostic)"的通用高层深度学习库,名字本身的放射学含义被保留为历史印记。
2019 年,delira 团队在 Journal of Open Source Software(JOSS)发表了论文《Delira: A High-Level Framework for Deep Learning in Medical Image Analysis》,被引用 3 次,标志着该项目获得了学术社区的认可。项目由 RWTH Aachen University 旗下的 LFB(Institut für Experimentelle Radiologie)实验室提供支持,目前主要维护者仍活跃在大学科研体系中。
delira 的核心设计哲学可以概括为一句话:用同一套代码驱动所有主流深度学习框架。它通过在后端层面抽象统一的接口,让你可以在 PyTorch、TensorFlow(1.x graph/eager 两种模式)、Chainer 和 scikit-learn 之间自由切换,而训练逻辑、数据加载、模型保存的代码完全不需要改动。
这种设计对科研场景特别友好。比如一个研究团队正在用 PyTorch 做图像分割的消融实验,当论文需要对比 TensorFlow 实现的效果时,传统做法是从头重写训练循环;而 delira 用户只需要改一行后端配置,相同的 trainer、experiment 代码即可在另一个后端运行。这不只是节省时间,更保证了"公平对比"——同样的数据增强策略、同样的 callback 逻辑、同样的损失函数定义,排除了人为重写带来的差异。
delira 的模块化程度极高,几乎每个组件都可替换。从数据集加载器、采样策略、图像增强、训练回调到日志监控,每一个环节都有抽象接口,允许用户按需注入自定义实现。这种设计思路在学术原型开发中极具价值:快速验证想法的同时,代码结构保持规范,便于后续复现和分享。
delira 的训练体系由 BaseExperiment 和 BaseTrainer 两个核心类构成,形成了清晰的两层抽象。
Experiment 层(约 24KB 代码)是策略层,负责定义"训练什么"——包括网络模型的构建、损失函数的选择、评估指标的设定,以及训练流程的整体编排。每个实验(Experiment)对应一个完整的训练任务,可以通过配置参数快速实例化不同的网络结构或训练策略。
Trainer 层(约 31KB 代码)是执行层,负责定义"怎么训练"——包括前向传播、反向传播、参数更新、早停策略、学习率调度,以及训练过程中的各种回调(Callbacks)。由于后端差异被封装在 Trainer 的子类中,同一套训练策略可以在 PyTorch Trainer 和 TensorFlow Trainer 之间无缝切换。
这种分离带来的实际好处是:当你发现 PyTorch Trainer 的某些行为不符合预期时,可以快速切换到 TensorFlow Trainer 做对比验证,而不需要重写 Experiment 中的模型定义逻辑。
Callback 系统是 delira 训练架构的另一大亮点。BaseCallback 抽象类定义了训练过程中各个钩子点(on_epoch_begin、on_batch_end 等),官方提供了早停(EarlyStopping)、Visdom/TensorBoard 日志记录、学习率调度器集成等开箱即用的实现。研究人员可以基于这些现成组件快速搭建自己的训练流程,也可以通过继承抽象类实现完全自定义的行为。
delira 的数据加载模块(delira/data_loading/)借鉴了 PyTorch Dataset/DataLoader 的设计理念,同时在医学影像场景上做了大量增强。
Dataset 提供了基础的数据集封装,支持从磁盘按需加载样本。DataLoader 则负责批量采样、多 worker 并行加载、打包成 batch 等功能。DataManager 在更高层提供了数据集切分(训练/验证/测试)和跨后端统一接口。
医学影像增强是 delira 的强项。基于 batchgenerators(德国 DKFZ 癌症研究中心出品的医学影像数据增强库),delira 支持 3D 图像的多线程实时增强,包括随机裁剪、弹性形变、强度变换、旋转翻转等操作,且支持任意数量的图像通道。这对于 CT、MRI 等 3D 医学影像任务至关重要——大多数通用框架的原生数据增强对 3D 数据支持较弱,而 delira 直接集成了专业级解决方案。
此外,numba_transform 模块利用 JIT 编译加速数值计算密集型的数据预处理步骤,在保证灵活性的同时维持了较高的运行效率。
delira 的后端抽象通过 delira/_backends.py 中的动态检测机制实现。框架启动时会尝试导入所有已知的深度学习后端(torch、tensorflow、chainer、sklearn),将成功导入的后端记录在 ~/.delira 配置文件中,后续运行时直接读取缓存,避免重复检测。
PyTorch 后端是最成熟完善的实现路径,完整支持动态图模式下的训练流程、混合精度训练(通过 NVIDIA Apex)、多 GPU 分布式训练,以及 JIT 脚本导出(torchscript 后端)。delira/training/backends/torch/ 目录下包含了完整的 Trainer 和 Predictor 实现,是大多数用户的选择。
TensorFlow 后端则细分为 eager 模式和 graph 模式两个独立子后端。eager 模式适合研究与快速迭代,graph 模式适合部署场景下的性能优化。两种模式的代码逻辑在 delira 框架内保持了一致性,用户只需切换配置即可体验不同执行模式的行为差异。
Chainer 后端支持了该框架独特的"define-by-run"动态计算图特性,为前沿研究提供了实验土壤。
scikit-learn 后端则是一个有意思的设计——它将深度学习模型包装成 sklearn 风格的 Estimator 接口,使得 delira 训练的模型可以直接融入 sklearn 的交叉验证、网格搜索等传统机器学习工具链中,实现"深度学习 + 传统 ML 工具"的混合使用。
delira/models/ 中的 AbstractNetwork 定义了所有网络模型的抽象基类,确保不同后端实现的网络可以互换使用。各后端在 models/backends/ 下有独立的实现目录。
在 IO 层面,delira 提供了统一的状态保存/加载接口(delira/io/),抽象掉了 PyTorch 的 state_dict、TensorFlow 的 checkpoint、Chainer 的 serializer 等底层差异,用户用同一套 API 即可保存和恢复任意后端训练的模型。README 中提到的 Visdom 和 TensorBoard 集成也通过统一的 logging 层实现,无需关心后端细节。
delira 整体是一个纯 Python 库,没有独立的 Web UI,定位为命令行/脚本级别的开发框架。使用门槛中等偏高:
部署方面,框架提供了 Docker 支持(基于 CUDA 9.2 + Miniconda3 环境),但 Dockerfile 本身是单阶段构建、非最小化的开发风格,更适合快速实验而非生产镜像。docker-compose 和 Kubernetes 支持暂未提供。
从依赖来看,基础安装仅需 NumPy,但完整功能(医学影像增强)依赖 batchgenerators,可选后端需要各自对应的包。建议通过 pip 安装指定后端版本(如 pip install delira[torch]),而非手动管理依赖。
项目活跃度下降:最后一次代码提交停在 2020 年 11 月,距今超过 4 年。对于快速迭代的深度学习领域,这意味着框架可能无法跟进 PyTorch/TensorFlow 的最新 API 变化,新硬件支持(如更新的 CUDA 版本)也可能受限。
TensorFlow 1.x 依赖:TF 后端基于 TensorFlow 1.x(v1.14),而 TF 早已进入 2.x 时代。虽然 1.x 仍有大量遗留系统在用,但新项目选择 TF 后端时会面临版本锁定问题。
非生产级部署支持:没有 docker-compose、没有 Kubernetes manifest、没有 Web UI,部署层面需要用户自行集成到现有基础设施中。
文档构建在 ReadTheDocs:虽然有完整的文档体系,但维护状态同样依赖项目活跃度,部分示例可能已过时。
delira 代表了一种有价值的技术路线——在框架碎片化的时代提供抽象层统一入口。它比 PyTorch Ignite、PyTorch Lightning 更早尝试了类似的方向,且在医学影像垂直领域深耕了配套的数据增强能力。它的设计理念影响了一批后续的"高层框架"项目,尽管 delira 自身的维护状态限制了影响力的持续扩大。
对于医学影像方向的研究者来说,delira 仍是一个值得参考的项目——它的 batchgenerators 集成、3D 数据增强方案、以及多后端训练流程的设计思路,即使不直接使用 delira,也能从中获得启发。同时,作为 JOSS 论文的发表项目,delira 的代码和设计文档为学术软件工程实践提供了一个具体案例。