沒錯又是我,實驗是越來越好了。
總之學弟講了一個 ModelNet40 有人 Classfication 的 Overall ACC 做到 95%,
所以大頭很開心地要我去 Survey 一下前幾名的方法來做。
目前第一名的方法就是這款 POINTVIEW-GCN,拿多視角的方法來分類。
主架構有兩個亮點:
1. NonLocal, Local 的 Skip connection:
簡單來說就是每層神經網路分成兩路輸出, Local 會直接進 Skip connection 後 Concat 到最後一層;
NonLacl 放進下一層繼續轉。
2. Selective View-Sampling(SVS):
從多視圖裡面找最好的那張,再傳下去。
個人認為是簡單的資料增強。
這個架構是怎麼更新參數呢?
首先我們知道這個架構有四個視圖(G),每個的後綴是 j 。
先來看 Local Conv 的部分,
在每個視圖裡面的特徵為:
L為 ReLU 函數。
A是與鄰居關係的矩陣(抓特徵的意思,視為 KNN 結果。)
右側的Fj 應該是誤植,應該是表上一層 F(j-1) 的意思。
W,alpha 是訓練來的權重參數、矩陣。
完成 Local Conv 的 Fj 會送進 Skip connection 到最後一層。
有 Local 當然有 NonLocal 啊!
那 NonLocal 是 Non 在哪裡?
NonLocal Conv 其實就是多了一個更新比較遠節點的部分,
(因為 Local Conv 做了一次 KNN,
而 NonLocal Conv 的 input 是 Local Conv 的 output,
這兩個的 Conv 其實有前後的關係。)
論文裡面利用 message 函數 來做這件事情。
j 是 G視圖 的層級,i,p 是 node 的編號(F有 N 個 node,i & p 屬於 N。)
這樣應該比較好理解。
最後那個 R(.) A.K.A 相關函數,我一直看不太懂,
總之在程式碼裡面是長這樣的,首先 input 是一顆尺寸 (X,Y,Z) 的 Feature:
R(.) |
有行 參數 20 的,是用 repeat 做出來的。
所以我們用 R(.)得到 message 函數 的結果 = Feature M。
最後利用 M 來更新參數:
實際上就是 concat 起來。 |
經過 R(.)還有 C(.),據論文所說是要更新參數啦,
寫得有模有樣,但是很懷疑單純 concat 起來是要更新什麼參數?
或許進到下一層 Conv 可以利用這些資訊?
加上這篇只有給出 Overall 的 數據(做最好的那次數據,不是平均。),
這邊我打個大大的問號。
以上,大概是這篇的簡介。
我對於這篇貢獻的理解是讓最後的 Feature 保留粗的特徵(因為只抓附近鄰居+少層 Conv),
越後面的 G 視圖 特徵越抓越遠、越細。
與我手上這篇 DGCNN 的做法最大的區別應該是少了每層 KNN + 多視圖的 SVS。
Skip connection it’s worked for me.
附上論文連結:https://ieeexplore.ieee.org/document/9506426
與 GIthub Repo:https://github.com/SMohammadi89/PointView-GCN
以上