分類: semantic segmentation

  • [論文筆記] SegGCN – 利用 Fuzzy Spherical 改善 Octree guided CNN 的分割點雲方法

    因為教授可能想讓我做 partial & segmentation,

    所以被 assign 了這篇論文。
    SegGCN 做了兩件事情:

    一是 Fuzzy Spherical 的波波獸(Proposal),
    可以有效提升舊有 Hard Spherical 的準確度、提升稀疏點雲的 robustness。
    二來提出了新的 SegGCN 架構,只有提到效能還不錯,
    主要是 Decoder 端的 Resnet block 換成 1×1 的 Conv。
    這篇主要比較對象是 KPConv。
    首先來了解 Fuzzy Spherical,
    Fuzzy Spherical 是 base on Hard Spherical。
    而 Hard Spherical 是 Octree guided CNN 那個流派提出來的,
    Octree guided CNN 主要的貢獻就是用 球座標 來處理點雲。
    為了更好的節省球座標的記憶體容量,所以用了八元樹(Octree)來處理。
    有點混亂?
    沒關係,你只要知道 Hard Spherical  是球座標的一種模式就可以了。
    用論文圖來解釋:
    圖(一)

    假設把球座標投影至二維平面(後面會提到特別指 XY平面)。
    左邊的 (a) 就是 Hard Spherical,每個區塊有個別的權重、越靠近原點的區塊權重越大,
    這就是 Hard Spherical  的核心概念。  
    Hard Spherical  的三維概念大概長這樣:
    圖(二)
    在論文裡面 Hard Spherical 尺寸是 n * p * q ,但讀論文的時候要注意:
    總共有 n * p * q 個 Bins
    "n , p , q"在這裡全都代表分割的個數,不是軸的概念。
    論文裡面還是用球座標的 


    {displaystyle (r, theta , varphi )}

    但是這裡 Hard Spherical 會遇到兩個問題:
    第一
    看到 圖(一) 左側的 s,t 點,當兩點很接近 Bin 邊緣的時候,
    空間位置接近、但是權重會落差很大。
    第二
    見圖(三),當兩點 phi 角呈正負關係,且其餘兩維不變時,
    在 Hard Spherical 裡面權重會不一樣。
    附註.這裡的權重為 

    k for Hard Spherical
    圖(三)
    所以 Fuzzy Spherical 的解決方法就是把 半徑 r 軸線性化、不分 Bin 了。
    想像一下,把上面 圖(一) 視為 球座標 對 XY軸 的投影。
    使用新的 k 計算方法:
    比較一下 Fuzzy Spherical(上) 與 Hard Spherical(下) 的特徵方程式:
    可以看到有個靠北難念的 ξk 向量,
    那代表在 Fuzzy Spherical 中所有點都考慮隔壁鄰居 k 的關係向量。
    而 Hard Spherical 是 Fuzzy Spherical 的特例,把 ξk 變成 one-hot 向量去處理掉了。
    (one-hot 向量 這篇 講得不錯,建議閱讀。)

    再來是 SegGCN 架構:

    比較特別的是把編碼器把權重複製進解碼器,這樣就不用多餘的計算(?)
    還有解碼器用 1×1 的 Conv 把 Resnet block 換掉,結論是比較快。

    最後給了個在 SegGCN 中使用 Fuzzy 與 Hard 的比較圖,
    這張圖同樣在 8192 點的資料下面做的、變因是 dropout 的參數。
    可以看到 Fuzzy 的很 robust。
    但是用哪個資料集就沒有明講,
    可能是什麼獨家機密吧(#?
    結論:
    1. Fuzzy Spherical 在取樣點數少的情況下較 robust,換句話說 Acc 也比較高。
    2. SegGCN 在 S3DIS 與 ScanNET 資料集下比 KPConv 快 100倍。
    (但是 mIOU 跟 mAcc 是輸的xD)

    他們給的解釋是 16 for 20 都有贏啦
    (剩下四個巨爛)
    然後自己搞了個 Kernal comparison 說我們把 Fuzzy Spherical 帶進 KPConv 有贏!

    用哪個資料集、怎麼比的都不知道xD

    哇,如此厚顏無恥之人!
    好總之,晚安。
  • 何謂利用語義分割(semantic segmentation)分類三維點雲?

    前言:

     因為左岸的論文導讀只有一份,而且抄來抄去跟大學生做畢業專題一樣。
     所以我打算自己來幫自己讀的 paper 下註解。

    這篇文章要告訴你兩件事:


    一、語義分割在幹嘛、原理是什麼?


    二、語義分割怎麼用在分類點雲?

    我這篇不會講太多關於 NLP 實務上怎麼做、怎麼實現…

    只會概念式的讓你知道:語義分割與點雲的關係






    一、語義分割在幹嘛、原理是什麼?



     講語義分割就要稍微介紹一下 NLPNatural Language Processing

     NLP 就是把 自然語言(人類講的話:英文、中文、德文…)轉成機器可以用的東西,
     基本上這就是 NLP 在做的事情。

     口說無憑,舉個例子:

     假設"Costco"這個詞在電腦眼裡看起來是"0100" ;

     "IKEA"在電腦眼裡看起來是"1111"
     (BTW 這邊的字串代表向量)

     兩個差了 3  bits
     那麼這兩個詞在做 NLP 的時候就不會視為同義詞
     電腦不會跟你說:IKEA?我都念 Costco ლ(´ڡ`ლ)

     如果是"Ben"與"Benny"的話,因為"Ben"是"Benny"的縮寫,
     所以電腦做 NLP 的時候 這兩個詞的向量就會很接近

     簡單來語義分割的用途就是把句子裡面的詞一個一個切出來看向量,
     比較資料庫裏面的向量找出使用者到底想要表達什麼意思?
     通常語音辨識、輸入會大量用到這個功能

     NLP 裡面還有很多東西可以講,這只是大概介紹要用到的功能。

    二、語義分割怎麼用在分類點雲?


     首先我要引用這張圖片:

     

    (ftrom https://arxiv.org/abs/1801.07829 , Yue WangYongbin SunZiwei LiuSanjay E.SarmaMichael M. BronsteinJustin M. Solomon

     我們可以看到機身的顏色不一樣(廢話)

     黃色代表與選取的紅點關係相近的點

     其實這是一張利用"語義分割"做"飛機部件分割"的訓練過程,
     你可以看見由左至右,原本我們找的 紅點 只跟物理距離相近的點有關;

     但是越訓練越往右走,你會發現與 紅點 有關的逐漸像是相同的部件而不是物理距離。
     最後飛機被分為:機翼、渦輪、機身…等各部件。

     在這裡的原始檔案可能是 .ply 或是 .off 都可以
     原理就是把頂點的 x,y,z 拿出來去做部件分割

     然後我們就會把被語義分割出來的各部件拿去做訓練,這樣就可以取得更好的結果。
     (譬如說有些機掰的倒三角翼飛機就不是乖乖的長這樣,但我們可以辨識成飛機。)

     你會問為什麼飛機兩邊的翼明明絕對位置不一樣,還能訓練出來?

     因為其中利用到 NLP 的句子的語義分割,類似"Ben是我"、"我是Ben"
     為同義句,在數學中就是 幾何變換 geometric transformation)

     可以寫矩陣轉換過去,至於怎麼寫就那又是一門學問了
     先交給我們電信仔就行惹 ლ(´ڡ`ლ)
     
     有時間再來談談實作,或許先從怎麼 initial data 開始是不錯的選擇?