日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytorch 三维点分类_三维点云分类与分割-PointNet

發(fā)布時(shí)間:2024/9/3 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch 三维点分类_三维点云分类与分割-PointNet 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

PointNet是對(duì)點(diǎn)云數(shù)據(jù)直接進(jìn)行學(xué)習(xí)的開山之作, 這里結(jié)合PointNet-Pytorch代碼,對(duì)PointNet網(wǎng)絡(luò)結(jié)構(gòu)與其思想進(jìn)行闡述和分析。

點(diǎn)云數(shù)據(jù)的特性:

點(diǎn)云數(shù)據(jù)不同于圖像數(shù)據(jù),他有三個(gè)重要的特征,也正是基于這些特征,才有PointNet網(wǎng)絡(luò)的一系列的設(shè)計(jì)。

1)點(diǎn)云的無序性

這個(gè)要對(duì)比圖像數(shù)據(jù)來理解,一團(tuán)點(diǎn)云數(shù)據(jù)中有很多個(gè)點(diǎn)數(shù)據(jù),這些點(diǎn)在點(diǎn)云文件里無論以什么順序出現(xiàn),它們指代的信息并不改變。相反,一張圖片里的點(diǎn)在圖像里已經(jīng)按照固有的順序排列好了。論文里利用了maxpooling這個(gè)對(duì)稱函數(shù)來提取點(diǎn)云的數(shù)據(jù)特征。

2)點(diǎn)與點(diǎn)之間的空間關(guān)系

每個(gè)點(diǎn)都包含了空間坐標(biāo)信息,這些信息之間構(gòu)成一定的集合空間關(guān)系,為了利用這種關(guān)系,論文作者提出了將局部特征和全局特征進(jìn)行串聯(lián)的方式來聚合信息。

3)不變性

這樣理解,一團(tuán)點(diǎn)云數(shù)據(jù)進(jìn)行旋轉(zhuǎn)和平移,它代表的目標(biāo)不會(huì)發(fā)生改變。論文在進(jìn)行特征提取之前,先對(duì)點(diǎn)云數(shù)據(jù)進(jìn)行對(duì)齊來保證不變性。 通過訓(xùn)練一個(gè)小型的網(wǎng)絡(luò)得到一個(gè)旋轉(zhuǎn)矩陣,用這個(gè)矩陣與點(diǎn)云數(shù)據(jù)相乘來實(shí)現(xiàn)對(duì)齊操作。

數(shù)據(jù)集

以論文里用到的數(shù)據(jù)集是shapenet, 包含了16類樣本,以其中的一類Airplane的文件夾來說明,里面有很多.pts格式的文件,這就是不同飛機(jī)的點(diǎn)云格式,里面放的就是一個(gè)個(gè)坐標(biāo)點(diǎn),坐標(biāo)經(jīng)過了歸一化處理。

在讀取數(shù)據(jù)的dataloader里,對(duì)每個(gè)數(shù)據(jù)進(jìn)行了中心化和隨機(jī)增強(qiáng),而且在輸入網(wǎng)絡(luò)前對(duì)樣本進(jìn)行了特定數(shù)量的重采樣,這樣保證了輸入到網(wǎng)絡(luò)里的樣本的點(diǎn)數(shù)是一樣的。

網(wǎng)絡(luò)結(jié)構(gòu)及其實(shí)現(xiàn)

1)對(duì)于一維卷積conv1d

假設(shè)對(duì)所有的樣本進(jìn)行了2500個(gè)點(diǎn)的重采樣,樣本的尺寸為2500*3,由于pytorch卷積的要求,輸入前進(jìn)行轉(zhuǎn)置,變成3*2500,假定batch_size = 1, 輸入尺寸就是1*3*2500,

假設(shè)做的第一步卷積操作是conv1 = torch.nn.Conv1d(3, 64, 1),即輸入通道=3,輸出通道=64,卷積核大的大小為1(在tensorflow里為1x3, 用conv2d實(shí)現(xiàn),本質(zhì)上是一樣的),卷積核第二個(gè)維度是由in_channels來決定的,所以實(shí)際上卷積大小為in_channels*kerner_size,這里為3*1。

進(jìn)一步理解一下,在第一個(gè)卷積層中,使用conv1對(duì)x進(jìn)行卷積的時(shí)候,實(shí)際上是使用64個(gè)3*1的卷積核進(jìn)行卷積,輸出尺寸應(yīng)該是1*64*2500,其中1還是batch size。

畫了個(gè)草圖來解釋這個(gè)卷積過程點(diǎn)云數(shù)據(jù)一維卷積過程

在了解了一維卷積之后,網(wǎng)絡(luò)就變得很簡(jiǎn)單了。對(duì)于分類問題,如果把batch size記為n,樣本在網(wǎng)絡(luò)中的變化就是n*3*2500 ——> n*64*2500 ——> n*128*2500 ——> n*1024*2500 ——> n*1024*1(max pooling后) ——> n*512*1 ——> n*256*1 ——> n*16*1 (本次實(shí)驗(yàn)樣本共有16類)

再來看網(wǎng)絡(luò)結(jié)構(gòu):

mlp是通過共享權(quán)重的卷積實(shí)現(xiàn)的,第一層卷積核大小是1x3(因?yàn)槊總€(gè)點(diǎn)的維度是xyz),之后的每一層卷積核大小都是1x1。特征提取層只是把每個(gè)點(diǎn)連接起來而已。經(jīng)過兩個(gè)空間變換網(wǎng)絡(luò)和兩個(gè)mlp之后,對(duì)每一個(gè)點(diǎn)提取1024維特征,經(jīng)過maxpool變成1x1024的全局特征。再經(jīng)過一個(gè)mlp(代碼中運(yùn)用全連接)得到k個(gè)score。分類網(wǎng)絡(luò)最后接的loss是softmax。

本文的兩個(gè)亮點(diǎn):

1.空間變換網(wǎng)絡(luò)解決旋轉(zhuǎn)問題:

三維的STN可以通過學(xué)習(xí)點(diǎn)云本身的位姿信息學(xué)習(xí)到一個(gè)最有利于網(wǎng)絡(luò)進(jìn)行分類或分割的DxD旋轉(zhuǎn)矩陣(D代表特征維度,pointnet中D采用3和64)。其中的原理為,通過控制最后的loss來對(duì)變換矩陣進(jìn)行調(diào)整,pointnet并不關(guān)心最后真正做了什么變換,只要有利于最后的結(jié)果都可以。

pointnet采用了兩次STN,第一次input transform是對(duì)空間中點(diǎn)云進(jìn)行調(diào)整,直觀上理解是旋轉(zhuǎn)出一個(gè)更有利于分類或分割的角度,比如把物體轉(zhuǎn)到正面;第二次feature transform是對(duì)提取出的64維特征進(jìn)行對(duì)齊,即在特征層面對(duì)點(diǎn)云進(jìn)行變換。

2.maxpooling解決無序性問題:

當(dāng)一個(gè)N×D在N的維度上隨意的打亂之后,其表述的其實(shí)是同一個(gè)物體。因此針對(duì)點(diǎn)云的置換不變性(無序性),其設(shè)計(jì)的網(wǎng)絡(luò)必須是一個(gè)對(duì)稱的函數(shù):

我們經(jīng)??吹降腟UM和MAX等函數(shù)其實(shí)都是對(duì)稱函數(shù)

因此我們可以利用max函數(shù)設(shè)計(jì)一個(gè)很簡(jiǎn)單的點(diǎn)云網(wǎng)絡(luò),如下:

那么為什么要最后變換到1024維后再做MAX操作呢,這是因?yàn)樵?維上,輸出的全局特征僅僅繼承了三個(gè)坐標(biāo)軸上最大的那個(gè)特征,每個(gè)點(diǎn)損失的特征太多了,因此我們不妨先將點(diǎn)云上的每一個(gè)點(diǎn)映射到一個(gè)高維的空間(例如1024維),目的是使得再次做MAX操作,損失的信息不會(huì)那么多。

分割網(wǎng)絡(luò):

對(duì)于點(diǎn)云分割任務(wù),我們需要將局部很全局信息結(jié)合起來。

這里,作者將經(jīng)過特征變換后的信息稱作局部信息,它們是與每一個(gè)點(diǎn)緊密相關(guān)的;我們將局部信息和全局信息簡(jiǎn)單地連接起來,就得到用于分割的全部信息。

總結(jié)

以上是生活随笔為你收集整理的pytorch 三维点分类_三维点云分类与分割-PointNet的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。