卷積神經網路

2021-07-31 06:37:31 字數 4159 閱讀 8842

卷積神經網路(cnn):影象級語義理解的利器

自2023年alexnet提出並重新整理了當年imagenet物體分類競賽的世界紀錄以來,cnn在物體分類、人臉識別、影象檢索等方面已經取得了令人矚目的成就。通常cnn網路在卷積層之後會接上若干個全連線層, 將卷積層產生的特徵圖(feature map)對映成乙個固定長度的特徵向量。

以alexnet為代表的經典cnn結構適合於影象級的分類和回歸任務,因為它們最後都期望得到整個輸入影象的乙個數值描述, 比如alexnet的imagenet模型輸出乙個1000維的向量表示輸入影象屬於每一類的概率。例如,下圖中的貓, 輸入alexnet, 得到乙個長為1000的輸出向量, 表示輸入影象屬於每一類的概率, 其中在「tabby cat」這一類上響應最高。

全卷積網路:從影象級理解到畫素級理解

與物體分類要建立影象級理解任務不同的是,有些應用場景下要得到影象畫素級別的分類結果,例如:

1)語義級別影象分割(semantic image segmentation), 最終要得到對應位置每個畫素的分類結果。

2) 邊緣檢測, 相當於對每個畫素做一次二分類(是邊緣或不是邊緣)。以語義影象分割為例,其目的是將影象分割為若干個區域, 使得語義相同的畫素被分割在同意區域內。下圖是乙個語義影象分割的例子, 輸入影象, 輸出的不同顏色的分割區域表示不同的語義:背景、人和馬。

針對語義分割和邊緣檢測問題,經典的做法就是以某個畫素點為中心取乙個影象塊, 然後取影象塊的特徵作為樣本去訓練分類器。在測試階段, 同樣的在測試上以每個畫素點為中心採乙個影象塊進行分類, 分類結果作為該畫素點的**值。沈為等在cvpr2015上發表的deepcontour就採用這一思路檢測影象邊緣。

然而,這種逐畫素取影象塊進行分類的方法非常耗時, 另外乙個不足是受到影象塊的限制, 無法建模較大的上下文資訊(context), 從而影響演算法的效能。以語義影象分割(semantic image segmentation)為例, 資料集影象中的物體有時候非常大, 比如上圖中馬的分割例子, 如果不取比較大的影象塊,難以抽取到有效的特徵區分該畫素塊是否屬於一匹馬。

lonjong等發表在cvpr2015的**提出了全卷積網路(fcn)進行畫素級的分類從而高效的解決了語義級別的影象分割(semantic segmentation)問題。與經典的cnn在卷積層之後使用全連線層得到固定長度的特徵向量進行分類不同,fcn可以接受任意尺寸的輸入影象,採用反卷積層對最後乙個卷積層的feature map進行上取樣, 使它恢復到輸入影象相同的尺寸,從而可以對每個畫素都產生了乙個**, 同時也保留了原始輸入影象中的空間資訊, 最後在上取樣的特徵圖上進行逐畫素分類。**中逐畫素計算softmax分類的損失, 相當於每乙個畫素對應乙個訓練樣本。

由於步長(stride)不為一的卷積層和池化層產生的特徵圖(feature map)大小會有一些向下取整操作, 導致最後的feature map大小與原圖不是嚴格的倍數關係。例如對如下的乙個pooling層,

}

前層輸入大小為 11x11 的特徵圖, 其輸出的特徵圖大小為(11 - 2) / 2 + 1 = 5, 並不是輸入大小11的整數倍。上取樣不能完全保證最後的perpixel prediction 結果與原圖大小嚴格相同, 因此在上取樣(deconvlution)之後會有乙個crop層, 將上取樣的結果進行裁剪, 使之大小與輸入影象嚴格相等。

下圖是longjon用於語義分割所採用的全卷積網路(fcn)的結構示意圖, 在alexnet基礎上, 最後的channel=4096的feature map經過乙個1x1的卷積層, 變為channel=21的feature map, 然後經過上取樣和crop, 變為與輸入影象同樣大小的channel=21的feature map, 也就是圖中的pixel-wise prediction。 在longjon的試驗中一共有20個語義類別, 加上背景類別每個畫素應該有21個softmax**類, 因此pixel-wise prediction中channel=21。

fcn能夠端到端(end to end)得到每個畫素的**結果, 目前也湧現了一大批基於fcn的演算法, 例如邊緣檢測(edge detection), 視覺跟蹤(visual tracking)等。同時fcn也可以省去傳統識別中複雜的逐patch計算過程, 我們曾經在乙個燃氣表數字識別的專案中使用fcn直接得到如下圖所示燃氣表中的數字識別結果, 如果使用經典的用於數字識別的lenet-5網路, 就需要對下圖進行字元檢測然後取patch歸一化後進行分類。

在訓練階段, 我們標定燃氣表數字中心一塊區域的畫素點為該類數字的正樣本, 如下圖所示, 不同數字的中心區域的畫素被標定為不同的類別, 十種數字加上背景一共十一類, 不同顏色表示不同類別的標註, 其他的都是背景類。最後對每個畫素計算softmax loss。

測試階段通過全卷積網路得到輸入燃氣表影象每乙個畫素的分類結果, 接著進行非極大值抑制, 形態學變換等後續操作, 可直接得到上圖的識別結果"001832", 整個系統十分高效。

我們開源了基於caffe的實現,**鏈結 github - shucv/digit: digital meter numbers detection.

hed: fcn用於邊緣檢測

上一節講到fcn適用於需要畫素級**的場景, 下面就介紹乙個基於fcn的邊緣檢測的工作hed, 來自於屠卓文老師組, 發表在iccv2015並且獲得了marr獎提名。

hed提出了side-output的概念, 在網路的中間的卷積層也對其輸出上取樣得到乙個與原圖一樣的map, 並與ground-truth計算loss, 這些中間的卷積層輸出的map稱為side-output。多個side-output產生的loss直接反向傳導到對應的卷積層, 一定程度避免了梯度消失, 同時也在不同的卷積層(不同的感受野)學到了不同尺度的feature, 在edge-detection這個計算機視覺中古老的問題上取得了state-of-art的效果。

上圖所示為hed的網路結構, 多個side-output產生的loss直接反向傳到對應的卷積層。

fsds:我們發表於cvpr16的骨架檢測方法

在hed的基礎上, 我們進一步提出了「尺度相關的邊輸出」(scale-associated side-output)的概念, 根據卷積層感受野的不同, 給予不同的監督, 使得最終的side-output具有尺度資訊。

由於hed解決的是邊緣檢測問題, 對於乙個邊緣點即使很小的感受野也能捕捉到邊緣資訊, 所以hed在多個side-output上進行優化的時候使用的是同乙個ground-truth, 不同的side-output(具有不同的感受野)用同乙個ground-truth監督是合理的。但是在骨架檢測(skeleton detection)的問題中,骨架尺度有很大的變化, 不同感受野的卷積單元能感受到的骨架資訊是不同的。

正如下圖, 只有卷積核(圖中綠色方框)正好略大於骨架尺度(對應下圖第1,第3個卷積核), 卷積核提取的特徵才能有效檢測出骨架。

基於以上的分析, 我們提出了fsds(fusing scale-associated deep side-output),不同side-output是尺度相關的。 首先將骨架點根據其尺度從小到大分為離散的五類

, 然後根據不同的side-output感受野的不同, 使用不同的ground-truth去監督side-output。 在這裡, 物體骨架的尺度定義為骨架點到最近的輪廓點的距離的兩倍。

具體的, 在淺層的side-output(更小的感受野), groundtruth只標註第一類(尺度最小的)為正樣本,其它所有點為負樣本進行二分類; 由淺到深隨著side-output感受野的增加, 逐漸增加監督的類別, 進行三分類、四分類等等。

另外, 在hed中多個side-output的結果最後是平均累加的。 在我們的結構中, 由於淺層side-output產生的小尺度骨架的map置信度更高, 而深層side-output產生的大尺度骨架map的置信度高, 設計了帶有權重的side-output融合策略, 多個由多個side-output產生的不同的尺度的分類結果使用不同的權重進行融合, 該權重在優化過程中自動學到。

上圖是我們方法(fsds)的網路結構, 多個side-output使用不同尺度的監督, 最後使用不同的權重進行融合。

我們已經開源了該方法基於caffe的實現, 源**鏈結github - zeakey/deepskeleton: code for cvpr2016 ***** "object skeleton extraction in natural images by fusing scale-associated deep side outputs"

致謝:感謝中科院計算所博士生所劉昕, 在撰本文期間本文與他進行了深入討論並對本文提出了建設性的修改意見。

神經網路 卷積神經網路

這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...

神經網路 卷積神經網路

1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...

卷積神經網路 有趣的卷積神經網路

一 前言 最近一直在研究深度學習,聯想起之前所學,感嘆數學是一門樸素而神奇的科學。f g m1 m2 r 萬有引力描述了宇宙星河運轉的規律,e mc 描述了恆星發光的奧秘,v h d哈勃定律描述了宇宙膨脹的奧秘,自然界的大部分現象和規律都可以用數學函式來描述,也就是可以求得乙個函式。神經網路 簡單又...