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.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() 拷貝構造函數(★…