mmlab中对video的数据处理

本文主要讲解mmlab中对video的数据提取与处理,具体来说是Video Segmentation的任务,输入为视频的一些帧,输出是对应的GT Mask,以如下实例进行讲解

1
2
3
4
5
6
7
8
9
10
11
12
train_pipeline = [
dict(type='LoadImageFromFile'),
dict(type='LoadAnnotations', reduce_zero_label=True),
dict(type='Resize', img_scale=(853, 480), ratio_range=(0.5, 2.0), process_clips=True),
dict(type='RandomCrop_clips', crop_size=crop_size, cat_max_ratio=0.75),
dict(type='RandomFlip_clips', prob=0.5),
dict(type='PhotoMetricDistortion_clips'),
dict(type='Normalize_clips', **img_norm_cfg),
dict(type='Pad_clips', size=crop_size, pad_val=0, seg_pad_val=255),
dict(type='DefaultFormatBundle_clips'),
dict(type='Collect', keys=['img', 'gt_semantic_seg']),
]

这是mmlab中的一个基本数据处理的pipeline,下面分别介绍以上出现方法,注意这里只介绍他们如何使用,并不在具体地代码层面进行解析

LoadImageFromFile

此参数较为简单,就是加载图片,加载完之后data数据有如下参数

img_info, ann_info, seg_fields, img_prefix, seg_prefix, filename, ori_filename, img, img_shape, ori_shape, pad_shape, scale_factor, img_norm_cfg

1
dict(type='LoadImageFromFile'),

LoadAnnotations

loadannotations和loadimage功能相同,只不过这里是加载了mask

  • reduce_zero_label: 有时候0类代表背景类,我们在预测时也会预测背景类,如果设为True表示忽略背景类,例如之前加上背景类是[0, 1, 2, 3]四类,如果设为True就是[0, 1, 2]三类,之前的123类变为012来代替
1
dict(type='LoadAnnotations', reduce_zero_label=True),

Resize

加载完image以及对应的seg mask之后,我们对其进行resize处理

  • process_clips: 此参数表示对视频还是对图片进行处理,这里设置为True表示对整个视频帧进行处理,比如我们取5帧,那么我们对这5帧同时resize处理
  • img_scale: 表示要在多少img尺度上进行缩放,这里设为(853, 480)表示如果缩放的话,在此基础上进行缩放
  • ratio_range: 缩放尺寸,在(0.5, 2.0)之间随机一个数字,乘上img_scale就是最后的尺寸大小

最后会保存缩放后的图片大小img_shape以及之前的大小ori_shape,并保存缩放因子scale_factor

1
dict(type='Resize', img_scale=(853, 480), ratio_range=(0.5, 2.0), process_clips=True),

这里区别不明显的原因是: 缩放的时候hw等比例缩放,所以放在这看不出区别

RandomCrop_clips

在图中,截取一个crop_size大小的区域,并且标记图像某一个类别的有效区域要占整幅图的比例小于cat_max_ratio

  • crop_size: 预先定义,这里定义为(480, 480)
  • cat_max_ratio: 某一个类别的有效标记区域占整幅图的比例要小于cat_max_ratio
1
dict(type='RandomCrop_clips', crop_size=crop_size, cat_max_ratio=0.75),

RandomFlip_clips

将图片进行翻转

  • prob: 以prob的概率对图片进行翻转
1
dict(type='RandomFlip_clips', prob=0.5),

PhotoMetricDistortion_clips

1
dict(type='PhotoMetricDistortion_clips'),

Normalize_clips

normalize对图像归一化

  • img_norm_cfg: 归一化参数,需提前设置
1
2
img_norm_cfg = dict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
dict(type='Normalize_clips', **img_norm_cfg),

Pad_clips

填充图片

  • size: 填充后图片的大小
  • pad_val: 图片填充像素,这里用0对图片进行填充补全
  • seg_pad_val: 对分割图进行填充,这里用255进行填充
1
dict(type='Pad_clips', size=crop_size, pad_val=0, seg_pad_val=255),

DefaultFormatBundle_clips

Collect

将其他信息,比如图像大小,缩放尺度等信息都归到img_metas属性中,并将keys中的属性单一归类

  • keys: 被收集为data字典中的键,其余的键都归为data中的img_metas中
1
dict(type='Collect', keys=['img', 'gt_semantic_seg']),