pytorch一致数据增强—独用增强

前作 [1] 介绍了一种用 pytorch 模仿 MONAI 实现多幅图(如:image 与 label)同用 random seed 保证一致变换的写法,核心是 MultiCompose 类和 to_multi 包装函数。不过 [1] 没考虑各图用不同 augmentation 的情况,如:

  1. ColorJitter 只对 image 做,而不对 label 做;
  2. image 的 resize interpolation 可任选,但 label 只能用 nearest

本篇更新写法,支持各图同用、独用 augmentation。

Code

  • 对比 [1],主要改变是改写 MultiCompose 类,并将 to_multi 吸收入内。
  • MultiCompose 的用法还是和 torchvision.transforms.Compose 几乎一致,不过支持独用 augmentation:只要为各图指定各自的 augmentation 类/函数即可。见下一节例程。
def to_multi():"""不用单独的 to_multi 打包了,已并入 MultiCompose"""raise NotImplementedErrorclass MultiCompose:"""扩展 torchvision.transforms.Compose:支持输入多图,且保证各 augmentation 中所有输入都用同一随机状态(如旋转同一随机角度),分割任务有用。"""# numpy.random.seed range error:#   ValueError: Seed must be between 0 and 2**32 - 1MIN_SEED = 0 # - 0x8000_0000_0000_0000MAX_SEED = min(2**32 - 1, 0xffff_ffff_ffff_ffff)def __init__(self, transforms):"""输入:一个 list/tuple,其中每个元素可以是一个 augmentation 对象(transform)/函数,各输入同用;或一个嵌套的 list/tuple,为每个输入指定独用的 augmentation。"""# self.transforms = [to_multi(t) for t in transforms]no_op = lambda x: x # i.e. identity functionself.transforms = []for t in transforms:if isinstance(t, (tuple, list)):# convert `None` to `no_op` for convenienceself.transforms.append([no_op if _t is None else _t for _t in t])else:self.transforms.append(t)def __call__(self, *images):for t in self.transforms:if isinstance(t, (tuple, list)): # 独用assert len(images) <= len(t) # allow redundant transformelse: # 同用t = [t] * len(images)_aug_images = []_seed = random.randint(self.MIN_SEED, self.MAX_SEED)for _im, _t in zip(images, t):seed_everything(_seed)_aug_images.append(_t(_im))images = _aug_imagesif len(images) == 1:images = images[0]return images

Usage & Test

例程沿用 [1],但改一下 augmentation:

train_trans = MultiCompose([# image 用 bilinear,label 用 nearest(ResizeZoomPad((224, 256), "bilinear"), ResizeZoomPad((224, 256), "nearest")), # 独用transforms.RandomAffine(30, (0.1, 0.1)), # 同用,传一个就行transforms.RandomHorizontalFlip(), # 同用# ColorJitter 只对 image 做,label 不做(None)[transforms.ColorJitter(0.1, 0.2, 0.3, 0.4), None], # 独用
])
  • 效果:

test-dataset-1.png

References

  1. pytorch一致数据增强

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/410487.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成都谷达冠楠:抖音开网店初期需要注意什么

随着互联网的发展&#xff0c;越来越多的人选择在抖音上开设网店。然而&#xff0c;开店初期需要注意的事项有很多&#xff0c;如果处理不当&#xff0c;可能会影响店铺的正常运营。以下是一些关于抖音开网店初期需要注意的事项。 选择商品非常重要。你需要选择有市场需求的商品…

设计Twitter时间线和搜索功能

设计Twitter时间线和搜索功能 设计 facebook feed 和 设计 facebook search是相同的问题 第一步&#xff1a;定义用例和约束 定义问题的需求和范围&#xff0c;询问问题去声明用例和约束&#xff0c;讨论假设 ps: 没有一个面试官会展示详细的问题&#xff0c;我们需要定义一些用…

vs 安装wsl遇到问题

1 问题 Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x8007019e Error: 0x8007019e ??????? Linux ? Windows ????\ 2 问题 windows feature "virtual machine platform"is enabled 打红叉 virtual machine…

spring boot学习第七篇:通过spring boot使用redis

1、pom.xml文件里面增加如下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、yml文件增加如下配置&#xff1a; redis:host: loc…

前端踩坑之——antDesignVue的upload组件

本地启动时控制台会报404&#xff0c;放到服务器上控制台会报405(多发一个请求) 原因&#xff1a;upLoad有默认的上传事件 解决&#xff1a;阻止默认事件即可 beforeUpload Hook function which will be executed before uploading. Uploading will be stopped with false or …

2. Git

2. Git Git简介 Git是什么&#xff1f; Git是目前世界上最先进的分布式版本控制系统&#xff08;没有之一&#xff09;。 Git有什么特点&#xff1f;简单来说就是&#xff1a;高端大气上档次&#xff01; 那什么是版本控制系统&#xff1f; 如果你用Microsoft Word写过长篇大…

QT第五天

使用QT绘图和绘图事件&#xff0c;完成仪表盘绘图&#xff0c;如下图&#xff1a; 程序运行结果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen> #include <QBrush&…

LNMP环境下综合部署动态网站

目录 LNMP部署--nginx 搭建mysql数据库 安装mysql的过程&#xff1a; 部署PHP&#xff1a; ​编辑​编辑php的配置文件在哪 wordpress程序安装 LNMP部署--nginx 纯净--联网状态 环境变量中没有nginx 安装形式的选择&#xff1a; yum安装&#xff1a;自动下载安装包及…

详解React与Vue的性能对比

React 和 Vue 是当前最流行的前端开发框架之一。它们都具有高度的灵活性和可扩展性&#xff0c;但在某些方面有所不同。在本篇文章中&#xff0c;我将详细介绍 React 和 Vue 这两个技术&#xff0c;并比较它们的优点和缺点。 目录 1. React&#xff1a; 1.1 优点&#xff1a; …

Angular系列教程之MVC模式和MVVM模式

文章目录 MVC模式MVVM模式MVC与MVVM的区别Angular如何实现MVVM模式总结 在讨论Angular的时候&#xff0c;我们经常会听到MVC和MVVM这两种设计模式。这两种模式都是为了将用户界面(UI)和业务逻辑分离&#xff0c;使得代码更易于维护和扩展。在这篇文章中&#xff0c;我们将详细介…

【iOS】UIColor、CGColor、CIColor的区别和联系

编者在实验室小组的指导下&#xff0c;仿写了许多App&#xff0c;其中UI的颜色模仿也是令人头痛的点。设计颜色一般使用UIColor类方法直接获取颜色&#xff1a; 有时会使用 (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alph…

Qt/QML编程之路:slider(34)

滑条slider&#xff0c;有时也成为进度条progressbar&#xff0c;在GUI界面中也是经常用到的。 import QtQuick 2.9 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.2ApplicationWindow {id:rootvisible: truewidth: 1920height: 720//title: qsTr("Hello World&q…