当前位置: 首页 > news >正文

PyTorch随机擦除:提升模型抗遮挡能力

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.dtcms.com/a/272119.html

相关文章:

  • 【会员专享数据】2013-2024年我国省市县三级逐日SO₂数值数据(Shp/Excel格式)
  • Houdini 分布式解算效率瓶颈突破:渲染 101 云集群实战指南
  • Transformer江湖录 第一章:江湖前传 - 神经网络门派纷争
  • 微服务架构下某汽车APP电商模块订单服务自动化测试方案(Python蹭个场)
  • YOLO11 目标检测从安装到实战
  • [论文阅读]LLMZip: Lossless Text Compression using Large Language Models
  • qemu vcpu的创建过程
  • 智慧气象新范式:人工智能如何重构城市级气象服务生态?
  • AI技术通过智能缺陷检测正在深度重构多个行业的生产模式、质量管理体系和人才结构,其影响已超越单纯的技术升级,正在引发系统性变革。
  • Windows 11 安装过程中跳过微软账户创建本地账户
  • 大模型 Agent(智能体)技术简介
  • 静默的田野革命—人工智能重构农业生态的技术风暴与文明悖论
  • 蛋白质序列-omega参数计算算法解读
  • 「按键精灵安卓/ios辅助工具」动态验证码该怎么得到完整的图片
  • 20250710解决KickPi的K7的SDK编译异常:rk3576-android14.0-25250704.tar.gz【降低BUILD_JOBS】
  • 微软365 PDF导出功能存在本地文件包含漏洞,可泄露敏感服务器数据
  • 【办公类-107-01】20250710视频慢速与视频截图
  • 用 ngrok + SSH 实现公网远程控制电脑
  • Linux Vim 编辑器详解:从入门到进阶(含图示+插件推荐)
  • FPGA设计思想与验证方法系列学习笔记001
  • XCZU47DR-2FFVG1517I Xilinx FPGA AMD ZynqUltraScale+ RFSoC
  • 原生微信小程序研发,如何对图片进行统一管理?
  • 从代码生成到智能运维的革命性变革
  • 基于elementUI的el-autocomplete组件的自动补全下拉框实践
  • LFU 缓存
  • Vue2_element 表头查询功能
  • Vue+Element Plus 中按回车刷新页面问题排查与解决
  • pytorch 神经网络
  • 深入理解机器学习
  • 【深度学习新浪潮】什么是持续预训练?