本文记录了基于深度学习构建一个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[根据预测窗宽窗位显示图像]

演示#

窗宽窗位预测演示