Shortcuts

数据处理高级配置

处理链

通过HandlerChain可以串行的组合多个数据处理模块,每个模块的输出覆盖输入的内容后,会作为下一个模块的输入。

Select Parameters

比如常见的图像处理:

from rainbowneko.data.handler import HandlerChain, ImageHandler, LoadImageHandler
from rainbowneko.data import FixedBucket
from torchvision import transforms as T

handler = HandlerChain(
    load=LoadImageHandler(),
    bucket=FixedBucket.handler,  # bucket 会自带一些处理模块
    image=ImageHandler(transform=T.Compose([
        T.RandomCrop(size=32, padding=4),
        T.RandomHorizontalFlip(),
        T.ToTensor(),
        T.Normalize(mean=[0.4914, 0.4822, 0.4465], std=[0.2023, 0.1994, 0.2010]),
    ]),
    )
),

处理组

通过HandlerChain可以并行的组合多个数据处理模块,数据输入到每个模块,并将它们的输出加起来作为输出。

Select Parameters

比如读取图像进行不同的处理,放入不同的变量中:

from rainbowneko.data.handler import HandlerGroup, HandlerChain, ImageHandler, LoadImageHandler

handler = HandlerChain(
    load=LoadImageHandler(),
    image=HandlerGroup(
        weak=ImageHandler(..., key_map_out=('image -> image_weak',)),
        strong=ImageHandler(..., key_map_out=('image -> image_strong',)),
    )
),

随机种子同步处理

在某些场景中,会需要多个处理模块使用相同的随机种子。比如图像超分任务,LR和HR图像要经过相同的随机剪裁。这种时候可以使用SyncHandler:

from rainbowneko.data.handler import SyncHandler, ImageHandler

SyncHandler(
    LR=ImageHandler(...),
    HR=ImageHandler(...),
)

数据流控制

Handler中可以进行数据流的控制,可以指定输入输出数据的流向。通过key_map_inkey_map_out可以控制输入输出的流向:

ImageHandler(..., , key_map_in=('image -> image',), key_map_out=('image -> image_weak',))

小技巧

如果输入是dict或者list的嵌套,比如{'data': {'image': img, 'label': label}},可以使用('data.image -> image', 'data.label -> label') 这种方式来指定输入的流向。

{'data':[img, label]}这样的,可以通过索引来指定('data.0 -> image', 'data.1 -> label')

输出也可以用类似的操作('image -> data.image', 'label -> data.label')