1. 程式人生 > >影象分割的關鍵技術:一站式caffe工程實踐連載(5)

影象分割的關鍵技術:一站式caffe工程實踐連載(5)

知識引入 本次主要和大家分享的是影象分割中的關鍵技術,首先對任務分析,一般在正式開始影象任務之前,我們會對任務的整個的技術方案進行一個評估,評估之後我們會選擇比較簡單比較穩妥的方案,也就是精簡我們的任務。我們的任務是一個影象分割的任務,影象分割任務與影象分類任務不同,影象分類任務,它的輸入是圖片,輸出是一個level,也就是一個數。而影象分割任務不同,它的輸出也是一張圖片,這個圖片與輸入的圖片大小相等,所以我們不僅需要卷積,我們還需要反捲積,卷積的過程就是不斷降低影象的解析度,抽象知識,而在反捲積過程中,我們就要不斷的提升解析度,來恢復影象的細節。反捲積是影象分割任務的基礎結構,我們會在後面進行詳述。 殘差連線

殘差連線現在是影象任務中的一個非常非常重要的一個技術。它主要有兩個方面的作用。首先它可以有效地緩解深層神經網路中的梯度消散問題。其次,可以融合細節,融合底層和高層的支援。這一點是提升影象分割任務的一個非常關鍵的技術。可以說殘差連線是提升影象分割任務的利器。我們首先看一些人臉,這些人臉是在開放環境下的人臉,如下圖所示: caffe影象識別 我們可以看到這些人臉的背景都非常的複雜,有些是純色,有些包含其他的干擾,有些包含非常非常雜亂的顏色。假如我們直接在這樣的一張輸入圖上做我們的影象分割,也就是嘴脣分割的任務的話,它會受到背景的嚴重干擾,所以我們需要進一步簡化任務,具體來說就是這樣:首先我們利用人類檢測演算法檢測到人臉,然後利用關鍵點檢測演算法定位到我們嘴脣的區域。我們將嘴脣的區域截取出來之後,我們在這樣的一個輸入影象上訓練我們的影象風格的網路。這樣一來,他的背景干擾就基本上沒有了,整個任務也被大大的精簡,演算法的魯棒性也會提升很多。如圖所示: caffe影象技術
第二步,反捲積。可以看作是卷積的逆過程。我們先看看卷積,下方的藍色是輸入,上方的綠色是輸出。我們輸入的是4×4,輸出的是2×2。可以看到輸出的每一個畫素,它都是由輸入的3×3的一個區域來決定,如圖所示: caffe 我們再看看反捲積,下方2×2的藍色是輸入,上方4×4的綠色是輸出。我們可以看到反捲積將解析度提升了一倍,輸入的每一個畫素都會對輸出的其中一個區域的畫素產生作用。如圖所示: caffe 下面是Caffe中卷積和反捲積輸入輸出的一個尺寸的計算。

卷積輸出結果,假設用變數 x 表示,則: x= (input + 2 * pad - kernel_size) / stride + 1;

反捲積輸出結果,假設用變數 y 表示,則: y = (input - 1) * stride + kernel_size - 2 * pad;

總結一下,我們可以簡單的認為卷積的操作,就是像一個大的分率降為一個小的解析度。而反捲積的操作正好相反,就是將小的解析度波動的上取樣,轉化為大的解析度。 網路-Segnet 下面我們看一個比較經典的反捲積的影象分割網路-Segnet,如下圖所示: caffe 它最早被用於自動駕駛。我們可以看到整個的網路呈對稱的結構,左邊這一塊是卷積,右邊這一塊是反捲積。反捲積跟卷積,基本上是處於完全定向的一個結構。在卷積的過程中,我們不斷降低我們的feature map的尺寸,在反捲積的過程中,我們不斷地提升我們影象解析度,同時對於相同解析度的featuremap,他們之間還有一個skip連線,在後面章節中會詳細的介紹。下面我們說說我們的殘差連線,也就是skip connection,再說我們的殘差連線之前,我們先說深層神經網路中的一個比較經典的問題,也就是梯度消散。 梯度消散 也就是說在網路進行反向傳播的過程中,梯度最終變得非常小,直到為零。梯度消散來源於鏈式法則。我們假設有這樣的一個任務,如圖所示: caffe 我們的輸入是X,我們的輸出是cost,f,g,k,都可以都可以看作是一些非線性的變化。比如說f是卷積操作,g是啟用層,K是最後的分類器,cost就是我們最終的一個損失函式。當我們要求我們的損失函式對於F的導數的時候,就要通過鏈式法則來進行求取。具體來說就是這樣。我們可以看到它包含了好幾個部分的相乘,如下圖所示: caffe 假如這幾個相乘的部分,其中有數值非常小的,那麼在多次連乘之後,梯度可能就變得非常非常小。尤其對於上百層上千層的深度神經網路,不用穿多少層,它的梯度就幾乎可以忽略不計。當梯度消散之後,誤差就無法傳播到淺層的神經網路,就無法進行正確的學習。這個時候殘差連線就橫空出世了,這是殘差連線的一個基本的結構。對於非殘差連線它的豎式X輸出是FX,對於殘差連線,他就是在X這個通道上,直接拉了一條支路,加上輸出的FX,也就是說,這個時候我們的輸出變成了f(x)+x,如圖所示: caffe 它有什麼好處呢?我們直接給大家舉一個例子(蜂口小程式看視訊) caffe 除了以上可以有效的緩解梯度消散的問題之外,殘差連線還可以融合底層和高層的資訊。同樣我們看一個非常經典的網路,這個網路是全卷積網路,也是第一個真正意義上的比較有用的一個影象分割網路。如圖所示: caffe 我們可以看到,它的卷積卷積層包含了若干的卷積層,conv1,pool1, conv2,pool2,這樣的一個連線,在做反捲積也就是恢復影象解析度的過程中,他會不斷的進行相進行上取樣。在上取樣的過程中,我們可以看到它將pool4跟兩倍的conv7,這兩個featuremap進行的融合,它將pool3跟兩倍的pool4,以及四倍的conv7的featuremap,這三個featuremap進行融合,這樣的融合有什麼作用呢?我們可以看到在網路不斷的往下傳的過程中,從pool3到pool4,pool4的感受也越來越大,在反捲積的過程中也是如此。我們將pool4跟兩倍的conv7的感受也進行融合,這樣的話就實現了局部和全域性的感受也一個個融合。這樣的一個融合帶來好處就是我們將底層的資訊跟高層的資訊進行融合,在網路比較淺層的時候,比如從conv1到conv2到conv3,它就是一個從底層資訊到高層資訊的一個抽象,越到後面越是如此。 我們在做反捲積操作的時候,我們將底層的資訊也融合進來,這樣可以大大提升影象的分割任務,尤其是對邊緣部分,可以大大的提升影象風格任務的baselines。以上就是影象分割任務中的一些關鍵的技術的分享。

完整內容及視訊解讀,請關注蜂口小程式~ 參與內測免費獲取蜂口所有內容,請申請內測(1*8*8*1*1*2*1*7*5*9*5),更多優惠福利,歡迎大家多多參與,盡情挑刺,凡是好的建議,我們都會虛心採納噠~