G3.3 看完整群點之後,怎麼回頭判斷每個點?
本篇重用1 篇
看一張椅子的點雲,怎麼知道哪個點是椅腳?
只看一個點的 ,不一定能判斷它是椅腳還是椅背。看到整群點大致形成椅子,再回頭看這個點在其中的角色,會合理很多。
這就是上一篇「自己的資訊加共同環境」在 point cloud 上的用法。Qi、Su、Mo 與 Guibas [1] 的 PointNet 用共享逐點 MLP、對稱 pooling 與兩種輸出 head,建立一個直接處理點集的模型。
先替每個點看同一份特徵
令
所有點使用相同 。每個 channel 可以學到某個形狀相關訊號,例如有沒有某種局部位置特徵。接著在每個 channel 上取最大值:
這裡的 max 是逐 channel 取,不一定所有 channel 都選中同一個點。它描述「整群點裡,最強的這種訊號有多大」。
重新排列只改比較順序,不改最大值,所以 。分類 head 因此 permutation-invariant。
逐點答案,把共同摘要送回去
如果要每個點一個標籤,不能只輸出 。我們把自己的 與相同的全局 接在一起,記作 concatenation:
重排輸入時, 跟自己的點搬動, 不變,且 在各點共享。於是
這就得到逐點 equivariance。全局類別與逐點標籤不是兩個矛盾要求,只是同一份特徵用不同 head 讀取。
Max 到底把哪些點留下?
對固定的 feature ,每個 channel 至少有一個點達到最大值。從每個 channel 選一個 argmax,最多 個點就足以保留這一份 。
這些點形成一組 critical points。若刪掉其他點而沒有改變任何 channel 的最大值,global feature 不變;加入一個在每個 channel 都比現有 max 小的點,也不影響它。
這解釋了 max 摘要在缺少部分點的情況下的穩定性,但不是任意刪點都安全。若刪掉支撐重要 channel 的 critical point,最大值就會改變。也不能由「少數點足以保留這次摘要」推出完整幾何必然只需少數點。
重複相同點不改 max,所以它不擅長直接記錄 multiplicity。若任務真的要分辨數量,應加入 count、sum 或其他能保留這件事的資訊。
順序問題解決了,轉動問題還在
若 直接吃絕對座標,旋轉後 一般不等於 。Max pooling 只證明重新排序沒有差,沒有證明座標旋轉沒有差。
PointNet 還使用可學的 alignment network,把 input 或 features 轉到模型偏好的表示。但可學的對齊,不等於整個網路對所有旋轉有嚴格保證;要有後者,仍需檢查 alignment 的 action 與後續運算。
因此我們會分別測 permutation defect 與 rotation defect,而不因模型叫 PointNet 就把兩者合併報告。座標幾何的設計會在 G6 再處理。
補充點的座標不是資料列編號
使用座標是讀取幾何內容;使用「第 i 列」的 embedding 是依賴存放順序。兩者都像位置資訊,但只有後者會直接破壞一般 permutation equivariance。
課堂提問
如果刪去一半點,但每個 feature channel 的最大值仍由留下的點達到,PointNet 的 global feature 會變嗎?
先想一想,再展開看整理後的答案
不會,對這個固定 φ 而言每個 max 都相同。但逐點答案的集合縮小了;這也不代表任意刪去一半點都符合相同條件。
動手看一次
切到 max,先重排,再把整組點重複一次。Max 對兩種操作都不變,但這不代表它記住了點數;請對照正文的 critical points。