RNN模型可以用於圖像分割嗎?

2019-07-24     有三AI

這是專欄《圖像分割模型》的第9篇文章。在這裡,我們將共同探索解決分割問題的主流網絡結構和設計思想。

儘管許多人都知道RNN在處理上下文上多優於CNN,但如何將RNN用於分割任務還是值得討論一下。本文我們就來聊聊用BRNN做分割的ReSeg。

作者 | 孫叔橋

編輯 | 言有三

本期論文:《ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation》

1 簡單說說BRNN

(1) 什麼是循環神經網絡

不同於卷積神經網絡(CNN,Convolutional Neural Network)通常以圖塊(patches)為輸入,循環神經網絡(RNN,Recurrent Neural Network)的輸入是序列形式的。即使在處理圖像時,通常也需要對圖像矩陣進行展開(flatten)操作,再應用RNN。輸入序列數據後,RNN在序列的演進方向遞歸所有節點,並將其定向鏈式連接。

下圖是一個簡單的RNN單元示意圖:

(2) 為什麼要用RNN

儘管CNN在處理多維數據(如圖像)時的表現相當不錯,但是其需要依賴人工指定的核函數來完成計算,因此在處理上下文信息的時候受到了限制。相反,RNN本身拓撲結構的設計,使得其能夠利用內部記憶處理任意時序的輸入序列,從而在長短時間間隔序列的處理上比CNN更具優勢。

(3) 什麼是BRNN

BRNN是雙向循環神經網絡(Bi-directional RNN)的縮寫,屬於循環神經網絡的一種。基礎RNN只能依據之前時刻的時序信息來預測下一時刻的輸出,但是有些問題中需要聯繫上之前和未來狀態,共同進行預測。BRNN由兩個方向不同的RNN堆疊而成,同時處理過去和未來信息。下圖是BRNN的示意圖:

2 ReSeg:用BRNN做分割

ReSeg是基於圖像分割模型ReNet提出的。因此,我們首先來看一下ReNet。下圖是ReNet的運算示意圖:

如圖所示,ReNet由兩層順序排列的RNN構成。在給定輸入圖像(或前層)特徵後,ReNet對展開結果分別按列、按行掃描。每個掃描過程由兩個相反方向的RNN運算單元實現。具體公式如下:

其中f代表RNN,I為圖像子塊行數(圖像被分割成IxJ塊),o是結果,z為之前的狀態,p為子圖塊內的像素點。

給定輸入圖像後,ReSeg首先用預訓練好的VGG-16提取圖像的特徵,隨後開始應用基於SeNet的網絡結構進行分割任務。具體網絡結構如下圖所示:

從網絡結構可以看出,ReSeg應用了3次串聯的完整ReNet模塊,空間解析度在這個過程中逐漸減小。這麼做的目的是,將VGG-16提取的特徵進行進一步的處理,從而得到對輸入圖像更複雜的特徵描述。

特徵提取結束後,特徵圖對輸入圖像的空間解析度下降為1/8,因此需要恢復空間解析度以得到稠密的分割結果。因此,在所有ReNet模塊結束後,ReSeg應用了若干層由反卷積組成的上採樣層,將特徵圖的空間解析度恢復成原始輸入圖像的空間解析度。

最後,簡單應用softmax實現分割。

3 實驗結果

ReSeg的實驗用到了三個資料庫,分別是Weizmann Horses、Oxford Flowers和CamVid。其中,前兩個資料庫比CamVid要容易一些,因此這裡只討論CamVid下ReSeg的表現,感興趣的讀者可以移步原文看ReSeg在其他資料庫下的實驗結果。

下表是ReSeg在CamVid資料庫下對不同類別的分割結果以及與其他算法的效果比較。

下圖是ReSeg在CamVid下的分割結果圖:

從左到右:輸入、真值、ReSeg結果、帶類別平衡的ReSeg結果

本專欄作者維護的深度學習圖像分割星球上線了,歡迎大家參與學習與討論

總結

儘管ReNet和ReSeg的提出時間較早,分割效果相比較state-of-the-art算法也略有不足。但是,其提供的模型設計與卷積操作上的思路是非常新穎的,同時也巧妙地用GRU解決了RNN梯度消失問題,因此對於分割任務的網絡設計具有一定的啟發性作用。

下期我們繼續RNN的討論,看看如何在ReNet的基礎上處理長程上下文信息下的分割問題。下回見!

文章來源: https://twgreatdaily.com/zh/6f_ILGwBmyVoG_1ZSFo5.html