Files
Seg_Data_Server/Seg_All_In_One_SegModel/config.py
2026-05-20 15:05:35 +08:00

153 lines
8.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import torch
from pathlib import Path
# --- 1. 核心目录设置 (Core Directories) ---
# 使用 pathlib 进行路径管理,更现代、更健壮
HARDISK_DIR = Path('../Hardisk')
DATA_SETS_DIR = Path('../DataSet_Public_outputs') # 模型保存位置
PREDICT_ALL_BEST_MODELS_DIR = Path('../BestMode_Predict_Results_DataSet_Public') # 预测模型存储位置
# V1: 1_CholecSeg8k-13Type-1920x1080
# DATA_DIR = Path('../DataSet_Public/1_CholecSeg8k-13Type-1920x1080') # Path(__file__).parent.parent【有中文放弃了】 # 项目根目录 (假设 config.py 在 src/ 下)
# OUTPUTS_DIR = DATA_SETS_DIR / "1_CholecSeg8k-13Type-1920x1080_outputs-SegModel" # 所有输出文件的根目录 # train 中 Path(config.OUTPUTS_DIR / architecture)
# PREDICT_BEST_MODEL_DIR = PREDICT_ALL_BEST_MODELS_DIR / "1_CholecSeg8k-13Type-1920x1080_outputs-SegModel" # 最优模型位置 # train 中 Path(config.PREDICT_BEST_MODEL_DIR / architecture)
# # V22_AutoLaparo-10Type-1920x1080
# DATA_DIR = Path('../DataSet_Public/2_AutoLaparo-10Type-1920x1080') # Path(__file__).parent.parent【有中文放弃了】 # 项目根目录 (假设 config.py 在 src/ 下)
# OUTPUTS_DIR = DATA_SETS_DIR / "2_AutoLaparo-10Type-1920x1080_outputs-SegModel" # 所有输出文件的根目录 # train 中 Path(config.OUTPUTS_DIR / architecture)
# PREDICT_BEST_MODEL_DIR = PREDICT_ALL_BEST_MODELS_DIR / "2_AutoLaparo-10Type-1920x1080_outputs-SegModel" # 最优模型位置 # train 中 Path(config.PREDICT_BEST_MODEL_DIR / architecture)
# # V33_1_Endovis_2017-8Type-512x512
# DATA_DIR = Path('../DataSet_Public/3_1_Endovis_2017-8Type-512x512') # Path(__file__).parent.parent【有中文放弃了】 # 项目根目录 (假设 config.py 在 src/ 下)
# OUTPUTS_DIR = DATA_SETS_DIR / "3_1_Endovis_2017-8Type-512x512_outputs-SegModel" # 所有输出文件的根目录 # train 中 Path(config.OUTPUTS_DIR / architecture)
# PREDICT_BEST_MODEL_DIR = PREDICT_ALL_BEST_MODELS_DIR / "3_1_Endovis_2017-8Type-512x512_outputs-SegModel" # 最优模型位置 # train 中 Path(config.PREDICT_BEST_MODEL_DIR / architecture)
# # V43_2_Endovis_2018-8Type-512x512
# DATA_DIR = Path('../DataSet_Public/3_2_Endovis_2018-8Type-512x512') # Path(__file__).parent.parent【有中文放弃了】 # 项目根目录 (假设 config.py 在 src/ 下)
# OUTPUTS_DIR = DATA_SETS_DIR / "3_2_Endovis_2018-8Type-512x512_outputs-SegModel" # 所有输出文件的根目录 # train 中 Path(config.OUTPUTS_DIR / architecture)
# PREDICT_BEST_MODEL_DIR = PREDICT_ALL_BEST_MODELS_DIR / "3_2_Endovis_2018-8Type-512x512_outputs-SegModel" # 最优模型位置 # train 中 Path(config.PREDICT_BEST_MODEL_DIR / architecture)
# # V54_Dresden-11Type-512x512
# DATA_DIR = Path('../DataSet_Public/4_Dresden-11Type-512x512') # Path(__file__).parent.parent【有中文放弃了】 # 项目根目录 (假设 config.py 在 src/ 下)
# OUTPUTS_DIR = DATA_SETS_DIR / "4_Dresden-11Type-512x512_outputs-SegModel" # 所有输出文件的根目录 # train 中 Path(config.OUTPUTS_DIR / architecture)
# PREDICT_BEST_MODEL_DIR = PREDICT_ALL_BEST_MODELS_DIR / "4_Dresden-11Type-512x512_outputs-SegModel" # 最优模型位置 # train 中 Path(config.PREDICT_BEST_MODEL_DIR / architecture)
# # Test_V15_Predict_Video
DATA_DIR = Path('../DataSet_Public/5_Predict_Video/LC_Video_1') # Path(__file__).parent.parent【有中文放弃了】 # 项目根目录 (假设 config.py 在 src/ 下)
OUTPUTS_DIR = None # 所有输出文件的根目录 # train 中 Path(config.OUTPUTS_DIR / architecture)
PREDICT_BEST_MODEL_DIR = PREDICT_ALL_BEST_MODELS_DIR / "LC_Video_1_outputs-SegModel" # 最优模型位置 # train 中 Path(config.PREDICT_BEST_MODEL_DIR / architecture)
# --- 2. 训练与验证数据路径 (Training & Validation Paths for train.py) ---
# 在 train.py 中已使用
TRAIN_IMAGE_DIR = DATA_DIR / "images" / "train"
TRAIN_MASK_DIR = DATA_DIR / "labels_GT" / "train"
VAL_IMAGE_DIR = DATA_DIR / "images" / "val" # TODO "val_images"
VAL_MASK_DIR = DATA_DIR / "labels_GT" / "val" # TODO "val_masks"
# --- 3. 预测数据路径 (Prediction Paths for predict.py) ---
TEST_IMAGE_DIR = DATA_DIR / "images" / "val" # 测试图像目录 # TODO "test_images"
TEST_MASK_DIR = DATA_DIR / "labels_GT" / "val" # 测试掩码目录 (用于评估) # TODO "test_masks"
# --- 4. 输出文件与目录路径 (Output Files & Directories) ---
RAW_MASK_FOLDER = "predicted_raw_masks" # 存放预测出的单通道原始掩码
ANALYSIS_RESULTS_FOLDER = "prediction_analysis" # 存放对比图、曲线和指标CSV
# 训练过程中的输出文件
BEST_MODEL_SAVE_NAME = "best_model.pth"
METRICS_CSV_NAME = "training_metrics.csv"
# --- 5. 模型与数据参数 (Model & Data Parameters) ---
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
# --- 5.1. 【新增】模型选择与参数化配置 ---
# ※ 不定义训练用模型在train、predict中定义 ※
# 这是一个“配置库”,存放了所有模型的参数设置 # 具体请参考: https://smp.readthedocs.io/en/latest/models.html
ALL_MODEL_CONFIGS = {
'Unet': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
'decoder_channels': (256, 128, 64, 32, 16),
'decoder_attention_type': None, # 可选 'scse'
},
'UnetPlusPlus': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
'decoder_channels': (256, 128, 64, 32, 16),
'decoder_attention_type': None, # 可选 'scse'
},
'FPN': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'PSPNet': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'DeepLabV3': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'DeepLabV3Plus': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'Linknet': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'MAnet': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'PAN': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'UPerNet': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'Segformer': {
'encoder_name': 'resnet34',
'encoder_weights': 'imagenet',
},
'DPT': {
'encoder_name': 'tu-vit_base_patch16_224.augreg_in21k',
'encoder_weights': 'imagenet',
}
}
SEG_MODE = "multiclass" # 分割模式:'multiclass' 或 'multilabel'
# TODO 评估参数排除项:在计算评估指标 (如 IoU, F1-score) 时要忽略的类别列表。 TODO
EVALUATION_CLASSES_TO_IGNORE = [] # 如果列表为空 [], 则评估所有类别。
# EVALUATION_CLASSES_TO_IGNORE = ['background'] # 例如,设置为 ['background'] 将在计算总体指标时排除背景类。
IGNORE_INDEX = -100 # 当不包含背景时,掩码中背景像素的值,损失函数会忽略它
# V11_CholecSeg8k-13Type-1920x1080
CLASSES = ['background', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] # 根据您的数据集修改
CLASS_RGB_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] # 根据您的数据集修改
# V22_AutoLaparo-10Type-1920x1080
# CLASSES = ['background', '1', '2', '3', '4', '5', '6', '7', '8', '9'] # 根据您的数据集修改
# CLASS_RGB_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 根据您的数据集修改
# V33_1_Endovis_2017-8Type-512x512
# CLASSES = ['background', '1', '2', '3', '4', '5', '6', '7'] # 根据您的数据集修改
# CLASS_RGB_VALUES = [0, 1, 2, 3, 4, 5, 6, 7] # 根据您的数据集修改
# V43_2_Endovis_2018-8Type-512x512
# CLASSES = ['background', '1', '2', '3', '4', '5', '6', '7'] # 根据您的数据集修改
# CLASS_RGB_VALUES = [0, 1, 2, 3, 4, 5, 6, 7] # 根据您的数据集修改
# V54_Dresden-11Type-512x512
# CLASSES = ['background', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] # 根据您的数据集修改
# CLASS_RGB_VALUES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 根据您的数据集修改
# 图像尺寸
IMAGE_HEIGHT = 256 # 512
IMAGE_WIDTH = 256 # 512
# --- 6. 训练超参数 (Training Hyperparameters) ---
BATCH_SIZE = 16
NUM_WORKERS = 8
EPOCHS = 300
LEARNING_RATE = 1e-4 # 1e-3 # MANet_降低学习率至 1e-4
WEIGHT_DECAY = 1e-4 # L2 正则化权重衰减
PIN_MEMORY = True # 是否将数据加载到锁页内存中以加速传输到 GPU
FBETA_BETA = 1.0 # F-beta score 的 beta 值。beta=1 等同于 F1-score
EARLY_STOPPING_PATIENCE = 100 # 早停机制的耐心值
CKPT_SAVE_INTERVAL = 10 # 每隔多少轮保存一次检查点模型