Augmentation

原图:

Flipping 翻转



Grayscale

Equalize 均衡直方图

Posterize 减少颜色通道位数

Cropping

Rotation

Translation

Noise injection



Hue 色调

Brightness

Saturation

Contrast

Erasing 抹去

Augmix

代码

config.json:


{
"Crop": {
"size": [100, 200]
},
"Rotate": {
"degrees": 20
},
"Translate": {
"translate": [0.3, 0.3]
},
"Scale": {
"scale": [0.7, 1.3]
},
"Shear": {
"shear": [10, 100, 10, 100]
},
"Hflip": {},
"Vflip": {},
"Equalize": {
"mask": null
},
"Posterize": {
"bits" : 2
},
"Grayscale": {
"num_output_channels": 1
},
"Normalnoise": {
"loc": 0.0,
"scale": 0.1
},
"Uniformnoise": {
"alpha": 0.2
},
"Contrast": {
"contrast": 0.8
},
"Brightness": {
"brightness": 0.7
},
"Saturation": {
"saturation": 0.7
},
"Hue": {
"hue": 0.5
},
"Erase": {
"value": 100
} }

"""
ops.py
""" import torch
import torchvision.transforms.functional as F
import PIL.ImageOps
import random
from torchvision import transforms
import scipy.stats
from collections.abc import Iterable def special(cls, name, *args, **kwargs):
class Newclass(cls):
def __init__(self, *newargs, **newkwargs):
newargs += args
newkwargs.update(kwargs)
super(Newclass, self).__init__(*newargs, **newkwargs)
Newclass.__name__ = name
return Newclass class Hflip:
"""
水平翻转
"""
def __call__(self, img):
return F.hflip(img) class Vflip:
"""
上下翻转
"""
def __call__(self, img):
return F.vflip(img) class Equalize:
"""
均衡图像直方图
"""
def __init__(self, mask):
self.mask = mask def __call__(self, img):
return PIL.ImageOps.equalize(img, self.mask) class Posterize:
"""
减少每个颜色通道的位数
"""
def __init__(self, bits):
self.bits = bits def __call__(self, img):
return PIL.ImageOps.posterize(img, self.bits) class Grayscale:
def __init__(self, num_output_channels=1):
self.num_output_channels = num_output_channels def __call__(self, img):
return F.to_grayscale(img, self.num_output_channels) class Normalnoise:
def __init__(self, loc, scale):
self.loc = loc
self.scale = scale def __call__(self, img):
img = F.to_tensor(img)
img += (torch.randn_like(img) + self.loc) * self.scale
img = torch.clamp(img, 0., 1.)
return F.to_pil_image(img) class Uniformnoise:
def __init__(self, alpha):
if alpha < 0 or alpha > 1:
raise ValueError("alpha should be in [0, 1]...")
self.alpha = alpha def __call__(self, img):
img = F.to_tensor(img)
img += torch.rand_like(img) * self.alpha
img = torch.clamp(img, 0., 1.)
return F.to_pil_image(img) class Erase: def __init__(self, value):
self.value = value def __call__(self, img):
img = F.to_tensor(img)
H, W = img.size()[-2:]
lui = torch.randint(0, H, (1,)).item()
luj = torch.randint(0, W, (1,)).item()
rbi = torch.randint(lui, H, (1,)).item()
rbj = torch.randint(luj, W, (1,)).item()
h = rbj - luj
w = rbi - lui return F.to_pil_image(F.erase(img, lui, luj, h, w, 0)) class Perspective: def __init__(self, startpoints, endpoints, interpolation=3):
self.startpoints = startpoints
self.endpoints = endpoints
self.interpolation = interpolation def __call__(self, img):
return F.perspective(img, self.startpoints,
self.endpoints, self.interpolation) Translate = special(transforms.RandomAffine, "Translate", degrees = 0)
Scale = special(transforms.RandomAffine, "Scale", degrees = 0)
Shear = special(transforms.RandomAffine, "Shear", degrees=0)
Rotate = special(transforms.RandomAffine, "Rotate")
Brightness = special(transforms.ColorJitter, "Brightness")
Contrast = special(transforms.ColorJitter, "Contrast")
Saturation = special(transforms.ColorJitter, "Saturation")
Hue = special(transforms.ColorJitter, "Hue")
Crop = transforms.RandomCrop class Augmix: def __init__(self, ops, k=3, alpha=1, beta=1):
self.ops = ops
self.k = k
if isinstance(alpha, Iterable):
self.alpha = alpha
else:
self.alpha = [alpha] * k
self.beta = beta def get_params(self):
op1, op2, op3 = random.sample(self.ops, 3)
op12 = transforms.Compose([op1, op2])
op123 = transforms.Compose([op1, op2, op3])
return random.sample([op1, op12, op123], 1)[0] def __call__(self, img):
weights = scipy.stats.dirichlet.rvs(self.alpha)[0]
img_tensor = F.to_tensor(img)
xaug = torch.zeros_like(img_tensor)
for i in range(self.k):
opschain = self.get_params()
temp = weights[i] * F.to_tensor(opschain(img))
xaug += temp
m = scipy.stats.beta.rvs(self.beta, self.beta, size=1)[0]
new_img = m * img_tensor + (1 - m) * xaug
return F.to_pil_image(new_img)

图片 Augmentation整理的更多相关文章

  1. GIF/PNG/JPG和WEBP/base64/apng图片优点和缺点整理

    GIF/PNG/JPG/WEBP/APNG都是属于位图(位图 ,务必区别于矢量图): GIF/PNG和JPG这三种格式的图片被广泛应用在现今的互联网中,gif曾在过去互联网初期慢速的情况下几乎是做到了 ...

  2. Base64 字符串转图片 问题整理汇总

    前言 最近碰到了一些base64字符串转图片的开发任务,开始觉得没啥难度,但随着开发的进展还是发现有些东西需要记录下. Base64 转二进制 这个在net有现有方法调用: Convert.FromB ...

  3. GIF/PNG/JPG和WEBP/base64/apng图片优点和缺点整理(转)

    如何获取图片对应的base64字符串呢? 1:使用代码获取: 运行下面代码 var reader = new FileReader(), htmlImage; reader.onload = func ...

  4. python 指定日期图片文件删除

    手机使用python操作图片文件 起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书 ...

  5. 基础学习笔记之opencv(6):实现将图片生成视频

    基础学习笔记之opencv(6):实现将图片生成视频 在做实验的过程中.难免会读视频中的图片用来处理,相反将处理好的图片又整理输出为一个视频文件也是非经常常使用的. 以下就来讲讲基于opencv的C+ ...

  6. 个人永久性免费-Excel催化剂功能第54波-批量图片导出,调整大小等

    图片作为一种数据存在,较一般的存放在Excel单元格或其他形式存在的文本数据,对其管理更为不易,特别是仅有Excel原生的简单的插入图片功能时,Excel催化剂已全面覆盖图片数据的使用场景,无论是图片 ...

  7. 了解JS压缩图片,这一篇就够了

    前言 公司的移动端业务需要在用户上传图片是由前端压缩图片大小,再上传到服务器,这样可以减少移动端上行流量,减少用户上传等待时长,优化用户体验. 插播一下,本文案例已整理成插件,已上传npm ,可通过 ...

  8. Google 云计算中的 GFS 体系结构

          google 公司的很多业务具有数据量巨大的特点,为此,google 公司研发了云计算技术.google 云计 算结构中的 google 文件系统是其云计算技术中的三大法宝之一.本文主要介 ...

  9. 使用MVVM-Sidekick开发Universal App(二)

    上一篇文章已经建立了基本的实体类,并且搞定了多语言的问题,以后在app里用字符串的时候就可以从资源文件中取了.现在继续进行. 一.添加一个页面 CurrencyExchanger首页是一个货币兑换的列 ...

随机推荐

  1. 学习java 7.3

    学习内容:定义类不需要加static 成员方法在多个对象时是可以共用的,而成员变量不可以共用,多个对象指向一个内存时,改变变量的值,对象所在的类中的变量都会改变 成员变量前加private,成员方法前 ...

  2. Linux学习 - 正则表达式

    一.正则表达式与通配符 正则表达式:在文件中匹配符合条件的字符串,正则是包含匹配 通配符:用来匹配符合条件的文件名,通配符是完全匹配 二.基础正则表达式 元字符 作用 a* a有0个或任意多个 . 除 ...

  3. Type difference of character literals in C and C++

    Every literal (constant) in C/C++ will have a type information associated with it. In both C and C++ ...

  4. HelloWorldDynamic

    package mbeanTest; import java.lang.reflect.Method; import javax.management.Attribute; import javax. ...

  5. Linux服务器---drupal

    Drupal Drupal为用户提供各种工具来管理网站,它可以帮助用户入门,建立自己的网站 1.下载drupal软件(https://www.drupal.org/project/drupal/rel ...

  6. ICCV2021 | 简单有效的长尾视觉识别新方案:蒸馏自监督(SSD)

    ​  前言  本文提出了一种概念上简单但特别有效的长尾视觉识别的多阶段训练方案,称为蒸馏自监督(Self Supervision to Distillation, SSD).在三个长尾识别基准:Ima ...

  7. SQL 基础知识终极指南

    什么是数据库? 数据库是以电子方式从系统中存储和检索的大量数据集合. 存储在数据库中的结构化数据被处理.操纵.控制和更新以执行各种操作. 行业中使用的一些流行数据库是 Oracle.MySQL.Pos ...

  8. Java动态脚本Groovy读取配置文件

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 核心涉及: @Value:作用是通过注解将常量.配置文件中的值.其他bean的属性值注入到变量中,作为变量的初始值. @Configur ...

  9. 安装Java1.8教程图解

    在服务器上配置Java环境 第一步: 因为我们系统是centOS7 64位的,所以我下载的是最新版本的jdk X64位的 因为阿里云服务器事先就安装好了ssh,我们可以用xsell连上去,我把下载好的 ...

  10. <转>C/S架构分析

    系统架构师-基础到企业应用架构-客户端/服务器 开篇 上篇,我们介绍了,单机软件的架构,其实不管什么软件系统,都是为了解决实际中的一些问题,软件上为了更好的解决实际的问题才会产生,那么对于单机软 件的 ...