1. 下载相关文件
下载的时候参考ipynb文件中的路径,保存的时候要与教程的路径要一致。
2. UNet运行
import os
os.chdir('mmsegmentation')
from mmengine import Config
cfg = Config.fromfile('./configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py')
dataset_cfg = Config.fromfile('./configs/_base_/datasets/ZihaoDataset_pipeline.py')
cfg.merge_from_dict(dataset_cfg)
# 类别个数
NUM_CLASS = 6
cfg.model.data_preprocessor.size = cfg.crop_size
cfg.model.data_preprocessor.test_cfg = dict(size_divisor=128)
# 单卡训练时,需要把 SyncBN 改成 BN
cfg.norm_cfg = dict(type='BN', requires_grad=True) # 只使用GPU时,BN取代SyncBN
cfg.model.backbone.norm_cfg = cfg.norm_cfg
cfg.model.decode_head.norm_cfg = cfg.norm_cfg
cfg.model.auxiliary_head.norm_cfg = cfg.norm_cfg
# 模型 decode/auxiliary 输出头,指定为类别个数
cfg.model.decode_head.num_classes = NUM_CLASS
cfg.model.auxiliary_head.num_classes = NUM_CLASS
# 训练 Batch Size
cfg.train_dataloader.batch_size = 4
# 结果保存目录
cfg.work_dir = './work_dirs/ZihaoDataset-UNet'
# 模型保存与日志记录
cfg.train_cfg.max_iters = 40000 # 训练迭代次数
cfg.train_cfg.val_interval = 500 # 评估模型间隔
cfg.default_hooks.logger.interval = 100 # 日志记录间隔
cfg.default_hooks.checkpoint.interval = 2500 # 模型权重保存间隔
cfg.default_hooks.checkpoint.max_keep_ckpts = 1 # 最多保留几个模型权重
cfg.default_hooks.checkpoint.save_best = 'mIoU' # 保留指标最高的模型权重
# 随机数种子
cfg['randomness'] = dict(seed=0)
# 打印config配置文件查看
print(cfg.pretty_text)
# 保存最终的config配置文件
cfg.dump('Zihao-Configs/ZihaoDataset_UNet_20230712.py')
这里需要改动一些文件路径,因为教程是在云平台运行的,且用的是notebook,我这里是在本地pycharm运行的。
-
将
cfg = Config.fromfile('./configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py')
修改为cfg = Config.fromfile('mmsegmentation/configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py')
。 -
dataset_cfg = Config.fromfile('./configs/*base*/datasets/ZihaoDataset_pipeline.py')
同理。 -
将
cfg.work_dir = './work_dirs/ZihaoDataset-UNet'
修改为cfg.work_dir = 'work_dirs/ZihaoDataset-UNet'
,同时自己在根目录下新建一个work_dirs
文件夹。 -
cfg.dump('Zihao-Configs/ZihaoDataset_UNet_20230712.py')
同理,需要自己新建一个Zihao-Configs
文件夹。
"""
==========================================
@author: Seaton
@Time: 2023/8/16:16:02
@IDE: PyCharm
@Summary: 准备config配置文件、数据集和pipeline
==========================================
"""
from mmengine import Config
cfg = Config.fromfile('mmsegmentation/configs/unet/unet-s5-d16_fcn_4xb4-160k_cityscapes-512x1024.py')
dataset_cfg = Config.fromfile('mmsegmentation/configs/_base_/datasets/ZihaoDataset_pipeline.py')
cfg.merge_from_dict(dataset_cfg)
# 类别个数
NUM_CLASS = 6
cfg.model.data_preprocessor.size = cfg.crop_size
cfg.model.data_preprocessor.test_cfg = dict(size_divisor=128)
# 单卡训练时,需要把 SyncBN 改成 BN
cfg.norm_cfg = dict(type='BN', requires_grad=True) # 只使用GPU时,BN取代SyncBN
cfg.model.backbone.norm_cfg = cfg.norm_cfg
cfg.model.decode_head.norm_cfg = cfg.norm_cfg
cfg.model.auxiliary_head.norm_cfg = cfg.norm_cfg
# 模型 decode/auxiliary 输出头,指定为类别个数
cfg.model.decode_head.num_classes = NUM_CLASS
cfg.model.auxiliary_head.num_classes = NUM_CLASS
# 训练 Batch Size
cfg.train_dataloader.batch_size = 4
# 结果保存目录
cfg.work_dir = 'mmsegmentation/work_dirs/ZihaoDataset-UNet'
# 模型保存与日志记录
cfg.train_cfg.max_iters = 40000 # 训练迭代次数
cfg.train_cfg.val_interval = 500 # 评估模型间隔
cfg.default_hooks.logger.interval = 100 # 日志记录间隔
cfg.default_hooks.checkpoint.interval = 2500 # 模型权重保存间隔
cfg.default_hooks.checkpoint.max_keep_ckpts = 1 # 最多保留几个模型权重
cfg.default_hooks.checkpoint.save_best = 'mIoU' # 保留指标最高的模型权重
# 随机数种子
cfg['randomness'] = dict(seed=0)
print(cfg.pretty_text)
# 保存最终的config配置文件
cfg.dump('mmsegmentation/Zihao-Configs/ZihaoDataset_UNet_20230712.py')
至此为止,程序就可以跑通了,可以正常打印config文件的内容和保存ZihaoDataset_UNet_20230712.py
文件。