细粒度识别 | 百度细粒度识别方案
近日,百度發布了用于花卉識別的移動端應用,這種基于全卷積注意力網絡的細粒度識別方法在計算和準確度上都有非常強大的優勢。在百度主任研發架構師陳凱和資深研發工程師胡翔宇的解釋下,本文首先將介紹什么是細粒度識別,以及一般的細粒度識別方法,然后重點解析百度基于強化學習和全卷積注意力網絡的細粒度識別模型。五一出游賞花,為女朋友解釋解釋細粒度識別也是極好的。
? ? ? ?細粒度識別的概念其實非常簡單,即模型需要識別非常精細的子類別。例如百度的花卉識別應用,模型不僅需要如一般識別問題那樣檢測出物體是不是花,同時還需要檢測出物體具體屬于哪一品種的花。而通常屬于不同子類別的物體是非常相似的,例如櫻花和桃花等,我們不僅需要花的整體信息來識別它是「花」,同時還需要局部信息來確定「花」的品種。
從這一觀點出發,細粒度識別基本上就是同時使用全局信息和局部信息的分類任務。對于花的細粒度識別來說,全局信息就是用戶拍攝的整張圖像,而局部信息則是圖像中的花或花的重要部位。這兩部分信息都包括在整張圖像中,我們希望模型根據整張圖像預測出具體的細分類別。
百度借助了知識圖譜對世界上的花卉名字進行科學的科、屬、種劃分,建立了一個非常專業的花卉類別庫。而對于其它巨量優質的花卉圖像,標注人員通過權威樣本庫中的文字描述,并在中科院老師的幫助下,根據花卉的葉子、形狀、顏色等微觀特征進行挑選與標注。此外,百度還進行了標注質量的檢查,標注準確率在 95% 以上。最后,這些巨量的標注數據包含了花卉的整體圖像和對應的精細品種。
其實整體圖像隱含地包括了全局信息與局部信息,但一般來說,局部信息同樣也需要標注,而利用這些局部標注的方法即基于強監督信息的細粒度識別。不過這種局部標注是非常昂貴的,因此很多模型嘗試自己學習重要的局部區域,這一類方法即基于弱監督信息的細粒度識別。
百度所采用的全卷積注意力網絡是一種基于弱監督信息的細粒度識別方法,它不需要標注局部特征,并通過下文描述的全卷積注意力網絡和馬爾科夫決策過程自動學習重要的區域。
細粒度識別
如上所述,細粒度識別可分為強監督和弱監督兩種。最開始優秀的模型一般都是基于強監督的,它們在測試集上有更好的性能。但基于強監督的方法標注成本非常高,且局部標注在遇到遮擋等情況時就會完全失去作用,因此更多的研究者開始探討基于弱監督的細粒度識別方法。以下簡單地介紹了這兩種方法的實例,即基于強監督的 Part-based R-CNN 和弱監督的 Bilinear CNN。
基于強監督信息的細粒度識別通常需要使用邊界框和局部標注信息,例如 2014 年提出的 Part-based R-CNN 利用自底向上的候選區域(region proposals)計算深度卷積特征而實現細粒度識別。這種方法會學習建模局部外觀,并加強局部信息之間的幾何約束。
如上所示,局部區域將從自底向上的候選區域開始(左上角),我們將基于深度卷積特征同時訓練目標和局部區域。在推斷階段,所有的窗口都會由檢測器評分(中間),且我們可以應用非參幾何約束(底部)重新評估窗口并選擇最優的目標和局部檢測(右上角)。最后的步驟就是抽取局部語義信息來用于細粒度識別,并訓練一個分類器預測最終類別。
而基于弱監督信息的細粒度識別也有很多方法,例如 15 年提出的 Bilinear CNN,它由兩個特征提取器組成,它們在每個圖像位置的輸出使用外積相乘,并池化以獲得一個圖像描述子。這種架構能以轉譯不變的方式對局部成對特征的交互進行建模,這對于細粒度識別非常重要。
Bilinear CNN 所使用的外積捕捉了特征通道之間的成對相關性,因此可以建模局部特征的交互,即如果一個網絡是局部檢測器,那么另一個網絡就是局部特征抽取器。以下展示了用于細粒度分類的 Bilinear CNN 模型,在推斷過程中,一張圖像將傳入兩個卷積神經網絡 A 和 B,然后對應位置的外積相乘得出雙線性向量,并傳入 Softmax 層以完成分類。
百度所采用的細粒度識別方法也是一種使用弱監督的策略,它通過全卷積注意力網絡實現類別預測,并基于強化學習調整需要注意的局部區域。
全卷積注意力網絡
盡管最近研究社區將目光投向弱監督的細粒度識別方法,但它的效果和實踐上都有一些差距。百度的細粒度模型通過利用強化學習選擇注意區域而大大減少了強監督所需要的圖像標注量,且還能以非常高的準確度部署到應用中。他們構建一種全卷積注意網絡,并根據馬爾科夫決策過程確定哪些局部圖像塊對最終預測有幫助,因此圖像的細粒度分類將同時利用全局圖像和那些重要的局部圖像完成預測。
百度提出的這種架構首先基于弱監督強化學習而不需要昂貴的標注,其次它所采用的全卷積網絡可以加速訓練和推斷過程,最后貪婪的獎勵策略可以加速學習的收斂,這三點也是百度細粒度模型的顯著特點。
胡翔宇表示:「這種網絡其實和人類的視覺系統非常像,在我們識別細分類別時,首先會查看整體特征而確定大概的類別,然后再仔細觀察有區分度的特征確定細分類別。」百度的全卷積注意力網絡(FCANs)同樣首先會抽取整張圖的特征進行分類,然后截取一小塊特征圖(Feature Map)作為當前網絡注意的區域,當這樣的區域是具有區分度的特征時,模型就更能正確預測出細分類別。
模型架構
該模型主要的架構如下圖所示可以分為特征抽取階段、局部特征注意區域和分類過程。總體而言模型會先使用預訓練卷積神經網絡抽取圖像特征,然后再結合整體圖像信息和局部重要信息預測最終類別。
如上所示,在下部分的訓練過程中,抽取的特征圖會在所有通道上做一些截取,截取的部分就相當于模型關注的局部原始圖像。如果說這個截取在最后的分類階段中提升了預測效果,那么它就是值得注意的區域。在上部分的推斷過程中,模型將利用輸入圖像的全局特征和所有重要的局部圖像預測精細類別。
特征圖的抽取
特征圖會通過全卷積神經網絡進行抽取,一般我們可以選擇 VGG 或 ResNet 等流行的網絡架構,并在 ImageNet 數據集上預訓練而能抽取一般圖像的特征。胡翔宇表示:「百度很早就開始重視數據方面的建設,借助搜索方面的經驗與對網頁數據的理解,我們可以獲取很多優質的樣本。抽取特征的全卷積網絡會在百度內部的數據集上預訓練,它的規模要比 ImageNet 大很多,特征抽取的效果也要好一些。」
在訓練過程中,特征抽取只會運行一次,因此一張輸入圖像最后只會輸出一組特征圖。這組特征圖首先可以直接用于預測圖像類別,其次我們可以截取特征圖的一個小部分(包含所有通道)作為模型可能需要注意的區域。這樣的截取其實就近似于在輸入圖像上截取一個部分(感受視野),只不過直接截取特征圖不需要重新抽取特征,因此會極大地減少計算量。
在推斷過程中,特征圖的抽取需要執行很多次,但它們都能并行地處理。直觀而言,訓練學習到的注意力區域其實就相當于一種掩碼,它表示該區域的特征對最終預測有很重要的作用。百度并行地從輸入圖像抽取各個重要部分和全局的特征圖,并結合它們的信息預測精細類別。
注意力區域
在抽取特征后,模型需要學習哪些局部區域對最終分類是重要的,而確定重要性的標準即局部區域對最終預測是否有幫助。在這一階段中,注意力網絡會將基本的局部卷積特征圖生成一張評分圖或置信圖,即通過疊加的兩個卷積層將特征圖轉換為通道數為 1 的評分圖。一般第一個卷積層可使用 64 個 3×3 的卷積核,而第二個卷積層可使用 1 個 3×3 的卷積核將通道數降為 1,這一張置信圖展示了模型關注的興趣點。
胡翔宇說:「興趣點是網絡自己學到的,而裁剪的大小是我們給定的。我們首先會給一個 8×8 的較大裁剪窗口,相當于關注較大的區域。隨著迭代的進行,我們會慢慢減小裁剪窗口,這相當于關注更小的細節。」裁剪后的特征圖一般需要饋送到 Softmax 層以將置信圖轉換為概率圖。
其實在訓練或推斷中直接截取輸入圖像作為注意的局部特征有最好的效果,但這種方法在訓練中計算量太大,且因為分類網絡的時序預測而不能并行處理。不過在推斷中可以直接使用圖像的局部區域,因為后面的分類網絡允許并行計算。此外,百度通過強化學習確定注意力區域,這一點將在后面討論。
分類網絡
最后的分類網絡將結合全局圖像信息和局部特征信息預測最終的精細類別,訓練階段和推斷階段的分類網絡架構也不一樣。這種架構上的區別主要在于訓練階段需要根據分類結果動態地調整注意力區域,而推斷過程直接使用重要的注意力區域聯合預測最終類別。
胡翔宇表示:「在訓練階段中,前向傳播的過程有點類似循環神經網絡。首先模型會根據全局特征圖預測圖像類別,然后再結合第一個抽取的局部特征圖重新預測類別,這里的方法可以簡單地將前一次的 Softmax 結果與后一次的 Softmax 結果求平均。」最后,考慮加入第一個注意力區域后是否提升預測效果,我們可以確定該區域是否重要。這樣繼續添加新的局部注意力區域可以搜索所有重要的局部區域。
在推斷中,我們可以并行地使用全卷積神經網絡抽取全局特征圖和所有重要局部特征圖,然后饋送到 Softmax 中以分別計算出對應的分類概率。最后,我們可以采用簡單的求均值方法對所有的分類器做集成處理,因此最終的分類將結合了所有的重要信息而提升精細類別的預測結果。
模型訓練
模型中最重要的部分就是選取重要的局部區域,這也稱為注意力問題。百度在這一部分采取了馬爾科夫決策過程,在每一個時間步中,上文所述的全卷積注意力網絡可作為智能體,它將基于觀察采取行動并收到獎勵。在百度的模型中,全卷積注意力網絡觀察到的信息就是輸入圖像與根據注意力區域裁剪的圖像,而行動對應于選擇新的注意力區域。根據行動是否提升分類準確度,我們可以調整獎勵來確定最優的行動或注意力區域。
在前面全卷積注意力網絡的架構中,訓練過程中的分類網絡非常類似于循環網絡,即時間步 t 的分類結果將集成之前所有時間步的分類分數。如下所示為計算最終分類分數的表達式,我們可以簡單地對所有時間步上的分類分數求平均:
其中 S_t 為時間步 t 以內所有預測分數的均值,
表示在給定分類網絡的參數 θ^τ 和第 τ 個注意力區域的特征圖下,在時間步τ的預測分數。智能體 FCANs 在采取了動作(選擇 l^t 作為注意力區域)后可獲得獎勵 r^t,一般 r^t 會通過度量預測分數 S_t 和真實標注 y 之間的匹配度獲得。
陳凱表示:「在技術上,百度的細粒度識別能做到在線學習以根據用戶反饋實時更新參數,但在產品價值觀上,細粒度識別并不會使用用戶數據在線調整模型。」因此,以下的模型訓練都是在百度服務器中進行的,訓練好的模型直接部署到服務器并實現云端推斷。
在訓練過程中,我們沒有標注哪些局部圖像或特征比較重要,且獎勵函數不可微,因此百度采用了強化學習方法來訓練注意力區域。若給定一組訓練樣本,我們希望能同時優化特征抽取網絡的參數 θ^f、注意力網絡的參數 θ^l 和分類網絡的參數 θ^c,并最大化以下目標函數:
其中 L(θ_f, θ_c) 為平均交叉熵損失函數,它度量了 N 個訓練樣本和 T 個時間步上的平均分類損失,而最大化負的交叉熵函數即最小化分類損失。此外,給定注意力區域,分類損失將只和特征抽取網絡的與分類網絡的參數相關。R(θ_f, θ_l) 表示 N 個訓練完本和 T 個時間步上的平均期望獎勵,最大化 R 將確定最重要的注意力區域。簡單來說,該函數度量了選擇注意力區域 l 時獲得的期望獎勵 E[r],在每一個時間步上都選擇最好的注意力區域將獲得最大的期望獎勵。
在最大化上述目標函數的過程中,獎勵策略非常重要,因為不同的獎勵 r 將直接影響到注意力區域的選取,從而進一步影響分類損失。獎勵策略主要體現在選擇確定 r 值上,一般直觀的獎勵策略可以將最終分類結果作為度量整體注意力區域選擇策略的標準,即如果 t=T 且
,則 r^t =1,否則 r^t 都等于 0。
盡管使用以上樸素的獎勵策略可以通過循環的方式學習,但它可能會造成不同時間步上選擇區域的困難,且導致收斂問題。因此,百度提出了一種新型獎勵策略:
其中
表示第 n 個樣本在第 t 個時間步上的分類損失。如果圖像在第一個時間步就分類正確,那么它能立即收到一個獎勵 1,這相當于在僅使用全圖特征的情況下能正確分類。當我們獎勵不同的注意力區域時,我們要求當前時間步需要分類正確,且同時分類損失相比上一時間步有降低。如果不滿足這兩個條件,我們將不獎勵注意力區域。
胡翔宇解釋說:「對于細粒度分類問題,裁剪出來的區域是好是壞比較容易確定。例如裁剪出一個局部細節,且它已經足夠證明圖像是怎樣的細分類,那么我們就可以確定這個區域是有價值的。其實自然圖像的信息冗余度非常大,甚至只需要 1 到 2 個細節就能幫助我們識別花的具體品種,那么我們也認為這樣的策略是優秀的。」
最后,結合上述所有過程就可構建整個模型的前向傳播與反向傳播過程。如下圖所示,在前向傳播的過程中,我們先使用全卷積神經網絡 φ 抽取輸入圖像的特征圖,然后使用注意力網絡將多通道的特征圖變換到單通道的置信圖π。在依據置信圖對完整特征圖進行裁剪后,我們就得到了注意力區域 l。將注意力區域投入到分類網絡就能計算出分類結果,并且當前時間步的結果和上一時間步的結果相結合就能給出對該注意力區域的獎勵。
在反向傳播中,上文(2)式的目標函數需要對參數求梯度以將誤差向前傳,并更新參數。其中 L 是經典交叉熵損失函數,它的梯度很容易計算,而獎勵的平均期望 R 是不可微的,所以百度采用了蒙特卡洛方法來逼近期望獎勵 E[r] 的梯度。因此在上圖(b)中,分類結果 s 將按常規實現反向傳播,而期望獎勵的梯度可直接調整注意力網絡的參數,并向前傳遞調整特征卷積網絡的參數。
百度基于全卷積注意力網絡和強化學習構建的細粒度識別應用目前已經部署到了云端,模型的實現都是通過 PaddlePaddle 架構完成的。胡翔宇表示:「該應用目前部署在云端,但隨著移動端硬件的發展,我們會在一些場景中將網絡部署到更靠近用戶的地方。但即使部署在云端,考慮到推斷的性價比,我們也會采用一些模型壓縮方法。這些壓縮方法一般可以分為兩大類,首先是采用半精度(FP16)等和硬件相關的方法,其次就是將批歸一化的參數壓縮到卷積層等和硬件無關的方法。」
說到移動端的部署,百度其實有開源 PaddlePaddle Mobile 框架,陳凱表示:「PaddlePaddle 的移動端框架其實也在和移動硬件的廠商合作,它后續會加強對 NPU 等硬件的優化,包括內存管理和功耗控制等。」
總結
以上是生活随笔為你收集整理的细粒度识别 | 百度细粒度识别方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光度立体视觉 matlab,Matlab
- 下一篇: 老男孩教育--50期linux高级运维脱