fcn网络训练代码_用FCN做分割
船長黑板報(bào)所有文章和代碼的最新版本均在
Captain1986/CaptainBlackboard?github.com維護(hù),知乎不做維護(hù)
您的Star是對我的鼓勵(lì)
圖像分割是計(jì)算機(jī)視覺中比較常見的技術(shù),廣泛應(yīng)用于智能交通、自動駕駛等領(lǐng)域。恰好船長最近正在做圖像分割的項(xiàng)目,也調(diào)研了一些圖像分割的經(jīng)典方法,準(zhǔn)備把用CNN做圖像分割的方法都做個(gè)記錄,這里是第一篇FCN,原始論文發(fā)表于15年的CVPR,屬于用深度學(xué)習(xí)做圖像分割的挖坑之作(褒義)。
**歡迎探討,本文持續(xù)維護(hù)。**
## 實(shí)驗(yàn)平臺
N/A
## 語義分割:從整體圖片分類到像素級分類
在FCN提出之前,CNN(AlexNet,VGG,GoogLeNet,RCNN和SPPNet)都已經(jīng)在圖像分類和目標(biāo)檢測領(lǐng)域攻城拔寨,既然CNN可以在整圖分類和部分圖片分類上取得成功,那么把CNN來做pixel-to-pixel的分類進(jìn)而解決圖像分割問題也就是可以想象的了。
以AlexNet為例,它的開始的幾層是卷積層,最后卷積層后面連接全連接Softmax層輸出一個(gè)長度為1000的向量代表分類的類別概率。它的最后輸出是針對整個(gè)圖的分類結(jié)果,此時(shí)空間信息消失了。如果在去掉全連接層,換上卷積層,那么一樣也可以輸出分類的結(jié)果,還保存了空間維度上的信息,示意圖如下圖所示:
這里就不再贅述,在[《D#0025-CNN中使用卷積代替全連接》](Captain1986/CaptainBlackboard)已有比較詳細(xì)的介紹,感興趣的朋友可以去看。
然后,既然FCN可以生成整張圖大小的熱力圖,那么如果這個(gè)圖的大小和輸入圖像大小一致,且有了輸入圖中每個(gè)像素的真值標(biāo)簽(Ground Truth),那么就可以用這個(gè)標(biāo)簽來監(jiān)督FCN的訓(xùn)練,讓熱力圖和標(biāo)簽趨向一致,原理如下圖所示。有了每個(gè)像素的分類信息,那么做分割就是個(gè)太簡單的事情了。
## FCN做分割的網(wǎng)絡(luò)架構(gòu)
### 基礎(chǔ)網(wǎng)絡(luò)
作者試用了AlexNet,VGG-16,VGG-19和GoogLeNet等在分類任務(wù)上表現(xiàn)較好的網(wǎng)絡(luò),首先把它們的Softmax砍掉,第二步把全連接層改成卷積層,第三步附加一個(gè)1x1的卷積層生成21個(gè)PASCAL分類的熱力圖,最后添加一個(gè)雙線性采樣的upsample層作為Deconvolution層來把熱力圖擴(kuò)充到輸入圖像的分辨率。在做了這些改造之后,如上圖所示,實(shí)驗(yàn)發(fā)現(xiàn)復(fù)用了VGG-16的卷積部分的效果最好,VGG-16可以作為特征提取的主干網(wǎng)絡(luò)。
### Skip連接Combining what and where
像VGG這樣的網(wǎng)絡(luò)是一層一層的層次性結(jié)構(gòu),不同的層感受野不同,特征圖所能表達(dá)的含義也不同。淺層的特征感受野小,可以表達(dá)一些精細(xì)的特征,能回答**在哪里**的問題;而深層的特征感受野大,適合表達(dá)一些整體的語義,適合回答**是什么**的問題。如果把不同層次的特征圖融合起來,整個(gè)網(wǎng)絡(luò)形成一個(gè)有向無環(huán)圖DAG,那么應(yīng)該適合于分割這類既要回答是什么,又要(精確到像素級地)回答在哪里的問題。
上圖是FCN的網(wǎng)絡(luò)結(jié)構(gòu)圖,VGG不同層的特征在upsample之后會進(jìn)行(sum或者concate)融合,最終融合到pool3這一層,得出來一個(gè)和原圖大小一樣的圖。
上圖可以看出,不做不同層特征圖的融合會怎么樣。可以看到,**融合的淺層特征越多,分割得越精細(xì)**。
上表是作者給出的實(shí)驗(yàn)數(shù)據(jù),具體地證明了上上圖的結(jié)論。
### UpSample
在類似VGG這樣的分類網(wǎng)絡(luò)中,因?yàn)榫矸eStride和Pooling層的作用,特征圖的空間分辨率是隨著層數(shù)越來越深遞進(jìn)地越來越小的,但是分割要做pixel-to-pixel的分類任務(wù),真值標(biāo)簽是原圖分辨率地像素級的圖,那么分割網(wǎng)絡(luò)的輸出也要是同樣的分辨率,即輸入圖片大小的分辨率。
FCN作者這里為了放大特征圖分辨率采用了很簡單地x2 Upsample層,具體來說就是添加了一個(gè)**類似于雙線性插值**的層,來根據(jù)位置坐標(biāo)計(jì)算輸出圖的像素級標(biāo)簽。當(dāng)然,這里說是類似于雙線性插值的層,是因?yàn)檫@一層它的插值系數(shù)是可以學(xué)習(xí)的,不是定死了的。
## 總結(jié)
本文介紹了一種早期較為經(jīng)典的分割網(wǎng)絡(luò)FCN,可端對端地進(jìn)行全圖訓(xùn)練。該網(wǎng)絡(luò)特征提取部分還是基于VGG-16,改造成全卷積網(wǎng)絡(luò)。添加了Skip連接融合淺層細(xì)節(jié)和深層語義特征,采用了可學(xué)習(xí)的UpSample層使網(wǎng)絡(luò)輸出分辨率和輸入一致。
## 參考資料
+ [《D#0025-CNN中使用卷積代替全連接》](Captain1986/CaptainBlackboard)
+ [Fully Convolutional Networks for Semantic Segmentation](https://arxiv.org/pdf/1411.4038.pdf)
+ [Fully Convolutional Networks for Semantic Segmentation](https://arxiv.org/pdf/1605.06211.pdf)
總結(jié)
以上是生活随笔為你收集整理的fcn网络训练代码_用FCN做分割的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金指数温度怎么算_医药冷链物流——运输
- 下一篇: 气温常年在25度的地方_最低调的海滨城市