Mask R-CNN 原理解析

Kaiming He Georgia Gkioxari Piotr Doll´ ar Ross Girshick Facebook AI Research (FAIR)

摘要

我們提出了一個概念上簡單、靈活和通用的對象實例分割框架。我們的方法有效地檢測圖像中的對象,同時爲每個實例生成一個高質量的分割掩碼。該方法被稱爲掩碼 R-CNN,通過添加一個分支與現有分支並行預測對象掩碼,用於邊界框識別,擴展了更快的 R-CNN。蒙版 R-CNN 是簡單的訓練和增加一個小的開銷更快的 R-CNN,運行在 5 幀。而且,蒙版 R-CNN 很容易推廣到其他任務,例如,允許我們在相同的框架中估計人類姿勢。我們在 COCO 挑戰套件的所有三個軌道中顯示了最佳結果,包括實例分割、邊界框對象檢測和 person keypoint 檢測。沒有鈴聲和口哨,蒙版 R-CNN 在每一項任務上都勝過現有的、單一型號的作品,包括 COCO 2016 挑戰賽獲獎者。我們希望我們簡單而有效的方法將作爲一個堅實的基線,並幫助簡化實例級識別的未來研究。代碼可訪問:https:github.comfacebookresearch

vision 社區在短時間內快速改善了對象檢測和語義分割結果。在很大程度上,這些進步是由強大的基線系統驅動的,如快速快速 RCNN 12,36 和全卷積網絡 (FCN) 30 框架,分別用於對象檢測和語義分割。這些方法概念上直觀,具有靈活性和魯棒性,並具有快速的訓練和推理時間。我們在這項工作的目標是開發一個類似的實例分割啓用框架。

實例分割具有挑戰性,因爲它要求正確檢測圖像中的所有對象,同時精確分割每個實例。因此,它結合了來自經典的目標檢測的計算機視覺任務的元素,其中的目標是對單個對象進行分類,並使用邊界框定位每個對象,和語義分割,目標是在不區分對象實例的情況下將每個像素分類到一組固定的類別中。考慮到這一點,可能需要一個複雜的方法來達到良好的結果。然而,我們展示了一個令人驚訝的簡單、靈活和快速的系統可以超越以前最先進的實例分割結果。

我們的方法,calledMask R-CNN,擴展了更快的 R-CNN 36,在每個感興趣的區域 (RoI) 增加了一個預測分割掩碼的分支,與現有的分支並行進行分類和邊界框迴歸(圖 1)。掩模分支是應用於每個 RoI 的小型 FCN,以像素-頂點的方式預測分割掩模。掩碼 R-CNN 的實現和訓練非常簡單,因爲 R-CNN 框架更快,這促進了各種靈活的架構設計。此外,掩模分支只增加了很小的計算開銷,從而實現了快速系統和快速實驗。

class box 原則上掩碼 R-CNN 是更快的 R-CNN 的直觀擴展,但是正確地構造掩碼分支對於獲得好的結果至關重要。最重要的是,Faster RCNN 不是爲網絡輸入和輸出之間的像素對齊而設計的。這一點在 RoIPool 18、12(處理實例的實際核心操作)如何執行粗略空間量化以提取特徵時最爲明顯。爲了修復失配,我們提出了一個簡單的、無量化的層,稱爲 RoIAlign,它忠實地保留了準確的空間位置。除了一個看似微不足道的變化,RoIAlign 有很大的影響:它提高了相對 10 到 50 的蒙版精度,在更嚴格的本地化指標下顯示出更大的收益。第二,我們發現必須解耦掩模和類別預測:我們獨立地預測每個類別的二進制掩模,沒有類別之間的競爭,並依靠網絡的 RoI 分類分支來預測類別。相反,FCN 通常採用基於像素的多類分類方法,這種方法將分割和分類結合在一起,並且基於實驗的實例分割效果不佳。

沒有鈴聲和口哨,蒙版 R-CNN 在 COCO 實例分割任務 28 上超越了之前所有最先進的單模結果,包括來自 2016 年競賽獲勝者的繁重工程參賽作品。作爲一個副產品,我們的方法也優於可可物體的檢測任務。在消融實驗中,我們評估了多個基本實例,這允許我們證明其穩健性並分析核心因素的影響。

我們的模型可以在 GPU 上以每幀約 200 ms 的速度運行,而在一臺 8-GPU 機上進行可可訓練需要一到兩天的時間。我們相信,快速的訓練和測試速度,加上框架的靈活性和準確性,將有利於並便於今後對實例分割的研究。

最後,通過對 COCO keypoint 數據集 28 上的人體姿態估計任務,展示了我們框架的通用性。通過將每個 keypoint 視爲一個一熱的二進制掩碼,使用最小修改掩碼 R-CNN 可以應用於檢測特定於實例的姿勢。Mask R-CNN 超過了 2016 年 COCO keypoint 競賽的獲勝者,同時以 5 fps 的速度運行。蒙版 R-CNN,因此,可以看作是一個靈活的框架更廣泛的實例級識別,並可以很容易地擴展到更復雜的任務。

我們已經發布了代碼來促進未來的研究。

另一族解決方案 23、4、3、29 實例分割是由語義分割的成功驅動的。從每個像素的分類結果(例如,FCN 輸出)開始,這些方法嘗試將相同類別的像素切割成不同的實例。與這些方法的分割優先策略相比,蒙版 R-CNN 是基於實例優先的策略。我們預計,今後將進一步研究這兩種戰略的結合。

2. 相關工作

R-CNN:基於區域的 CNN (R-CNN) 方法 13 用於邊界框對象檢測,即關注數量可控的候選對象區域 42、20,並在每個 RoI 上單獨評估卷積網絡 25、24。R-CNN 被擴展了 18,12,允許使用 RoIPool 在特徵映射上關注 RoI,導致快速和更好的準確性。Faster R-CNN 36 通過區域提議網絡 (RPN) 學習注意機制推進了這一流程。Faster R-CNN 對許多後續改進(例如 38、27、21)具有靈活性和穩健性,是當前幾個基準中的主導框架。

實例分割:受 RCNN 有效性的驅動,許多實例分割方法都是基於分割建議的。早期的方法 13、15、16、9 採用自下而上的分段 42、2。DeepMask 33 和後續作品 34、8 學習提出分段候選,然後通過快速 R-CNN 進行分類。在這些方法中,分割先於識別,識別速度慢且精度低。同樣,Dai 等人10 提出了一個複雜的多階段級聯,從邊界框提案中預測分段提案,然後進行分類。相反,我們的方法是基於掩碼和類標籤的並行預測,它更簡單、更靈活。

最近,Li 等人其中 26 篇將 8 篇中的片段建議系統和 11 篇中的目標檢測系統結合在一起進行全卷積實例分割 (FCIS)。在 8,11,26 的共同想法是預測一套位置敏感輸出通道完全卷積。這些通道同時處理對象類、框和掩碼,使系統變得快速。但是,FCIS 在重疊實例上顯示系統誤差,併產生虛假邊緣(圖 6),表明它受到實例分割的基本困難的挑戰。

另一族解決方案 23、4、3、29 實例分割是由語義分割的成功驅動的。從每個像素的分類結果(例如,FCN 輸出)開始,這些方法嘗試將相同類別的像素切割成不同的實例。與這些方法的分割優先策略相比,蒙版 R-CNN 是基於實例優先的策略。我們預計,今後將進一步研究這兩種戰略的結合。

3. Mask R-CNN

Mask R-CNN 在概念上很簡單:更快的 R-CNN 爲每個候選對象有兩個輸出,一個類標籤和一個邊界框偏移量;爲此,我們添加了第三個分支來輸出對象掩碼。mask R-CNN 因此是一個自然和直觀的想法。但是,額外的掩碼輸出不同於類和框輸出,需要提取對象的更精細的空間佈局。接下來,我們介紹了掩模 R-CNN 的關鍵元素,包括像素對像素對齊,這是快速快速 R-CNN 的主要缺失部分。

Faster R-CNN:我們首先簡單回顧一下更快速的 R-CNN 探測器 36。Faster R-CNN 由兩個階段組成。第一階段,稱爲區域建議書網絡 (RPN),提出候選對象邊界框。第二階段,本質上是快速的 R-CNN 12,使用 RoIPool 從每個候選框中提取特徵,並進行分類和邊界框迴歸。兩個階段使用的特性可以共享,以實現更快的推理。我們推薦讀者 21 日最新的比較,綜合比較快速的 R-CNN 和其他框架。

mask  R-CNN:掩模 R-CNN 採用相同的兩階段程序,具有相同的第一階段(即 RPN)。在第二階段,在預測類和框偏移量的同時,掩碼 R-CNN 還爲每個 RoI 輸出一個二進制掩碼。這與大多數最新系統相反,後者的分類取決於面罩預測(例如 33、10、26)。我們的方法遵循了快速的 R-CNN 12 的精神,它將邊界盒分類和迴歸並行應用(結果大大簡化了原始 R-CNN 13 的多級流水線)

形式上,在訓練過程中,我們將每個採樣 RoI 上的多任務丟失定義爲。分類損失 Lcl 和邊界箱損失 Lbox 與 12 中定義的相同。掩碼分支對每個 RoI 有一個 k m2 維輸出,它對分辨率爲 m X m 的 K 個二進制掩碼進行編碼,每個 K 個類別一個。對此,我們採用了每像素 s 字形,並將 Lmask 定義爲平均二進制交叉熵損失。對於與地面實況 k 類相關的 RoI,Lmask 僅在第 k 個掩碼上定義(其他掩碼輸出不會造成損失)。

我們的 Lmask 定義允許網絡爲每個類生成掩碼,而不需要類之間的競爭;我們依賴專用的分類分支來預測用於選擇輸出掩碼的類標籤。這就去耦了掩碼和類預測。這與將 FCNs 30 應用於語義分割時的常規做法不同,語義分割通常使用每個像素的 softmax 和多項交叉熵損失。在這種情況下,類之間的掩碼是相互競爭的;在我們的情況下,每個像素的 sigmoid 和二進制丟失都是如此。實驗表明,該公式是取得良好分割效果的關鍵。

掩碼錶示:掩碼編碼輸入對象的空間佈局。因此,與類標籤或箱偏移不可避免地被完全連接 (fc) 層摺疊成短輸出向量不同,提取掩模的空間結構可以通過卷積提供的像素間對應自然解決。

體來說,我們使用 FCN 30 預測每個 RoI 的 m m 蒙版。這允許掩碼分支中的每一層維護顯式 m m 對象空間佈局,而不會將其摺疊成缺少空間維度的向量表示。不像以前的方法,求助於 fc 層的掩模預測 33,34,10,我們的完全卷積表示需要更少的參數,是更準確的實驗證明。

這種像素對像素的行爲要求我們的 RoI 特徵(RoI 特徵本身就是小的特徵圖)很好地對齊,以忠實地保留顯式的每像素空間對應關係。這促使我們開發了以下 RoIAlign 層,它在蒙版預測中起關鍵作用。

RoIAlign:RoIPool 12 是從每個 RoI 提取小特徵圖(例如,7 7)的標準操作。RoIPool 首先將一個固定數量的 RoI 量化爲特徵映射的離散粒度,然後將這個量化的 RoI 細分爲空間二進制,這些空間二進制本身經過量化,最後將每個二進制所覆蓋的特徵值聚合(通常由 max pooling 實現)。通過計算 x 16,在連續座標 x 上執行量化,其中 16 是特徵映射步幅,並且是四捨五入;同樣地,在劃分到 bins(例如,7 7)時執行量化。這些量化在 RoI 和提取的特徵之間引入錯位。雖然這可能不會影響對小型翻譯具有穩健性的分類,但它對預測像素準確的蒙版有很大的負面影響。

爲了解決這個問題,我們提出了一個 RoIAlign 層,它消除了 RoIPool 的苛刻量化,將提取的特徵與輸入正確地對齊。我們建議的變更很簡單:我們避免 RoI 邊界的任何量化.

或箱(即,我們使用 x 16 而不是 x 16)。我們使用雙線性插值 22 計算每個 RoI bin 中四個規則採樣位置的輸入特徵的精確值,並彙總結果(使用最大值或平均值),詳見圖 3。我們注意到,只要不進行量化,結果對準確的採樣位置或採樣點的數量並不敏感。

RoIAlign 導致很大的改進,如我們在 x4.2 中所示。與 RoIAlign 不同的是,RoIWarp 忽略了對齊問題,並像 RoIPool 一樣在 10 中實現了 RoI 的量化。因此,即使 RoIWarp 也採用了由 22 驅動的雙線性重採樣,但其性能與 RoIPool 相同,如實驗所示(更多詳情見表 2c),證明了對準的關鍵作用。

網絡體系結構:爲了展示我們的方法的通用性,我們用多個體繫結構實例化了掩碼 R-CNN。爲了清楚起見,我們區分了:(i) 用於整個圖像特徵提取的卷積骨幹架構,和 (ii) 分別應用於每個 RoI 的邊界框識別(分類和迴歸)和掩碼預測的網絡頭。

我們使用命名法 network-depth-features 表示骨幹架構。我們評估 ResNet 19 和 ResNeXt 45 深度爲 50 或 101 層的網絡。快速 R-CNN 的最初的實現與 ResNets 19 從第四階段的最後的卷積層提取了特徵,這我們叫 C4例如,帶有 ResNet-50 的主幹用 ResNet-50-C4 表示。這是 19、10、21、39 中常用的選擇。

我們還探索了 Lin 等人最近提出的另一個更有效的骨幹。27,稱爲特徵金字塔網絡 (FPN)。FPN 使用一個帶有橫向連接的自上而下的體系結構,從單尺度輸入構建一個網絡內特徵金字塔。具有 FPN 主幹的快速 R-CNN 根據其規模從特徵金字塔的不同層次提取 RoI 特徵,但其他方法類似於 vanilla ResNet。使用 ResNet-FPN 主幹進行掩碼 RCNN 特徵提取,在精度和速度上都有很好的提高。關於 FPN 的更多詳細信息,我們請讀者參考 27。

對於網絡頭,我們嚴格遵循在以前的工作中提出的架構,我們增加了一個完全卷積掩碼預測分支。具體來說,我們從 ResNet 19 和 FPN 27 論文擴展了更快的 R-CNN 機箱頭。細節如圖 4 所示,ResNet-C4 主幹上的頭部包括 ResNet 的第 5 級(即 9 層 res5 19),計算密集。對於 FPN,主幹已經包括 res5,因此允許使用更少過濾器的更有效的封頭。

我們注意到我們的掩模分支有一個簡單的結構。更復雜的設計有可能證明性能,但不是這項工作的重點。

 

圖 4. Head 體系結構:我們擴展了兩個現有的 Faster RCNN 頭 19,27。左-右面板顯示 ResNet C4 和 FPN 骨幹的頭部,分別來自 19 和 27,其中添加了掩碼分支。數字表示空間分辨率和通道。箭頭表示 conv、deconv 或 fc 層,可從上下文推斷(conv 保留空間維度,而 deconv 增加空間維度)。所有的 conv 爲 3 3,除了輸出 conv 爲 1 1,反 conv 爲 2 2,步幅爲 2,我們在隱藏層中使用 ReLU 31。左:res5 表示 ResNet s 第五級,爲了簡單起見,我們修改了第一個 conv,使其在一個 7 7 的 RoI 上運行,步幅爲 1(而不是 19 中的 14 14 步幅 2)。右:4 表示 4 個連續 conv 的堆棧。

3.1. 實施細節

我們設置超參數遵循現有的快速 R-CNN 工作 12,36,27。雖然這些決策是在原始論文 12,36,27 中做出的,但我們發現我們的實例分割系統對它們是強健的。

培訓:與快速 R-CNN 一樣,如果 RoI 具有 IoU,且地面實況框至少爲 0.5,則認爲 RoI 爲陽性,否則爲陰性。僅在陽性 RoI 上定義掩碼損耗 Lmask。掩模目標是 RoI 與其相關地面實況掩模之間的交叉點。

我們採用以圖像爲中心的培訓 12。調整圖像大小,使其比例(較短邊緣)爲 800 像素 27。每個小批處理每個 GPU 有 2 幅圖像,每幅圖像有 N 個採樣 RoI,正負比例爲 1:3 12。N 對於 C4 主幹爲 64(如 12、36),對於 FPN 爲 512(如 27)。我們在 8 個 GPU(所以有效的小批處理大小爲 16)上訓練 160k 迭代,學習率爲 0.02,在 120k 迭代時降低了 10。我們使用的權重衰減爲 0.0001,動量爲 0.9。使用 ResNeXt 45,我們使用每個 GPU 的 1 個圖像和相同次數的迭代進行訓練,起始學習率爲 0.01。

RPN 錨釘跨越 5 個刻度和 3 個縱橫比,符合 27。爲了便於消融,RPN 經過單獨培訓,除非另有說明,否則不與面罩 R-CNN 共享功能。對於本文中的每個條目,RPN 和掩碼 R-CNN 具有相同的骨幹,因此它們是可共享的。

推理:在測試時,C4 主幹(如在 36 中)的建議編號爲 300,FPN(如在 27 中)的建議編號爲 1000。我們對這些建議運行 box prediction 分支,然後運行非最大抑制 14。然後將掩碼分支應用於得分最高的 100 個檢測框。雖然這與訓練中使用的並行計算不同,但它加快了推斷並提高了準確性(由於使用了更少、更準確的 RoI)。

掩碼分支:可以預測每個 RoI 的 k-th 掩碼,但我們只使用 k-th mask,其中 k 是由分類分支預測的類。然後將 m m 浮動數字掩碼輸出調整爲 RoI 大小,並在閾值爲 0.5 時進行二值化。

請注意,由於我們只計算前 100 個檢測框上的掩碼,因此掩碼 R-CNN 在其更快的 R-CNN 對應項上增加了一個小開銷(例如,典型模型上爲 20 個)。

圖 5. 使用 ResNet-101-FPN 並在 5 fps 和 35.7 Mask AP 條件下運行的 COCO 測試圖像上的掩模 R-CNN 的更多結果(表 1)。

表 1. COCO test-dev 上的實例分割掩碼 AP。MNC 10 和 FCIS 26 分別是 COCO 2015 和 2016 細分市場挑戰的贏家。沒有鈴聲和口哨,蒙版 R-CNN 勝過更復雜的 FCI,包括多尺度訓練測試,水平 fiip 測試和 OHEM 38。所有條目均爲單模型結果。

 

4. 實驗:實例分割 

我們對面罩 R-CNN 與最新技術水平以及 COCO 數據集 28 上的全面消融進行了全面比較。我們報告了標準的 COCO 指標,包括 AP(IoU 閾值的平均值)、AP50、AP75 和 APS、APM、APL(不同尺度的 AP)。除非另有說明,否則 AP 將使用面罩 IoU 進行評估。與之前的工作 5、27 一樣,我們使用 80k 訓練圖像和 35k 子集的 val 圖像 (trainval35k) 聯合進行訓練,並報告剩餘 5k val 圖像 (minival) 的消融。我們還報告了 test-dev 28 的結果。

4.1. 主要結果

我們在表 1 的實例分割中比較了蒙版 R-CNN 和最先進的方法。我們模型的所有實例化的性能均優於以前最先進模型的基線變體。這包括 MNC 10 和 FCIS 26,分別是 COCO 2015 和 2016 細分市場挑戰的贏家。沒有鈴聲和哨聲,蒙版 R-CNN 與 ResNet-101-FPN 骨幹優於 FCIS 26,FCIS 26 包括多尺度訓練測試,水平 fiip 測試,和在線硬實例挖掘 (OHEM) 38。雖然不在這項工作的範圍內,但我們預期許多這樣的改進將適用於我們的工作。

掩模 R-CNN 輸出如圖 2 和 5 所示,掩模 R-CNN 即使在挑戰性條件下也能獲得良好的結果。在圖 6 中,我們比較了我們的掩碼 R-CNN 基線和 FCIS 26。FCIS 在重疊實例上表現出系統僞影,表明它受到實例分割的基本困難的挑戰。掩模 R-CNN 顯示沒有此類僞影。

圖 6. FCIS 26(上)與面罩 R-CNN(下,ResNet-101-FPN)。FCIS 在重疊物體上顯示系統僞影。

             (a)                                                      (b)                                                                    (c)

(a) 骨幹架構:更好的骨幹帶來 預期收益:更深的網絡做得更好,FPN 優於 C4 特性,ResNeXt 對 ResNet 進行了改進。

(b) 多項式與獨立掩模 (ResNet-50-C4):通過類間二進制掩模(s 形)去耦得到的增益大於多項式掩模 (softmax)。

(c) RoIAlign (ResNet-50-C4):用各種 RoI 層屏蔽結果。我們的 RoIAlign 層將 AP 提高 3 分,將 AP75 提高 5 分。使用適當的對齊是造成 RoI 層之間存在較大差異的唯一因素。

                                (d)                                                                                   (e)

(d) RoIAlign (ResNet-50-C5,stride 32):使用大跨度特性的掩模級和箱級 AP。錯位比 stride-16 功能更嚴重(表 2c),導致較大的精度差距。 

(e) 掩模分支 (ResNet-50-FPN):全卷積網絡 (FCN) 與多層感知器(MLP,全連接),用於掩模預測。FCNs 利用顯式編碼空間佈局來改善結果。

表 2. 消融。我們對 trainval35k、minival 和報告掩碼 AP 進行培訓,除非另有說明。

4.2. 消融實驗

我們運行了一些消融來分析蒙版 R-CNN。結果見表 2,詳細討論如下。

體系結構:表 2a 所示爲具有各種骨幹的 R-CNN。它得益於更深的網絡(50 比 101)和先進的設計,包括 FPN 和 ResNeXt。我們注意到,並非所有框架都能自動從更深或更高級的網絡中受益(見 21 中的基準)。

Multinomial vs. Independent maskes:Mask R-CNN 解耦 Mask 和類預測:由於現有的 box 分支預測了類標籤,我們爲每個類生成一個 Mask,沒有類之間的競爭(通過每個像素的 sigmoid 和二進制損失)。在表 2b 中,我們將其與使用每個像素的 softmax 和多項損失(如 FCN 30 中常用的)進行比較。這種替代方法耦合了掩碼和類別預測的任務,並導致掩碼 AP 嚴重丟失(5.5 分)。這表明,一旦實例被分類爲一個整體(通過 box 分支),就足以預測二進制掩碼,而不需要考慮類別,這使得模型更容易訓練。

類特定的與類無關的掩碼:我們默認的實例化預測類特定的掩碼,即一個 mXm每個類的掩碼。有趣的是,帶有類化不可知掩碼的掩碼 R-CNN(即,不管類別如何預測單個 m m 輸出)幾乎同樣有效:它具有 29.7 個掩碼 AP,而 ResNet-50-C4 上的類特定對應對象具有 30.3 個掩碼 AP。這進一步突出了我們方法中的分工,這在很大程度上解耦了分類和細分。

RoIAlign:擬定 RoIAlign 層的評價見表 2c。對於這個實驗,我們使用 ResNet50-C4 主幹,它有 stride 16。RoIAlign 比 RoIPool 提高 AP 約 3 個點,大部分收益來自高 IoU (AP75)。RoIAlign 對最大平均池不敏感;我們在論文的其餘部分中使用平均。

並與 MNC 10 中提出的採用雙線性抽樣的 RoIWarp 算法進行了比較。正如在 x3 中所討論的,RoIWarp 仍然量化 RoI,與輸入不一致。如表 2c 所示,RoIWarp 的性能與 RoIPool 相當,但比 RoIAlign 差很多。這突出表明正確對準是關鍵。

我們還評價了 RoIAlign 與 ResNet-50-C5 主幹,其具有更大的 32 像素步幅。我們使用了與圖 4(右)相同的頭部,因爲 res5 頭部不適用。表 2d 顯示 RoIAlign 使面罩 AP 提高 7.3 分,使面罩 AP75 提高 10.5 分,50 相對改善)。此外,我們注意到,在使用 RoIAlign 時,使用 stride-32 C5 功能 (30.9 AP) 比使用 stride-16 C4 功能更準確(30.3 AP,表 2c)。RoIAlign 在很大程度上解決了使用大步長特徵進行檢測和分割的長期挑戰。

               

表 3. 對象檢測單模型結果(邊界框 AP),與最先進的 test-dev。使用 ResNet-101FPN 的掩碼 R-CNN 優於所有先前最先進型號的基本變體(掩碼輸出在這些實驗中被忽略)。使用 RoIAlign (1.1 APbb)、多任務訓練 (0.9 APbb) 和 ResNeXt-101 (1.6 APbb) 獲得的面罩 R-CNN 超過 27。

最後,RoIAlign 顯示與 FPN 配合使用時的增益爲 1.5 mask AP 和 0.5 box AP,後者具有更精細的多級步幅。對於要求更精確對準的 keypoint 檢測,即使使用 FPN,RoIAlign 也顯示較大的增益(表 6)。

Mask Branch:Segmentation 是一個像素對像素的任務,我們使用 FCN 開發 Mask 的空間佈局。在表 2e 中,我們使用 ResNet-50-FPN 主幹比較了多層感知器 (MLP) 和 FCNs。使用 FCNs 產生 2.1 掩模 AP 增益超過 MLPs。我們注意到,爲了與 MLP 進行公平比較,我們選擇這種骨幹,以便 FCN 頭的 conv 層沒有預先培訓。

4.3. 包圍盒檢測結果

我們將蒙版 R-CNN 與表 3 中最先進的 COCO 邊界框對象檢測進行了比較。對於這個結果,即使完整的蒙版 R-CNN 模型經過了訓練,在推斷時也只使用了分類和框輸出(蒙版輸出被忽略)。使用 ResNet-101FPN 的掩碼 R-CNN 的性能優於之前所有最先進型號的基本變體,包括 GRMI 21 的單型號變體,GRMI 21 是 COCO 2016 Detection Challenge 的獲勝者。使用 ResNeXt-101-FPN,掩碼 R-CNN 進一步改善了結果,與從 39(使用 Inception-ResNet-v2-TDM)的最好的以前的單個模型條目的相比,有 3.0 點的邊際框 AP。

作爲進一步的比較,我們訓練了一個版本的掩碼 R-CNN,但是沒有掩碼分支,用更快的 R-CNN 表示,RoIAlign 在表 3 中。另一方面,它是 0.9 點方塊 AP 低於蒙版 R-CNN。蒙片 R-CNN 在盒子察覺上的這差距因此僅僅由於多任務訓練的好處。

最後,我們注意到,面罩 R-CNN 在其面罩和包裝盒 AP 之間獲得了一個小間隙:例如,在 37.1(面罩,表 1)和 39.8(包裝盒,表 3)之間獲得了 2.7 分。這表明我們的方法在很大程度上縮小了目標檢測和更具挑戰性的實例分割任務之間的差距。

4.4. 定時

推理:我們訓練了一個 ResNet-101-FPN 模型,它在 RPN 和掩碼 R-CNN 階段之間共享特徵,遵循 Faster R-CNN 36 的 4 步訓練。該模型在 Nvidia TeslaM40 GPU 上以每幅圖像 195 ms 的速度運行(加上 15 ms 的 CPU 時間,將輸出大小調整爲原始分辨率),並在統計學上獲得與非共享掩碼 AP 相同的掩碼 AP。我們還報告,ResNet-101-C4 變體需要 400 ms,因爲它有一個較重的箱頭(圖 4),所以我們不建議在實踐中使用 C4 變體。雖然蒙版 R-CNN 很快,我們注意到我們的設計沒有優化速度,更好的速度精度折衷可以達到 21,例如通過不同的圖像大小和建議數字,這超出了本文的範圍。

培訓:面罩 R-CNN 也是快速培訓。在我們的同步 8-GPU 實現中,使用 ResNet-50-FPN 進行 COCO trainval35k 培訓需要 32 小時(每 16 個圖像小批處理 0.72s),使用 ResNet-101-FPN 需要 44 小時。事實上,在火車上訓練時,快速原型製作可以在不到一天的時間內完成。我們希望這樣的快速培訓將消除這一領域的一個主要障礙,並鼓勵更多的人對這一具有挑戰性的課題進行研究。

5. 掩模 R-CNN 用於人體姿態估計

我們的框架可以很容易地擴展到人體姿態估計。我們將 keypoint s 位置建模爲一個單熱掩模,並採用掩模 R-CNN 來預測 K 個掩模,每個 K 個 keypoint 類型(例如左肩、右肘)各一個。此任務有助於證明蒙版 R-CNN 的靈活性。

我們注意到,我們的系統利用了人類位姿的最小領域知識,因爲實驗主要是爲了證明掩模 R-CNN 框架的通用性。我們期望領域知識(例如,建模結構 6)將與我們的簡單方法互補。

實現細節:當針對關鍵點進行調整時,我們對分割系統進行了一些小的修改。對於一個實例的每個 K 關鍵點,訓練目標是一個一熱的 m m 二進制掩碼,其中只有一個像素被標記爲前景。在訓練期間,對於每個可見的地面實況關鍵點,我們最小化 m2-way softmax 輸出上的交叉熵損失(這鼓勵單點待測)。我們注意到,在實例分割中,K 關鍵點仍然是獨立處理的。

表 4. Keypoint detection AP on COCO test-dev。我們的是一個單一型號 (ResNet-50-FPN),運行在 5 幀速率。CMU-Pose 6 是 2016 年競賽獲獎者,採用多尺度測試,用 CPM 44 進行後處理,用物件檢測器過濾,累計加 5 分(在個人溝通中澄清)。y:在 COCO plus MPII 1(25k 圖像)上對 G-RMI 進行了培訓,使用了兩種模型(用於邊界框檢測的 Inception-ResNet-v2 和用於關鍵點的 ResNet-101)。

表 5. 在 minival 上評價的關於人員類別的 box、mask 和 keypoint 的多任務學習。所有條目均針對相同數據進行培訓,以便進行公平比較。主幹是 ResNet50-FPN。minival 上 64.2 和 64.7 AP 的條目分別具有 62.7 和 63.1 的 test-dev AP(見表 4)。

表 6. minival 上 keypoint 檢測的 RoIAlign 與 RoIPool。主幹是 ResNet-50-FPN。

我們採用了 ResNet-FPN 變體,keypoint 頭部架構類似於圖 4(右)。keypoint head 由 8 個 3 個 512-d conv 層堆棧組成,隨後是 deconv 層和 2 個雙線性放大,產生 56 56 的輸出分辨率。我們發現,一個相對高分辨率的輸出(與掩碼相比)是必要的關鍵點水平的定位精度。

在包含註釋關鍵點的所有 COCO trainval35k 圖像上訓練模型。爲了減少過度擬合,由於這個訓練集較小,我們使用從 640,800 像素中隨機抽樣的圖像尺度進行訓練;推斷是在 800 像素的單個尺度上。我們爲 90k 迭代訓練,從 0.02 的學習率開始並且在 60k 和 80k 迭代減少它 10。我們使用閾值爲 0.5 的邊界框 NMS,其他細節與 x3.1 相同。

主要結果和消融:我們評價了 person keypoint AP (APkp) 並使用 ResNet-50-FPN 骨幹進行了實驗;將在附錄中研究更多的骨幹。表 4 顯示,我們的結果 (62.7 APkp) 比使用多級處理管道的 COCO 2016 keypoint detection winner 6 高 0.9 分(參見表 4 的標題)。我們的方法相當簡單和快速。

更重要的是,我們有一個統一的模型,可以在 5 fps 條件下運行時,多次預測箱、段和關鍵點。添加一個段分支(針對 person 類別)將 test-dev 上的 APkp 提高到 63.1(表 4)。在表 5 中列出了在 minival 上進行多任務學習的更多消融。將掩碼分支添加到僅 box(即,更快的 R-CNN)或僅 keypoint 版本可持續改善這些任務。然而,添加 keypoint 分支會略微減少 box mask AP,這表明雖然 keypoint 檢測從多任務訓練中受益,但它不會反過來幫助其他任務。儘管如此,聯合學習這三個任務,可以使統一的系統有效地同時預測所有的產出(圖 7)。

我們還研究了 RoIAlign 對 keypoint 檢測的影響(表 6)。儘管 ResNet-50-FPN 主幹具有更好的步幅(例如,在最好的級別上爲 4 個像素),但與 RoIPool 相比,RoIAlign 仍然顯示出顯著的改進,並且 APkp 增加了 4.4 分。這是因爲 keypoint 檢測對定位精度更敏感。這再次表明,對準是必不可少的像素級定位,包括面具和關鍵點。

考慮到掩碼 R-CNN 在提取對象邊界框、掩碼和關鍵點方面的有效性,我們期望它能成爲其他實例級任務的有效框架。

 表 7. Cityscapes val(AP val 列)和 test(其餘列)集的結果。我們的方法使用 ResNet-50-FPN。

附錄 A:城市景觀實驗

我們進一步報告了 Cityscapes 7 數據集上的實例分割結果。該數據集包含 2975 個脈衝串、500 個 val 和 1525 個測試圖像的精細註釋。它有 20k 粗訓練圖像,沒有實例註釋,我們不使用。所有圖像均爲 2048 1024 像素。實例分割任務涉及 8 個對象類別,其在精細訓練集中的實例數爲:

通過 COCO 式掩碼 AP(在 IoU 閾值上的平均值)測量此任務的實例分割性能;還報告了 AP50(即,IoU 爲 0.5 時的掩碼 AP)。

實現:我們應用我們的掩碼 R-CNN 模型與 ResNet-FPN-50 主幹;我們發現 101 層對應執行類似由於小數據集大小。我們用從 800,1024 隨機抽取的圖像尺度(短邊)訓練,這減少了過擬合;推理是在 1024 像素的單個尺度上。我們對每個 GPU 使用一個小批處理大小爲 1 的圖像(8 個 GPU 上的 so 8),併爲 24k 迭代訓練模型,從 0.01 的學習率開始,在 18k 迭代時減少到 0.001。在此設置下,需要在一臺 8-GPU 機上進行 4 小時的訓練。

結果:表 7 比較了我們的結果與確認和測試集的最新技術水平。在不使用粗訓練集的情況下,我們的方法達到了 26.2 的 AP on test,比以前的最佳入口 (DIN 3) 提高了 30 多個,也優於 SGN s 25.0 29 的併發工作。DIN 和 SGN 都使用精細的粗數據。與僅使用精細數據的最佳條目 (17.4 AP) 相比,我們實現了 50 的改進。

對於人和汽車類別,Cityscapes 數據集展示了大量的類別內重疊實例(平均每個圖像 6 個人和 9 輛汽車)。我們認爲類別內重疊是實例分割的一個核心難點。我們的方法在這二個種類上比另外的最好的入口顯示出巨大的改進(在人從 21.8~30.5 上的相對 40 改進和在 car 上的 20 改進從 39.4~46.9),即使我們的方法不開發粗糙的數據。

城市數據集的一個主要挑戰是培訓
低數據系統中的模型,特別是有關類別的模型卡車,巴士,和火車,大約有200-500輛火車-每個樣品 。爲了部分解決該問題,我們進一步報告了使用 COCO 預培訓的結果。爲此,我們從預先訓練好的 COCO Mask R-CNN 模型(rider 被隨機初始化)中初始化了 Cityscapes 中相應的 7 個類別。我們微調了 4k 迭代中的這個模型,其中學習率在 3k 迭代中降低,在給定的 COCO 模型中,這需要 1 小時的訓練。

圖 8. Cityscapes 測試的蒙版 R-CNN 結果 (32.0 AP)。右下角的圖像顯示了一個故障預測。

可可預先訓練的蒙版 R-CNN 模型達到了 32.0 AP on test,幾乎比 fine-only 對應物提高了 6 分。這表明了訓練數據量所起的重要作用。這也表明,城市景觀上的方法可能會受到他們的低學習成績的影響。我們表明,使用可可預訓練是一個有效的策略在這個數據集。

最後,我們觀察到 val 和測試 AP 之間存在偏倚,從 23、4、29 的結果中也觀察到了偏倚。我們發現這種偏差主要是由卡車、公共汽車和火車類別引起的,fine-only 模型的 val 檢驗 AP 分別爲 28.8 22.8、53.5 32.2 和 33.0 18.6。這表明,在這些類別上存在域轉移,這些類別也幾乎沒有訓練數據。COCO 預培訓有助於改善這些類別的結果;然而,域偏移持續,分別爲 38.0 30.1、57.5 40.9 和 41.2 30.9 val test AP。請注意,對於人員和 car 類別,我們未發現任何此類偏倚(val 測試 AP 在 1 分以內)。

Cityscapes 的示例結果如圖 8 所示。

表 8. COCO minival 上的面罩 R-CNN 的增強檢測結果。每一行向上面的行添加一個額外的組件。我們用 X 表示 ResNeXt 模型,以表示符號的簡潔。

表 9. COCO minival 上面罩 R-CNN 的增強 keypoint 結果。每一行向上面的行添加一個額外的組件。這裏我們只使用 keypoint 註釋,而不使用 mask 註釋。爲了簡潔起見,我們用 R 表示 ResNet,用 X 表示 ResNeXt。

附錄 B:COCO 的增強結果

作爲一個通用框架,掩碼 R-CNN 與爲檢測分割開發的互補技術兼容,包括快速快速 R-CNN 和 FCNs 的改進。在本附錄中,我們描述了改進原始結果的一些技術。由於其通用性和靈活性,Mask R-CNN 在 COCO 2017 實例分割比賽中被 3 個獲獎團隊作爲框架使用,這 3 個團隊的表現都明顯優於之前的最新技術水平。

實例分割和對象檢測

我們在表 8 中報告了蒙版 R-CNN 的一些增強結果。總體而言,改進增加了蒙版 AP 5.1 分(從 36.7 增加到 41.8)和方框 AP 7.7 分(從 39.6 增加到 47.3)。每次模型改進都一致地增加了掩碼 AP 和 box AP,顯示了掩碼 R-CNN 框架的良好泛化能力。接下來我們詳述改進。這些結果以及未來更新可通過 https 中的已發佈代碼複製:github.comfacebookresearch Detectron,並可作爲未來研究的更高基線。

更新的基線:我們使用一組不同的 hyper-parameters 從更新的基線開始。我們將訓練時間延長到 180k 次迭代,其中在 120k 和 160k 次迭代時學習率降低了 10。我們還將 NMS 閾值更改爲 0.5(從默認值 0.3)。更新後的基線具有 37.0 蒙版 AP 和 40.5 方框 AP。

端到端培訓:之前的所有結果都採用了分階段培訓,即培訓 RPN 爲第一階段,蒙版 R-CNN 爲第二階段。37 後,我們評估聯合培訓 RPN 和屏蔽 RCNN 的端到端 (e2e) 培訓。我們採用 37 中的近似版本,通過忽略梯度 w.r.t. RoI 座標,僅計算 RoIAlign 層中的部分梯度。表 8 顯示,e2e 訓練使面罩 AP 提高 0.6,包裝箱 AP 提高 1.2。

ImageNet-5k 預訓練:45 後,我們在 ImageNet 的 5k 級子集中預訓練模型進行實驗(與標準的 1k 級子集相反)。培訓前數據的增加 5 次改善了面罩和箱式 1 AP。作爲參考,40 名患者使用了 250 多幅圖像 (300M),並報告了 2-3 個方框的基線 AP 改善。

脈衝串時間增加:脈衝串時間的脈衝串規模增加進一步改善了結果。在訓練過程中,我們從 640,800 像素處隨機抽取一個比例,並將迭代次數增加到 260k(在 200k 和 240k 迭代時學習率降低 10)。脈衝串時間增加使掩模 AP 提高 0.6,包裝箱 AP 提高 0.8。

模型架構:通過將 101 層 ResNeXt 升級到 152 層對應層 19,我們觀察到增加了 0.5 個掩模 AP 和 0.6 個盒子 AP。這表明更深的模型仍然可以改善 COCO 的結果。

使用最近提出的非本地 (NL) 模型 43,我們實現了 40.3 掩碼 AP 和 45.0 方框 AP。該結果未增加測試時間,並且在測試時,該方法在 Nvidia Tesla P100 GPU 上以 3 fps 運行。

測試時間增加:我們將使用 400,1200 像素的尺度和 100 的步長以及它們的水平 fiip 來評估模型結果。這提供了 41.8 mask AP 和 47.3 box AP 的單一模型結果。

以上結果是我們提交給 COCO 2017 競賽的基礎(也使用了 ensemble,這裏不討論)。據報道,前三個獲勝的實例分割團隊都是基於蒙版 R-CNN 框架的擴展。

Keypoint 檢測

我們在表 9 中報告了 keypoint 檢測的增強結果。作爲更新的基線,我們將訓練計劃擴展到 130k 迭代,其中 100k 和 120k 迭代的學習率降低了 10。這將使 APkp 提高約 1 分。將 ResNet-50 替換爲 ResNet-101 和 ResNeXt-101 後,APkp 分別增加至 66.1 和 67.3。

通過最近的一種叫做數據蒸餾 35 的方法,我們能夠利用 COCO 提供的額外的 120k 未標記圖像。簡而言之,數據蒸餾是一種自我訓練策略,它使用在標記數據上訓練的模型來預測未標記圖像上的註釋,並反過來用這些新的註釋更新模型。Mask R-CNN 爲這種自我訓練策略提供了一個有效的框架。通過數據蒸餾,蒙版 R-CNN APkp 提高了 1.8 點,達到 69.1 點。我們觀察到蒙版 R-CNN 可以從額外的數據中獲益,即使這些數據是未標記的。

通過使用與實例分割相同的測試時間擴展,我們進一步將 APkp 提升到 70.4。

致謝:我們要感謝 Ilija Radosavovic 對代碼發佈和增強結果的貢獻,並感謝 Caffe2 團隊的工程支持。

[1] M. Andriluka, L. Pishchulin, P. Gehler, and B. Schiele. 2D
human pose estimation: New benchmark and state of the art
analysis. In CVPR, 2014. 8
[2] P. Arbel´ aez, J. Pont-Tuset, J. T. Barron, F. Marques, and
J. Malik. Multiscale combinatorial grouping. In CVPR,
2014. 2
[3] A. Arnab and P. H. Torr. Pixelwise instance segmentation
with a dynamically instantiated network. In CVPR, 2017. 3,
9
[4] M. Bai and R. Urtasun. Deep watershed transform for in-
stance segmentation. In CVPR, 2017. 3, 9
[5] S. Bell, C. L. Zitnick, K. Bala, and R. Girshick. Inside-
outside net: Detecting objects in context with skip pooling
and recurrent neural networks. In CVPR, 2016. 5
[6] Z. Cao, T. Simon, S.-E. Wei, and Y. Sheikh. Realtime multi-
person 2d pose estimation using part affinity fields. In CVPR,
2017. 7, 8
[7] M. Cordts, M. Omran, S. Ramos, T. Rehfeld, M. Enzweiler,
R. Benenson, U. Franke, S. Roth, and B. Schiele. The
Cityscapes dataset for semantic urban scene understanding.
In CVPR, 2016. 9
[8] J. Dai, K. He, Y. Li, S. Ren, and J. Sun. Instance-sensitive
fully convolutional networks. In ECCV, 2016. 2
[9] J. Dai, K. He, and J. Sun. Convolutional feature masking for
joint object and stuff segmentation. In CVPR, 2015. 2
[10] J. Dai, K. He, and J. Sun. Instance-aware semantic segmen-
tation via multi-task network cascades. In CVPR, 2016. 2, 3,
4, 5, 6
[11] J. Dai, Y. Li, K. He, and J. Sun. R-FCN: Object detection via
region-based fully convolutional networks. In NIPS, 2016. 2
[12] R. Girshick. Fast R-CNN. In ICCV, 2015. 1, 2, 3, 4, 6
[13] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich fea-
ture hierarchies for accurate object detection and semantic
segmentation. In CVPR, 2014. 2, 3
[14] R. Girshick, F. Iandola, T. Darrell, and J. Malik. Deformable
part models are convolutional neural networks. In CVPR,
2015. 4
[15] B. Hariharan, P. Arbel´ aez, R. Girshick, and J. Malik. Simul-
taneous detection and segmentation. In ECCV. 2014. 2
[16] B. Hariharan, P. Arbel´ aez, R. Girshick, and J. Malik. Hyper-
columns for object segmentation and fine-grained localiza-
tion. In CVPR, 2015. 2
[17] Z. Hayder, X. He, and M. Salzmann. Shape-aware instance
segmentation. In CVPR, 2017. 9
[18] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling
in deep convolutional networks for visual recognition. In
ECCV. 2014. 1, 2
[19] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning
for image recognition. In CVPR, 2016. 2, 4, 7, 10
[20] J. Hosang, R. Benenson, P. Doll´ ar, and B. Schiele. What
makes for effective detection proposals? PAMI, 2015. 2

[21] J. Huang, V. Rathod, C. Sun, M. Zhu, A. Korattikara,
A. Fathi, I. Fischer, Z.Wojna, Y. Song, S. Guadarrama, et al.
Speed/accuracy trade-offs for modern convolutional object
detectors. In CVPR, 2017. 2, 3, 4, 6, 7
[22] M. Jaderberg, K. Simonyan, A. Zisserman, and
K. Kavukcuoglu. Spatial transformer networks. In
NIPS, 2015. 4
[23] A. Kirillov, E. Levinkov, B. Andres, B. Savchynskyy, and
C. Rother. Instancecut: from edges to instances with multi-
cut. In CVPR, 2017. 3, 9
[24] A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet clas-
sification with deep convolutional neural networks. In NIPS,
2012. 2
[25] Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E.
Howard, W. Hubbard, and L. D. Jackel. Backpropagation
applied to handwritten zip code recognition. Neural compu-
tation, 1989. 2
[26] Y. Li, H. Qi, J. Dai, X. Ji, and Y. Wei. Fully convolutional
instance-aware semantic segmentation. In CVPR, 2017. 2,
3, 5, 6
[27] T.-Y. Lin, P. Doll´ ar, R. Girshick, K. He, B. Hariharan, and
S. Belongie. Feature pyramid networks for object detection.
In CVPR, 2017. 2, 4, 5, 7
[28] T.-Y. Lin, M. Maire, S. Belongie, J. Hays, P. Perona, D. Ra-
manan, P. Doll´ ar, and C. L. Zitnick. Microsoft COCO: Com-
mon objects in context. In ECCV, 2014. 2, 5
[29] S. Liu, J. Jia, S. Fidler, and R. Urtasun. SGN: Sequen-
tial grouping networks for instance segmentation. In ICCV,
2017. 3, 9
[30] J. Long, E. Shelhamer, and T. Darrell. Fully convolutional
networks for semantic segmentation. In CVPR, 2015. 1, 3, 6
[31] V. Nair and G. E. Hinton. Rectified linear units improve re-
stricted boltzmann machines. In ICML, 2010. 4
[32] G. Papandreou, T. Zhu, N. Kanazawa, A. Toshev, J. Tomp-
son, C. Bregler, and K. Murphy. Towards accurate multi-
person pose estimation in the wild. In CVPR, 2017. 8
[33] P. O. Pinheiro, R. Collobert, and P. Dollar. Learning to seg-
ment object candidates. In NIPS, 2015. 2, 3
[34] P. O. Pinheiro, T.-Y. Lin, R. Collobert, and P. Doll´ ar. Learn-
ing to refine object segments. In ECCV, 2016. 2, 3
[35] I. Radosavovic, P. Doll´ ar, R. Girshick, G. Gkioxari, and
K. He. Data distillation: Towards omni-supervised learning.
arXiv:1712.04440, 2017. 10
[36] S. Ren, K. He, R. Girshick, and J. Sun. Faster R-CNN: To-
wards real-time object detection with region proposal net-
works. In NIPS, 2015. 1, 2, 3, 4, 7
[37] S. Ren, K. He, R. Girshick, and J. Sun. Faster R-CNN: To-
wards real-time object detection with region proposal net-
works. In TPAMI, 2017. 10
[38] A. Shrivastava, A. Gupta, and R. Girshick. Training region-
based object detectors with online hard example mining. In
CVPR, 2016. 2, 5
[39] A. Shrivastava, R. Sukthankar, J. Malik, and A. Gupta. Be-
yond skip connections: Top-down modulation for object de-
tection. arXiv:1612.06851, 2016. 4, 7
[40] C. Sun, A. Shrivastava, S. Singh, and A. Gupta. Revisiting
unreasonable effectiveness of data in deep learning era. In
ICCV, 2017. 10

[41] C. Szegedy, S. Ioffe, and V. Vanhoucke. Inception-v4,
inception-resnet and the impact of residual connections on
learning. In ICLR Workshop, 2016. 7
[42] J. R. Uijlings, K. E. van de Sande, T. Gevers, and A. W.
Smeulders. Selective search for object recognition. IJCV,
2013. 2
[43] X.Wang, R. Girshick, A. Gupta, and K. He. Non-local neural
networks. arXiv:1711.07971, 2017. 10
[44] S.-E. Wei, V. Ramakrishna, T. Kanade, and Y. Sheikh. Con-
volutional pose machines. In CVPR, 2016. 8
[45] S. Xie, R. Girshick, P. Doll´ ar, Z. Tu, and K. He. Aggregated
residual transformations for deep neural networks. In CVPR,
2017. 4, 10

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章