本文记录了基于深度学习构建一个MRI窗宽窗位预测模型,训练及集成到测试应用的过程。
环境#
训练环境#
数据预处理,训练及模型输出及转换都使用Python脚本完成
| 软件 | 版本 |
|---|---|
| Python | 3.9 |
| TensorFlow | 2.15.0 |
| tf2onnx | 1.61.1 |
| pydicom | 最新即可 |
生产环境#
实际应用是WPF应用程序,通过OnnxRuntime加载onnx模型用于推理,Onnx文件包含模型架构及参数,但是不包含训练相关的任何信息,因此文件更小,便于部署
| 软件 | 版本 |
|---|---|
| .NET Framework | 4.8 |
| fo-dicom | 4.0.8 |
| Microsoft.ML.OnnxRuntime | 1.23.2 |
模型设计#
模型结构#
graph TD A[图像输入(单通道12位深)] --> B[归一化] B --> C[卷积层] C --> D[全连接层] D --> E[窗宽窗位输出]
数据标注#
使用DICOM工具将窗宽窗位调整到最优并保存,用于后续学习。
此步骤至关重要,标注的准确性会影响到模型的预测效果。
数据预处理#
graph TD A[DICOM文件夹] --> B[读取图像及窗宽窗位] B --> C[调整图像尺寸到模型输入尺寸] C --> D[输出图像列表和标签列表]
训练#
graph TD A[准备数据] --> B[构建模型] B --> C[编译模型(设置优化器,学习率和损失函数)] C --> D[设置回调函数(早停,学习率调度)] D --> E[开始训练] E --> F[评估损失] F --> G[保存模型] G --> H[转为Onnx格式]
集成到应用#
流程#
DICOM的处理要与训练时的预处理一致,大致流程如下:
graph TD A[DICOM图像读取] --> B[调整图像尺寸] B --> C[显示原图] C --> D[加载onnx模型] D --> E[调用onnx推理,预测窗宽窗位] E --> F[根据预测窗宽窗位显示图像]
演示#
