本文记录了基于深度学习构建一个MRI图像AI滤波模型,训练及集成到测试应用的过程。

环境#

训练环境#

数据预处理,训练及模型输出及转换都使用Python脚本完成

软件 版本
Python 3.9
PyTorch 2.6.0+cu118
onnx 1.17.0
pytorch_msssim 1.0.0
numpy 最新即可
scipy 最新即可
pandas 最新即可
matplotlib 最新即可

生产环境#

实际应用是WPF应用程序,通过OnnxRuntime加载onnx模型用于推理,Onnx文件包含模型架构及参数,但是不包含训练相关的任何信息,由于PyTorch仅保存模型权重,因此Onnx文件大小没有多大变化,如果需要减小模型大小,需要导在导出时应用量化、剪枝、优化等技术

使用量化技术,模型大小从136MB减小到42MB,这个大小对于部署是可接受的

软件 版本
.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[输出]

数据标注#

使用三方滤波对原图进行滤波并保存,与原图一一对应,用于后续学习。

此步骤至关重要,标注的准确性会影响到模型的预测效果。

训练#

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[滤波后图像恢复到原图原来尺寸并显示]

演示#

窗宽窗位预测演示