有哪些模型可以實現圖像語義分割任務?
實現圖像語義分割任務的模型有很多,本文重點介紹其中來自Github項目中的一個模型。這個Github項目通過結合CNN和CRF-RNN模型實現圖像的語義分割,讀者可以跟隨該項目利用 Keras/Tensorflow 實現這一過程。
展示地址:http://crfasrnn.torr.vision
項目地址:https://github.com/sadeepj/crfasrnn_keras
該Github項目包含使用Keras/TensorFlow代碼實現“CRF-RNN”圖像語義分割的方法,論文《Conditional Random Fields as Recurrent Neural Networks》最先發表在 ICCV2015 中。本項目的展示同樣獲得了當年最佳展示獎,本文在下面給出了該項目最初的Caffe代碼。本項目提供的Keras/TensorFlow代碼和其效果基本和Caffe版本的是一樣的。下面讓我們跟隨安裝向導實現語義分割。
Caffe版本的代碼:https://github.com/torrvision/crfasrnn
安裝向導1.1 安裝依賴項
安裝TensorFlow和Keras,然后分別跟隨以下的安裝向導。如果我們計劃使用預訓練模型,那么我們需要安裝Keras和HDF5/h5py。在安裝這兩個包之后,運行以下的命令行以確保它們都得到了正確的安裝:
安裝TensorFlow:https://www.tensorflow.org/install/
安裝Keras:https://keras.io/#installation
# First, activate the correct Python virtualenv if you used one during Tensorflow/Keras installation
$ source /home/user/tensorflow_virtualenv/bin/activate
$ python
>>> import tensorflow
>>> import keras
如果安裝正確了,那我們在如上導入庫的時候不會看到任何報錯。
1.2 構建CRF-RNN 定制的C++代碼
檢驗本項目的代碼,并激活Tensorflow/Keras virtualenv,然后在cpp目錄下運行 compile.sh腳本。即運行以下命令行:
$ git clone https://github.com/sadeepj/crfasrnn_keras.git
$ cd crfasrnn_keras/cpp
$ source /home/user/tensorflow_virtualenv/bin/activate
$ ./compile.sh
如果構建成功,我們就能看到一個名為high_dim_filter.so的新文件(擴展名可能會根據我們的系統而不同)。如果構建失敗,請查看compile.sh文件下的命令,我們同樣可以參看TensorFlow構建定制化操作的官方向導。
官方構建向導地址:https://www.tensorflow.org/extend/adding_an_op#build_the_op_library
1.3 下載預訓練模型權重
下載模型權重后放在srfasrnn_keras目錄下,并且命名為 crfrnn_keras_model.h5。
預訓練權重下載地址:https://goo.gl/ciEYZi
1.4 運行演示
$ cd crfasrnn_keras
$ python run_demo.py # Make sure that the correct virtualenv is already activated
如果以上運行順利,我們就可以在文件“labels.png”看到語義分割的結果。
目前版本的局限性目前,在CRF-RNN層的一些操作只能在CPU中運行。GPU版本的訓練方法將很快發布。
crfrnn_keras_model.h5模型是直接從Caffe模型轉換來的,但是從Keras直接完全訓練一個模型也是可行的。
論文:Conditional Random Fields as Recurrent Neural Networks
論文地址:http://www.robots.ox.ac.uk/~szheng/papers/CRFasRNN.pdf
像語義分割任務那樣的像素級標注任務在圖像理解任務中起到了關鍵作用。最近的方法都在嘗試將用于圖像識別的深度學習技術應用于像素級的標注任務。這種方法的關鍵問題是深度學習技術在描繪視覺對象時的有限能力。為了解決這個問題,我們引進了一種新式卷積神經網絡,該網絡是由卷積神經網絡(CNN)和基于條件隨機場(CRF)的概率圖模型所組成。為此,我們通過Gaussian pairwise potential為條件隨機場制定了平均場近似推斷,并將其作為作為循環神經網絡。我們稱該網絡為CRF-RNN,然后我們就可以把它嵌入作為CNN的一部分,并獲得同時擁有CNN和CRF性質的深度網絡。重要的是,我們的系統完全可以在CNN中集成CRF建模,這就令該模型能通過反向傳播算法端到端地訓練整個深度網絡,且避免了為目標描述使用離線后處理方法。
我們應用該提出的方法解決圖像語義分割問題,它在Pascal VOC 2012 挑戰賽語義分割基準上獲得了最好的結果。