代码的解读——自用
代码来自:https://github.com/ChuHan89/WSSS-Tissue?tab=readme-ov-file
借助了一些人工智能
run_pipeline.sh
功能总结
该脚本用于执行一个 弱监督语义分割(WSSS) 的完整流程,包含三个阶段:
-
Stage1:训练一个基于 ResNet38 的多标签分类模型,生成图像级标签。
-
生成伪掩码(PM):利用 Stage1 的模型生成 3 种级别的伪分割掩码。
-
Stage2:使用伪掩码训练 DeepLab v3+ 分割模型,完成像素级分割任务。
代码解释
1. 设置数据集变量
DATASET=luad DATASETNAME=LUAD-HistoSeg
作用:定义数据集变量。DATASET
是数据集的缩写(用于代码内部标识),DATASETNAME
是数据集文件夹的实际名称。
用户需修改:替换这两个变量以切换不同数据集(例如 bcss
和 BCSS-WSSS
)。
2. Stage1: 训练分类模型
python 1_train_stage1.py \ --dataset $DATASET \ --trainroot datasets/$DATASETNAME/train/ \ --testroot datasets/$DATASETNAME/test/ \ --max_epoches 20 \ >> logs/stage1_log_on_$DATASET.txt
-
参数解析:
-
--dataset
:指定数据集标识符(与代码内部逻辑匹配)。 -
--trainroot
/--testroot
:训练集和测试集的路径。 -
--max_epoches
:最大训练轮数(20轮)。
-
-
输出:模型权重保存为
checkpoints/stage1_checkpoint_trained_on_$DATASET.pth
,日志重定向到logs/stage1_log_on_$DATASET.txt
。
3. 生成伪掩码(PM)
python 2_generate_PM.py \ --dataroot datasets/$DATASETNAME \ --dataset $DATASET \ --weights checkpoints/stage1_checkpoint_trained_on_$DATASET.pth \ >> logs/stagePM_log_on_$DATASET.txt
-
参数解析:
-
--dataroot
:数据集根目录(包含训练和测试数据)。 -
--weights
:Stage1 训练好的分类模型权重路径。
-
-
作用:利用分类模型生成 3 种级别的伪分割掩码(如 CAM、边界增强掩码等)。
-
输出:伪掩码保存在数据集目录中,日志写入
logs/stagePM_log_on_$DATASET.txt
。
4. Stage2: 训练分割模型
python 3_train_stage2.py \ --dataset $DATASET \ --dataroot datasets/$DATASETNAME \ --epochs 30 \ --Is_GM False \ --resume_stage1 checkpoints/stage1_checkpoint_trained_on_$DATASET.pth \ --resume init_weights/deeplab-resnet.pth.tar \ >> logs/stage2_log_on_$DATASET.txt
-
参数解析:
-
--epochs
:训练轮数(30轮)。 -
--Is_GM
:是否使用全局模型(此处为False
)。 -
--resume_stage1
:加载 Stage1 的模型权重(用于初始化部分参数)。 -
--resume
:DeepLab v3+ 的预训练权重路径(ImageNet 预训练)。
-
-
作用:使用伪掩码训练 DeepLab v3+ 分割模型,实现像素级预测。
-
输出:分割模型权重保存,日志写入
logs/stage2_log_on_$DATASET.txt
。
潜在注意事项
-
路径依赖:需确保
datasets/
、checkpoints/
、logs/
和init_weights/
目录存在且结构正确。 -
预训练权重:
deeplab-resnet.pth.tar
需事先下载并放入init_weights/
。 -
GPU 支持:代码默认可能使用 GPU,如需 CPU 训练需查看 Python 代码内部是否支持。
-
日志监控:可通过
tail -f logs/stage1_log_on_$DATASET.txt
实时监控训练进度。
流程图
graph TD A[Stage1: 训练分类模型] --> B[生成伪掩码 PM] B --> C[Stage2: 训练分割模型]