Skip to content

CodemanRichard/Digital-Image-Processing-Project

Repository files navigation

Digital-Image-Processing-Project

数字图像处理 project:高血压视网膜病变图像的分类

评估并上传模型步骤

务必在 upload_dir 中运行 eval_model.py ,得到合适的结果之后再提交!

  • 由于transform.py可能不同,将自己的transform.py替换掉upload_dir/transform.py文件
  • 将模型权重文件复制到upload_dir下,并改名成Net.pth
  • 将网络定义文件复制到upload_dir下,并改名成Net.py
  • 打开./upload_dir/model.py文件,添加 from Net import xxx ,其中 xxxNet.py文件中的模型类名,并设置参数:
    • net: Net.py文件中的模型类名
    • num_classes: 模型最后一层输出的形状,12
    • ckpt_path: 权重文件名,默认为Net.pth
    • transform_method_origin: 读取数据时所用的预处理方法编号
    • threshold: num_classes = 1时,所使用的的threshold,范围在 $0\sim 1$ 之间
  • 打开./upload_dir/eval_model.py文件,根据任务修改task编号
  • 进入文件夹upload_dir,运行命令
python eval_model.py
  • 如果运行成功,将会输出模型在整个数据集的结果,否则就需要先 debug
  • upload_dir文件夹中的model.pytransform.pyNet.pyNet.pthmetadata五个文件打包成upload_1.zip,其中的1代表第1次提交
  • 打开提交网站
  • Particapate 中的 Submit / View Results 板块下,点击 Future Test Phase - Task 1 ,进行提交(如果是task2,就选择 Future Test Phase - Task 2)

文件结构

  1. ./dataset/ 数据集,需要在本地放置数据集
  2. ./network/ 网络模型
  3. ./results/ 训练后生成,保存训练结果的.csv文件,不会上传至github,需要另外保存
  4. ./checkpoints/ 训练后生成,保存训练时的模型参数,为.pth文件,不会上传至github,需要另外保存
  5. ./upload_dir/ 用于测试和提交模型的文件夹
  6. data.py 数据读取和处理
  7. transform.py 数据预处理
  8. utils.py 包含了一些功能型函数
  9. train.py 训练模型
  10. train.bat windows 运行脚本
  11. train.sh linux 运行脚本
  12. model.py 用于在测试集上评估模型的模型文件
  13. eval_model.py 模拟在测试集上对模型进行评估(实际使用了训练集)
  14. ./visual/ 用于存放数据集可视化之后的图片,不会上传至github,需要另外保存
  15. visual.py 用于批量可视化数据集
  16. visual.bat 运行visual.pywindows脚本
  17. visual.sh 运行visual.pylinux脚本

注意事项

  1. 运行前,先将数据集放在./dataset文件夹下,如./dataset/1-Hypertensive Classification,以及./dataset/2-Hypertensive Retinopathy Classification
  2. 最终保存下来的.pth模型权重文件位于./checkpoints文件夹中。./checkpoints文件夹不会被上传至github,需要另外保存。
  3. 结果数据保存在./results/中,该文件夹不会被上传至github,需要另外保存。
  4. 每次训练完毕,都会在主文件夹中生成results.png用于可视化训练过程。
  5. 神经网络调用时,要求接收一个参数num_classes,用于调整最后输出的大小。

环境

本项目在requirements.txt所示环境中能够运行。

Tensorboard可视化使用方法

  • 在本地运行

    • 在主文件夹中输入命令:cd log/task-1/TestNet
    • 然后输入命令:tensorboard --logdir ./ --port 8099
    • 本地打开命令行出现的网址,即http://localhost:8099/
  • 在服务器上运行

    • 在主文件夹中输入命令:cd log/task-1/TestNet
    • 因为默认使用/root/tf-logs作为logdir,所以需要执行命令ps -ef | grep tensorboard | awk '{print $2}' | xargs kill -9删除该进程。
    • 然后输入命令:tensorboard --logdir ./ --port 6007
    • AutoPanel中打开Tensorboard

注意

  • 在网站中,将右上角设置中的reload_data打上勾,可自动刷新网站
  • 每次训练时,需要将以前的数据文件events.out. ...删除,按下Ctrl+C退出Tensorboard进程并重新运行命令,才能正确加载当前训练的数据。此过程中网站不需要关闭,tensorboard设置也不会重置。

可视化数据集

使用下列命令来查看命令行参数信息。

python visual.py -h

运行脚本,生成图片。

visual.bat
# or
bash visual.sh

命令行参数

  • base parameters:
    • task: 任务数字,12
    • seed: 随机种子编号。在超参数不变的情况下,seed设置相同,那么结果就会一模一样,如果seed设置不同,结果就会不同
    • device: 设备,cudacpu
    • data_dir: 数据集存放路径
  • optimization parameters:
    • n_valid: 验证集样本个数
    • transform_method_origin: 读取数据时所用的预处理方法编号
    • transform_method_epoch: 训练时对训练数据进行的随机性预处理方法编号
    • batch_size: 每个轮次训练时的批大小
    • n_epochs: 轮次次数
    • is_shuffle: 是否在读取数据、划分训练集/验证集时进行随机打乱
  • optimizer parameters:
    • optimizer: 优化器,默认有两种选择,adam与sgd
    • lr: 学习率
    • lr_decay_epochs: 学习率发生改变的对应轮次,可以添加多个轮次数值
    • lr_decay_values: 学习率发生改变的目标数值,可以添加多个学习率数值
    • weight_decay: adam优化器的正则化参数,用于调整网络的敏感程度,越大,敏感程度越小
    • betas: adam优化器的衰减因子,有两个,默认为(0.9, 0.999)
    • momentum: SGD优化器的动量参数,默认为0.9
  • model parameters:
    • out_dim: 网络最后一层输出的形状,12
    • threshold: out_dim1时,划分正负样本的边界,默认为0.5
    • model: 模型名称
    • is_search: out_dim1时,是否在最佳模型权重上搜索threshold
  • logging parameters:
    • ckpt_dir: 保存模型权重的路径
    • result_dir: 保存训练结果+命令行参数设置
    • ckpt_every: 每多少个epoch保存一次模型权重
    • eval_every: 每多少个epoch进行一次训练集和验证集loss和score的评估,打印并保存到results中
    • print_every: 每个epoch中,每多少个batch进行一次训练集上loss的打印

预处理

  1. xxx

论文

  1. Classification of Diabetic Retinopathy Images by Using Deep Learning Models 介绍的一些形态学预处理方法可以借鉴

  2. HyMNet: a Multimodal Deep Learning System for Hypertension Classification using Fundus Photographs and Cardiometabolic Risk Factors 需要额外的参数,但是思路可以参考

  3. Hypertensive Retinopathy Screening through Fundus Images-A Review

    综述,提到了一些前人的工作,以及“然而,对于医学影像的筛查,这些结构的分类性能可能也无关紧要。医学图像数据集可能是原因之一,因为特定领域的数据集有限,可能导致模型过度拟合或欠拟合。此外,迁移学习和超参数调优可以在现有数据集和网络上实现,用于特定应用,具有更多的加权参数来提取中间特征。”

    包括以下HR的五大特征(可以考虑进行特征提取) image

  4. Machine learning algorithms for hypertensive retinopathy detection through retinal fundus images 介绍了两大HR分类的方法,卷积网络VS机器学习 供参考 image image

数据集

  1. 全球94个开放获取数据库特征——《全球眼科图像公开数据库使用指南(2022)》附表

记录

  • v0.1
    • v0.1.0
      • 建立项目
  • v0.2
    • v0.2.0
      • 完成数据读取,数据预处理,训练功能
    • v0.2.1
      • 完善代码并添加utils.py文件。
  • v0.3
    • v0.3.0
      • 添加DenseNetResNet网络代码
      • 添加is_search命令行参数,完善代码
      • 删除了github上的results文件夹,改为本地保存
    • v0.3.1
      • 添加transform_method_origintransform_method_epoch命令行参数,用于在训练时引入数据增强功能
      • 修复一些小bug
      • 将最终结果保存成图片文件results.png,方便查看训练结果
      • 在训练时,不仅会打印scoreloss,还会打印训练和验证集的TPTNFPFN
    • v0.3.2
      • 添加out_dim命令行参数,用于控制输出大小,为1输出大小为[batch_size, 1],为2输出大小为[batch_size, 2]。如果为1,使用神经网络输出值经过sigmoid所得作为正样本概率;如果为2,使用神经网络输出的两个值分别作为负样本、正样本概率。
    • v0.3.3
      • README.md中添加对命令行参数的详细中文解释
      • 修改了一些命令行参数的数据类型
  • v0.4
    • v0.4.0
      • 完成model.pyeval_model.py文件
      • data.py中添加n_valid0时的特殊情况
      • 删除net_test.pyTestNet中不必要的模型参数,防止在保存和加载模型参数时出错
      • train.py中计算分数的函数移至utils.py
      • utils/cal_scores汇总结果时,添加lossesNone的情况
      • 修改README.md
  • v0.5
    • v0.5.0
      • 完成visual.py文件,用于可视化数据集,方便查看图像、对应 label 及图像名
    • v0.5.1
      • 添加README.md中的预处理、论文、数据集部分。
    • v0.5.2
      • 在命令行参数中添加AdambetasSGDmomentum参数
      • README.md中添加测试并提交文件的指引
      • 添加新的自定义网络SResNet
    • v0.5.3
      • 修复out_dim = 1或者是num_classes = 1eval_model运行结果错误的问题
    • v0.5.4
      • transform.py中添加旋转的数据增强操作和去除高亮点的数据预处理方法。添加旋转的数据增强操作能够有效避免过拟合!
      • 更新论文
  • v0.6
    • v0.6.0
      • 添加tensorboard可视化的支持,具体的可视化文件夹位于./log下,使用tensorboard的方法在README.md
      • 更改模型参数的保存:在训练时,不仅保存 loss 最小的模型参数,还会保存 average score 最大的模型参数
    • v0.6.1
      • 添加UNet.py,添加report/文件夹,图片、文件、报告都可以放在这个文件夹下
      • 添加requirements.txt
      • 修改UNet.pyAUNet.py
    • v0.6.2
      • README.md中更新了两篇文献

About

数字图像处理 project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages