P6_MMSegmentation训练语义分割深度学习算法
6.1【G】训练语义分割模型
1.跑通代码
python tools/train.py Zihao-Configs/ZihaoDataset_FastSCNN_20230818.py
由于jupyter演示的代码模型太大,换了轻量级的FastSCNN_20230818.py且改小了各种参数才跑通
2.修改参数如下
当前配置的 batch_size=4、num_workers>0 与 GTX 1650 显存 + Windows 多进程兼容性不匹配,需针对性修改以解决之前的页面文件不足和 worker 崩溃问题
(1)调整 DataLoader 多进程(Windows 必改)
Windows 下 num_workers>0 易触发崩溃,同时 persistent_workers=True 会额外占用内存,统一修改:
点击查看代码
# 训练数据加载器
train_dataloader = dict(batch_size=2, # 从4降至2,平衡显存占用与BatchNorm需求(≥2即可)dataset=dict(...), # 保持原有dataset配置不变num_workers=0, # 禁用多进程,避免worker崩溃persistent_workers=False, # num_workers=0时必须设为Falsesampler=dict(shuffle=True, type='InfiniteSampler'))# 验证数据加载器
val_dataloader = dict(batch_size=1,dataset=dict(...), # 保持原有dataset配置不变num_workers=0, # 禁用多进程persistent_workers=False,sampler=dict(shuffle=False, type='DefaultSampler'))# 测试数据加载器
test_dataloader = dict(batch_size=1,dataset=dict(...), # 保持原有dataset配置不变num_workers=0, # 禁用多进程persistent_workers=False,sampler=dict(shuffle=False, type='DefaultSampler'))
(2)优化模型输入尺寸(适配 GTX 1650 显存)
512x512 裁剪尺寸 +batch_size=2 对 4G 显存压力较大,适当减小以避免显存溢出:
点击查看代码
# 1. 减小裁剪尺寸(从512x512改为384x384)
crop_size = (384, 384)# 2. 同步修改 train_pipeline 中的 RandomCrop
train_pipeline = [dict(type='LoadImageFromFile'),dict(type='LoadAnnotations'),dict(keep_ratio=True,ratio_range=(0.5, 2.0),scale=(1536, 768), # 从2048x1024降至1536x768,减少缩放后显存占用type='RandomResize'),dict(cat_max_ratio=0.75, crop_size=crop_size, type='RandomCrop'), # 用新的裁剪尺寸dict(prob=0.5, type='RandomFlip'),dict(type='PhotoMetricDistortion'),dict(type='PackSegInputs'),
]# 3. 同步修改 data_preprocessor 的 size(从512x1024改为384x768)
data_preprocessor = dict(bgr_to_rgb=True,mean=[123.675, 116.28, 103.53],pad_val=0,seg_pad_val=255,size=(384, 768),std=[58.395, 57.12, 57.375],type='SegDataPreProcessor')# 4. 同步修改 model 内的 data_preprocessor(与全局保持一致)
model = dict(data_preprocessor=dict(bgr_to_rgb=True,mean=[123.675, 116.28, 103.53],pad_val=0,seg_pad_val=255,size=(384, 768), # 改为384x768std=[58.395, 57.12, 57.375],type='SegDataPreProcessor'),# 其他 model 配置保持不变
)
(3)调整验证 / 测试的缩放尺寸(同步优化)
避免验证时加载过大尺寸图像导致内存压力:
点击查看代码
# 验证数据加载器的 pipeline
val_dataloader = dict(dataset=dict(pipeline=[dict(type='LoadImageFromFile'),dict(keep_ratio=True, scale=(1536, 768), type='Resize'), # 从2048x1024降至1536x768dict(type='LoadAnnotations'),dict(type='PackSegInputs'),],# 其他 dataset 配置不变),# 其他 dataloader 配置不变
)# 测试 pipeline
test_pipeline = [dict(type='LoadImageFromFile'),dict(keep_ratio=True, scale=(1536, 768), type='Resize'), # 从2048x1024降至1536x768dict(type='LoadAnnotations'),dict(type='PackSegInputs'),
]# 测试数据加载器的 pipeline
test_dataloader = dict(dataset=dict(pipeline=[dict(type='LoadImageFromFile'),dict(keep_ratio=True, scale=(1536, 768), type='Resize'), # 从2048x1024降至1536x768dict(type='LoadAnnotations'),dict(type='PackSegInputs'),],# 其他 dataset 配置不变),# 其他 dataloader 配置不变
)
3.运行成果
生成一个以日期命名的文件夹
6.2【H1】可视化训练日志-训练过程总体评估指标
训练模型时在work_dirs目录生成记录训练日志,解析其中损失函数、评估指标等信息,并可视化。
1.设置Matplotlib中文字体
2.进入MMSegmentation主目录
3.导入工具包
4.载入训练日志
换成自己训练出来的时间的文件夹 scalers.json文件
训练集、测试集
5.导出训练日志表格
导出到图表文件夹,变成两个csv文件
6.可视化辅助函数
7.训练集损失函数
8.训练集准确率
Acc_seg
训练集准确率在稳步提升
9.测试集评估指标
如果训练集的评估指标稳步提升,测试集的评估指标先升后降,那就说明发生了过拟合
6.3【H2】可视化训练日志-训练过程各类别评估指标
1.设置Matplotlib中文字体
2.可视化辅助函数
3.进入MMSegmentation主目录
这次要解析.log日志文件
4.导入工具包
5.类别列表
6.载入日志文件
7.横轴-训练迭代次数
每隔500个记录一次
8.定义正则表达式
匹配表格里面的信息
9.查看某一类别的评估指标 IoU Acc Dice Fscore Precision Recall
x的元素个数,应和metrics_json [each_class] [' metrics ']元素个数一致,绘图才能成功
让x的元素个数80和真实的日志如这个red的类别的日志个数一样即可
10.查看每个类别的评估指标 IoU Acc Dice Fscore Precision Recall
写一个循环遍历,
6.4【J】测试集性能评估
1.PSPNet-测试集精度指标
(1)前面
!python tools/train.py daiyali-Configs/ZihaoDataset_FastSCNN_20230818.py
即训练train.py
现在是
!python tools/test.py daiyali-Configs/ZihaoDataset_FastSCNN_20230818.py ./work_dirs/ZihaoDataset-FastSCNN/iter_30000.pth
即测试集test.py
(2)或者运行:
把"D:\DeepLearning\Learn_SAM\mmsegmentation\work_dirs\ZihaoDataset-FastSCNN\best_mIoU_iter_24000.pth"路径下训练得到的.pth文件重命名为Zihao_FastSCNN.pth,并剪切到主目录下的checkpoint文件夹里
运行代码如下(up主用的这个):
!python tools/test.py daiyali-Configs/ZihaoDataset_FastSCNN_20230818.py/checkpoint/Zihao_FastSCNN.pth
即先指定config配置文件,再指定checkpoint权重文件
(3)运行成果
在work_dirs文件夹里面生成一个以日期和时间命名的文件夹:
这个日期文件夹里面应该生成一个.log文件、一个json文件(测试的指标都保存在了这个json文件里面)和一个vis_data文件夹(里面有.py文件和两个json文件),但是我的文件夹下面生成的是vis_data(里面只有.py文件)、一个.log文件和一个.json文件
即:
"D:\DeepLearning\Learn_SAM\mmsegmentation\work_dirs\ZihaoDataset-FastSCNN\20251109_103007\20251109_103007.log"
"D:\DeepLearning\Learn_SAM\mmsegmentation\work_dirs\ZihaoDataset-FastSCNN\20251109_103007\vis_data"
"D:\DeepLearning\Learn_SAM\mmsegmentation\work_dirs\ZihaoDataset-FastSCNN\20251109_103007\20251109_103007.json"
2.速度指标-FPS
测试集至少要有200张图片,否则跑不出分数
特别注意,在同一个benchmark上面对比性能指标,才有意义
而此处西瓜数据集只有87张图片,无法进行速度指标测试
【抛开baseline谈精度都是耍流氓】
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/986070.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!