MMsegmentation教程 3:自定义数据流程

简介: MMsegmentation教程 3:自定义数据流程

数据流程的设计


按照通常的惯例,我们使用 DatasetDataLoader 做多线程的数据加载。Dataset 返回一个数据内容的字典,里面对应于模型前传方法的各个参数。

因为在语义分割中,输入的图像数据具有不同的大小,我们在 MMCV 里引入一个新的 DataContainer 类别去帮助收集和分发不同大小的输入数据。

更多细节,请查看这里


数据的准备流程和数据集是解耦的。通常一个数据集定义了如何处理标注数据(annotations)信息,而一个数据流程定义了准备一个数据字典的所有步骤。一个流程包括了一系列操作,每个操作里都把一个字典作为输入,然后再输出一个新的字典给下一个变换操作。


这些操作可分为数据加载 (data loading),预处理 (pre-processing),格式变化 (formatting) 和测试时数据增强 (test-time augmentation)。

下面的例子就是 PSPNet 的一个流程:

img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
crop_size = (512, 1024)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations'),
    dict(type='Resize', img_scale=(2048, 1024), ratio_range=(0.5, 2.0)),
    dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75),
    dict(type='RandomFlip', flip_ratio=0.5),
    dict(type='PhotoMetricDistortion'),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_semantic_seg']),
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(2048, 1024),
        # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75],
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),
            dict(type='RandomFlip'),
            dict(type='Normalize', **img_norm_cfg),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img']),
        ])
]


对于每个操作,我们列出它添加、更新、移除的相关字典域 (dict fields):


数据加载 Data loading


LoadImageFromFile

  • 增加: img, img_shape, ori_shape

LoadAnnotations

  • 增加: gt_semantic_seg, seg_fields


预处理 Pre-processing


Resize

  • 增加: scale, scale_idx, pad_shape, scale_factor, keep_ratio
  • 更新: img, img_shape, *seg_fields

RandomFlip

  • 增加: flip
  • 更新: img, *seg_fields

Pad

  • 增加: pad_fixed_size, pad_size_divisor
  • 更新: img, pad_shape, *seg_fields

RandomCrop

  • 更新: img, pad_shape, *seg_fields

Normalize

  • 增加: img_norm_cfg
  • 更新: img

SegRescale

  • 更新: gt_semantic_seg

PhotoMetricDistortion

  • 更新: img


格式 Formatting


ToTensor

  • 更新: 由 keys 指定

ImageToTensor

  • 更新: 由 keys 指定

Transpose

  • 更新: 由 keys 指定

ToDataContainer

  • 更新: 由 keys 指定

DefaultFormatBundle

  • 更新: img, gt_semantic_seg

Collect

  • 增加: img_meta (the keys of img_meta is specified by meta_keys)
  • 移除: all other keys except for those specified by keys


测试时数据增强 Test time augmentation

MultiScaleFlipAug


拓展和使用自定义的流程


  1. 在任何一个文件里写一个新的流程,例如 my_pipeline.py,它以一个字典作为输入并且输出一个字典
from mmseg.datasets import PIPELINES
@PIPELINES.register_module()
class MyTransform:
    def __call__(self, results):
        results['dummy'] = True
        return results


  1. 导入一个新类


from .my_pipeline import MyTransform


  1. 在配置文件里使用它


img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
crop_size = (512, 1024)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations'),
    dict(type='Resize', img_scale=(2048, 1024), ratio_range=(0.5, 2.0)),
    dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75),
    dict(type='RandomFlip', flip_ratio=0.5),
    dict(type='PhotoMetricDistortion'),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255),
    dict(type='MyTransform'),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_semantic_seg']),
]


相关文章
|
机器学习/深度学习 自然语言处理
大语言模型(LLM)框架及微调 (Fine Tuning)
大语言模型(LLM)框架及微调 (Fine Tuning)
904 0
|
2月前
|
Ubuntu 数据可视化 Linux
Ubuntu卸载软件:3种卸载方式
只卸载程序。如果你移除程序但保留配置文件,请输入以下命令: sudo apt-get remove <programname>
|
PyTorch 算法框架/工具
MMsegmentation教程 4: 自定义模型
MMsegmentation教程 4: 自定义模型
808 0
|
3月前
|
监控 安全 Windows
电脑频繁蓝屏怎么办?5个步骤解决
蓝屏(BSOD)是Windows系统严重错误的提示,常由硬件故障或系统问题引发。本文从蓝屏代码分析入手,提供排查步骤:检查内存、驱动、系统文件、硬盘及电源散热问题,并附安全模式修复方法,帮助用户解决频繁蓝屏困扰。
|
8月前
|
人工智能 安全 程序员
一文彻底搞清楚HarmonyOS元服务
本文介绍Harmony OS的元服务,这是一种轻量级应用程序形态,具备秒开直达、纯净清爽、服务相伴、即用即走等特性,支持多设备运行,提升服务获取效率。元服务开发流程包括创建项目、UI开发、真机调试、打包测试及上架发布。欢迎关注,一起成长!
1699 0
|
11月前
|
JavaScript 前端开发 开发工具
web项目规范配置(husky、eslint、lint-staged、commit)
通过上述配置,可以确保在Web项目开发过程中自动进行代码质量检查和规范化提交。Husky、ESLint、lint-staged和Commitlint共同作用,使得每次提交代码之前都会自动检查代码风格和语法问题,防止不符合规范的代码进入代码库。这不仅提高了代码质量,还保证了团队协作中的一致性。希望这些配置指南能帮助你建立高效的开发流程。
561 5
|
API 数据库 数据安全/隐私保护
蓝奏云直链获取在线解析网站源码
蓝奏云直链获取在线解析网站源码 蓝奏云链接解析 本地API接口 支持有无密码和短期直链和永久直链,同时还可以显示文件名和大小。 这个解析器无需数据库即可搭建,API接口已经本地化,非常简单易用。
482 2
蓝奏云直链获取在线解析网站源码
|
机器学习/深度学习 PyTorch TensorFlow
ONNX 与量化:提高模型效率
【8月更文第27天】随着人工智能技术的广泛应用,模型部署变得越来越重要。为了在资源受限的设备上运行复杂的机器学习模型,模型量化技术成为了一种有效的手段。Open Neural Network Exchange (ONNX) 作为一种开放格式,支持在不同框架之间交换训练好的模型,同时也支持模型量化。本文将探讨如何结合 ONNX 和模型量化技术来提高模型的效率,减少模型大小并加快推理速度。
2095 2
|
Python
AttributeError: module ‘numpy‘ has no attribute ‘int‘.
AttributeError: module ‘numpy‘ has no attribute ‘int‘.
598 0
|
NoSQL Linux 数据安全/隐私保护
轻松搭建Neo4j图数据库:一步步教你在Docker上安装Neo4j Community Server
轻松搭建Neo4j图数据库:一步步教你在Docker上安装Neo4j Community Server