81 lines
5.6 KiB
Markdown
Raw Normal View History

# 数据变化
- [数据变化](#数据变化)
- [数据变换概述](#数据变换概述)
- [MultiView 简介](#multiview-简介)
- [PackSelfSupInputs 简介](#packselfsupinputs-简介)
## 数据变换概述
在 [add_transforms](./add_transforms.md) 中我们介绍了如何构建 `Pipeline``Pipeline` 里有一系列的数据变换。MMSelfSup 中数据变换主要分为三类:
1. 处理数据用到的数据变换。[processing.py](https://github.com/open-mmlab/mmselfsup/blob/1.x/mmselfsup/datasets/transforms/processing.py) 中定义了独特的数据变换,比如`RandomCrop`, `RandomResizedCrop``RandomGaussianBlur`。我们也可以用其它仓库的数据变换,比如 MMCV 中的 `LoadImageFromFile`
2. 不同视角看同一照片的数据变换打包器。这个定义在 [wrappers.py](https://github.com/open-mmlab/mmselfsup/blob/1.x/mmselfsup/datasets/transforms/wrappers.py)。
3. 将数据变换使得数据能输入算法中。这个定义在 [formatting.py](https://github.com/open-mmlab/mmselfsup/blob/1.x/mmselfsup/datasets/transforms/formatting.py)。
总的来说,我们用的是如下的这些数据变换。我们将详细讨论最后两种数据变换。
| 类别 | 作用 |
| :-------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------: |
| [`BEiTMaskGenerator`](mmselfsup.datasets.BEiTMaskGenerator) | 为图像产生随机掩码,参考自 `BEiT` |
| [`SimMIMMaskGenerator`](mmselfsup.datasets.SimMIMMaskGenerator) | 产生随机块状掩码,参考自 `SimMIM` |
| [`ColorJitter`](mmselfsup.datasets.ColorJitter) | 随机改变图像亮度,对比度,饱和度和色调 |
| [`RandomCrop`](mmselfsup.datasets.RandomCrop) | 随机裁切图像 |
| [`RandomGaussianBlur`](mmselfsup.datasets.RandomGaussianBlur) | 随机高斯模糊,参考自, `SimCLR` |
| [`RandomResizedCrop`](mmselfsup.datasets.RandomResizedCrop) | 随机裁切图像,并调整大小到特定比例 |
| [`RandomResizedCropAndInterpolationWithTwoPic`](mmselfsup.datasets.RandomResizedCropAndInterpolationWithTwoPic) | 随机裁切图像,并调整大小到特定比例,可以给定不同的插值方法 |
| [`RandomSolarize`](mmselfsup.datasets.RandomSolarize) | 随机曝光调整,参考自 `BYOL` |
| [`RotationWithLabels`](mmselfsup.datasets.RotationWithLabels) | 旋转预测 |
| [`RandomPatchWithLabels`](mmselfsup.datasets.RandomPatchWithLabels) | 随机分块 |
| [`RandomRotation`](mmselfsup.datasets.RandomRotation) | 随机旋转图像 |
| [`MultiView`](mmselfsup.datasets.transforms.MultiView) | 多角度图像的封装器 |
| [`PackSelfSupInputs`](mmselfsup.datasets.PackSelfSupInputs) | 打包数据为可以送入算法的格式 |
## MultiView 简介
我们为一些算法定义了名为 [`MultiView`](mmselfsup.datasets.transforms.MultiView) 的多角度照片输入的封装器,比如 MoCo 系列SimCLRSwAV 等。在配置文件中,我们能这样定义:
```python
pipeline = [
dict(type='MultiView',
num_views=2,
transforms=[
[dict(type='Resize', scale=224),]
])
]
```
这意味着数据管道里面有两个角度。
我们也可以这样定义有不同角度的数据管道:
```python
pipeline = [
dict(type='MultiView',
num_views=[2, 6],
transforms=[
[
dict(type='Resize', scale=224)],
[
dict(type='Resize', scale=224),
dict(type='RandomSolarize')],
])
]
```
这意味着有两个数据管道,他们分别有两个角度和六个角度。在 [imagenet_mocov1.py](https://github.com/open-mmlab/mmselfsup/blob/1.x/configs/selfsup/_base_/datasets/imagenet_mocov1.py) 和 [imagenet_mocov2.py](https://github.com/open-mmlab/mmselfsup/blob/1.x/configs/selfsup/_base_/datasets/imagenet_mocov2.py) 和 [imagenet_swav_mcrop-2-6.py](https://github.com/open-mmlab/mmselfsup/blob/1.x/configs/selfsup/_base_/datasets/imagenet_swav_mcrop-2-6.py) 中有更多例子。
## PackSelfSupInputs 简介
我们定义了一个名为 [`PackSelfSupInputs`](mmselfsup.datasets.transforms.PackSelfSupInputs) 的类来将数据转换为能输入算法中的格式。这种转换通常在数据管道的最后,就像下面这样:
```python
train_pipeline = [
dict(type='LoadImageFromFile'),
dict(type='MultiView', num_views=2, transforms=[view_pipeline]),
dict(type='PackSelfSupInputs', meta_keys=['img_path'])
]
```