FCN語義分割算法詳細介紹及源碼詳解(一)論文詳解

FCN語義分割算法詳細介紹(一)論文詳解

在這裏插入圖片描述
這一篇講解論文的一下幾個方面,下一篇我們解析一下源碼:

一、提要

二、論文詳解:

  1. 前饋神經網絡
  2. 反捲積層(deconvolution layers)的實現
  3. 上採樣(upsample)的實現

三、總結

——————分割線——————

照例先扯淡:

emmm吐槽一下吧,這個周復現FCN的時候發現訓練的模型,要麼是一片黑(全部歸爲背景分類),要麼是這樣的:
在這裏插入圖片描述
然後找來找去以爲是反捲積層的問題(感謝tensorflow的靜態圖,大大增加了調試難度😤),改來改去好幾天,最後才發現是讀取label image並resize的時候出了錯,,,cv2.resize函數默認的插值方式是雙線性插值,把label image的許多標籤轉換成了小數從而被歸爲了背景類,,,好吧╮(╯-╰)╭是在下輸了。後來改成最鄰近插值,完美解決~

——————分割線——————

一、提要

語義分割是計算機視覺中的基本任務之一,在語義分割中我們需要將視覺輸入分爲不同的語義可解釋類別;不同於目標檢測只是簡單地將圖片或視頻中的目標區域用一個矩形框標註出來,語義分割將目標的檢測精準到了像素級別,如圖:在這裏插入圖片描述
我們就講一下語義分割最著名的一個網絡——FCN(Fully Convolutional Networks for Semantic Segmentation),論文傳送門:
https://arxiv.org/abs/1411.4038

總體來說就是,FCN使用了反捲積(或者叫作轉置卷積)實現把小的特徵圖映射到了原圖大小。

二、論文詳解:

由於語義分割模型相比於目標檢測模型,實際上更爲簡單,只是有許多新概念和一些訓練技巧需要注意,這裏就簡單講一下論文中的重要部分。

1.前饋神經網絡:

在這裏插入圖片描述特徵層的提取用的一般是VGG或者其他的圖像識別網絡,作用是提取出不同大小的特徵層,供給upsample上採樣層使用;

作者在這裏也對比了使用不同的前饋神經網絡的效果,可以看到VGG是效果比較好的,那我們復現的話也是用VGG吧(果然越簡潔越好用):
在這裏插入圖片描述

這裏的話我們去掉了VGG最後面的全連接層,只留下了這部分:在這裏插入圖片描述
如果輸入圖片大小是224×224×3的話,我們得到的最後一個特徵層大小就是7×7×512,當然我們還會做一些微調,講解源碼的時候會仔細講一下;

2.反捲積層:

在這裏插入圖片描述
反捲積層的作用是,將一個小的特徵圖(如7×7×512)大小,映射爲大的特徵圖(如映射爲原圖上,每個像素點的類別向量,224×224×21);21代表20分類+背景分類。

反捲積的原理是,先將原特徵圖的特徵點之間進行填充,然後使用卷積核在原特徵圖上滑動,就得到了一個更大的特徵圖。

如圖,正常的卷積層是這樣的:
在這裏插入圖片描述
反捲積顧名思義,就是將這個卷積過程反過來,如圖:
在這裏插入圖片描述
這是一個步長爲1、卷積核大小爲2的反捲積層,通過特徵圖邊緣的padding,我們成功地從一個2×2大小的特徵圖,得到了一個4×4大小的新特徵圖;

我們再來看一個步長爲2的反捲積層,需要注意的是,這裏的步長(stride)不再代表卷積核滑動的距離,而是代表了特徵圖上每個特徵點相鄰兩點之間的距離:
在這裏插入圖片描述
這裏步長爲2,就是在特徵圖每個特徵點之間再填充一行(或一列),然後再進行卷積操作。

這樣的話我們就能夠通過反捲積,將前饋神經網絡得到的7×7×512大小的特徵層,映射回原圖大小,並得到每個像素點的分類向量了(224×224×21)。

3.上採樣:

上採樣的過程與殘差神經網絡ResNet的殘差單元有點類似:
在殘差單元
也是通過與前面的特徵層求和來得到新的特徵層。

上採樣是通過將反捲積得到的大的特徵圖,與前面相同大小的特徵圖(通常取pooling層)求和:
在這裏插入圖片描述
論文中寫的可能並不是那麼清楚,我們就簡單分析一下:

我們使用VGG-16,得到了一個7×7×512大小的特徵層,然後我們使用一個stride爲2的反捲積層,得到了一個14×14×21的反捲積層;我們再取pool4(14×14×512大小,通過1×1卷積核大小的卷積層轉換爲14×14×21大小),再與得到的反捲積特徵圖相加,就實現了我們的一個上採樣單元,在原圖裏的表示就像這樣:
在這裏插入圖片描述
通過多個反捲積層和上採樣單元,我們最終就得到了原圖大小的分類預測向量(大小爲224×224×21);

三、總結:

FCN的全卷積與上採樣,在上採樣最後加上softmax,就可以對不同類別的大小概率進行估計,實現端到端(end to end)的學習,最後輸出的圖是一個概率估計,對應像素點的值越大,其像素爲該類的結果也越大。

下一期我們詳細解析一下源碼,再見~

發佈了76 篇原創文章 · 獲贊 134 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章