個人筆記 SGPN初學

2021-09-03 08:24:11 字數 2202 閱讀 6903

sgpn是點雲例項分割的首篇**,在google scholar上搜相關點雲例項分割的**,似乎還有一篇是gspn,通過點雲的三維重建去實現例項分割,具體沒有細看,略表不提。sgpn最大的貢獻在於走通了點雲例項分割的整個流程,對於點雲如何進行例項分割給出了可行性方案,sgpn是基於pointnet系列的文章,從整體來看,網路結構簡單、靈活、高效。不過可能是由於例項分割問題本身比較複雜,其後處理的東西相對於pointnet而言多了很多。當然這有可能可以化簡,但無法避免。

sgpn通過相似矩陣的方式完成了例項分割的具體目標,而這也是作者在**中著重描述的地方,闡述了為什麼相似矩陣更適合點雲的例項分割,而不是像mask-rcnn的處理方式一樣,通過目標檢測+fcn的方式實現。而正如作者所言,二維影象具有很強的空間相關性,在點雲中,由於點的無序性,造成了這種空間相關性的消失,所以點雲必須在處理的時候,將整個整體同時進行處理,可以視為是shape-centric structure,網路在學習時,必須基於此進行學習,網路可以不使用相似矩陣表示,但仍應遵循此原則。

接下來對網路的前向結構進行描述:

sgpn的網路結構如上圖所示,在特徵提取階段,使用pointnet/pointnet++的中間層作為特徵提取的網路結構,在具體使用上,是使用了pointnet的倒數第二層卷積層的結果。在特徵提取之後,sgpn將網路分為三個部分,分別為相似矩陣、置信度矩陣和最後的語義分割結果。在相似矩陣中,fsim(i,j)表示第i個點和第j個點的相似度,當我們卡乙個閾值時,即可取到與i點最相似的一些點,而這些點構成了i點所在例項的proposal,相似矩陣中每個點都會作為基準點,故而會構成n個proposal,當然在後續處理中,會對這些proposal進行修剪,輸出不重疊、置信度最高的m個proposal,但相似矩陣是整個輸出的基礎。置信度矩陣和相似矩陣相對應,表示相似度矩陣中第i個proposal的置信度,在實際處理時,作者通過擬合相似矩陣所表示的proprosal和真實的proposal之間的iou來表示該置信度。語義分割結果就較好理解了,只是將pointnet的最後一層接上去,得到結果,在**中額外新增了一層卷積層,這一層可能帶來效果的提公升,但從結構上來說,並不重要。

sgpn的後向結構:

後向結構可能描述不準確,這一塊主要介紹損失函式,因為損失函式控制了網路的整體優化過程,確定了反向傳播的方向,所以暫且稱為後向結構。在sgpn中,損失函式由三部分構成,相似矩陣的訓練使用了double-hinge損失,**將點對分為三種:(1)同乙個例項的點。(2)同一類但不同例項的點。(3)不同類的點。在例項分割中,我們最終關注的是是否在同一例項,但是若不設定第二類,對於語義分割來說,就會發生混亂,會將同一分類不同例項的點與不同型別的點混為一談,但若不加重第二類的損失,則語義分割網路會將同一例項的點和不同例項同一型別的點混淆,所以需要加大損失。在置信度矩陣中,作者直接通過計算iou和**值之間的l2損失來完成模型的訓練。語義分割網路仍使用交叉熵損失,除此之外,作者加入了中值平衡,此舉有利於低點數的類的訓練。double-hinge損失圖如下:

sgpn的後處理:

sgpn的後處理主要為基於相似矩陣結果,處理出最終的proposal的流程,在整體n個proposal中,sgpn首先剪去confidence小於閾值的proposal(default=0.1),然後構建相關proposal,proposal由每一行中相似度小於閾值的點構成,具體閾值為當正負例的比例為4比1時,相似度閾值的平均值,該值的具體統計結果由valid.py完成,儲存於pergroup_thres.txt中,此舉主要針對某一類存在多個例項的情形,若只有乙個例項,則閾值預設為0.2。在構成proposal後,sgpn會剪去proposal中點數小於閾值的proposal,該值預設為200,但在實現過程中,在valid.py中,作者對該值重新進行了統計,即為mingroupsize.txt,最終閾值實為該類下例項平均點數的1/4。在完成上述proposal的構建和剪枝後,sgpn使用非極大值抑制構建最終結果,非極大值抑制使用的iou閾值預設為0.6,具體流程為:若proposals為空,則直接加入,否則遍歷proposals,出現iou>0.6或者與該proposal的交集大於80%,若該集合點數多於proposal,則替換。proposals儲存了整個sgpn的最終結果,在每個proposal中,根據proposal語義分割結果的眾數,調整proposal的語義分割結果,最終得到整個語義分割和例項分割結果。

FPGA初學者 個人學習筆記(二)

有重複操作時 重複操作指的是對向量中多個位操作 進行多個模組的例項引用 可以根據某些引數的定義來選擇性的執行以編輯的 我的理解就是相當於在乙個大的 塊中選擇合適的小的 塊來執行。generate for generate if generate case 必須有genvar關鍵字定義for語句的變數...

FPGA初學者 個人學習筆記(四)

有符號數溢位發生有兩種情況 正正相加得負,負負相加得正 其實負負相加是各自的補碼相加 module top module input 7 0 a,input 7 0 b,output 7 0 s,output overflow assign s a b assign overflow a 7 b 7...

OpenGL 個人初學雜記 入門

下面是個人學習的總結 知識點 1,opengl 它是包含了一系列的 圖形 影象的函式 並不是乙個api 緊緊是由 khronos 組織 制定並維護 規範 2,規範 主要是 制定 函式是如何執行 以及 函式的輸出值 題外話 至於內部每個函式的的具體實現 由opengl 庫的開發者決定,opengl 的...