SparseInst 是一個在 2022 年提出的新的實例分割演算法,受到 CAM 的啟發使用 IAM 的方法,將每一個不同實例區分並強調其區域,並透過 Bipartite Matching 策略取得一對一的預測結果,省去 NMS 的計算,進而加快預測。
接下來將針對 實例分割 與 SparseInst 介紹,
- 實例分割方法
- SparseInst 介紹
- 實測推論速度
- 推論結果
- 參考文獻
實例分割相關方法
實例分割對於一張影像會產生不同實例的預測,即使預測為同一個類別的物體也會分別區分出各別的位置與大小。
實例分割的方法主要分成兩大類:Region-Based 與 Center-Based。
Region-Based 的方法依賴於物體偵測預測出的物體與標註框,接著使用 RoI-Pooling 或 Rol-Align 的方法找出 Segmentation。常見的演算法有 Mask R-CNN。
Center-Based 則是使用 Anchor-Free 的方法直接預測,常見的演算法有 YOLACT、MEInst、CondInst、FCOS 與 SOLO。
SparseInst 介紹
而 SparseInst 則是採用 Bipartite Matching 的方法,避免在後處理時使用 NMS 需要花費大量的時間。
SparseInst 主要的架構分為三個部分:Backbone、Encoder 與 Decoder。
在輸入影像後,影像會分別經過 Backbone、Encoder 與 Decoder,最後輸出一對一的 Mask、Score 與 Class。
- 影像經過 Backbone 後抽取出三層特徵:C3、C4 與 C5。
- 將 C5 輸入 Encoder 的 PPM (Pyramid Pooling Module) 中,擴大感受野 (Receptive Field),並將 C3 與 C4 直接輸入 Encoder。
- 在 Encoder 中分別經過 Conv2D 與 Upsample 將特徵圖的 channel 與 大小分別減少與放大成原始特徵圖的 channel 與 大小。
- 將原始特徵圖與多尺度特徵圖 Concate 成兩倍的 channel ,並經過 Conv2D 將 channel 還原回原始特徵圖的 channel 數。
- 將 Encoder 的輸出作為 Decoder 的輸入,Decoder 將分成 Mask Branch 與 Instance Branch。
- Mask Branch 預測 Segmentation Mask,並與 Instance Branch 預測出的 kernel 經過矩陣相乘取得最後的 Mask 預測結果。
- Instance Branch 使用 IAM 預測出 Class、Score 與 Kernel。
- 透過 Bipartite Matching 匹配出 Mask、Class 與 Score 的組合。
其中,在 Encoder 中使用的 PPM 架構,會將特徵圖透過 Pooling 成多尺寸的特徵圖,在 PPM 的論文中為 1x1、2x2、4x4 與 6x6,經過卷積層將每一個尺寸特徵圖的 channel 減少到 1/n,也就是 1/4,再透過 Upsample 將多個尺寸的特徵圖放大回原始特徵圖的尺寸並與原始特徵圖串接 (Concate) 在一起,最後透過卷積層將輸出的特徵圖 channel 還原至與原特徵圖相同的 channel。
在 Decoder 中的 IAM 對於影像中的每一個實例會產生一個特徵,論文作者提出的 G-IAM 則是對於影像中的每一個實例產生出多組特徵,讓實體的區域能夠更明顯,在論文中對於每一個實例分別產生出 4 組特徵。
實測推論速度
在 SparseInst 論文中的實驗結果可達到 44 FPS,相關實作 [4] 實驗的結果也可達到 44.3 FPS。
實際在不同的平台上測試,加上前處理與後處理的時間,實驗結果如下:
從測試結果來看 AGX Orin 的 FPS 其實堪比桌機的效能!
推論結果
上述的實驗是以 SparseInst 的預訓練模型測試,模型是以 COCO 80 個類別訓練,我們實際使用道路上有車子行駛的影片測試推論效果: