MMSegmentation文档学习记录(一)(2)

目录

MMSegmentation训练与测试

(一)配置文件

1.配置文件结构

数据集(dataset),
模型(model),
训练策略(schedule)
运行时的默认设置(default runtime)
原始配置 (primitive)
在这里插入图片描述
配置文件命名风格:

{algorithm name}_{model component names [component1]_[component2]_[...]}_{training settings}_{training dataset information}_{testing dataset information}
'''
 {algorithm name}: 算法的名称,如 deeplabv3, pspnet 等。

 {model component names}: 算法中使用的组件名称,如主干(backbone)、解码头(head)等。例如,r50-d8 表示使用ResNet50主干网络,并使用主干网络的8倍下采样输出作为下一级的输入。

 {training settings}: 训练时的参数设置,如 batch size、数据增强(augmentation)、损失函数(loss)、学习率调度器(learning rate scheduler)和训练轮数(epochs/iterations)。例如: 4xb4-ce-linearlr-40K 意味着使用4个gpu,每个gpu4个图像,使用交叉熵损失函数(CrossEntropy),线性学习率调度程序,训练40K iterations。 一些缩写:

 {gpu x batch\_per\_gpu}: GPU数量和每个GPU的样本数。bN 表示每个GPU的batch size为N,如 8xb2 为8个gpu x 每个gpu2张图像的缩写。如果未提及,则默认使用 4xb4 。

 {schedule}: 训练计划,选项有20k,40k等。20k 和 40k 分别表示20000次迭代(iterations)和40000次迭代(iterations)。

 {training dataset information}: 训练数据集名称,如 cityscapes , ade20k 等,以及输入分辨率。例如: cityscapes-768x768 表示使用 cityscapes 数据集进行训练,输入分辨率为768x768 。

 {testing dataset information} (可选): 测试数据集名称。当您的模型在一个数据集上训练但在另一个数据集上测试时,请将测试数据集名称添加到此处。如果没有这一部分,则意味着模型是在同一个数据集上进行训练和测试的。
 '''


例如:

pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py
算法名_组件_训练参数4GPUxBatchszie=2_迭代40k_数据集_输入分辨率

这些都是用于训练和测试PSPNet的配置文件,使用MMEngine实现的Config来加载和解析它们。

from mmengine.config import Config

cfg = Config.fromfile('configs/pspnet/pspnet\_r50-d8\_4xb2-40k\_cityscapes-512x1024.py')
print(cfg.train_dataloader)

(二)使用预训练模型推理

1. 推理器MMSegInferencer
from mmseg.apis import MMSegInferencer
# 将模型加载到内存中
inferencer = MMSegInferencer(model='deeplabv3plus\_r18-d8\_4xb2-80k\_cityscapes-512x1024')
# 推理
inferencer('demo/demo.png', show=True)

使用 MMSegInferencer 来处理一个包含多张图片的 list:

images = [image1, image2, ...] # image1 可以是文件路径或 np.ndarray
inferencer(images, show=True, wait_time=0.5) # wait\_time 是延迟时间,0 表示无限

images = $IMAGESDIR
inferencer(images, show=True, wait_time=0.5)

inferencer(images, out_dir='outputs', img_out_dir='vis', pred_out_dir='pred')

2. 推理 API

mmseg.apis.init_model从配置文件初始化一个分割器。

from mmseg.apis import init_model

config_path = 'configs/pspnet/pspnet\_r50-d8\_4xb2-40k\_cityscapes-512x1024.py'
checkpoint_path = 'checkpoints/pspnet\_r50-d8\_512x1024\_40k\_cityscapes\_20200605\_003338-2966598c.pth'

# 初始化不带权重的模型
model = init_model(config_path)

# 初始化模型并加载权重
model = init_model(config_path, checkpoint_path)

# 在 CPU 上的初始化模型并加载权重
model = init_model(config_path, checkpoint_path, 'cpu')
'''
参数:

 config(str,Path 或 mmengine.Config)- 配置文件路径或配置对象。

 checkpoint(str,可选)- 权重路径。如果为 None,则模型将不会加载任何权重。

 device(str,可选)- CPU/CUDA 设备选项。默认为 ‘cuda:0’。

 cfg\_options(dict,可选)- 用于覆盖所用配置中的某些设置的选项。

返回值:

 nn.Module:构建好的分割器。

'''

mmseg.apis.inference_model使用分割器推理图像。

from mmseg.apis import init_model, inference_model

config_path = 'configs/pspnet/pspnet\_r50-d8\_4xb2-40k\_cityscapes-512x1024.py'
checkpoint_path = 'checkpoints/pspnet\_r50-d8\_512x1024\_40k\_cityscapes\_20200605\_003338-2966598c.pth'
img_path = 'demo/demo.png'


model = init_model(config_path, checkpoint_path)
result = inference_model(model, img_path)
'''
参数:

 model(nn.Module)- 加载的分割器

 imgs(str,np.ndarray 或 list[str/np.ndarray])- 图像文件或加载的图像

返回值:

 SegDataSample 或 list[SegDataSample]:
 !如果 imgs 是列表或元组,则返回相同长度的列表类型结果,否则直接返回分割结果。



SegDataSample 中的参数分为几个部分:

 gt\_sem\_seg(PixelData)- 语义分割的标注。

 pred\_sem\_seg(PixelData)- 语义分割的预测。

 seg\_logits(PixelData)- 模型最后一层的输出结果。

'''

mmseg.apis.show_result_pyplot在图像上可视化分割结果。

from mmseg.apis import init_model, inference_model, show_result_pyplot

config_path = 'configs/pspnet/pspnet\_r50-d8\_4xb2-40k\_cityscapes-512x1024.py'
checkpoint_path = 'checkpoints/pspnet\_r50-d8\_512x1024\_40k\_cityscapes\_20200605\_003338-2966598c.pth'
img_path = 'demo/demo.png'


# 从配置文件和权重文件构建模型
model = init_model(config_path, checkpoint_path, device='cuda:0')

# 推理给定图像
result = inference_model(model, img_path)

# 展示分割结果
vis_image = show_result_pyplot(model, img_path, result)

# 保存可视化结果,输出图像将在 `workdirs/result.png` 路径下找到
vis_iamge = show_result_pyplot(model, img_path, result, out_file='work\_dirs/result.png')

# 修改展示图像的时间,注意 0 是表示“无限”的特殊值
vis_image = show_result_pyplot(model, img_path, result, wait_time=5)

'''
参数:

 model(nn.Module)- 加载的分割器。

 img(str 或 np.ndarray)- 图像文件名或加载的图像。

 result(SegDataSample)- SegDataSample 预测结果。

 opacity(float)- 绘制分割图的不透明度。默认值为 0.5,必须在 (0,1] 范围内。

 title(str)- pyplot 图的标题。默认值为 ‘’。

 draw\_gt(bool)- 是否绘制 GT SegDataSample。默认为 True。

 draw\_pred(draws\_pred)- 是否绘制预测 SegDataSample。默认为 True。

 wait\_time(float)- 显示的间隔,0 是表示“无限”的特殊值。默认为 0。

 show(bool)- 是否展示绘制的图像。默认为 True。

 save\_dir(str,可选)- 为所有存储后端保存的文件路径。如果为 None,则后端存储将不会保存任何数据。

 out\_file(str,可选)- 输出文件的路径。默认为 None。

返回值:

 np.ndarray:通道为 RGB 的绘制图像。

注意: 如果当前设备没有图形用户界面,建议将 show 设置为 False,并指定 out\_file 或 save\_dir 来保存结果。如果您想在窗口上显示结果,则不需要特殊设置。
'''


img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

kzP0-1714414578383)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值