Deep Learning 101, Taiwan’s pioneering and highest deep learning meetup, launched on 2016/11/11 @ 83F, Taipei 101
AI是一條孤獨且充滿惶恐及未知的旅程,花俏絢麗的收費課程或活動絕非通往成功的捷徑。
衷心感謝當時來自不同單位的AI同好參與者實名分享的寶貴經驗;如欲移除資訊還請告知。
由 TonTon Huang Ph.D. 發起,及其當時任職公司(台灣雪豹科技)無償贊助場地及茶水點心。
YouTube | Facebook | 回 GitHub Pages | 網站 | Hugging Face Space
Instance Segmentation
2020/05/01 顏志翰 (Bean)
語義分割的目標是將圖像中的每個像素分類到預定義的語義類別之一 [2, 3, 5]。簡單來說,它只關心「這是什麼類別」[2, 4]。例如,在一張照片中,語義分割會把所有的牛都標記為「牛」這個類別,不論是哪一隻個體 [4]。換句話說,語義分割將同一類別的所有像素標記為一個整體,不區分個體 [3]。
實例分割則更進一步 [2, 4]。它不僅要識別物體的類別,還要區分屬於同一類別的不同個體,並為每個個體生成獨立的像素級掩膜(Mask)[2, 3, 6]。用牛的例子來說,實例分割不僅知道圖中有牛,還能區分出「第一隻牛」、「第二隻牛」等等,並為每一隻牛生成一個專屬的分割 Mask [4]。這點是實例分割與語義分割最主要的差異 [2]。
實例分割的主要挑戰包括物體之間的疊合、遮蔽、顏色相似以及空間上的奇異性(例如一個物體被另一個物體包圍)[2, 4]。在有物體疊合的情況下,要精確地分割出每一個獨立的個體,難度會顯著增加 [2, 7]。
目前實例分割的方法大致可分為兩大類:Two-stage(兩階段)方法和 One-stage(一階段)方法 [2, 4, 8]。對於新手而言,理解這兩種方法的流程是入門的第一步。
除了主流的 Two-stage 和 One-stage,還有 Bottom-up 方法 [2, 4, 8]。對新手來說,這種方法思路比較特別。
作為 Two-stage 方法的代表,Mask R-CNN 的成功很大程度上歸功於其引入的 ROI Align [2, 5, 6, 10, 11]。理解 ROI Align 對於理解 Mask R-CNN 的精度提升至關重要,也是新手需要掌握的一個重點。
在 Mask R-CNN 之前,物體檢測或實例分割方法常使用 ROI Pooling 將不同大小的物體候選區域(Proposal)或感興趣區域(Region of Interest, ROI)對應到固定大小的 Feature Map 上,以便後續的分類或回歸網路處理 [2, 5, 6, 11, 16]。例如,將一個大小不一的 ROI 對應到 7x7 的 Feature Map [2, 16]。問題在於,ROI Pooling 在計算過程中使用了整數運算進行量化(Quantization)[2, 5, 15]。比如,將 ROI 的座標除以 Feature Map 的步長(stride),通常會四捨五入到最近的整數像素位置 [2, 11, 15, 16]。這種量化誤差會導致原始圖像中的位置資訊失真 [2, 5]。當我們將在 Feature Map 上預測的 Mask 反算回原始圖像時,由於這些誤差,邊界可能會不夠精確,影響實例分割的邊界準確度 [2, 3, 5, 15]。
Mask R-CNN 提出了 ROI Align 來解決這個問題 [2, 5, 6, 11]。其核心思想是盡可能在整個網路管線(Pipeline)中都使用浮點數來表示位置資訊 [2, 5, 16, 17]。即使計算出的座標是浮點數,也保留浮點數 [2, 17]。在 Pooling 時,對於浮點數座標對應的像素值,ROI Align 不會簡單地取最近的整數點值 [2, 17]。而是使用雙線性插值(Bilinear Interpolation)[2, 5, 6, 17]。雙線性插值會根據周圍最近的四個像素點的像素值,按比例內插出該浮點數座標對應的精確像素值 [2, 5, 17]。這樣,得到的 Feature Map 更精確,反算回原圖時也能保持位置精確,減少邊緣誤差 [2, 17]。
儘管 Mask R-CNN 在結構上改動不大,但 ROI Align 的引入顯著提升了實例分割的精度 [2, 6, 11]。Mask R-CNN 的總損失函數包含了分類損失、邊界框回歸損失和掩碼損失 [2, 17]。有資料提到,人們可能會說 Mask R-CNN 沒做什麼「太大」的貢獻,但其效果卻極好 [2, 11, 17]。
SOLO (Segmenting Objects by Locations) 作為 One-stage 方法的代表,其思路也值得新手學習 [2, 4, 6, 11]。
僅僅依靠單一的核心思想往往不足以達到最佳性能 [2]。目前 COCO 排行榜上的一些頂尖方法,特別是基於 Mask R-CNN 改進的方法,通常會融合多種技術策略來提升精度 [2, 6, 11, 17, 19-21]。對於希望深入研究實例分割的朋友,了解這些進階策略非常重要。
除了上述兩種,高性能方法還可能融合其他多種方法 [2, 11, 19]。例如,迭代式地改進 Bounding Box 和 Mask [11]。最高精度的 CatC 方法就被提及融合了多種方法來達到當時最高的 AP (43.2),這可能是指 COCO 資料集上的 AP [2, 11, 17, 19]。
對於新手來說,了解訓練資料是什麼樣子也很重要 [18]。
資料中還提到了幾位人物 [23]。
目前來看,Two-stage 方法在精度上仍有優勢,但速度較慢 [2, 24]。Mask R-CNN 及其改進版本在排行榜上佔據前列 [2, 11]。Mask R-CNN 的 ROI Align 解決了量化誤差問題,是精度提升的關鍵 [2, 24]。高性能方法通過級聯、迭代精煉以及融合語義分割等資訊來進一步提升精度 [2, 3, 6, 19, 21, 24]。
One-stage 方法,特別是 SOLO,在速度和精度上取得了顯著進展,具有很大的潛力,可能會顛覆傳統觀念 [2-4, 10, 24]。儘管在概念上更精簡,但實際實現也可能複雜 [13]。
Bottom-up 方法目前非主流,但其先分割再聚類的思想可能仍有潛力,尤其在與 Top-down 方法結合時 [2, 4, 8, 24]。
對於未來,講者對 3D 實例分割感興趣,希望 2D 的最新方法(如 Two-stage vs One-stage, 邊界處理, 特徵融合等)能有所啟發 [2, 6, 21, 24]。將這些概念應用於 3D 點雲或體素數據的實例分割任務,是一個值得探索的方向 [6, 24]。
這就是根據提供的資料,針對實例分割領域的一些核心概念、主要方法及其代表模型、關鍵技術以及最新進展的匯整介紹。希望這些內容能幫助剛入門的朋友們對實例分割有一個全面且深入的了解。後續可以針對感興趣的部分,進一步閱讀相關論文來深入研究 [24]。