PyTorch中内置的随机擦除(Random Erasing)数据增强通过torchvision.transforms.RandomErasing实现,以下是原理和用法的详细说明:


核心原理

  1. 正则化作用

    • 随机擦除在训练图像上随机遮盖一个矩形区域,模拟遮挡场景,强迫模型学习非主导特征,减轻过拟合。
    • 类似于Dropout(针对神经元),但作用于输入空间(图像像素)。
  2. 实现细节

    • 区域选择:随机生成一个矩形区域:
      • 面积比例:scale=(min_area, max_area)(默认(0.02, 0.33)
      • 宽高比:ratio=(min_ratio, max_ratio)(默认(0.3, 3.3)
    • 填充内容
      • value:填充值,可以是:
        • 单数字(如0)→ 所有通道用该值填充。
        • 元组(R, G, B) → 每通道独立填充。
        • 字符串'random' → 使用均匀分布的随机值(0255整数或0.01.0浮点)。

PyTorch内置实现

1. 导入与初始化
from torchvision import transformstransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),transforms.RandomErasing(p=0.5,                  # 应用概率(默认0.5)scale=(0.02, 0.2),      # 遮盖面积比例范围ratio=(0.3, 3.3),       # 宽高比范围value='random',         # 填充值(或指定数字/元组)inplace=False           # 是否原地修改)
])
2. 关键参数
参数作用
p执行概率(默认0.5)
scale矩形区域面积占比范围(默认(0.02, 0.33)
ratio矩形宽高比范围(默认(0.3, 3.3)
value填充值:int/float、元组(R, G, B)'random'(默认0)
inplace是否原地操作(默认False

示例代码

import torch
from torchvision.transforms import RandomErasing
import matplotlib.pyplot as plt# 初始化随机擦除(50%概率执行)
eraser = RandomErasing(p=0.5, value="random")# 模拟输入图像(3通道,224x224)
image = torch.randn(3, 224, 224)  # 归一化后的数据# 应用随机擦除
augmented = eraser(image)# 可视化
plt.subplot(121)
plt.title("Original")
plt.imshow(image.permute(1, 2, 0).clamp(-1, 1).numpy() * 0.5 + 0.5)
plt.subplot(122)
plt.title("Random Erasing")
plt.imshow(augmented.permute(1, 2, 0).clamp(-1, 1).numpy() * 0.5 + 0.5)
plt.show()

输出效果:

  • 左图:原始图像。
  • 右图:随机出现一个矩形遮盖区域(用噪声填充)。

使用注意事项

  1. 放置位置

    • 必须在ToTensor()Normalize()之后,因为操作对象是张量(shape=[C, H, W])。
    • 如果使用value='random',需确保填充值与图像归一化范围兼容。
  2. 填充值选择

    • 归一化后的图像:推荐用value=0(相当于均值)或与数据集统计量匹配的值。
    • 未归一化图像:用value='random'生成噪声更合理。
  3. 常见设置

    • 论文推荐:p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0
    • 对小物体数据集(如CIFAR):调小scale(如(0.02, 0.1))。

底层算法逻辑

  1. 区域生成

    • 随机选择一个满足scaleratio的矩形框(尝试10次,失败则跳过)。

    • 计算矩形区域:

      area=img_area×random(scalemin,scalemax)\text{area} = \text{img\_area} \times \text{random}(\text{scale}_\text{min}, \text{scale}_\text{max})area=img_area×random(scalemin,scalemax)
      aspect_ratio=random(ratiomin,ratiomax)\text{aspect\_ratio} = \text{random}(\text{ratio}_\text{min}, \text{ratio}_\text{max})aspect_ratio=random(ratiomin,ratiomax)

    h=area×aspect_ratio,w=area/aspect_ratioh = \sqrt{\text{area} \times \text{aspect\_ratio}}, \quad w = \sqrt{\text{area} / \text{aspect\_ratio}}h=area×aspect_ratio,w=area/aspect_ratio

  2. 覆盖操作

    image[:, top:top+h, left:left+w] = value  # 矩形区域赋值
    

效果对比(实验数据)

数据集基线准确率+随机擦除提升
CIFAR-1094.1%95.6%+1.5%
ImageNet75.3%77.1%+1.8%

结论:对小/密集物体数据集效果显著(如CIFAR、PASCAL VOC)。

通过这种方式,随机擦除以极小计算成本提升模型鲁棒性,是图像分类任务的实用增强工具。

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

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

相关文章

微信小程序交互精髓:点击操作与状态管理实战

目录 一、点击事件绑定:bindtap 与 catchtap 的正确使用 基础语法对比 事件对象详解 二、点击切换选中状态:数据驱动视图的实现 1. 单元素状态切换 2. 多元素单选状态 3. 多元素多选状态 三、样式动态切换:数据绑定与 CSS 的完美结合 …

Language Models are Few-Shot Learners: 开箱即用的GPT-3(二)

接上一篇 Approach 前面的摘要和Introduction做了一些概要性的介绍,论文在第二章,也就是approach中,介绍了模型的设计,zero,one,few-shot的设计等等。 这一章一开头就说,GPT-3的结构和GPT-2的结构一样,只是在相应的把模型尺寸,数据规模,训练时间等增加了。Our bas…

【养老机器人】核心技术

1. 毫米波雷达如何检测心跳和呼吸?毫米波雷达(通常工作在60GHz或77GHz频段)可以探测到人体胸腔的微米级位移,而心跳和呼吸会引起胸腔的周期性运动:呼吸:幅度较大(约5-10毫米)&#x…

二 Javascript 入门

我们 从已经知道了 Javascript的历史以及什么是Javascript,那实际编写的时候在哪里编写? script 标签 HTML 为我们提供了无数的标签来做无数的事情。例如, 用于为段落添加边距, 用于使文本加粗, 用于在网页上嵌入音…

《信息技术服务监理 第5部分:软件工程监理规范》(GB/T 19668.5-2018)标准解读

《信息技术服务监理 第 5 部分:软件工程监理规范》(GB/T 19668.5-2018)是规范软件工程监理服务的国家标准,旨在为软件工程监理的规划设计、招标、设计、实施、验收等阶段及相关支持过程提供明确的监理要求、服务内容和实施要点。 …

RedisJSON 路径语法深度解析与实战

一、两种路径语法概览语法类型触发标志简介JSONPath以 $ 开头全功能路径,支持递归 (..)、通配符 (*)、切片 ([start:end:step])、过滤 (?())、脚本表达式等Legacy以 . 或键名开头早期版本(v1)遗留语法,只支持简单的点式和中括号&…

从Rust模块化探索到DLB 2.0实践|得物技术

一、前言在云原生架构高速迭代的背景下,基础设施的性能瓶颈与安全隐患成为技术演进的关键挑战。本文系统记录了团队基于Rust语言改造Nginx组件的完整技术路径:从接触Cloudflare的quiche库,引发对Rust安全特性的探索,到通过FFI实现…

【 MySQL】一点点相关的记录

打开 MySQL Workbench 并连接到你的数据库在 MySQL Connections 下,选择连接的数据库实例( Local instance MySQL80)登录时输入 用户名 和 密码。 root,密码是在 MySQL 安装时设置的密码创建新数据库登录后,在 MySQL W…

旅游企业如何通过数字化转型实现高效运营

在旅游行业竞争日益激烈、游客需求日趋多样的当下,数字化管理成为旅游企业提升竞争力的关键协同办公系统以其丰富功能与灵活特性,为旅游行业带来全新的数字化变革,助力企业高效运营。优化行程规划与调度旅游行程的规划与调度繁杂且关键。协同…

大数据Spark(六十二):Spark基于Yarn提交任务流程

文章目录 Spark基于Yarn提交任务流程 一、Yarn-Client模式 1、提交命令 2、任务执行流程 二、Yarn-Cluster模式 1、提交命令 2、任务执行流程 Spark基于Yarn提交任务流程 在Yarn模式下,Spark的任务提交同样根据Driver程序运行的位置不同,分为cli…

Docker 高级管理-容器通信技术与数据持久化

(1)创建一个叫 my-net 的 bridge 类型的网络(2)查看都有哪些网络(3)运行一个容器井连接到新建的 my-net 网络(4)运行一个容器井加入到 my-net 网络2:Host 模式由于使用了 Host 模式,容器会直接使用宿主机的网络端口,因此可以直接在宿主机上通过 localhos…

在 Ubuntu 24.04 中安装 Python 2.7、pip 及 mysqlclient==1.4.6 的完整指南

在 Ubuntu 24.04 中安装 Python 2.7、pip 及 mysqlclient1.4.6 的完整指南 前言 随着 Ubuntu 24.04 的发布,许多旧的软件包已被移除或更新,但老项目需要 Python 2 。本文将详细介绍自己如何在 Ubuntu 24.04 中成功安装 Python 2.7、pip 以及 mysqlclient…

doker以及网站案例

一.docker搭建1.安装dockerapt-get install docker.io docker-compose2.编写配置文件(注意路径正确)vim /etc/systemd/system/docker.service.d/http-proxy.conf[Service] Environment"HTTP_PROXYhttp://科学上网访问的ip:端口" Environment&q…

【HarmonyOS Next之旅】DevEco Studio使用指南(四十一) -> 获取自定义编译参数

目录 1 -> HAP/HSP运行时获取编译构建参数 1.1 -> 生成BuildProfile类文件 1.2 -> 在代码中获取构建参数 1.3 -> 默认参数 1.4 -> 自定义参数 2 -> HAR运行时获取编译构建参数 2.1 -> 生成BuildProfile类文件 2.2 -> 在代码中获取构建参数 2.…

NGINX系统基于PHP部署应用

目录 部署 配置 部署 准备三台主机,一台服务端,两台客户端; 1.在两台客户端主机上分别安装 MySQL; [rootmaster /]#yum install -y mysql nginx; [rootmaster /]#yum install -y nginx PHP; [rootmaster /]#yum install -y php PHP-m…

ip地址可以精确到什么级别?如何获取/更改ip地址

IP地址的精确级别和获取/更改方式取决于其类型(公网IP vs 内网IP),以下是详细解答: 一、IP地址的精确级别 1. 公网IP地址(互联网可见) 定位级别精度范围说明国家/地区级约95%准确通过IP数据库(…

Linux(Centos 7.6)命令详解:useradd

1.命令作用创建新用户或更新默认的新用户信息(create a new user or update default new user information)2.命令语法Usage: useradd [options] LOGINuseradd -Duseradd -D [options]3.参数详解OPTION:-b, --base-dir BASE_DIR,新帐户的主目录的基本目录&#xff1…

异步I/O库:libuv、libev、libevent与libeio

异步I/O编程是现代高性能网络服务的核心,而libuv、libev、libevent、libeio这四个库则是这一领域的常青树。它们虽同属事件驱动模型,却在设计哲学、适用场景和实现细节上各具特色。本文将深入剖析其异同。 一、共同点:异步事件驱动 事件循环&…

go go go 出发咯 - go web开发入门系列(四) 数据库ORM框架集成与解读

go go go 出发咯 - go web开发入门系列(四) 数据库ORM框架集成与解读 往期回顾 go go go 出发咯 - go web开发入门系列(一) helloworldgo go go 出发咯 - go web开发入门系列(二) Gin 框架实战指南go go g…

CD47.【C++ Dev】list的模拟实现(2)

目录 1.const修饰的迭代器的实现 方法1:分成两个类 完整代码 方法2:STL库的写法 2.STL库的第三个模版参数T*的解释 ->->的简写语法 3.其他成员函数 insert erase push_back、push_front、pop_front、pop_back size clear 析构函数~list() 拷贝构造函数(★…