Transformer在文本、圖像和點云數據中的應用——經典工作梳理

摘要

最近在整一些3D檢測和分割的任務,接觸了一下ptv3,在之前梳理的工作owlv2中用到了vit,去年年假閱讀《多模態大模型:算法、應用與微調》(劉兆峰)時學習了Transformer網絡架構及其在文本數據中的應用,細數下來,似乎各方面都多多少少了解和應用過一些,但是直到昨天跟別人討論起Transformer在多模態數據中的應用,發現自己了解的不太系統,基于這個大背景,我希望借助閑暇時間梳理一下相關的代表性工作,后面如果有機會,也會做一些實踐記錄,希望自己學會的同時也可以幫助到一些有需要的小伙伴。

Transformer基礎知識

網絡架構

在這里插入圖片描述

Transformer在nlp中的應用

Transformer在image處理中的應用

Transformer在point clouds處理中的應用

20250820:因為最近在整一些3d相關的工作,所以從該部分開始梳理。如果大家對pointnet系列的點云分割工作感興趣的話,可以去看一下我之前整理的這篇文章3D分割系列論文梳理,歡迎一起討論。

PT

參考鏈接:https://zhuanlan.zhihu.com/p/681682833

貢獻

We design a highly expressive Point Transformer layer for point cloud processing. The layer is invariant to permutation and cardinality and is thus inherently suited to point cloud processing.
在pointnet中有提到,3d點云實際上是一種集合,在點云網絡結構的設計中,由于點云是無序的,所以設計與點云排序和點數量無關的網絡至關重要。而transformer的自注意力機制天生具有排序和點個數不變性,使得它非常適合用來提取點集的特征。
而本文也是聚焦在對點云局部特征提取結構的改造,將自注意力機制應用在了局部特征提取上。

Based on the Point Transformer layer, we construct high-performing Point Transformer networks for classification and dense prediction on point clouds. These networks can serve as general backbones for 3D scene understanding.

We report extensive experiments over multiple domains and datasets. We conduct controlled studies to examine specific choices in the Point Transformer design and set the new state of the art on multiple highly competitive benchmarks, outperforming long lines of prior work.

相關工作梳理

第一類,將不規則點云轉換成規則表示:

Projection-based networks

將點云投影成圖片,利用2D CNN進行處理,最后利用多視角特征融合構建最終的輸出特征表示。

在基于投影的框架中,點云中的幾何信息會在投影階段被壓縮。這些方法在投影平面上構建密集像素網格時,可能未能充分利用點云的稀疏特性。投影平面的選擇會顯著影響識別性能,而三維場景中的遮擋現象也可能導致精度下降。

Voxel-based networks

3D體素+3D 卷積
該類方法,如果直接簡單粗暴的使用3D卷積的話,計算量和內存占用會隨著分辨率增加導致體素塊數量呈三次方增長而增加,解決方式是使用稀疏卷積或者非平衡八叉樹結構,一定程度上減少計算量和內存占用。此外,由于體素網格上的量化處理,仍可能丟失部分幾何細節。

第二類,直接操作不規則點云

Point-based networks.

研究人員沒有將不規則點云投影或量化到二維或三維的規則網格上,而是設計了深度網絡結構,直接將點云作為嵌入連續空間的集合來吸收。(pointnet/pointnet++)
許多方法將點集連接成一個圖,并在此圖上進行信息傳遞。(此類目前了解的比較少)
許多方法基于直接應用于三維點集的連續卷積,而無需量化。(此類目前了解的比較少)

本文的研究靈感

在序列處理和二維圖像任務中,Transformer和自注意力網絡的表現可與卷積網絡相媲美甚至更勝一籌。自注意力機制在本研究中具有特殊意義,因其本質上屬于集合運算:位置信息作為元素屬性被處理為集合形式。由于三維點云本質上是具有空間屬性的點集,這種機制特別適合此類數據類型。為此,開發了專門針對三維點云的點變換器層,實現了自注意力機制的應用。

Point Transformer

background

Self-attention operators can be classified into two types: scalar attention [39] and vector attention [54]. 此處文章中公式很清晰,如果還是看不懂的話,可以問問豆包,并讓它給舉個例子,很清晰。

Point Transformer layer

數學運算:
在這里插入圖片描述

在局部鄰域應用vector self-attention,對特征所做的數學運算見上圖公式(3),對應的網絡架構見下圖。(確定提局部鄰域特征的運算是關鍵,后續搭建網絡是水到渠成的事情)

在這里插入圖片描述

Position Encoding

在這里插入圖片描述

Network Architecture

在這里插入圖片描述

Backbone structure

The feature encoder in point transformer networks for semantic segmentation and classification has five stages that operate on progressively downsampled point sets. The downsampling rates for the stages are [1, 4, 4, 4, 4], thus the cardinality of the point set produced by each stage is [N, N/4, N/16, N/64, N/256], where N is the number of input points.

Transition down

見網絡架構圖

Transition up

見網絡架構圖

Output head

見網絡架構圖

問題及解答

問題1:TransitionDown與PointTransformerLayer都是做局部特征提取的,它倆有什么不同?并且兩個塊之間的數據是怎么流動的?

參考了openpoints庫中的代碼:


class TransitionDown(nn.Module):def __init__(self, in_planes, out_planes, stride=1, nsample=16):super().__init__()self.stride, self.nsample = stride, nsampleif stride != 1:self.linear = nn.Linear(3 + in_planes, out_planes, bias=False)self.pool = nn.MaxPool1d(nsample)else:self.linear = nn.Linear(in_planes, out_planes, bias=False)self.bn = nn.BatchNorm1d(out_planes)self.relu = nn.ReLU(inplace=True)# 如果self.stride != 1會減少點數,通過最大池化獲取每個分組的全局特征。def forward(self, pxo):p, x, o = pxo  # (n, 3), (n, c), (b)if self.stride != 1:n_o, count = [o[0].item() // self.stride], o[0].item() // self.stridefor i in range(1, o.shape[0]):count += (o[i].item() - o[i - 1].item()) // self.striden_o.append(count)n_o = torch.cuda.IntTensor(n_o)# print(n_o.device, p.device)idx = pointops.furthestsampling(p, o, n_o)  # (m)n_p = p[idx.long(), :]  # (m, 3)x = pointops.queryandgroup(self.nsample, p, n_p, x, None, o, n_o, use_xyz=True)  # (m, nsample,3+c)x = self.relu(self.bn(self.linear(x).transpose(1, 2).contiguous()))  # (m, out_planes, nsample)x = self.pool(x).squeeze(-1)  # (m, out_planes)p, o = n_p, n_oelse:x = self.relu(self.bn(self.linear(x)))  # (n, out_planes)return [p, x, o]class PointTransformerLayer(nn.Module):def __init__(self, in_planes, out_planes, share_planes=8, nsample=16):super().__init__()self.mid_planes = mid_planes = out_planes // 1self.out_planes = out_planesself.share_planes = share_planesself.nsample = nsampleself.linear_q = nn.Linear(in_planes, mid_planes)self.linear_k = nn.Linear(in_planes, mid_planes)self.linear_v = nn.Linear(in_planes, out_planes)self.linear_p = nn.Sequential(nn.Linear(3, 3), nn.BatchNorm1d(3), nn.ReLU(inplace=True),nn.Linear(3, out_planes))self.linear_w = nn.Sequential(nn.BatchNorm1d(mid_planes), nn.ReLU(inplace=True),nn.Linear(mid_planes, mid_planes // share_planes),nn.BatchNorm1d(mid_planes // share_planes), nn.ReLU(inplace=True),nn.Linear(out_planes // share_planes, out_planes // share_planes))self.softmax = nn.Softmax(dim=1)# 不會減少點數,只是會對每個點,計算其鄰域的self-attentiondef forward(self, pxo) -> torch.Tensor:p, x, o = pxo  # (n, 3), (n, c), (b)# 點特征分別經過三個線性層,獲得q,k,vx_q, x_k, x_v = self.linear_q(x), self.linear_k(x), self.linear_v(x)  # (n, c)# 查找最近鄰x_k = pointops.queryandgroup(self.nsample, p, p, x_k, None, o, o, use_xyz=True)  # (n, nsample, 3+c)x_v = pointops.queryandgroup(self.nsample, p, p, x_v, None, o, o, use_xyz=False)  # (n, nsample, c)p_r, x_k = x_k[:, :, 0:3], x_k[:, :, 3:]for i, layer in enumerate(self.linear_p): p_r = layer(p_r.transpose(1, 2).contiguous()).transpose(1,2).contiguous() if i == 1 else layer(p_r)  # (n, nsample, c)w = x_k - x_q.unsqueeze(1) + p_r.view(p_r.shape[0], p_r.shape[1], self.out_planes // self.mid_planes,self.mid_planes).sum(2)  # (n, nsample, c)for i, layer in enumerate(self.linear_w): w = layer(w.transpose(1, 2).contiguous()).transpose(1,2).contiguous() if i % 3 == 0 else layer(w)w = self.softmax(w)  # (n, nsample, c)n, nsample, c = x_v.shapes = self.share_planes# w.unsqueeze(2)廣播機制x = ((x_v + p_r).view(n, nsample, s, c // s) * w.unsqueeze(2)).sum(1).view(n, c)  # (n, out_planes)return x

由上述開源代碼可以看出來,TransitionDown是對輸入點集進行最遠點采樣,分組,逐點特征提取以及組內最大池化后輸出各個鄰域的特征。
而PointTransformerLayer是對輸入的點集中的每一個點查找k近鄰,然后對每個鄰域做自注意力,獲得每個點的聚合特征,并不會減少點的數量。(自注意力機制的核心是 “同一組數據內部元素之間的注意力交互”(即查詢、鍵、值均來自同一組輸入)。)

PTV2

PTV3

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

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

相關文章

訓練后數據集后部署PaddleOCR轉trt流程

訓練后的模型部署,首先要進行訓練 0.訓練流程見文章 PaddleOCR字符識別,訓練自己的數據集全流程(環境、標注、訓練、推理)-CSDN博客文章瀏覽閱讀1.6k次,點贊53次,收藏23次。PaddleOCR是基于百度飛槳框架的…

《MLB美職棒》美國國球是橄欖球還是棒球·棒球5號位

USAs National Sport Showdown: MLB?? vs NFL Ultimate Guide!從商業價值到文化基因,360解析美國體育王座之爭!添加圖片注釋,不超過 140 字(可選)? 歷史定位 Historical Roots?? MLB:The "Classi…

常見 Linux 網絡命令梳理

在日常運維和排障工作中,網絡相關命令是最常用的一類工具。無論是檢查網絡連通性,還是定位路由問題,又或是分析端口和服務占用,熟悉這些命令都能讓我們更高效地解決問題。本文將從幾個常見的維度來梳理 Linux 下的網絡命令&#x…

Docker 搭建 Gitlab 實現自動部署Vue項目

1、配置要求: 硬件要求: CPU:雙核或以上 內存:4GB或以上 軟件要求:Centos6 或更高版本 2、gitlab鏡像: # 中文版倉庫 #docker pull twang2218/gitlab-ce-zh docker pull gitlab/gitlab-ce 3、gitlab部署目錄 說明:為了跟其他容器區分,gitlab相關容…

如何解決機器翻譯的“幻覺“問題(Hallucination)?

更多內容請見: 機器翻譯修煉-專欄介紹和目錄 文章目錄 一、數據層面優化 二、模型架構改進 三、訓練策略調整 四、評估與迭代 五、前沿方向與挑戰 六、案例:WMT2023幻覺緩解方案 機器翻譯中的“幻覺”(Hallucination)指模型生成與源文本語義無關、邏輯矛盾或事實錯誤的翻譯…

基于STM32+NBIOT設計的宿舍安防控制系統_264

文章目錄 1.1 項目介紹 【1】開發背景 【2】實現需求 【3】項目硬件模塊組成 【4】設計意義 【5】國內外研究現狀 【6】摘要 1.2 系統總體設計 【1】系統功能需求分析 【2】系統總體方案設計 【3】系統工作原理 1.3 系統框架圖 1.4 系統功能總結 1.5 系統原理圖 1.6 實物圖 1.7…

SLAM文獻之-Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping

一、簡介 該論《Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping》是日本先進工業科學技術研究所(AIST)的Koide等人于2022年在IEEE國際機器人與自動化會議(ICRA)上發表的一篇論文。該研究提出了一種基于全局…

【STM32】HAL庫中的實現(七):DMA(直接存儲器訪問)

DMA 是什么? DMA(Direct Memory Access)是 外設直接和內存之間數據搬運的機制,不需要 CPU 參與。 ? 舉個例子:傳統方式: ADC → CPU → RAM 使用 DMA:ADC → DMA → RAM(CPU 不需干…

【LeetCode熱題100道筆記+動畫】字母異位詞分組

題目描述 給你一個字符串數組,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 示例 1: 輸入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 輸出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]] 解釋: 在 strs 中沒有字符串可…

【Kafka】常見簡單八股總結

為什么使用消息隊列? 解耦: 我以我的一段開發經驗舉例: 【Kafka】登錄日志處理的三次階梯式優化實踐:從同步寫入到Kafka多分區批處理 我做過一個登錄日志邏輯,就是在登錄邏輯末尾,加一段寫進數據庫登錄日志…

微信小程序連接到阿里云物聯網平臺

目錄準備階段阿里云配置下載mqtt.min.js文件小程序實現注意小程序配置服務器域名概述:介紹使用微信小程序連接到阿里云平臺的快捷方法和完整過程。 阿里云平臺建立設備,提供mqtt連接參數,小程序借助mqtt.min.js,也就是基于Github下…

2-3〔O?S?C?P? ? 研記〕? 漏洞掃描?AppScan(WEB掃描)

鄭重聲明: 本文所有安全知識與技術,僅用于探討、研究及學習,嚴禁用于違反國家法律法規的非法活動。對于因不當使用相關內容造成的任何損失或法律責任,本人不承擔任何責任。 如需轉載,請注明出處且不得用于商業盈利。 …

LeetCode 刷題【47. 全排列 II】

47. 全排列 II 自己做 解1&#xff1a;檢查重復 class Solution { public:void circle(vector<int> nums, vector<vector<int>> &res,int start){int len nums.size();if(start len - 1){ //到頭了//檢查重復bool is_exist fa…

Https之(一)TLS介紹及握手過程詳解

文章目錄簡介 TLSTLS第一次握手1.Client HelloTLS第二次握手2.Server Hello3.Certificate4.Server Hello DoneTLS第三次握手5.Client Key Exchange6.Change Cipher Spec7.Encrypted Handshake MessageTLS第四次握手8.New Session Ticket9.Change Cipher Spec10.Encrypted Hands…

【WEB 】從零實現一個交互輪播圖(附源碼)

文章目錄 一、輪播圖整體功能規劃二、HTML結構深度解析三、CSS樣式實現細節1. 定位系統詳解2. 顯示/隱藏機制3. 按鈕交互效果實現4. 純CSS箭頭實現5. 指示器&#xff1a;當前位置可視化 四、JavaScript邏輯深入解析1. 核心變量與DOM獲取2. 圖片切換函數&#xff08;核心邏輯&am…

機器學習--PCA降維

一核心部分 1解決的問題&#xff1a;應對高維數據帶來的計算量大、冗余信息多、易出現過擬合等問題&#xff0c;在減少數據維度的同時盡可能保留原始數據的關鍵信息。2核心思想&#xff1a…

leetcode 1277. 統計全為 1 的正方形子矩陣 中等

給你一個 m * n 的矩陣&#xff0c;矩陣中的元素不是 0 就是 1&#xff0c;請你統計并返回其中完全由 1 組成的 正方形 子矩陣的個數。示例 1&#xff1a;輸入&#xff1a;matrix [[0,1,1,1],[1,1,1,1],[0,1,1,1] ] 輸出&#xff1a;15 解釋&#xff1a; 邊長為 1 的正方形有…

知識蒸餾 - 各類概率分布

知識蒸餾 - 各類概率分布 flyfish一、離散概率分布 離散分布描述的是取值為離散值&#xff08;如0,1,2,…&#xff09;的隨機變量的概率規律&#xff0c;通常用概率質量函數&#xff08;PMF&#xff09; 表示某一取值的概率。 1. 伯努利分布&#xff08;Bernoulli Distribution…

軟件測試-Selenium學習筆記

""" 目標&#xff1a; driver.find_element() 需求&#xff1a; 1. 使用driver.find_element()方法 2. 輸入用戶名&#xff1a;admin 3. 輸入密碼&#xff1a;123456 """ # 導包 from selenium import webdriver from time import …

知微傳感3D相機上位機DkamViewer使用:給相機升級固件

寫在前面 本人從事機器視覺細分的3D相機行業。編寫此系列文章主要目的有&#xff1a; 1、便利他人應用相機&#xff0c;本系列文章包含公司所出售相機的SDK的使用例程及詳細注釋&#xff1b;2、促進行業發展及交流。 知微傳感Dkam系列3D相機可以應用于定位分揀、焊接焊縫提取、…