【pyslowfast 库 Kinetics 类踩坑 及 PIL 模块 ImageEnhance, ImageOps的使用】

本文讲述了如何在使用pyslowfast将图像转为高质量H264视频时,通过调整Kinetics数据增强参数,特别是利用PIL模块的ImageEnhance功能实现自定义数据增强,解决视频质量与原图无变化的问题。
摘要由CSDN通过智能技术生成

问题背景:

书接上会,python 图像转视频 并保持视频高质量(h264)及 方法综合列举-CSDN博客

图像转换为视频之后,假借与视频后端torchvision_decode,pyslowfast库包含了这一方法的实现,而为视频现成提供的类 Kinetics 便是 最先需要继承的,以此来构造合适的dataloader。


问题描述

在使用 Kinetics 其中的数据增强的同时手动 plt 以观察 效果 ,发现与原图并无变化


解决过程及问题成因:

仔细参看该类中源码

def __init__(
    self,
    。。。省略
    # other parameters
    enable_multi_thread_decode=False,
    use_offset_sampling=True,
    inverse_uniform_sampling=False,
    num_retries=10,
    # pretrain augmentation
    repeat_aug=1,
    # aa_type="rand-m7-n4-mstd0.5-inc1",
    aa_type="rand-m5-n2",#-inc1",
    pretrain_jitter_scales_relative=[0.08, 1.0],
    pretrain_jitter_aspect_relative=[0.75, 1.3333],
    pretrain_rand_flip=True,
    pretrain_rand_erase_prob=0.25,
    pretrain_rand_erase_mode="pixel",
    pretrain_rand_erase_count=1,
    pretrain_rand_erase_split=False,
    rand_aug=False,
):

参数randaug 指定了 是否使用数据增强

而其中列举的方法很多:

[ "AutoContrast", "Equalize", "Invert",  "Rotate",  "Posterize",  "Solarize",
    "SolarizeAdd", "Color", "Contrast", "Brightness", "Sharpness",  "ShearX",
    "ShearY",  "TranslateXRel","TranslateYRel"....手动省略]

大多来源于 ImageOps 和 ImageEnhance,具体使用看很多博客给出的大都相同 且 部分相同内容居然仍要收费,离谱。。。

这里直接给出 其官方文档ImageEnhance 模块 - Pillow (PIL Fork) 10.0.1 文档

不可能有博客比这个官方文档还详细,其中可自行寻找 ImageOps 和 ImageEnhance 的具体参数和使用方法,大家都很聪明只要有 文档 资源 大家都能学会,因此这里不繁琐列举所有例子。

我继而 通过 rand_augment_transform(config_str, hparams)方法 指定我需要的 数据增强方法,因为博主使用无监督方式所以有一定依赖, 在之后发现 有些方法居然 在使用前后 plot 出来的样式没有变化,第一反应是像素级别的变化肉眼无法看出,但是通过选取 更多的 num_layers 来增加变化的类别个数依然没有变化 我开始质疑是不是我自己指定出现问题

尤其是在这些类别中:

"Color": _enhance_level_to_arg,
"ColorIncreasing": _enhance_increasing_level_to_arg,
"Contrast": _enhance_level_to_arg,
"ContrastIncreasing": _enhance_increasing_level_to_arg,
"Brightness": _enhance_level_to_arg,
"BrightnessIncreasing": _enhance_increasing_level_to_arg,
"Sharpness": _enhance_level_to_arg,
"SharpnessIncreasing": _enhance_increasing_level_to_arg,


解决方案:

最后发现 在我给出的:参数 :rand-m9-n3-mstd0.5'中

rand-m9-n3-mstd0.5' results in RandAugment with magnitude 9, num_layers 3, magnitude_std 0.5

# rand-m5-n2   m这个 值给我自己是列出的是  5 导致在如

ImageEnhance.Brightness(img).enhance(factor)

中 factor 计算由下函数得出,且 level 为 magnitude  的情况下

def _enhance_level_to_arg(level, _hparams):
    # range [0.1, 1.9]
    return ((level / _MAX_LEVEL) * 1.8 + 0.1,) # _MAX_LEVEL = 10 

返回的 factor 大小 衡为 1 ,根据文档:一个 enhancement factor 值为0.0时图像为模糊,系数为1.0时为原始图像,系数为2.0时为锐化图像。可知就是不会发生变化

因此在 类别选择中使用如下

"ColorIncreasing",
"ContrastIncreasing",
"BrightnessIncreasing",
"SharpnessIncreasing", 等类别 其 factor 参数 计算方法如下:
def _enhance_increasing_level_to_arg(level, _hparams):
    level = (level / _MAX_LEVEL) * 0.9
    level = 1.0 + _randomly_negate(level)
    return (level,)

可使其输出值固定发生变化


结论及重点:

本文 详细介绍了使用pyslowfast 使用 Kinetics 构建 dataloader 的时需要用到 自定义数据增强的方法,并且列举了数据增强的库实现方式:PIL 模块 ImageEnhance, ImageOps


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值