㈠ 全卷積的概念(FCN)
參考資料
目錄
1 問題的引出
2 CNN用作語義分割的特點(優缺點)
3 FCN用作語義分割的特點(優缺點)
全卷積網路 (Fully Convolutional Networks)大都用在語義分割任務中,最近看Siamese-RPN遇到了這個概念,就隨手記一下。這里僅提一下前因後果和簡單概念,需要推導的同學查看上述論文。
CNN能夠對圖片進行分類,可是怎麼樣才能更好識別圖片中 特定部分 的物體?
傳統的基於CNN的分割方法的做法通常是:為了對一個像素分類,使用該像素周圍的一個圖像塊作為CNN的輸入用於訓練和預測。
優點 :
CNN的強大之處在於它的多層結構能自動學習特徵,並且可以學習到多個層次的特徵:較淺的卷積層感知域較小,學習到一些局部區域的特徵;較深的卷積層具有較大的感知域,能夠學習到更加抽象一些的特徵。這些抽象特徵對物體的大小、位置和方向等敏感性更低,從而有助於識別性能的提高。
缺點 :
FCN將傳統CNN中的全連接層轉化成一個個的卷積層。如下圖所示,在傳統的CNN結構中,前5層是卷積層,第6層和第7層分別是一個長度為4096的一維向量,第8層是長度為1000的一維向量,分別對應1000個類別的概率。FCN將這3層表示為卷積層,卷積核的大小(通道數,寬,高)分別為(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的層都是卷積層,故稱為全卷積網路。 簡單來說,就是將 CNN中的fc(全連接)層換成了卷積層 ,網路結構中不在具有fc層。
可以發現,經過多次卷積(還有pooling)以後,得到的圖像越來越小,解析度越來越低(粗略的圖像),那麼FCN是如何得到圖像中每一個像素的類別的呢?為了從這個解析度低的粗略圖像恢復到原圖的解析度,FCN使用了 上采樣 。例如經過5次卷積(和pooling)以後,圖像的解析度依次縮小了2,4,8,16,32倍。對於最後一層的輸出圖像,需要進行32倍的上采樣,以得到原圖一樣的大小。這個上采樣是通過 反卷積(deconvolution) 實現的。對第5層的輸出(32倍放大)反卷積到原圖大小,得到的結果還是不夠精確,一些細節無法恢復。於是Jonathan將第4層的輸出和第3層的輸出也依次反卷積,分別需要16倍和8倍上采樣,結果就精細一些了。
優點 :
缺點 :
更多關於上采樣(upsample)的方法和細節可以 查閱參考資料(3)
㈡ FCN,FPN,UNet對比總結 2021-02-27
這篇文章對三個非常相似的圖像分割模型進行一個總結對比,它們都是先下采樣再上采樣,並且把下采樣過程中的淺層特徵和上采樣過程中,相應尺寸的高級特徵融合起來的一個結構。這三個模型都使用的全卷積,第一個模型FCN,Fully Convolutional Neuralnetwork就以此為名,用1*1卷積核替代全連接,這樣就不用考慮尺寸對應的問題了
FCN嘗試了三種預測結構,第一種將最高級的特徵直接進行32倍的上采樣,16s和8s取用了更多層的淺層特徵和上采樣到同尺寸的高級特徵圖簡單相加進行結合。這里的上采樣方法用雙線性插值作為初始值,但是參數是可學習的。
U-Net是針對細胞照片的圖像分割設計的,其實和FCN十分相似,不過它在上采樣的階段的特徵圖擁有更多的通道數,因此網路結構更為對稱成為一個U形。另外,FCN的上采樣階段對淺層和深層特徵的融合使用的是簡單相加,U-Net中是將兩者拼接起來。
另外可以注意到U-Net中兩邊的矩陣尺寸是不一樣的,這里預測的是一個388 388的輸出,但是輸入有572 572,下面的特徵圖也是下采樣階段的更大一些,拼接時,淺層特徵圖會被直接截取而不是resize,這是為了補償下采樣過程中丟失的一些細胞邊界細節。如果預測區域在原圖的邊界,則使用鏡像補全,提供一個更大的藍色區域作為輸入。
FPN對多尺度的特徵圖都進行了獨立的預測,結果取置信度最高的像素(圖像分割任務)。這是他最大的特點,接下來我們就可以就幾個方面一起看了。
結構上,三者都是對稱的下采樣再上采樣的全卷積網路,
在上采樣方式上,FCN和U-Net都是使用以雙線性插值為初始值的反卷積,FPN最近鄰上采樣
在特徵融合上,FCN將不同尺度的特徵簡單相加,U-Net將淺層特徵截取後和高層特徵拼接,而FPN是用1*1卷積處理淺層特徵圖再和高級特徵相加。
參考博客: https://chadrick-kwag.net/fcn-unet-fpn-comparison/
㈢ 外企 fcn 是什麼職位
fcn是fully convolutional networks的英文縮寫。翻譯為「完全卷積網路」,外企 fcn是網路編程職位。
FCN對圖像進行像素級的分類,從而解決了語義級別的圖像分割(semantic segmentation)問題。與經典的CNN在卷積層之後使用全連接層得到固定長度的特徵向量進行分類(全聯接層+softmax輸出)不同,FCN可以接受任意尺寸的輸入圖像,採用反卷積層對最後一個卷積層的feature map進行上采樣, 使它恢復到輸入圖像相同的尺寸,從而可以對每個像素都產生了一個預測, 同時保留了原始輸入圖像中的空間信息, 最後在上采樣的特徵圖上進行逐像素分類。
最後逐個像素計算softmax分類的損失, 相當於每一個像素對應一個訓練樣本。下圖是Longjon用於語義分割所採用的全卷積網路(FCN)的結構示意圖:
缺點
在這里我們要注意的是FCN的缺點:
是得到的結果還是不夠精細。進行8倍上采樣雖然比32倍的效果好了很多,但是上采樣的結果還是比較模糊和平滑,對圖像中的細節不敏感。
是對各個像素進行分類,沒有充分考慮像素與像素之間的關系。忽略了在通常的基於像素分類的分割方法中使用的空間規整(spatial regularization)步驟,缺乏空間一致性。
㈣ 自然和醫學圖像的深度語義分割:網路結構
原文鏈接: https://www.yanxishe.com/blogDetail/18223?from=jianshu0312
一、寫在前面:
網路架構的設計主要是基於 CNN 結構延伸出來的。主要的改進方式有兩點:新神經架構的設計(不同深度,寬度,連接性或者拓撲結構)或設計新的組件(或者層)。下面我們逐個去分析了解。
本文涉及到的論文范圍如下圖:
二、網路架構的改進
2.1.1 FCN
傳統的 CNN 分割,為了對一個像素分類,使用該像素周圍的一個圖像塊作為 CNN 的輸入用於訓練和預測。缺點很多:比如存儲開銷大,計算效率低,像素塊大小也限制了感知域的大小。基於存在的這些問題,由 Long 等人在 2015 年提出的 FCN 結構,第一個全卷積神經網路的語義分割模型。我們要了解到的是,FCN 是基於 VGG 和 AlexNet 網路上進行預訓練,然後將最後兩層全連接層改為的卷積層。
FCN 具體處理過程是怎麼樣的?從 pool1 開始,每個 pool 後圖像都會變為上個池化後圖像的 1/2。Pool1 為原圖的 1/2,以此類推,pool5 後為原圖的 1/2^5,conv6,和 conv7 之後的圖像保持不變,進行 stride=32 的反卷積,得到 FCN-32s。也就是直接對 pool5 進行 32 倍上采樣獲得 32 upsampled feature,再對 32 upsampled feature 每個點做 softmax prediction,就可以獲得 32*upsampled prediction(分割圖)。
FCN 這三個創新點有哪些? 全卷積 :用於解決逐像素的預測問題。通過將基礎網路最後面幾個全連接層換成卷積層,可實現任意大小的圖像輸入,並且輸入圖像大小與輸入相對應。 反卷積 :端到端的像素級語義分割需要輸出大小和輸入圖像大小一致。但是傳統的 conv+pooling 結構會縮小圖片尺寸。基於此作者引入反卷積(deconvolution)操作,對縮小後的特徵進行上采樣,恢復原始圖像大小。 跳躍結構 :語義分割包括語義識別和目標定位。卷積網路的高層特徵圖可以有效的反應語義信息,而低層特徵圖可以有效反應目標的位置信息。語義分割任務同時進行語義識別和目標定位。作者提出的跨層連接結構(skip architecture),將低層的目標位置信息和高層語義信息進行融合,以此來提升語義分割性能。在此基礎上進行 2 倍采樣,2 倍 upsample 之後與 pool4 的像素點相加,進行 stride=16 的 upsample,為此 FCN-16s,重復上面類似的步驟,得到 FCN-8s。
了解到以上信息,應該對 FCN 有個整體的認識了。還有一些細節部分,比如 FCN 採用的簡單的 softmax 分類損失函數,採用雙線性差值 + 反卷積進行上采樣,在微調的時候沒有採用類別平衡策略。分割結果來看,FCN-8s>FCN-16s>FCN-32s。也就是說使用多層特徵融合有利於提高分割准確性。
2.1.2 SegNet
SegNet 主要動機是在場景理解 。它在設計的時候考慮的是預測期間保證內存和計算時間上的效率。其中,SegNet 和 FCN 有很多相似之處,編碼網路使用 VGG16 的前 13 層卷積;移除全連接;解碼器使用從相應的編碼器的 max-pooling indices 進行 upsampling。
對比 SegNet 和 FCN 實現 Decoder 的過程。FCN 是利用雙線性插值初始化的反卷積進行上采樣。而 SegNet 則是在每次 pooling 時,都存下最大值的位置,在 upsample 時將 input 值直接賦給相應的位置,其他位置的值置零。
2.1.3 U-Net
接下來,我們需要了解的是 U-Net。U-net 網路架構,由收縮路徑(contracting path)和擴展路徑(expanding path)組成。每一層使用兩個 3 乘 3 的 conv kernel,每次卷積都進行 Relu 和 stride=2 的 maxpooling 進行下采樣。四次操作後輸出結果稱之為 feature map。
2 乘 2 的反卷積,上采樣,通道數減半,並將左邊對稱位置的 feature map 到右邊進行 concate 操作,來融合下采樣的淺層位置信息和高層語義信息。合並後在進行 3*3 的卷積操作。最後 output 之前,通道數表示分類的類別產生 N 類分割結果,最後選擇出概率值最大的分割結果,作為最後的分割圖。
U-Net 中常常會問為什麼適用於醫學圖像這個問題.。首先分析醫學影像數據特點:圖像語義較為簡單,結構較為固定:都是一個固定的器官的成像。而且器官本身結構固定,語義信息沒有特別豐富,所以高級語義信息和低級特徵都非常重要。(U-net 的 skip connection 可以解決這個問題);數據量少:醫學影像的數據較難獲取,為了防止過擬合,設計的模型不宜過大;多模態:醫學影像是具有多種模態的;可解釋性:醫生需要進一步指導病灶在哪一層,哪一層的哪個位置,分割結果能求體積么?而且 U-Net 在自然圖像分割也取得了不錯的效果。
需要注意的一點:Unet 融合淺層信息是 maxpooling 之前還是之後的結果?是 maxpooling 之前的結果。因為 Maxpooling 之後會丟失准確的位置信息。
2.1.4 V-Net
V-Net 也就是 3D 的 U-net 的一種版本,3D 卷積,引入殘差模塊和 U-Net 的框架。整個網路分為壓縮路徑和非壓縮路徑,也就是縮小和擴大 feature maps,每個 stage 將特徵縮小一半,也就是 128-128-64-32-16-8,通道上為 1-16-32-64-128-256。每個 stage 加入殘差學習以加速收斂。 圖中的圓圈加交叉代表卷積核為 5 乘 5 乘 5,stride 為 1 的卷積,可知 padding 為 2 乘 2 乘 2 就可以保持特徵大小不變。每個 stage 的末尾使用卷積核為 2 乘 2 乘 2,stride 為 2 的卷積,特徵大小減小一半(把 2x2 max-pooling 替換成了 2x2 conv.)。整個網路都是使用 keiming 等人提出的 PReLU 非線性單元。網路末尾加一個 1 乘 1 乘 1 的卷積,處理成與輸入一樣大小的數據,然後接一個 softmax。
而且 V-Net 採用 Dice coefficient 損失函數,如下:
Pi 為預測的前景,Gi 為標記的前景,使用這個函數能有效避免類別不平衡的問題。
2.1.5 Dense-UNet
Dense U-net(原名:one-hundred layers Tiramisu Network)該架構是由密集連接塊(dense block)構建的。該架構由向下過度的兩個下采樣路徑和向上過度的兩個上采樣路徑組成。且同樣包含兩個水平跳躍連接,下采樣 Dense 模塊的輸出與同水平的上采樣 Dense 模塊輸入的相應特徵圖拼接在一起。上采樣路徑和下采樣路徑的連接模式並不完全相同:下采樣路徑中,每個密集塊外有一條跳躍性連接,從而導致 feature map 數量線性增長,上采樣中沒有此操作。
主要創新點是融合了 Dense-Net 和 U-Net 網路。
2.1.6 DeepLab 系列網路
DeepLabV1:首次把空洞卷積(dilated convolution) 引入圖形分割領域, 融合卷積神經網路和概率圖模型:CNN + CRF,提高了分割定位精度。
DeepLabV2:ASPP (擴張空間金字塔池化):CNN+CRF。
DeepLabV3:改進 ASPP,多了 1 乘 1 卷積和全局平均池化(global avg pool);對比了級聯和並聯空洞卷積的效果。
DeepLabV3+:加入編解碼架構思想,添加一個解碼器模塊來擴展 DeepLabv3;將深度可分離卷積應用於 ASPP 和解碼器模塊;將改進的 Xception 作為 Backbone。
2.1.7 PSPNet
PSPNet 全名是 Pyramid Scene Parsing Network(金字塔場景解析網路)。提出了金字塔池化模塊(pyramid pooling mole)能夠聚合不同區域的上下文信息,從而提高獲取全局信息的能力。
輸入圖像後,使用預訓練的帶空洞卷積 ResNet 提取特徵圖。最終的特徵映射大小是輸入圖像的 1/8;在特徵圖上,我們使用 C 中的金字塔池化模塊收集上下文信息。使用 4 層金字塔結構,池化內核覆蓋了圖像的全部、一半和小部分。他們被融合為全局先驗信息;在 c 的最後部分將之前的金字塔特徵映射與原始特徵映射 concate 起來;在進行卷積,生成 d 中的最終預測圖。
總結
基於深度學習的圖像語義分割模型大多遵循編碼器-解碼器體系結構,如 U-Net。近幾年的研究成果表明,膨脹卷積和特徵金字塔池可以改善 U-Net 風格的網路性能。
參考文獻:
Deep Semantic Segmentation of Natural and Medical Images: A Review
㈤ 名字f加上n是什麼意思網路用語
這是網路用語,fn是推銷的意思,在網路語言中,名字加上f加上n,可能是名片推廣。
㈥ 圖像分割:全卷積神經網路(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點雲分類和分割模型 詳解
基於視覺的機器人室內定位