2023-01-04 11:26:25 +08:00
|
|
|
|
# 数据变化
|
|
|
|
|
|
|
|
|
|
- [数据变化](#数据变化)
|
|
|
|
|
- [数据变换概述](#数据变换概述)
|
|
|
|
|
- [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 系列,SimCLR,SwAV 等。在配置文件中,我们能这样定义:
|
|
|
|
|
|
|
|
|
|
```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'])
|
|
|
|
|
]
|
|
|
|
|
```
|