BEV:隱式相機視角轉換-----BEVFormer

一、背景

基于imp投影的相機視角轉換,對相機的內外參依賴較高,BEV 網格融合固定,可能對小目標不夠敏感;考慮通過transformer的方式進行相機的視角轉換,BEV query 可以自適應關注關鍵區域,提高小目標檢測,transformer 注意力機制,靈活采樣。故通過BEVFormer的demo代碼理解其原理。

二、代碼

import torch
import torch.nn as nn# -------------------------
# 參數
# -------------------------
B, C, H, W = 2, 64, 16, 16        # 攝像頭特征圖
bev_H, bev_W = 8, 8                # BEV 網格
num_cameras = 7
num_classes = 10
num_det_queries = 32                # detection query 數量# -------------------------
# 1. 多攝像頭特征
# -------------------------
camera_feats = [torch.randn(B, C, H*W) for _ in range(num_cameras)]  # B x C x N (N=H*W)
for i in range(num_cameras):camera_feats[i] = camera_feats[i].permute(0, 2, 1)  # B x N x C# -------------------------
# 2. BEV query + Transformer 投影
# -------------------------
num_bev_queries = bev_H * bev_W
bev_queries = nn.Parameter(torch.randn(num_bev_queries, B, C))class BEVProjectionTransformer(nn.Module):def __init__(self, C, num_heads=8):super().__init__()self.attn = nn.MultiheadAttention(embed_dim=C, num_heads=num_heads)def forward(self, bev_queries, camera_feats):"""bev_queries: num_bev_queries x B x Ccamera_feats: list of B x N x C"""# 拼接所有攝像頭特征feats = torch.cat(camera_feats, dim=1)      # B x (num_cameras*N) x Cfeats = feats.permute(1,0,2)               # (num_cameras*N) x B x Cbev_out, _ = self.attn(bev_queries, feats, feats)return bev_outbev_proj_transformer = BEVProjectionTransformer(C)
bev_features = bev_proj_transformer(bev_queries, camera_feats)
bev_features_grid = bev_features.permute(1,0,2).reshape(B, bev_H, bev_W, C)# -------------------------
# 3. Detection query + Transformer
# -------------------------
det_queries = nn.Parameter(torch.randn(num_det_queries, B, C))class DetectionDecoderTransformer(nn.Module):def __init__(self, C, num_heads=8):super().__init__()self.attn = nn.MultiheadAttention(embed_dim=C, num_heads=num_heads)def forward(self, det_queries, bev_features_grid):B, H, W, C = bev_features_grid.shapebev_flat = bev_features_grid.reshape(B, H*W, C).permute(1,0,2)out, _ = self.attn(det_queries, bev_flat, bev_flat)return outdecoder = DetectionDecoderTransformer(C)
det_features = decoder(det_queries, bev_features_grid)# -------------------------
# 4. Detection head
# -------------------------
class SimpleDetectionHead(nn.Module):def __init__(self, C, num_classes):super().__init__()self.cls_head = nn.Linear(C, num_classes)self.bbox_head = nn.Linear(C, 7)def forward(self, det_features):cls_logits = self.cls_head(det_features)bbox_preds = self.bbox_head(det_features)return cls_logits, bbox_predsdetection_head = SimpleDetectionHead(C, num_classes)
cls_logits, bbox_preds = detection_head(det_features)print("類別 logits shape:", cls_logits.shape)     # num_det_queries x B x num_classes
print("3D bbox preds shape:", bbox_preds.shape)   # num_det_queries x B x 7

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

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

相關文章

zsh 使用筆記 命令行智能提示 bash智能

目錄 安裝: 升級: zsh 有什么用? zsh 安裝: sudo apt update sudo apt install zsh -y 升級: omz update zsh 有什么用? 相比 bash,zsh 更智能、更方便,常見優勢有&#xff…

Laya的適配模式選擇

文章目錄SCALE_FIXED_AUTOSCALE_SHOWALLSCALE_FULLSCALE_FIXED_HEIGHTSCALE_FIXED_WIDTHSCALE_NOSCALESCALE_EXACTFITSCALE_NOBORDERdemoSCALE_FIXED_AUTO NO.1會透,拉伸能解決官網解釋:應用保持設計比例不變,全屏顯示全部內容(類似showall&…

Android中flavor的使用

在我的開發中,有這樣的需求,有一個項目,需要適配不同的執法儀設備,這些執法儀都是Android系統的,而且有的有系統簽名,有的沒有,比如我共有四款型號,有三款有系統簽名,每款…

如何使用DeepSeek解析長pdf的文本

直接使用python工具解析pdf文件,可能因為格式兼容問題,導致解析出的文本幾乎不可讀。 這里嘗試使用Deepseek解析pdf文件,這里僅考慮文本,不考慮其他要素。 1 解析第一步 將pdf作為附件上傳到deepseekchat界面,輸入如…

W3C CSS 活動

W3C CSS 活動 引言 CSS(層疊樣式表)是現代網頁設計中不可或缺的技術之一。W3C(萬維網聯盟)作為全球互聯網標準制定的主要組織,定期舉辦各類CSS相關的活動,旨在促進CSS技術的發展與普及。本文將詳細介紹W3C CSS活動,包括活動內容、參與方式以及活動意義。 活動內容 1…

React Native 與 UniApp 對比

React Native 優點: 由 Facebook 開發維護,社區生態強大 使用 JavaScript/TypeScript 開發,學習曲線相對平緩 真正的原生渲染,性能接近原生應用 支持熱重載,開發效率高 可訪問所有原生平臺 API 大型應用案例豐富(如 Faceboo…

Dijkstra和多層圖 0

眾所周知&#xff0c;Dijkstra經常拿來解決不帶負權和環的單元最短路。我們先來看一下他的實現過程 (由于樸素版用的不多&#xff0c;我們直接上堆優化) 模板 #include<bits/stdc.h> #define mf(x,y) make_pair(x,y)//x距離&#xff0c;y節點 using namespace std; …

【驅動】RK3576:桌面操作系統基本概念

1、桌面操作系統 我們常說的Ubuntu、Debian、麒麟、統信等都是總包工頭; 他們把linux內核、根文件系統(遵循 Linux 標準文件系統層次結構FHS)、包管理(軟件、庫)、桌面環境(GNOME、Xfce等)、初始化系統(Systemd)、各種服務與守護進程、安全組件等整合成一個完整的桌面…

sfc_os!SfcQueueValidationRequest函數分析之sfc_os!IsFileInQueue

第一部分&#xff1a;1: kd> kc# 00 sfc_os!SfcQueueValidationRequest 01 sfc_os!SfcWatchProtectedDirectoriesWorkerThread 02 kernel32!BaseThreadStart1: kd> dvRegVal 0x01129164ChangeType 5vrd 0x012bfef0Status 0n1988337684vrdexisting 0x012bffdc//// if…

100202Title和Input組件_編輯器-react-仿低代碼平臺項目

文章目錄1 開發兩個問卷組件1.1 Title組件1.2 Input組件1.3 畫布靜態展示TItle和Input2 Ajax獲取問卷數據&#xff0c;并存儲到Redux store2.1 API接口2.2 組件列表存儲到Redux store統一管理2.3 重構useLoadQuestionData3 在畫布顯示問卷列表&#xff0c;點擊可選中3.1 Redux獲…

設置計劃任務自動備份mysql

windows系統下1.創建mysql自動備份腳本mysqlback.bat需將此腳本存放在mysql的bin文件夾下。確保此腳本執行成功了在進行第2步做計劃任務。echo off REM 定義備份目錄backup_dir、備份的文件名filename set "backup_dirD:\mysqlback" set "filenamemysqlback_%da…

飛機起落架輪軸深孔中間段電解擴孔內輪廓檢測 - 激光頻率梳 3D 輪廓檢測

摘要&#xff1a;飛機起落架輪軸深孔中間段電解擴孔內輪廓檢測存在精度要求高、結構復雜等挑戰。本文針對電解擴孔特殊工藝特征&#xff0c;探討激光頻率梳 3D 輪廓檢測技術的應用&#xff0c;分析其檢測原理、技術優勢及在輪軸深孔檢測中的實踐&#xff0c;為電解擴孔內輪廓高…

【軟考中級網絡工程師】知識點之入侵防御系統:筑牢網絡安全防線

目錄一、入侵防御系統基礎概念1.1 定義與作用1.2 與其他安全設備的關系二、入侵防御系統工作原理剖析2.1 數據包捕獲與預處理2.2 深度包檢測&#xff08;DPI&#xff09;技術2.3 威脅特征匹配2.4 行為分析與機器學習輔助檢測2.5 威脅處理與響應機制三、入侵防御系統功能全面解析…

Python爬蟲實戰:研究scrapfly-scrapers庫,構建電商/新聞/社交媒體數據采集系統

1. 引言 1.1 研究背景與意義 在大數據與人工智能技術深度滲透各行業的背景下,數據已成為企業決策、學術研究、產品創新的核心驅動力。互聯網作為全球最大的信息載體,蘊含海量結構化與非結構化數據(如電商商品信息、新聞資訊、社交媒體動態等),其價值挖掘依賴高效的數據采…

Python爬蟲反爬檢測失效問題的代理池輪換與請求頭偽裝實戰方案

Python爬蟲反爬檢測失效問題的代理池輪換與請求頭偽裝實戰方案 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特性都是…

【原理】C#構造函數可以標記為Static嗎

【從UnityURP開始探索游戲渲染】專欄-直達 實例構造函數&#xff08;Instance Constructor&#xff09;不能標記為static但C#提供了一種特殊的? 靜態構造函數&#xff08;Static Constructor&#xff09;專門用于初始化靜態成員。下面依次介紹他們&#xff1a; 1. ?實例構造…

數據結構--樹(3)

數據結構基礎&#xff08;13&#xff09; 文章目錄數據結構基礎&#xff08;13&#xff09;--樹樹的存儲結構樹的存儲方式1&#xff1a;雙親表示法&#xff08;順序存儲&#xff09;樹的存儲方式2&#xff1a;孩子表示法樹的存儲方式3&#xff1a;孩子兄弟表示法樹轉二叉樹森林…

sys.stdin讀取鍵盤輸入【持續更新~】

背景sys.stdin主要用來讀取鍵盤的一行或者多行輸入&#xff0c;讀取后表達形式為字符串。下文主要探討sys.stdin.readline()的使用&#xff0c;sys.stdin.read()參考&#xff1a;sys.stdin.readline()是逐行讀取&#xff0c;通常會配合.strip()清除首尾的換行符/空格sys.stdin.…

近閾值技術引領者:STM32U3系列的能效與安全革新

引言 當電池供電設備已深度融入生活的每一個角落&#xff0c;功耗控制與續航能力儼然成為制約技術演進的核心瓶頸。在此背景下&#xff0c;超低功耗新系列STM32U3憑借前沿的近閾值設計理念&#xff0c;為受功耗瓶頸限制的設備提供了突破性解決方案&#xff0c;也為能耗管理開啟…

Vue3 中的 provide 和 inject 詳解:實現跨組件通信

一、provide 和 inject 概述在 Vue3 中&#xff0c;provide 和 inject 是一對用于實現跨層級組件通信的 API&#xff0c;它們解決了 props 需要逐層傳遞的繁瑣問題。1.1 基本概念provide (提供)&#xff1a;在祖先組件中提供數據inject (注入)&#xff1a;在任意后代組件中注入…