Skip to content
/ CTAI Public
forked from xming521/CTAI

基于深度学习的肿瘤辅助诊断系统,利用人工智能完成肿瘤区域的识别勾画并提供肿瘤区域的特征来辅助医生进行诊断。有完整的模型构建、后端架设、工业级部署和前端访问功能。

Notifications You must be signed in to change notification settings

crazy-zxx/CTAI

 
 

Repository files navigation

🏥 CTAI

基于深度学习的肿瘤辅助诊断系统

系统以图像分割为核心,利用人工智能完成肿瘤区域的识别勾画并提供肿瘤区域的特征来辅助医生进行诊断。有完整的模型构建、后端架设和前端访问功能。
医生只需通过web上传ct图像文件,后台就会使用训练好的模型进行肿瘤区域的分割,然后将勾画好肿瘤区域的图像返回,还有肿瘤区域的一些特征(如面积、周长、强度等),并且提供前几次诊断的特征数据并绘制成图表进行对比来辅助医生诊断。

系统结构介绍

整个系统采取前后分离的方案,确保足够轻量,低耦合。后端采用Python的Flask库,能与AI框架更好的结合,使得系统能更高内聚。
后端运行流程如下:

系统截图

觉得不错欢迎给star⭐哦

项目结构

CTAI
├── CTAI_flask_onnx
│   ├── core
│   ├── data
│   ├── static
│   ├── tmp                     # 临时目录,保存上传图像的中间处理过程的图像
│   ├── uploads                 # 保存上传图像的目录
│   ├── app_onnx.py
│   ├── best_unet_model.onnx
│   └── to_oonx.py
├── CTAI_flask_torch
│   ├── core
│   ├── data
│   ├── static
│   ├── tmp
│   ├── upload
│   └── sapp.py
├── CTAI_model
│   ├── cv
│   ├── data_set
│   ├── net
│   ├── utils
│   ├── best_unet_model.pth
│   ├── test.py
│   └── train.py
├── CTAI_web
│   ├── dist
│   ├── node_modules
│   ├── public
│   ├── src
│   ├── babel.config.js
│   ├── package-lock.json
│   ├── package.json
│   ├── vue.config.js
│   └── yarn.lock
├── README.md
└── requirements.txt

开发环境

  • Python 3.8: PyTorch 1.10.0 , OpenCV 3, Flask, onnxruntime
  • Node 22: axios , ElementUI , ECharts
  • Vue: Vue-cli
  • Chrome(内核版本60以上)

安装 PyTorch 1.10.0

  • CUDA 11.1
pip install torch==1.10.0+cu111 torchvision==0.11.0+cu111 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
  • CUDA 10.2
pip install torch==1.10.0+cu102 torchvision==0.11.0+cu102 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
  • CPU only
pip install torch==1.10.0+cpu torchvision==0.11.0+cpu torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html

安装python依赖包

pip install -r requirements.txt

注意,在 requirements.txt 中:

numpy==1.23.0               # 差不多相近的版本就行,不能太新
opencv-python==3.4.8.29     # 差不多相近的版本就行,不能用 4.x 版本的
onnxruntime                 # 只有使用onnx在cpu上进行生产环境部署时使用
gevent                      # 只有使用onnx在cpu上进行生产环境部署时使用

安装Node环境

  • Windows:

    官网下载安装

  • Linux:

    # Download and install fnm:
    curl -o- https://fnm.vercel.app/install | bash
    # Download and install Node.js:
    fnm install 22

安装Vue依赖

cd CTAI_web
npm install -g @vue/cli
npm install -g yarn
yarn instal

数据集下载

下载地址,由原作者提供,致谢!

模型训练

进入CTAI_model目录,修改train.py中的数据集路径和训练参数:

# 设置训练数据集目录路径!!!
# 路径中不能有中文字符!!!
# Windows目录使用 \\ 结尾,Linux目录使用 / 结尾 !!!
train_dataset_path = r"C:\Users\xxx\Downloads\datasets\\"
# train_dataset_path = r"/mnt/datasets/"

# 模型超参数设置
epochs = 20             # 训练轮次(太少不行)
batch_size = 2          # 每个批次的样本数(看显存,24G建议8)
learn_rate = 0.001      # 学习率(不建议修改)

训练

cd CTAI_model
python train.py

开发环境运行

启动Vue前端渲染服务

cd CTAI_web
npm run serve

启动后端flask服务

cd CTAI_flask_torch
python app.py

生产环境部署

  • 进行模型转换, pth --> onnx
cd CTAI_flask_onnx
python to_oonx.py
  • 进行Vue前端代码编译, 编译完后的dist目录即可用于部署
cd CTAI_web
yarn build
  • 仅需将 CTAI_flask_onnxCTAI_web/dist 两个目录下的文件压缩复制到服务器。
CTAI
├── CTAI_flask_onnx
│   ├── core
│   ├── data
│   ├── static
│   ├── tmp
│   ├── uploads
│   ├── app_onnx.py
│   ├── best_unet_model.onnx
│   └── to_oonx.py
├── CTAI_web
│   └── dist
└── requirements.txt
  • 在服务器安装 python 3.8 和依赖包,此处不需要安装pytorch
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt install python3.8 python3.8-distutils -y
cd CTAI
python3.8 -m pip install -r requirements.txt
  • 在服务器安装 nodenpm
# Download and install fnm:
curl -o- https://fnm.vercel.app/install | bash
# Download and install Node.js:
fnm install 22
  • 在服务器后台运行python服务
cd CTAI_flask_onnx
nohup python3.8 app_onnx.py > app_onnx.log 2>&1 &
  • 在服务器使用PM2启动和管理Vue服务
# 安装PM2
npm install -g serve pm2
cd CTAI_web
# 启动服务,将目录dist作为静态服务器根目录,端口为8080
pm2 serve ./dist 8080

启动成功后显示类似如下界面:

[PM2] Starting C:\GreenApps\Nodejs22\node_modules\pm2\lib\API\Serve.js in fork_mode (1 instance)
[PM2] Done.
[PM2] Serving D:\SourceCode\PycharmProjects\CTAI\CTAI_web\dist on port 8080
┌────┬────────────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name                       │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼────────────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ static-page-server-8080    │ default     │ 5.4.3   │ fork    │ 29652    │ 0s     │ 0    │ online    │ 0%       │ 50.3mb   │ xxx      │ disabled │
└────┴────────────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

PM2基本使用

# 查看 pm2 启动的项目
pm2 list
# 开机自启
pm2 startup
# 停止对应的id服务
pm2 stop [id]
# 重启对应的id服务
pm2 reload  [id]
# 删除对应的id服务
pm2 delete [id]

模型权重下载

pth模型

onnx模型

模型介绍

训练的数据来源于国外的数据集。因数据和精力有限只训练了针对直肠肿瘤模型。首先对CT文件进行整理,使用SimpleITK读取CT文件,读取肿瘤的掩膜文件并映射到肿瘤CT图像来获取肿瘤区域,然后进行数据的归一化,预处理后制作训练和测试的数据集。 使用PyTorch框架编写。使用交叉熵损失函数Adam优化器。 网络结构采用U-NetU-Net是基于FCN的一种语义分割网络,适用于做医学图像的分割。结构如下,实际使用稍有改动。

训练过程如下:

About

基于深度学习的肿瘤辅助诊断系统,利用人工智能完成肿瘤区域的识别勾画并提供肿瘤区域的特征来辅助医生进行诊断。有完整的模型构建、后端架设、工业级部署和前端访问功能。

Topics

Resources

Stars

Watchers

Forks

Languages

  • Python 96.4%
  • CSS 3.6%