1、說明git
fcn的開源代碼:https://github.com/shelhamer/fcn.berkeleyvision.orggithub
論文地址:fully convolutional networks for semantic segmentation網絡
其中,pascalcontext-fcn語義分割,算上背景,一共分割爲60類。ide
pascalcontext-fcn全卷積神經網絡主要使用了三種技術:工具
1. 卷積化(Convolutional)spa
2. 上採樣(Upsample)code
3. 跳躍結構(Skip Layer)blog
2、網絡結構概況圖片
一、FCN-32sip
經過前五段的卷積層,直接從第五個最大池化層經過32倍上採樣,獲得和原圖高寬一致的多通道預測label;
二、FCN-16s
pool5經過兩倍上採樣,獲得預測label,與pool4 的預測label求和,再進行16倍上採樣,獲得和原圖高寬一致的多通道預測label;
三、FCN-8s
pool5經過兩倍上採樣,獲得預測label,與pool4 的預測label求和,再將求和結果進行2倍上採樣,與pool3的預測label求和,最終進行8倍上採樣,獲得和原圖高寬一致的多通道預測label。
四、訓練過程
使用vgg16初始化FCN-32s網絡結構;再將訓練好的FCN-32s去初始化FCN-16s;再將訓練好的FCN-16s去初始化FCN-8s。
3、各階段網絡結構
一、pascalcontext-fcn32s
原vgg16的最後三層全鏈接層,都改成卷積層,經過上採樣獲得upscore,再進行crop獲得和原圖寬高一致的預測label(score層)。
二、pascalcontext-fcn16s
將scrore_fr進行兩倍上採樣獲得預測標籤upscore2;將pool4的預測s標籤core_pool4進行crop,獲得和upscore2同樣尺寸的預測標籤score_pool4c;而後將upscore2與score_pool4c求和,獲得fuse_pool4;再進行16倍上採樣,再crop,就獲得預測標籤score。
三、pascalcontext-fcn8s
將fuse_pool4進行兩倍上採樣獲得upscore_pool4;將pool3的預測標籤score_pool3進行crop(寬高與upscore_pool4一致),獲得score_pool3c;將upscore_pool4與score_pool3c求和獲得fuse_pool3;而後進行8倍上採樣,crop,獲得預測標籤score。
4、其餘說明
一、查看網絡結構的在線工具:http://ethereon.github.io/netscope/#/editor
二、pool四、pool3的上採樣,有進行了crop操做,會形成信息的損失,該網絡結構有一個巧妙的處理,在第一層卷積層四周添加pad爲100,再進行卷積操做,即先擴展圖片,以後再進行crop。裁切
的區域也是補出來的區域,這樣就能無損地像素級分割。讀者可試着計算pad的最小值。
layer { name: "conv1_1" type: "Convolution" bottom: "data" top: "conv1_1" param { lr_mult: 1 decay_mult: 1 } param { lr_mult: 2 decay_mult: 0 } convolution_param { num_output: 64 pad: 100 kernel_size: 3 stride: 1 } }
end