① fcn,是什麼意思
什麼東西的fcn,這是縮寫,可以代表很多意思。最基本的意思是function,功能
② 外企 fcn 是什麼職位
fcn是fully convolutional networks的英文縮寫。翻譯為「完全卷積網路」,外企 fcn是網路編程職位。
FCN對圖像進行像素級的分類,從而解決了語義級別的圖像分割(semantic segmentation)問題。與經典的CNN在卷積層之後使用全連接層得到固定長度的特徵向量進行分類(全聯接層+softmax輸出)不同,FCN可以接受任意尺寸的輸入圖像,採用反卷積層對最後一個卷積層的feature map進行上采樣, 使它恢復到輸入圖像相同的尺寸,從而可以對每個像素都產生了一個預測, 同時保留了原始輸入圖像中的空間信息, 最後在上采樣的特徵圖上進行逐像素分類。
最後逐個像素計算softmax分類的損失, 相當於每一個像素對應一個訓練樣本。下圖是Longjon用於語義分割所採用的全卷積網路(FCN)的結構示意圖:
缺點
在這里我們要注意的是FCN的缺點:
是得到的結果還是不夠精細。進行8倍上采樣雖然比32倍的效果好了很多,但是上采樣的結果還是比較模糊和平滑,對圖像中的細節不敏感。
是對各個像素進行分類,沒有充分考慮像素與像素之間的關系。忽略了在通常的基於像素分類的分割方法中使用的空間規整(spatial regularization)步驟,缺乏空間一致性。
③ caffe下訓練fcn進行圖像分割mean iu指的是什麼意思
這個還是比較好區分的。首先說邊緣檢測,邊緣檢測是通過圖像的梯度變化將圖像中梯度變化明顯的地方檢測出來,針對的是邊緣信息。圖像分割是將目標分割出來,針對的是目標對象,邊緣檢測是空間域圖像分割的一種方法,屬於包含關系
④ 如何理解空洞卷積
dilated conv,中文可以叫做空洞卷積或者擴張卷積。首先介紹一下dilated conv誕生背景[4],再解釋dilated conv操作本身,以及應用。
首先是誕生背景,在圖像分割領域,圖像輸入到CNN(典型的網路比如FCN[3])中,FCN先像傳統的CNN那樣對圖像做卷積再pooling,降低圖像尺寸的同時增大感受野,但是由於圖像分割預測是pixel-wise的輸出,所以要將pooling後較小的圖像尺寸upsampling到原始的圖像尺寸進行預測(upsampling一般採用deconv反卷積操作,deconv可參見知乎答案如何理解深度學習中的deconvolution networks?),之前的pooling操作使得每個pixel預測都能看到較大感受野信息。因此圖像分割FCN中有兩個關鍵,一個是pooling減小圖像尺寸增大感受野,另一個是upsampling擴大圖像尺寸。在先減小再增大尺寸的過程中,肯定有一些信息損失掉了,那麼能不能設計一種新的操作,不通過pooling也能有較大的感受野看到更多的信息呢?答案就是dilated conv。
⑤ fcn網路用什麼軟體製作自己的圖像分割語義標簽
有兩種方法:
1)可製作兩個lmdb文件,一個Data項是原始圖像,Label可為0,另一個Data項為分割後的標注圖像,Label為0。使用中caffe是支持多個lmdb輸入的。
2)將原始圖像(如3通道),標注圖像(1通道),合在一起成4通道,然後寫在一個lmdb中,然後導入後使用Slice層將其切開。這種方法就不能直接使用現有的convert_imageset來轉換了,可參考其實現自己寫一下。
⑥ matlab如何調用fcm函數處理一副圖像。 不是查看fcm函數,演算法我已經了解了,我只是不知道
data = rand(100, 2);
[center,U,obj_fcn] = fcm(data, 2);
plot(data(:,1), data(:,2),'o');
maxU = max(U);
index1 = find(U(1,:) == maxU);
index2 = find(U(2, :) == maxU);
line(data(index1,1),data(index1, 2),'linestyle','none',...
'marker','*','color','g');
line(data(index2,1),data(index2, 2),'linestyle','none',...
'marker', '*','color','r');
⑦ 如何分析一個圖像分割演算法
論文閱讀筆記:圖像分割方法deeplab以及Hole演算法解析
deeplab發表在ICLR 2015上。論文下載地址:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFS.
deeplab方法概述
deeplab方法分為兩步走,第一步仍然採用了FCN得到 coarse score map並插值到原圖像大小,然後第二步借用fully connected CRF對從FCN得到的分割結果進行細節上的refine。
下面這張圖很清楚地展示了整個結構:
然後這張圖展示了CRF處理前後的效果對比,可以看出用了CRF以後,細節確實改善了很多:
deeplab對FCN更加優雅的處理方式
在第一步中,deeplab仍然採用了FCN來得到score map,並且也是在VGG網路上進行fine-tuning。但是在得到score map的處理方式上,要比原FCN處理的優雅很多。
還記得CVPR 2015的FCN中是怎麼得到一個更加dense的score map的嗎? 是一張500x500的輸入圖像,直接在第一個卷積層上conv1_1來了一個100的大padding。最終在fc7層勉強得到一個16x16的score map。雖然處理上稍顯粗糙,但是畢竟人家是第一次將圖像分割在CNN上搞成end-to-end,並且在當時performance是state-of-the-art,也很理解。
deeplab摒棄了這種做法,取而代之的是對VGG的網路結構上做了小改動:將VGG網路的pool4和pool5層的stride由原來的2改為了1。就是這樣一個改動,使得vgg網路總的stride由原來的32變成8,進而使得在輸入圖像為514x514,正常的padding時,fc7能得到67x67的score map, 要比FCN確實要dense很多很多。
但是這種改變網路結果的做法也帶來了一個問題: stride改變以後,如果想繼續利用vgg model進行fine tuning,會導致後面filter作用的區域發生改變,換句話說就是感受野發生變化。這個問題在下圖(a) (b)中通過花括弧體現出來了:
Hole演算法
於是乎,作者想出了一招,來解決兩個看似有點矛盾的問題:
既想利用已經訓練好的模型進行fine-tuning,又想改變網路結構得到更加dense的score map.
這個解決辦法就是採用Hole演算法。如下圖(a) (b)所示,在以往的卷積或者pooling中,一個filter中相鄰的權重作用在feature map上的位置都是物理上連續的。如下圖(c)所示,為了保證感受野不發生變化,某一層的stride由2變為1以後,後面的層需要採用hole演算法,具體來講就是將連續的連接關系是根據hole size大小變成skip連接的(圖(c)為了顯示方便直接畫在本層上了)。不要被(c)中的padding為2嚇著了,其實2個padding不會同時和一個filter相連。
pool4的stride由2變為1,則緊接著的conv5_1, conv5_2和conv5_3中hole size為2。接著pool5由2變為1, 則後面的fc6中hole size為4。
代碼
主要是im2col(前傳)和col2im(反傳)中做了改動 (增加了hole_w, hole_h),這里只貼cpu的用於理解: