當前位置:首頁 » 圖片大全 » fcn會將圖片分成多少類
擴展閱讀
帶花盆植物圖片卡通 2024-09-24 13:13:56
一個男人面臨險境的圖片 2024-09-24 13:09:45
愛的承諾圖片素材 2024-09-24 13:01:46

fcn會將圖片分成多少類

發布時間: 2024-02-28 05:08:59

A. 圖像分割:全卷積神經網路(FCN)詳解

作為計算機視覺三大任務(圖像分類、目標檢測、圖像分割)之一,圖像分割已經在近些年裡有了長足的發展。這項技術也被廣泛地應用於無人駕駛領域中,比如用來識別可通行區域、車道線等。
全卷積網路(Fully Convolutional Networks,FCN)是UC Berkeley的Jonathan Long等人於2015年在Fully Convolutional Networks for Semantic Segmentation一文中提出的用於圖像語義分割的一種框架。雖然已經有很多文章介紹這個框架,我還是希望在此整理一下自己的理解。

整體的網路結構分為兩個部分:全卷積部分和反卷積部分。其中全卷積部分借用了一些經典的CNN網路(如AlexNet,VGG,GoogLeNet等),並把最後的全連接層換成 卷積,用於提取特徵,形成熱點圖;反卷積部分則是將小尺寸的熱點圖上采樣得到原尺寸的語義分割圖像。

網路的輸入可以為任意尺寸的彩色圖像;輸出與輸入尺寸相同,通道數為:n(目標類別數)+1(背景)。

網路在CNN卷積部分不用全連接而是替換成 卷積的目的是允許輸入的圖片為超過某一尺寸的任意大小。

由於在卷積過程中,我們的heat map變得很小(比如長寬變為原圖像的 ),為了得到原圖像大小的稠密像素預測,我們需要進行上采樣。
一個直觀的想法是進行雙線性插值,而雙線性插值很容易用反向卷積(backwards convolution)通過固定的卷積核來實現。反向卷積又可以被稱為反卷積(deconvolution),在近期的文章中通常被稱為轉置卷積(transposed convolution)。
在實際應用中,作者並沒有固定卷積核,而是讓卷積核變成可學習的參數。

如果利用之前提到的上采樣技巧對最後一層的特徵圖進行上采樣的到原圖大小的分割,由於最後一層的特徵圖太小,我們會損失很多細節。因而作者提出增加Skips結構將最後一層的預測(有更富的全局信息)和更淺層(有更多的局部細節)的預測結合起來,這樣可以在遵守全局預測的同時進行局部預測。

FCN仍有一些缺點,比如:
得到的結果還不夠精細,對細節不夠敏感;
沒有考慮像素與像素之間的關系,缺乏空間一致性等。

參考: zomi,全卷積網路FCN詳解:知乎專欄文章

作者的其他相關文章:
PointNet:基於深度學習的3D點雲分類和分割模型 詳解
基於視覺的機器人室內定位

B. 計算機視覺——典型的目標檢測演算法(OverFeat演算法)(二)

【嵌牛導讀】目標檢測在現實中的應用很廣泛,我們需要檢測數字圖像中的物體位置以及類別,它需要我們構建一個模型,模型的輸入一張圖片,模型的輸出需要圈出圖片中所有物體的位置以及物體所屬的類別。在深度學習浪潮到來之前,目標檢測精度的進步十分緩慢,靠傳統依靠手工特徵的方法來提高精度已是相當困難的事。而ImageNet分類大賽出現的卷積神經網路(CNN)——AlexNet所展現的強大性能,吸引著學者們將CNN遷移到了其他的任務,這也包括著目標檢測任務,近年來,出現了很多目標檢測演算法。

【嵌牛鼻子】計算機視覺

【嵌牛提問】如何理解目標檢測演算法——OverFeat

【嵌牛正文】

一、深度學習的典型目標檢測演算法

深度學習目標檢測演算法主要分為 雙階段檢測演算法 和 單階段檢測演算法 ,如圖1所示。

雙階段目標檢測演算法先對圖像提取候選框,然後基於候選區域做二次修正得到檢測結果,檢測精度較高,但檢測速度較慢;單階段目標驗測演算法直接對圖像進行計算生成檢測結果,檢測速度快,但檢測精度低。

1、雙階段目標檢測演算法

雙階段目標檢測方法主要通過選擇性搜索(Selective Search)或者Edge Boxes等演算法對輸入圖像選取可能包含檢測目標的候選區域(Region Proposal),再對候選區域進行分類和位置回歸以得到檢測結果。

1.1 OverFeat 演算法

《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》

Sermanet 等改進AlexNet 提出 OverFeat 演算法。該演算法結合AlexNet通過多尺度滑動窗口實現特徵提取功能,並且共享特徵提取層,應用於圖像分類、定位和目標檢測等任務。

關鍵技術:

1、FCN( 全卷積神經網路 )

對於一個各層參數結構都設計好的網路模型,要求輸入圖片的尺寸是固定的(例如,Alexnet要求輸入圖片的尺寸為227px*227px)。如果輸入一張500*500的圖片,希望模型仍然可以一直前向傳導,即一個已經設計完畢的網路,可以輸入任意大小的圖片,這就是FCN。

FCN的思想在於:

1、從卷積層到全連接層,看成是對一整張圖片的卷積層運算。

2、從全連接層到全連接層,看成是採用1*1大小的卷積核,進行卷積層運算。

如上圖所示,綠色部分代表卷積核大小。假設一個CNN模型,其輸入圖片大小是14*14,通過第一層卷積後得到10*10大小的圖片,然後接著通過池化得到了5*5大小的圖片。像但是對於像素值為5*5的圖片到像素值為1*1的圖片的過程中:

(1)傳統的CNN:如果從以前的角度進行理解的話,那麼這個過程就是全連接層,我們會把這個5*5大小的圖片,展平成為一維向量進行計算。

(2)FCN:FCN並不是把5*5的圖片展平成一維向量再進行計算,而是直接採用5*5的卷積核,對一整張圖片進行卷積運算。

二者本質上是相同的,只是角度不同,FCN把這個過程當成了對一整張特徵圖進行卷積,同樣,後面的全連接層也是把它當做是以1*1大小的卷積核進行卷積運算。

當輸入一張任意大小的圖片,就需要利用以上所述的網路,例如輸入一張像素為16*16的圖片:

根據上圖,該網路最後的輸出是一張2*2的圖片。可見採用FCN網路可以輸入任意大小的圖片。同時需要注意的是網路最後輸出的圖片大小不在是一個1*1大小的圖片,而是一個與輸入圖片大小息息相關的一張圖片。

Overfeat就是把採用FCN的思想把全連接層看成了卷積層,在網路測試階段可以輸入任意大小的圖片。

2、offset max-pooling

簡單起見,不用二維的圖像作為例子,而是採用一維作為示例:

如上圖所示,在X軸上有20個神經元,並且選擇池化size=3的非重疊池化,那麼根據之前所學的方法應該是:對上面的20個神經元,從1位置開始進行分組,每3個連續的神經元為一組,然後計算每組的最大值(最大池化),19、20號神經元將被丟棄,如下圖所示:

或者可以在20號神經元後面,添加一個數值為0的神經元編號21,與19、20成為一組,這樣可以分成7組:[1,2,3],[4,5,6]……,

[16,17,18],[19,20,21],最後計算每組的最大值。

如果只分6組,除了以1作為初始位置進行連續組合之外,也可以從位置2或者3開始進行組合。也就是說其實有3種池化組合方法:

A、△=0分組:[1,2,3],[4,5,6]……,[16,17,18];

B、△=1分組:[2,3,4],[5,6,7]……,[17,18,19];

C、△=2分組:[3,4,5],[6,7,8]……,[18,19,20];

對應圖片如下:

以往的CNN中,一般只用△=0的情況,得到池化結果後,就送入了下一層。但是該文獻的方法是,把上面的△=0、△=1、△=2的三種組合方式的池化結果,分別送入網路的下一層。這樣的話,網路在最後輸出的時候,就會出現3種預測結果了。

前面所述是一維的情況,如果是2維圖片的話,那麼(△x,△y)就會有9種取值情況(3*3);如果我們在做圖片分類的時候,在網路的某一個池化層加入了這種offset 池化方法,然後把這9種池化結果,分別送入後面的網路層,最後的圖片分類輸出結果就可以得到9個預測結果(每個類別都可以得到9種概率值,然後我們對每個類別的9種概率,取其最大值,做為此類別的預測概率值)。

演算法原理:

文獻中的演算法,就是把這兩種思想結合起來,形成了文獻最後測試階段的演算法。

1、論文的網路架構與訓練階段

(1)網路架構

對於網路的結構,文獻給出了兩個版本——快速版、精確版,一個精度比較高但速度慢;另外一個精度雖然低但是速度快。下面是高精度版本的網路結構表相關參數:

表格參數說明:

網路輸入:圖片大小為221px*221px;

網路結構方面基本上和AlexNet相同,使用了ReLU激活,最大池化。不同之處在於:(a)作者沒有使用局部響應歸一化層;(b)然後也沒有採用重疊池化的方法;(c)在第一層卷積層,stride作者是選擇了2,這個與AlexNet不同(AlexNet選擇的跨步是4,在網路中,如果stride選擇比較大得話,雖然可以減少網路層數,提高速度,但是卻會降低精度)。

需要注意的是把f7這一層,看成是卷積核大小為5*5的卷積層,總之就是需要把網路看成前面所述的FCN模型,去除了全連接層的概念,因為在測試階段可不是僅僅輸入221*221這樣大小的圖片,在測試階段要輸入各種大小的圖片,具體請看後面測試階段的講解。

(2)網路訓練

訓練輸入:對於每張原圖片為256*256,然後進行隨機裁剪為221*221的大小作為CNN輸入,進行訓練。

優化求解參數設置:訓練的min-batchs選擇128,權重初始化選擇高斯分布的隨機初始化:

然後採用隨機梯度下降法,進行優化更新,動量項參數大小選擇0.6,L2權重衰減系數大小選擇10-5次方。學習率初始化值為0.05,根據迭代次數的增加,每隔幾十次的迭代後,就把學習率的大小減小一半。

然後就是DropOut,這個只有在最後的兩個全連接層,才採用dropout,dropout比率選擇0.5。

2、網路測試階段

在Alexnet的文獻中,預測方法是輸入一張圖片256*256,然後進行multi-view裁剪,也就是從圖片的四個角進行裁剪,還有就是一圖片的中心進行裁剪,這樣可以裁剪到5張224*224的圖片。然後把原圖片水平翻轉一下,再用同樣的方式進行裁剪,又可以裁剪到5張圖片。把這10張圖片作為輸入,分別進行預測分類,在後在softmax的最後一層,求取個各類的總概率,求取平均值。

然而Alexnet這種預測方法存在兩個問題:

一方面這樣的裁剪方式,把圖片的很多區域都給忽略了,這樣的裁剪方式,剛好把圖片物體的一部分給裁剪掉了;

另一方面,裁剪窗口重疊存在很多冗餘的計算,像上面要分別把10張圖片送入網路,可見測試階段的計算量還是較大的。

Overfeat演算法:

訓練完上面所說的網路之後,在測試階段不再是用一張221*221大小的圖片了作為網路的輸入,而是用了6張大小都不相同的圖片,也就是所謂的多尺度輸入預測,如下表格所示:

當網路前向傳導到layer 5的時候,就利用了前面所述的FCN、offset pooling這兩種思想的相結合。現以輸入一張圖片為例(6張圖片的計算方法都相同),講解layer 5後面的整體過程,具體流程示意圖如下:

步驟一:

對於某個尺度的圖片,經過前五層的卷積後得到特徵圖。上圖中特徵圖的解析度是20x23,256個通道。

步驟二:

對於該特徵圖,重復多次使用非重疊的池化,每次池化的偏置不同,有行偏置和列偏置。上圖中偏置池化3次,偏置分別為為(0,1,2)。這就是offset pooling,也被稱為fine stride。offset pooling得到的特徵圖的維度為6x7x3x3xD,其中6x7是特徵圖的解析度,3x3是偏置池化的次數,D是通道數。上圖中是以1維顯示的。

步驟三:

池化後得到的特徵圖將被送入分類器。

步驟四:

分類器的輸入是的5x5xD,輸出是C(類別數)維向量。但是offset pooling後得到的特徵圖並不是5x5xD,比如上圖中的特徵圖大小為6x7xD,因此分類器以滑動窗口的方式應用在特徵圖上,每個滑動窗口經過分類器輸出一個C維向量。比如上圖中輸入的6x7xD的特徵圖最終得到2x3xC的輸出,其中2x3是滑動窗口的個數。

步驟五:

而2x3xC只是一組偏置池化的輸出,總的輸出為2x3x3x3xC,將輸出的張量reshape,得到6x9xC輸出張量。最終輸出分類張量為3d張量,即兩個解析度維度 x C維。

然後需要在後面把它們拉成一維向量,這樣在一個尺度上,可以得到一個C*N個預測值矩陣,每一列就表示圖片屬於某一類別的概率值,並且求取每一列的最大值,作為本尺度的每個類別的概率值。

最後一共用了6種不同尺度(文獻使用了12張,另外6張是水平翻轉的圖片)進行做預測,然後把這六種尺度結果再做一個平均,作為最最後的結果。

從上面過程可以看到整個網路分成兩部分:layer 1~5這五層稱之為特徵提取層;layer 6~output稱之為分類層。

六、定位任務

用於定位任務的時候,就把分類層(上面的layer 6~output)給重新設計一下,把分類改成回歸問題,然後在各種不同尺度上訓練預測物體的bounding box。