當前位置:編程學習大全網 - 源碼下載 - fcn在外企的地位如何?

fcn在外企的地位如何?

fcn?它是完全自願網絡的簡稱。翻譯成“完全卷積網絡”,國外公司fcn?是網絡編程的崗位。

FCN在像素級對圖像進行分類,從而解決了語義圖像分割的問題。與經典的CNN使用全連接層獲得固定長度的特征向量進行分類(全連接層++softmax輸出)不同,FCN可以接受任何大小的輸入圖像,並使用去卷積層對最後壹個卷積層的特征圖進行上采樣,以將其恢復到與輸入圖像相同的大小,從而可以對每個像素進行預測,同時保留原始輸入圖像中的空間信息。最後,在上采樣的特征圖上對其進行逐像素分類。

最後逐像素計算softmax分類的損失,相當於每個像素壹個訓練樣本。下圖是龍芯用於語義切分的全卷積網絡(FCN)的結構示意圖:

簡單來說,FCN和CNN之間的區域,就是把CNN末端的全連通層替換成壹個滾動層,輸出的是壹個帶標簽的圖片。

實際上,CNN的優勢在於其多層結構可以自動學習特征,可以學習多個層次的特征:淺卷積層的感知域更小,學習壹些局部區域的特征;卷積層越深,感知域越大,可以學習更多的抽象特征。這些抽象特征對物體的大小、位置和方向不太敏感,有助於提高識別性能。以下是CNN分類網絡示意圖:

這些抽象特征對分類非常有幫助,可以很好的判斷壹幅圖像中包含了什麽樣的物體。但是由於物體的壹些細節丟失,很難給出物體的具體輪廓,指出每個像素點屬於哪個物體,所以要準確分割出來是非常困難的。

基於CNN的傳統分割方法:為了對壹個像素進行分類,將該像素周圍的壹個圖像塊作為CNN的輸入進行訓練和預測。這種方法有幾個缺點:第壹,存儲成本非常高。比如每個像素使用的圖像塊大小是15x15,然後不斷滑動窗口,每個滑動窗口都是CNN分類的,所以根據滑動窗口的數量和大小,所需的存儲空間急劇上升。二是計算效率低。相鄰的像素塊基本上是重復的,對每個像素塊逐壹計算卷積,這種計算在很大程度上也是重復的。第三,像素塊的大小限制了感測區域的大小。通常像素塊的大小遠小於整幅圖像的大小,只能提取部分局部特征,導致分類性能受到限制。

全卷積網絡(FCN)從抽象特征中恢復每個像素的類別。也就是說,從圖像級別的分類進壹步擴展到像素級別。

全連接層->;軋制層

全連接層和卷積層的唯壹區別是卷積層的神經元只連接到輸入數據中的壹個局部區域,卷積列* * *的神經元共享參數。但在兩層中,神經元都是計算點積的,所以它們的函數形式是壹樣的。因此,這兩者可以相互轉化:

對於任何壹個卷積層,都有壹個全連通層可以實現和它壹樣的前向傳播功能。權重矩陣是壹個龐大的矩陣,除了壹些特定的塊,其余為零。在大多數這樣的塊中,元素是相等的。

相反,任何全連通層都可以轉化為卷積層。比如壹個?K=4096?輸入數據體的大小是多少?7×7×521,這個全連通層可以等價地看成是a?F=7,P=0,S=1,K=4096?的卷積層。換句話說,過濾器的大小被設置為與輸入數據量的大小壹致。因為只有壹個深度列覆蓋並滑過輸入數據量,所以輸出將變成?1×1×4096,結果與使用原全連通層相同。

將全連通層轉換為卷積層:兩種轉換中,將全連通層轉換為卷積層在實際應用中更有用。假設卷積神經網絡的輸入為?224x224x3?壹系列卷積圖層和縮減像素采樣圖層將圖像數據更改為大小為?7x7x512?的激活數據體。AlexNet使用兩個大小為4096的全連接層,最後壹個具有1000個神經元的全連接層用於計算分類得分。我們可以將這三個完全連接的層中的任何壹個轉換為卷積層:

對於第壹個連接區域為[7x7x512]的全連接層,濾波器大小為F=7,因此輸出數據量為[1x1x4096]。

對於第二個全連接層,濾波器大小為F=1,因此輸出數據量為[1x1x4096]。

對最後壹個全連通層做同樣的操作,使其F=1,最終輸出為[1x1x1000]。

在實踐中,每次這樣的變換都需要將全連通層的權重w整形為卷積濾波器。那麽這樣的轉化有什麽作用呢?在以下情況下可以更高效:讓卷積網絡在更大的輸入畫面上滑動,得到多路輸出。這種轉換允許我們在單個正向傳播過程中完成上述操作。

舉個栗子:如果我們想讓壹個224×224的浮動窗口在384×384的圖片上滑動,步長為32,我們就把每壹個停止的位置都帶入卷積網絡,最後得到壹個6×6位置的類別得分。將完全連接的層轉換為卷積層會更容易。如果224×224的輸入畫面經過卷積層和下采樣層,得到的是[7x7x512]的數組,那麽384×384的大畫面在經過同壹個卷積層和下采樣層後,會直接得到[12x12x512]的數組。然後經過上面三個全連通層轉化的三個卷積層,最後得到[6x6x 1000]((12–7)/1+1 = 6)的輸出。這個結果是原圖停止的6×6位置的浮動窗口的分數!

面對384×384圖像,初始卷積神經網絡(包括全連接層)以32像素的步長對圖像中的224×224塊進行多次獨立評估,效果與將全連接層轉換為卷積層進行壹次前向傳播後使用卷積神經網絡相同。

以32像素為步長,在384x384圖像的224x224個裁剪中獨立評估原始ConvNet(帶有FC層),與轉發轉換後的ConvNet壹次的結果相同。

如下圖所示,FCN將傳統CNN中的全連通層轉化為卷積層,對應CNN網絡FCN將後三個全連通層轉化為三個卷積層。在傳統的CNN結構中,前五層是卷積層,第六和第七層是長度為4096的壹維向量,第八層是長度為1000的壹維向量,分別對應1000個不同類別的概率。FCN將這三層表示為卷積層,卷積核的大小(通道數,寬度和高度)分別為(4096,1,1),(4096,1,1)和(1000,65438)。數字上看似沒有區別,但卷積和全連接是不同的概念和計算過程,用的是CNN之前訓練過的權值和偏移量,但區別在於權值和偏移量有自己的範圍,屬於自己的卷積核。因此,FCN網絡中的所有層都是卷積層,所以稱為全卷積網絡。

下圖是壹個全滾動圖層,與上圖不同的是圖像對應的大小下標。CNN中輸入的圖像大小是227x227大小的圖像,第壹層匯集後大小為55x55,第二層匯集後大小為27x27,第五層匯集後大小為13*13。FCN輸入的圖像是H*W,第壹層是池化,變成1/4,第二層變成1/8,第五層變成1/16,第八層變成1/32(勘誤

經過多次卷積和池化,圖像越來越小,分辨率越來越低。圖像在哪裏?H/32?W/32?當圖片為最小圖層時,生成的圖像稱為熱圖,熱圖是我們最重要的高維診斷圖像。在獲得具有高維特征的熱圖後,對原始圖像進行上采樣,將圖像放大、放大、再放大到原始圖像的大小,是最重要也是最後壹步。

最終輸出是65,438+0,000張熱圖圖片,這些圖片已被上采樣到原始大小。為了將每壹個像素分類預測為最後壹個被語義分割的圖像,這裏有壹個小技巧,就是最後通過逐像素地在1000幅圖像中尋找像素位置的最大數值描述(概率)來對像素進行分類。所以就產生了壹張分類圖,如下圖,右邊是狗和貓。

上采樣

與使用轉換前的原始卷積神經網絡來叠代計算所有36個位置相比,使用轉換後的卷積神經網絡來執行前向傳播計算的效率要高得多,因為所有36個計算都在* * *中享受計算資源。這種技術在實踐中經常使用,以獲得更好的效果。比如通常把壹幅圖像的尺寸做得更大,然後用變換後的卷積神經網絡去評估空間中很多不同的位置,得到分類得分,然後計算這些得分的平均值。

最後,如果我們想使用步長小於32的浮動窗口呢?可以通過多次正向傳播來解決。例如,我們想使用壹個步長為16的浮動窗口。然後用原圖像在變換後的卷積網絡中向前傳播,再將原圖像沿寬度、沿高度、最後同時沿寬度和高度平移16個像素,然後將這些平移後的圖像分別帶入卷積網絡。

如下圖所示,當圖像在網絡中處理變小後,其特征更加明顯,就像圖像中的顏色壹樣。當然,圖像的最後壹層不再是1像素的圖片,而是原圖H/32xW/32大小的圖片,為了簡單起見,只畫為壹個像素。

如下圖,卷積conv1和pool1後,原圖縮小為1/2;在第二次conv2和pool2之後,圖像縮小到1/4。然後,圖像第三次conv3,pool3縮小到原圖像的1/8,featureMap此時保留池3的。然後第四次圖像為conv4和pool4,縮小為原圖像的1/16,featureMap池4的已被保留。最後對圖像進行第五次卷積運算conv5和pool5,縮小到原始圖像的1/32。然後,將原CNN運算中的全連接改為卷積運算conv6和conv7,改變圖像的特征映射數,但圖像大小仍為原圖像的1/32。這時候圖像就叫熱圖而不是特征圖了。

現在我們有1/32大小的熱圖、1/16大小的特征圖和1/8大小的特征圖。對1/32大小的熱圖進行上采樣後,由於該操作恢復的圖像只是conv5中卷積核中的特征,因此受到限制。在conv4中對最後壹次上采樣後的圖像進行反卷積(相當於壹個差分過程),最後在conv3中對剛剛上采樣後的圖像進行反卷積,最後完成整幅圖像的復原。

劣勢

這裏我們應該註意FCN的缺點:

結果還是不夠精細。雖然8倍上采樣的效果要比32倍好很多,但是上采樣的結果仍然是模糊平滑的,而且對圖像中的細節不敏感。

就是在沒有充分考慮像素之間關系的情況下,對每個像素進行分類。在通常的基於像素分類的分割方法中使用的空間正則化步驟被忽略,這缺乏空間壹致性。

  • 上一篇:傳說的蛟龍和龍有什麽區別?
  • 下一篇:C語言:采用冒泡排序方法,對10個數按由小到大的的順序排序
  • copyright 2024編程學習大全網