G3.3 5 分鐘閱讀 2026年10月

G3.3 看完整群點之後,怎麼回頭判斷每個點?

本篇重用1 篇

看一張椅子的點雲,怎麼知道哪個點是椅腳?

只看一個點的 (x,y,z)(x,y,z),不一定能判斷它是椅腳還是椅背。看到整群點大致形成椅子,再回頭看這個點在其中的角色,會合理很多。

這就是上一篇「自己的資訊加共同環境」在 point cloud 上的用法。Qi、Su、Mo 與 Guibas [1] 的 PointNet 用共享逐點 MLP、對稱 pooling 與兩種輸出 head,建立一個直接處理點集的模型。

先替每個點看同一份特徵

令

hi=ϕ(xi)∈Rm,h_i=\phi(x_i)\in\mathbb R^m,

所有點使用相同 ϕ\phi。每個 channel 可以學到某個形狀相關訊號,例如有沒有某種局部位置特徵。接著在每個 channel 上取最大值:

zc=max⁡ihi,c,c=1,…,m.z_c=\max_i h_{i,c},\qquad c=1,\ldots,m.

這裡的 max 是逐 channel 取,不一定所有 channel 都選中同一個點。它描述「整群點裡,最強的這種訊號有多大」。

重新排列只改比較順序,不改最大值,所以 z(PX)=z(X)z(PX)=z(X)。分類 head ψ(z)\psi(z) 因此 permutation-invariant。

逐點答案,把共同摘要送回去

如果要每個點一個標籤,不能只輸出 zz。我們把自己的 hih_i 與相同的全局 zz 接在一起,記作 concatenation:

yi=η([hi,z]).y_i=\eta([h_i,z]).

重排輸入時,hih_i 跟自己的點搬動,zz 不變,且 η\eta 在各點共享。於是

yi′=η([hπ(i),z])=yπ(i).y_i'=\eta([h_{\pi(i)},z])=y_{\pi(i)}.

這就得到逐點 equivariance。全局類別與逐點標籤不是兩個矛盾要求,只是同一份特徵用不同 head 讀取。

Max 到底把哪些點留下?

對固定的 feature ϕ\phi,每個 channel 至少有一個點達到最大值。從每個 channel 選一個 argmax,最多 mm 個點就足以保留這一份 zz。

這些點形成一組 critical points。若刪掉其他點而沒有改變任何 channel 的最大值,global feature 不變;加入一個在每個 channel 都比現有 max 小的點,也不影響它。

這解釋了 max 摘要在缺少部分點的情況下的穩定性,但不是任意刪點都安全。若刪掉支撐重要 channel 的 critical point,最大值就會改變。也不能由「少數點足以保留這次摘要」推出完整幾何必然只需少數點。

重複相同點不改 max,所以它不擅長直接記錄 multiplicity。若任務真的要分辨數量,應加入 count、sum 或其他能保留這件事的資訊。

順序問題解決了,轉動問題還在

若 ϕ\phi 直接吃絕對座標,旋轉後 ϕ(Rxi)\phi(Rx_i) 一般不等於 ϕ(xi)\phi(x_i)。Max pooling 只證明重新排序沒有差,沒有證明座標旋轉沒有差。

PointNet 還使用可學的 alignment network,把 input 或 features 轉到模型偏好的表示。但可學的對齊,不等於整個網路對所有旋轉有嚴格保證;要有後者,仍需檢查 alignment 的 action 與後續運算。

因此我們會分別測 permutation defect 與 rotation defect,而不因模型叫 PointNet 就把兩者合併報告。座標幾何的設計會在 G6 再處理。

補充點的座標不是資料列編號

使用座標是讀取幾何內容;使用「第 i 列」的 embedding 是依賴存放順序。兩者都像位置資訊,但只有後者會直接破壞一般 permutation equivariance。

PointNet 用共享逐點 feature 與 global max 表示形狀;分類讀全局,分割則把 local 與 global 接回每個點。
PointNet 用共享逐點 feature 與 global max 表示形狀;分類讀全局,分割則把 local 與 global 接回每個點。

課堂提問

如果刪去一半點,但每個 feature channel 的最大值仍由留下的點達到,PointNet 的 global feature 會變嗎?

先想一想,再展開看整理後的答案

不會,對這個固定 φ 而言每個 max 都相同。但逐點答案的集合縮小了;這也不代表任意刪去一半點都符合相同條件。

動手看一次

切到 max,先重排,再把整組點重複一次。Max 對兩種操作都不變,但這不代表它記住了點數;請對照正文的 critical points。

快速回顧一下

想一想Max 的 argmax 在所有 channel 相同嗎?

想一想PointNet 的排序保證來自什麼?

想一想逐點分類為什麼 concat local feature?

參考文獻

  1. Qi、Su、Mo 與 Guibas(2017),PointNet
  2. Zaheer 等人(2017),Deep Sets