Interactive Model 心得總結

Interactive Model 心得總結

這篇主要紀錄在互動式模型的研究心得,也希望能幫助到同領域的人。

內容會牽涉到不同任務的知識,但主要會以 segmentation 為主,整體可能會有些雜亂,就加減看吧。

Applications of interactive model

在以往較成熟的任務中 (e.g. detection and segmentation),這類 end-to-end model 都是沒有人機互動的成分在的。但隨著應用的發展,人與科技還是少不了互動的環節。甚至,有人的參與可以讓模型表現得更好。以下舉幾個例子來說明佐證:

  • Adobe - Photoshop (Adobe Sensei)
    • PS 應該是最能體現互動式模型或演算法價值的產品,例如影像去背、影片追蹤修改、2D轉3D或風格轉換等等。
  • Smart Phone
    • 雖然相機內的應用大部分還是以自動算法為主,不過像是事後調整對焦或人像打光這些功能,也是互動式模型的價值所在。
  • Labeling Tool
    • 資料在深度學習無疑是最重要的核心之一,但蒐集資料的成本也是頗為昂貴,因此互動式模型在此介入的空間很大,市面上也不少標註平台提供 AI-assisted Tool 來加速標記資料 (e.g. Supervisely)。
    • 傳統上會使用 model 來做預標註 (prelabeling),但是隨著技術成熟,標註的精準度也被極度要求,還有預標註結果的後續修正也極度不符合成本。除非是 prototype 階段,不然都不會使用預標註。另外,能預標註的任務其實也很受限,因為越高維的資料只要標錯就會差很多。
    • 還有利用模型輔助把公開資料集增加標註種類也是範疇之一,例如 Pixel-ImageNet 讓 segmentation 也有一個訓練 backbone 的大型資料集。

Interactive Segmentation

以下會分成幾個小節來談談 interactive 或 segmentation 各個面向的問題

  • Guidance Map
  • Backbone
  • Feature Aggregation
  • Loss
  • Edge
  • Refinement
  • Training
  • Dataset

Guidance Map

提到互動式模型 (interactive model),基本上就會牽涉到 user input 的設計。在傳統的電腦視覺中,GrabCut 是最為人知的互動式切割算法,只要標記大致的前後景資訊,就可以迅速分割出前後景像素。Deep GrabCut for Object Selection 則是參考 GrabCut 的輸入方式,但僅用前景的塗抹區域去產生一個 rectagnle area,然後再用 paper 所提的方法去產生 distance map,而這個 distance map 就是會疊加進輸入的 guidance map

Distance map of DeepGrabCut

guidance map 的選擇很大程度的會影響到 segmentation 結果,對於精準度較高的任務,Deep GrabCut for Object Selectiondistance map 顯然不是適合的設計,因為實際效果很容易破碎,其設計也容許切割結果溢出長方形區域。

Adobe labs 的 Deep Interactive Object Selection 提出一種產生 distance map 的方法,其利用 postive and negative clicks (前後景點) 兩組點數去產生各自的 Euclidean distance map,最後總共會有 3 + 2 (RGB + p/n clicks) 層做為輸入。這種使用點擊的方式,讓使用上更符合直覺,操作上也更快速,因為只要點擊大致的後景區域即可。

Distance map of Deep Interactive Object Selection

Deep Extreme Cut: From Extreme Points to Object Segmentation 簡稱 DEXTR,也是這領域的優秀之作,其產生 guidance map 的方式是將一小範圍的 Gaussian point 放置在物件的四個極點 (extreme point)。這種方式只需要 4 點即可,但這也是它最大的缺點,不能像其他 click-based 的方法有修補的機會。還有像是對於使用者輸入非常不直覺,會需要判斷何處是極點,並且需要用滑鼠瞄準點擊。另外,這篇的 ablation study 做得很完整,很值得做為實作的參考。

Backbone

在 segmentation 任務中,backbone 的選擇其實有很大一部份決定了結果穩不穩定。早期可能會使用 classification 或 detection 的 backbone 直接 transfer learning 來做切割,但效果其實都沒有很好,原因在於原先的設計可能是有害於 segmentation 的。

Dilated Residual Networks 有提到一些原先 resnet 設計對於 segmentation 的危害,例如 max pooling 會導致一些高響應的值,dilated conv 會造成 gridding artifacts,甚至 residual connection 會讓這些效應疊加得更嚴重。還有一些原因像是,bilinear interpolation 是不可學習的 (non-learnable);dilated conv 獲取的長距訊息不一定是有用的;BN 對 task transfer 有害;strided 1x1 conv 會造成 checkerboard artifacts 等等。以上種種缺點會導致預測結果容易空洞、破碎。

Gridding artifacts introduced in DRN

近年來的研究也有提出許多專為 segmentation 任務的 backbone,例如:

  • Deeplab 系列 - v3+
    • dilated convolution
    • decoder
  • Res2Net
    • multi-scale fusion of residual modules
  • HRNet with OCR
    • multi-scale fusion of feature maps
    • Object Contextual Representation

最後提一個比較特別的是 Big Transfer (BiT): General Visual Representation Learning,Google 開外掛用 JFT-300M 和算力訓練出來的 backbone,實際測試發現沒什麼特殊調整,在 segmentation 上也有不錯的遷移能力,不過缺點就是 model 有點肥,卡不夠的情況下 batch size 很有限。

Feature Aggregation

在 feature aggregation 範疇內就屬 encoder 和 decoder 了,其實說穿的也就是把玩 feature 的組合。以下就條列一些 components,但實際效果差異不大,不同組合不同任務都會有不同的結果,需要用試的。

這邊稍微提一下,interactive segmentation 這邊的輸出是 single layer,若把輸出改成 2 layer,讓 decoder 輸出前後景,訊息損失比壓縮成一層還少,因此效果會比較好。

Loss

Loss 可以著墨的地方其實不少,有時候小改動其實就可以有不錯的效果,例如 detection 的 Focal Loss

在 segmentation 中,最後 loss 的計算是 pixel-to-pixel 的分類,其實並沒有用到區域附近的資訊,例如 Improving Semantic Segmentation via Video Prediction and Label Relaxation 就提出 label relaxation 的概念,最後單點的 loss 是去計算 3x3 區域的 loss sum,不過缺點是計算量會變大。

再來,Focal Loss 的概念多少也可以用在 interactive segmentation。通常在這個任務中,easy example 是大部分的前景和背景,在最後收斂時,hard example 都會集中在邊界上,因此稍為的平衡兩者,對結果會有些微的幫助。

講到平衡 loss,DEXTR 本身也有對前景和背景的 pixel 數量去平衡,因為訓練的時候,單物件 (前景) 在影像中與背景的比例很容易過於懸殊。

剛有提到 hard example 都會集中到 edge 上,因此像 BASNet: Boundary Aware Salient Object Detection 也用 3 個 loss (BCESSIMIOU) 去學習 edge。因為 BCE 後期 loss 會過於平坦,其他兩者利用影像上的結構性,去彌補後期學習上的梯度。

Losses introduced in BASNet

既然都提到 hard example,怎麼能不提 OHEM。在 segmentation 中怎麼做,可以參考 [Github] HRNet - OhemCrossEntropy

Edge

上一小節提到,hard example 在訓練後期都會集中到 edge 附近,雖然 loss 的挑選可以有些微改善,但是畢竟不是直接的去學習 edge,所以改善有限。

Salient Object Detection 有一時期的主流也是在研究 edge / boundary 的問題,基本上都是有些許的提升,改善不少邊界破碎的問題。

  • Selectivity or Invariance: Boundary-aware Salient Object Detection
  • Towards High-Resolution Salient Object Detection
  • EGNet: Edge Guidance Network for Salient Object Detection

Segmentation 針對 edge 提出改善的其實有不少 paper,以下就舉兩個例子:

  • [PoolNet] A Simple Pooling-Based Design for Real-Time Salient Object Detection

    • 基本架構就是 U-shape FPN structure 在去加上 Pyramid Pooling Module (PPM) 及 Feature Aggregation Module (FAM) 組合而成。
    • 中間的連結就是去組合不同 stage 的 feature 和 guidance,然後利用 3 個 residual block 去產出並學習 coarse-to-fine 的 edge,最後再用學習出來的 edge 做為 guidance 去做最後的 feature fusion 輸出。
    • 因為架構稍微大了點,缺點就是參數量偏多。
  • [GSCNN] Gated-SCNN: Gated Shape CNNs for Semantic Segmentation

    • 基本架構為 DeepLabV3+,加上提出 Shape Stream Attention Module 去學習 edge。
    • Edge 是由 Canny egde 計算而來的,但這成為它最大的限制,畢竟 edge 的取得很大程度會依賴輸入影像的狀況,用在場景單一的比賽中可能可行,但是實際影像的 edge 可能不是這麼穩定。
    • 這篇 paper 產出的過程中,也曾經是 cityscapes#1,而且並沒有用額外的 data。

雖然針對 edge 的工作不少,但畢竟 edge 的來源會依賴輸入影像,穩定度會受影響,改善幅度也有限。

Refinement

事後 refinement 面向的工作也不少,比較早期有名的應該就是 DeepLabV1Fully Connected CRFs,作用是去優化邊緣的預測結果,但是在 DeepLabV3 後就被移除了。

Fully Connected CRFs introduced in DeepLabV1

提一下 Kaming He 大神組的 paper - PointRend,基於 Mask RCNN 去優化 mask branch 的一個工作,它將切割視為渲染問題,對不確定性高的點去做採樣,並且重新用 NN 分類。因為原作是多類的,改成單類會無法沿用原作的作法,但是可以利用 entropy 的概念去選 p=0.5 的點來模擬一樣的概念,亂度最高等於不確定性最高。但這個 work 有一個嚴重的缺陷是,雖然能夠很好的去採樣到邊界附近的點,但最後卻用 MLP 去做重新分類,這樣會缺乏了 image context,實際效果也是不太穩定。

Refinement introduced in PointRend

HRNet 團隊也發過一篇 SegFix: Model-Agnostic Boundary Refinement for Segmentation,也是針對邊界優化的工作,利用 boundary 和 direction 兩個分支去學習出 offset map,然後優化邊界的像素。在 cityscapes benchmark 顯示,用在 DeepLabV3 / HRNet / Gated-SCNN 都有 0.5 ~ 1 % 的改善。

Refinement introduced in SegFix

講回 interactive segmentation 這邊的 paper - f-BRS,它是針對 feature map 去做迭代優化,針對不同深度的 feature 優化,可以在預測結果與速度上取捨,實際測起來效果沒有差太多。

Refinement introduced in f-BRS

最後做個總結,不管是哪種 refinement,目前實測結果都不太優,原因都是會導致預測的邊界破碎或不平滑,比較不符合 interactive segmentation 的應用場景。比如像是 f-BRS 將優化關掉,反而會讓結果更為穩定。

Training

互動式模型訓練的方式會跟模型的設計方式有關,會分成兩種,一種是一般常見的訓練方式,前饋然後反向更新。另一種則是 iterative training,例如 f-BRS,這個訓練方式主要是去模擬實際的互動。其中取樣點的生成也是有好幾種策略,可以參考 Deep Interactive Object Selection。另外,f-BRS 作者有在 repo 回應說,其實隨機選點和用策略選的結果差不多,並沒有顯著的差異。

近年來許多 augmentation、distillation 或 self-supervised learning 等方法的推陳出新,雖然有嘗試過像 Unsupervised Data Augmentation for Consistency Training 這類的訓練方式,但很多新方法其實都是有錢人的玩具,只有一兩張卡資源的人還是玩不了阿。(Q_Q)

最後提一下 transform 的部分,除了一般的 crop、rotation 之類的轉換,互動式要考慮到邊界的狀況,因此要對轉換完的圖像,再對邊界進行內縮 padding,否則預測結果會與邊界偶爾有個空隙。

Dataset

訓練的資料來源品質會影響評測結果的上限,看過不少 issues 都有再反應這件事。Segmentation task 中常用的 baseline,如 VOC 和 SBD 的標註就過於粗糙。再來像是 COCO 的物件偏小,要考慮應用場景的問題。DAVIS dataset 主要是做 video segmentation,標註品質不錯,取樣後也可以用來訓練單張影像。近期不少 paper 使用 LVIS dataset,其標註品質頗好,數量及類別也很多。

雖然 VOC 和 SBD 標註略為粗糙,不過對於做 prototype 還是滿好用的,短時間就能看到成果。

另外,像是大公司都有天量級 dataset,例如 Google 內部使用的 JFT-300M。或是像 FAIR 出產的 Exploring the Limits of Weakly Supervised Pretraining,也拿 billions 級別的 instagram image 去預訓練。這些天量級別的 dataset 也間接證明了一件事,巨量資料是有機會將模型表達力推到模型容量的上限。而且訓練出來的準確度,真的不是一個級別的差距。

Other interactive models

其實不同的任務都有做互動式的空間,簡單的像是 GAN 這類的參數調控,複雜的就像 interactive segmentation 這類需要設計的任務。以下就舉一些例子,例如 detection 可以設計 auto-fitting;tracking 目前主流就是框 template feature 去追蹤,可以加入 temporal update,或者使用 segmentation 代替;image matting 可能可以針對 trimap 去做設計之類的。

Summary

目前研究到現在,各種複雜的組件組合或是特殊訓練方式,並不會帶來巨大的提升。感覺最好的方案反而是簡單的作法,或者是針對符合場景的 data 去做篩選,還有把針對問題的 transform 搞好。如果 segmentation 只能選一個 model,目前應該最推 HRNet + OCR,簡單又好用。

做 Segmentation 到現在也感覺到一個瓶頸,除了 multi-scale、NAS、attention,不知道還能玩什麼花樣了。考量到實際產品端,backbone 不能太大太新,考量到速度問題,又不能無限堆疊 feature 或 attention,資源有限的情況下,訓練方式受限,能採用的方案感覺其實也不多。比較不花力氣的大概就是針對 loss 或 regularization 去設計,或者只能等好心人 release 更好的 backbone。

Author

Mo1cibo

Posted on

2021-06-05

Updated on

2021-06-07

Licensed under

Comments