数字图像处理 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,其中 xxx 是Net.py文件中的模型类名,并设置参数:-
net:Net.py文件中的模型类名 -
num_classes: 模型最后一层输出的形状,1或2 -
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.py,transform.py,Net.py,Net.pth,metadata五个文件打包成upload_1.zip,其中的1代表第1次提交 - 打开提交网站
- 在 Particapate 中的 Submit / View Results 板块下,点击 Future Test Phase - Task 1 ,进行提交(如果是task2,就选择 Future Test Phase - Task 2)
./dataset/数据集,需要在本地放置数据集./network/网络模型./results/训练后生成,保存训练结果的.csv文件,不会上传至github,需要另外保存./checkpoints/训练后生成,保存训练时的模型参数,为.pth文件,不会上传至github,需要另外保存./upload_dir/用于测试和提交模型的文件夹data.py数据读取和处理transform.py数据预处理utils.py包含了一些功能型函数train.py训练模型train.batwindows 运行脚本train.shlinux 运行脚本model.py用于在测试集上评估模型的模型文件eval_model.py模拟在测试集上对模型进行评估(实际使用了训练集)./visual/用于存放数据集可视化之后的图片,不会上传至github,需要另外保存visual.py用于批量可视化数据集visual.bat运行visual.py的windows脚本visual.sh运行visual.py的linux脚本
- 运行前,先将数据集放在
./dataset文件夹下,如./dataset/1-Hypertensive Classification,以及./dataset/2-Hypertensive Retinopathy Classification。 - 最终保存下来的
.pth模型权重文件位于./checkpoints文件夹中。./checkpoints文件夹不会被上传至github,需要另外保存。 - 结果数据保存在
./results/中,该文件夹不会被上传至github,需要另外保存。 - 每次训练完毕,都会在主文件夹中生成
results.png用于可视化训练过程。 - 神经网络调用时,要求接收一个参数
num_classes,用于调整最后输出的大小。
本项目在requirements.txt所示环境中能够运行。
-
在本地运行
- 在主文件夹中输入命令:
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: 任务数字,1或2seed: 随机种子编号。在超参数不变的情况下,seed设置相同,那么结果就会一模一样,如果seed设置不同,结果就会不同device: 设备,cuda或cpudata_dir: 数据集存放路径
- optimization parameters:
n_valid: 验证集样本个数transform_method_origin: 读取数据时所用的预处理方法编号transform_method_epoch: 训练时对训练数据进行的随机性预处理方法编号batch_size: 每个轮次训练时的批大小n_epochs: 轮次次数is_shuffle: 是否在读取数据、划分训练集/验证集时进行随机打乱
- optimizer parameters:
optimizer: 优化器,默认有两种选择,adam与sgdlr: 学习率lr_decay_epochs: 学习率发生改变的对应轮次,可以添加多个轮次数值lr_decay_values: 学习率发生改变的目标数值,可以添加多个学习率数值weight_decay: adam优化器的正则化参数,用于调整网络的敏感程度,越大,敏感程度越小betas: adam优化器的衰减因子,有两个,默认为(0.9, 0.999)momentum: SGD优化器的动量参数,默认为0.9
- model parameters:
out_dim: 网络最后一层输出的形状,1或2threshold:out_dim为1时,划分正负样本的边界,默认为0.5model: 模型名称is_search:out_dim为1时,是否在最佳模型权重上搜索threshold
- logging parameters:
ckpt_dir: 保存模型权重的路径result_dir: 保存训练结果+命令行参数设置ckpt_every: 每多少个epoch保存一次模型权重eval_every: 每多少个epoch进行一次训练集和验证集loss和score的评估,打印并保存到results中print_every: 每个epoch中,每多少个batch进行一次训练集上loss的打印
- xxx
-
Classification of Diabetic Retinopathy Images by Using Deep Learning Models 介绍的一些形态学预处理方法可以借鉴
-
HyMNet: a Multimodal Deep Learning System for Hypertension Classification using Fundus Photographs and Cardiometabolic Risk Factors 需要额外的参数,但是思路可以参考
-
Hypertensive Retinopathy Screening through Fundus Images-A Review
综述,提到了一些前人的工作,以及“然而,对于医学影像的筛查,这些结构的分类性能可能也无关紧要。医学图像数据集可能是原因之一,因为特定领域的数据集有限,可能导致模型过度拟合或欠拟合。此外,迁移学习和超参数调优可以在现有数据集和网络上实现,用于特定应用,具有更多的加权参数来提取中间特征。”
-
Machine learning algorithms for hypertensive retinopathy detection through retinal fundus images 介绍了两大HR分类的方法,卷积网络VS机器学习 供参考

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