【深度學習模塊】圖像的相對位置編碼

這個是一個常用的模塊,就是我們可以對輸入的特征嵌入位置編碼。

位置編碼(Positional Encoding)是一種將空間位置信息嵌入到特征中的方法,通常用于幫助模型更好地理解特征的空間關系。
這里介紹的這個是相對位置編碼,代碼如下:

def _make_coord(batch, height, width):xv, yv = torch.meshgrid([torch.arange(0, height), torch.arange(0, width)])xv_min = (xv.float() * 2 - width) / widthyv_min = (yv.float() * 2 - height) / heightxv_max = ((xv + 1).float() * 2 - width) / widthyv_max = ((yv + 1).float() * 2 - height) / heightxv_ctr = (xv_min + xv_max) / 2yv_ctr = (yv_min + yv_max) / 2hmap = torch.ones(height, width) * (1. / height)wmap = torch.ones(height, width) * (1. / width)coord = torch.cat([xv_min.unsqueeze(0), yv_min.unsqueeze(0),xv_max.unsqueeze(0), yv_max.unsqueeze(0),xv_ctr.unsqueeze(0), yv_ctr.unsqueeze(0),hmap.unsqueeze(0), wmap.unsqueeze(0)], dim=0)coord = coord.unsqueeze(0).repeat(batch, 1, 1, 1)return coord

這個模塊怎么用?
比如說你現在特征大小是2x64x4x4,batchsize是2,通道數64,寬和高是4
給定參數寬和高就可以生成位置編碼,生成的位置編碼是8維的,然后直接復制到跟batchsize保持一致就行
就得到了bx8xHxW的位置編碼,然后直接和特征進行拼接,拼接完了直接卷積融合就行,就可以實現位置編碼的嵌入

解釋一下這個模塊:
根據代碼來講解

我們假設特征

batch_size = 2  # 批量大小
height = 4      # 特征圖高度
width = 4       # 特征圖寬度

首先

xv, yv = torch.meshgrid([torch.arange(0, height), torch.arange(0, width)])
# 生成兩個網格矩陣 xv 和 yv,分別表示每個像素的橫坐標和縱坐標。

可能有點抽象,具體來說

xv如下(每一個位置的數代表該位置像素的橫坐標)

[0,0,0,0],
[1,1,1,1],
[2,2,2,2],
[3,3,3,3]

yv如下(每一個位置的數代表該位置像素的縱坐標)

[0,1,2,3],
[0,1,2,3],
[0,1,2,3],
[0,1,2,3]

隨后就是

	xv_min = (xv.float() * 2 - width) / widthyv_min = (yv.float() * 2 - height) / height

這個計算就是進行相對位置編碼,前面兩行的計算公式:(xv.float() * 2 - width) / width這就是將坐標映射到[-1,1)上去,注意,左閉右開,不會映射到1,因為從0開始的。

	xv_max = ((xv + 1).float() * 2 - width) / widthyv_max = ((yv + 1).float() * 2 - height) / height

那么這個max也是一樣,這個是映射到(-1,1]上去

最終得到的矩陣如下:

xv_min如下

[-1  ,-1  ,-1  ,-1  ],
[-0.5,-0.5,-0.5,-0.5],
[0   ,0   ,0   ,0   ],
[0.5 ,0.5 ,0.5 ,0.5 ]

yv_min如下

[-1 ,-0.5 ,0 ,0.5 ],
[-1 ,-0.5 ,0 ,0.5 ],
[-1 ,-0.5 ,0 ,0.5 ],
[-1 ,-0.5 ,0 ,0.5 ]

xv_max如下

[-0.5,-0.5,-0.5,-0.5],
[0   ,0   ,0   ,0   ],
[0.5 ,0.5 ,0.5 ,0.5 ],
[1   ,1   ,1   ,1   ]

yv_max如下

[-0.5 ,0 ,0.5 ,1 ],
[-0.5 ,0 ,0.5 ,1 ],
[-0.5 ,0 ,0.5 ,1 ],
[-0.5 ,0 ,0.5 ,1 ]

這個東西的意義是什么?就是你把xv_minyv_min組合起來,左上角為[-1,-1],其余坐標都是相對左上角的坐標。

你把xv_maxyv_max組合起來,右下角為[1,1],其余坐標都是相對右下角的坐標。

xv_minyv_min 表示每個像素相對于左上角的坐標,xv_maxyv_max 表示每個像素相對于右下角的坐標。

緊接著,是計算每個像素的中心坐標,即像素的幾何中心位置。

xv_ctr = (xv_min+xv_max)/2
yv_ctr = (yv_min+yv_max)/2

這個計算出來得到的是相對中心值,就是你相對左上角的值加上相對右下角的值,除以2,就是個平均值,就是中間的值

xv_ctr如下

[-0.75,-0.75,-0.75,-0.75],
[-0.25,-0.25,-0.25,-0.25],
[0.25 ,0.25 ,0.25 ,0.25 ],
[0.75 ,0.75 ,0.75 ,0.75 ]

yv_ctr如下

[-0.75,-0.25,0.25,0.75],
[-0.75,-0.25,0.25,0.75],
[-0.75,-0.25,0.25,0.75],
[-0.75,-0.25,0.25,0.75]

然后下面兩行,這個計算的就是寬度步長和高度步長,換句話說:分別表示每個像素的高度和寬度的歸一化值。

hmap = torch.ones(height, width) * (1. / height)
wmap = torch.ones(height, width) * (1. / width)

計算出來hmapwmap都如下所示,一樣的,因為設置的寬高是一樣的,1/4都是0.25

[0.25,0.25,0.25,0.25],
[0.25,0.25,0.25,0.25],
[0.25,0.25,0.25,0.25],
[0.25,0.25,0.25,0.25]

將上述計算的 8 個通道(xv_min, yv_min, xv_max, yv_max, xv_ctr, yv_ctr, hmap, wmap)拼接在一起,形成一個 8×H×W 的張量。

使用 unsqueeze(0) 將其擴展為 1×8×H×W,然后通過 repeat(batch, 1, 1, 1) 將其復制到每個樣本上,最終得到一個 B×8×H×W 的張量。

這個 8 維位置編碼包含了以下信息:

  1. 每個像素左上角的歸一化坐標(xv_min, yv_min)。
  2. 每個像素右下角的歸一化坐標(xv_max, yv_max)。
  3. 每個像素中心的歸一化坐標(xv_ctr, yv_ctr)。
  4. 每個像素的相對高度和寬度(hmap, wmap)。

這些信息為模型提供了豐富的空間位置信息,有助于模型更好地理解特征圖中像素之間的空間關系。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87563.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

osg加入實時光照SilverLining 天空和3D 云

OSG系列文章目錄 文章目錄 OSG系列文章目錄一、前言官網的介紹: 二、編譯官網例子 一、前言 osg本身也可以加入動態云,但是效果有點差強人意,這里我們使用sundog公司的動態云:SilverLining 天空和 3D 云。 官網的介紹&#xff1…

spring-ai-alibaba 1.0.0.2 學習(十二)——聊天記憶擴展包

學習spring-ai時提到過,spring-ai除了內置的InMemoryChatMemoryRepository,還提供jdbc、cassandra、neo4j三個擴展包。 而spring-ai-alibaba則提供了jdbc、redis、elasticsearch三個擴展包。 兩者都提供了jdbc擴展包,有什么區別呢&#xff…

c語言-指針(數組)練習2

題目:將數組中n個元素按逆序存放并打印出來,使用函數封裝與指針 思路: 1.定義一個數組arr[5]和用于存放數組大小(數組大小通過sizeof關鍵字來進行計算)的變量len; 2.創建三個函數initArr、printArr、rev…

Redis服務器

Redis,一款Key-Value型內存數據庫 常用于網站開發場景 Redis服務器只發布了Linux版本 Redis服務器安裝,2種辦法 自動安裝 apt install redis-server手動編譯安裝 從官網下載源碼,編譯,部署 1 安裝redis apt install redis-s…

LeetCode 第91題:解碼方法

題目描述: 一條包含字母A-Z的消息通過以下映射進行了編碼 1-A ...... 26-Z 要特別注意,11106可以映射為AAJF或KJF 06不是一個合法編碼 給你一個只含數字的非空字符串s,請計算并返回解碼方法的總數。如果沒有合法的方法解碼整個字符串&#xf…

Rocky Linux 9 源碼包安裝Mysql8

Rocky Linux 9 源碼包安裝Mysql8 大家好我是星哥,之前介紹了,Rocky Linux 9 源碼包安裝Mysql5.7。 本文將介紹如何在Rocky Linux 9操作系統上,從源碼一步步安裝MySQL 8,為您提供一個穩定、高效且可控的數據庫解決方案。 為什么…

AI小智項目全解析:軟硬件架構與開發環境配置

AI小智項目全解析:軟硬件架構與開發環境配置 一、項目整體架構 AI小智是一款基于ESP32的智能物聯網設備,集成了語音交互、邊緣計算等功能。整體系統架構如下: 終端設備:ESP32模組作為核心通信方式: WebSocket實現實…

設計模式之上下文對象設計模式

目錄 一、模式介紹 二、架構設計 三、Demo 示例 四、總結 一、模式介紹 上下文對象(Context Object)模式 最早由《Core J2EE Patterns》第二版提出,其核心目標是在多層或多組件間共享與當前作用域(如一次請求、一次會話、一次…

@Linux服務器加域退域

文章目錄 **一、加入Active Directory域****1. 準備工作****2. 配置步驟****步驟1:驗證網絡和DNS****步驟2:發現域****步驟3:加入域****步驟4:配置SSSD(可選)****步驟5:配置sudo權限&#xff08…

鴻蒙系統(HarmonyOS)4.2 設備上實現無線安裝 APK 并調試

在鴻蒙系統(HarmonyOS)4.2 設備上實現無線安裝 APK 并調試的步驟與 Android 類似,但需注意鴻蒙系統的特殊設置。以下是詳細操作指南: 鴻蒙系統特殊準備 開啟開發者選項: - 設置 > 關于手機 > 連續點擊"H…

MyBatis時間戳查詢實戰指南

在 MyBatis 中通過時間戳(Timestamp)作為查詢條件,需注意數據庫時間類型與 Java 類型的映射。以下是具體實現方式: 一、Java 實體類與數據庫字段映射 實體類定義 使用 java.sql.Timestamp 或 java.time.LocalDateTime(…

【Verilog硬件語言學習筆記4】FPGA串口通信

串口通信是系統設計中比較基部分,其原理其實也很通俗易懂。單次建立通信會傳輸8個bit,其時序也很簡單,這里就不再贅述了。其對應的實例代碼如下所示; 首先是接受部分(因為我的變量命名也很規范,通俗易懂&a…

Go 語言安裝教程(Windows 系統)

2025年07月02日 準備工作 確認系統為 Windows 7 及以上版本(推薦 Windows 10/11)。64 位系統選擇 amd64 版本安裝包,32 位系統選擇 386 版本。確保安裝目錄(默認 C:\Program Files\Go\)有至少 1GB 空間。 下載安裝包…

接口測試之postman

一、Postman功能簡介 3天精通Postman接口測試,全套項目實戰教程!! Postman是由Postdot Technologies公司打造的一款功能強大的調試HTTP接口的工具。在做接口測試的時候,Postman相當于一個客戶端,它可以模擬用戶發起的各…

【記錄】Ubuntu安裝Mysql

本文記錄Ubuntu系統下安裝Mysql 1 查看系統信息 lsb_release -a 2 使用apt下載安裝Mysql 1 打開終端,首先更新你的系統包索引,以確保所有包都是最新的 sudo apt update 2 安裝mysql服務器 sudo apt install mysql-server (也可以選擇對應的mysql-server 版本) 3 查看mysql狀…

【深度學習:進階篇】--4.1.循環神經網絡(改進)

RNN存在的問題:梯度爆炸,長期依賴參數量過大等問題 目錄 1.GRU(門控循環單元) 1.1.什么是GRU 1.2.直觀理解 1.3.本質解決問題 2.LSTM(長短記憶網絡) 2.1.作用 3.結構擴展與效率優化? 1.GRU(門控循環單元) 2014年,出現的算法&#x…

中心化錢包安全方案

先來看獨立的密鑰安全技術 1 自建或單租戶 CloudHSM 優點:密鑰永不出硬件,無法導出,只能對外提供公鑰。 交易時,外部應用把消息哈希傳進去簽名,再把簽好名的結果拿出來用。 這種方式安全性拉滿,但成本高、…

Android 實現底部彈窗

文章目錄在 Android 中創建優雅的底部選項彈窗 (BottomSheetDialogFragment) 📱第一步:設計底部彈窗的布局 🎨第二步:創建 BottomSheetDialogFragment 類 ??第三步:觸發并顯示底部彈窗 🚀在 Android 中創…

LAN8720 寄存器概覽和STM32 HAL庫讀寫測試

目錄 寄存器0x00:Basic Control Register(BCR)0x01:Basic Status Register(BSR) 連接測試寄存器讀寫測試 補充 寄存器 // 0x00:Basic Control Register(BCR) BIT15:Soft Reset 寫1復位,寫1之…

滲透測試深度分析:空密碼Administrator賬戶引發的安全風暴

滲透測試深度分析:空密碼Administrator賬戶引發的安全風暴0x01 測試背景 在內網滲透測試中,對Windows主機 192.168.1.98 使用 enum4linux 進行枚舉: enum4linux -u Administrator -p -a 192.168.1.98關鍵發現:Administrator賬戶空…