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