mmsegmentation基础使用学习笔记(二)——准备数据集&使用预训练模型推理

一、准备数据集 

文件路径:mmsegmentation\docs\zh_cn\user_guides\2_dataset_prepare.md

官方教程:https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/2_dataset_prepare.md

mmseg支持20+不同的数据集,下载好数据集后需要按规定的格式放进data路径下。

我需要使用自己的数据集,并不会用到官方数据集,所以使用自己数据集的部分会写到进阶的笔记中。

二、使用预训练模型推理

文件路径:mmsegmentation\docs\zh_cn\user_guides\3_inference.md

官方教程:https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/zh_cn/user_guides/3_inference.md

 在模型推理时,如果用命令行进行训练看 推理器 部分,如果用文件进行训练看 推理API 部分。

1、推理器

可以使用 MMSegInferencer 对单个图像执行推理:

>>> from mmseg.apis import MMSegInferencer

>>> # 将模型加载到内存中

>>> inferencer = MMSegInferencer(model='deeplabv3plus_r18-d8_4xb2-80k_cityscapes-512x1024')   ## model初始化##

>>> # 推理

>>> inferencer('demo/demo.png', show=True)  ## model初始化##

也可以用 MMSegInferencer 处理一个包含多张图片的list:

# 输入一个图片 list
>>> images = [image1, image2, ...] # image1 可以是文件路径或 np.ndarray
>>> inferencer(images, show=True, wait_time=0.5) ## model初始化##

# wait_time 是延迟时间,0 表示无限

# 或输入图像目录
>>> images = $IMAGESDIR
>>> inferencer(images, show=True, wait_time=0.5) ## model初始化##

# 保存可视化渲染彩色分割图和预测结果
# out_dir 是保存输出结果的目录,img_out_dir 和 pred_out_dir 为 out_dir 的子目录
# 以保存可视化渲染彩色分割图和预测结果
>>> inferencer(images, out_dir='outputs', img_out_dir='vis', pred_out_dir='pred') ## model初始化##

需要注意的是, MMSegInferencer 必须用model初始化,就如上面两块代码中所示。这里model可以是模型名称或一个config,甚至是配置文件的路径。如果输入模型名称,模型的权重将会自动下载,其他可输入的参数如下:

  • weights(str,可选)- 权重的路径。如果未指定,并且模型是元文件中的模型名称,则权重将从元文件加载。默认为 None。
  • classes(list,可选)- 输入类别用于结果渲染,由于分割模型的预测结构是标签索引的分割图,classes 是一个相应的标签索引的类别列表。若 classes 没有定义,可视化工具将默认使用 cityscapes 的类别。默认为 None。
  • palette(list,可选)- 输入调色盘用于结果渲染,它是对应分类的配色列表。若 palette 没有定义,可视化工具将默认使用 cityscapes 的调色盘。默认为 None。
  • dataset_name(str,可选)- 数据集名称或别名,可视化工具将使用数据集的元信息,如类别和配色,但 classes 和 palette 具有更高的优先级。默认为 None。
  • device(str,可选)- 运行推理的设备。如果无,则会自动使用可用的设备。默认为 None。
  • scope(str,可选)- 模型的作用域。默认为 'mmseg'。

MMSegInferencer 有4个用于可视化预测的参数,可以在初始化推理器时使用:

  • show(bool)- 是否弹出窗口显示图像。默认为 False。
  • wait_time(float)- 显示的间隔。默认值为 0。
  • img_out_dir(str)- out_dir 的子目录,用于保存渲染有色分割掩膜,因此如果要保存预测掩膜,则必须定义 out_dir。默认为 vis
  • opacity(int,float)- 分割掩膜的透明度。默认值为 0.8。

除此之外,在 MMSegmentation 可以列出所有模型名称:

>>> from mmseg.apis import MMSegInferencer
# models 是一个模型名称列表,它们将自动打印
>>> models = MMSegInferencer.list_models('mmseg')

2、推理API

(1)mmseg.apis.init_model——初始化

用推理器inferencer就是从命令行直接输入命令,为了方便可以从配置文件进行初始化,在python文件中把需要的模型路径、权重路径等参数写明,然后加载模型。

参数:

  • config(str,Path 或 mmengine.Config)- 配置文件路径或配置对象。
  • checkpoint(str,可选)- 权重路径。如果为 None,则模型将不会加载任何权重。
  • device(str,可选)- CPU/CUDA 设备选项。默认为 'cuda:0'。
  • cfg_options(dict,可选)- 用于覆盖所用配置中的某些设置的选项。

返回值:

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

示例:

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')

(2)mmseg.apis.inference_model——推理

在python文件中写明图路径、加载的模型,将返回分割结果并存放在result中。

参数:

  • model(nn.Module)- 加载的分割器
  • imgs(str,np.ndarray 或 list[str/np.ndarray])- 图像文件或加载的图像

返回值:

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

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

  • gt_sem_segPixelData)- 语义分割的标注。
  • pred_sem_segPixelData)- 语义分割的预测。
  • seg_logitsPixelData)- 模型最后一层的输出结果。

示例:

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)

(3)mmseg.apis.show_result_pyplot——可视化

通过前两步加载模型、推理图像后得到的分割结果可以可视化通过可视化api即可将分割结果展示、保存。

参数:

  • 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 的绘制图像。

示例:

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还会长的桔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值