PortraitNet: Real-time portrait segmentation network for mobile device論文解讀和代碼實踐

好久沒讀論文了,因爲最近要寫一篇二區論文,就沒怎麼在讀新論文了。今天有點閒空,寫一篇關於人像分割的論文,同時還有代碼實踐。

官方代碼以及論文地址

研究背景

人像精細分割屬於語義分割的子任務。但一般的語義分割網絡用來做人像精細分割效果都不太行。作者給出瞭如下理由:

  • 人臉佔據圖像至少10%的面積
  • 在強光照下,邊界會模糊,不適合語義分割,但這種情況卻在自拍照中常見。
  • 分割網絡很大,不適合移動端實時快速的人像分割。

網絡結構

因爲注重速度,所以網絡其實很簡單。backbone是mobileNetV2, 然後u-net結構作爲decoder。decoder就是轉置卷積+residual block。 conv換成depthwise conv。
在這裏插入圖片描述

如上圖所示,設計的D-block就是殘差block,把3*3的conv換爲depthwise conv。總體結構還是很容易看懂的。

兩個額外的loss

注意到上圖的mask loss和boundary loss。其中mask loss就是用來計算像素分類的二值交叉熵loss。除了boundary loss,還有一個consistency constraint loss。

boundary loss

首先爲了保證網絡的嬌小,不能就因爲想優化邊界就增加額外的分支,所以作者就在最後一層,增加了一個conv層。用來預測邊界。邊界的label來自對分割gt的canny算子的輸出。設置線寬爲4.
因爲邊界佔據圖像很小的部分,爲了避免極度的樣本不均衡的樣子。所以用的是focal loss。
lambda設置爲很小的值,10-4
在這裏插入圖片描述

consistency constraint loss

自拍照有時候在不同的光照條件下,會得到亮度不一樣,但是內容確實相同的照片,這些圖像的label都是一致的。但網絡可能會因爲這些圖像像素值不同,得到不同的分割預測。爲了避免這個問題,作者提出了一致性限制loss。目的就是讓這些有光照帶來的影響不會對最終的分割結果有影響。從而得到更加穩定的效果。
在這裏插入圖片描述
這個輔助loss的示意圖從上圖看出。假設A是原圖經過數據增強得到的。A’是將A改變對比度等得到的。這個張圖內容相同,經過網絡分別得到B和B’,是heatmap,即網絡最後的輸出圖。B和B’都去和GT參與計算loss。
從理論上來說,A’的質量差A一些,所以B’的質量也差B一些。但是A’僅僅是模擬光線變化得到的,A’的內容和A一致,我們自然希望B’和B相同。爲此,作者提出使用B作爲B’的軟標籤,在B和B’之間計算 KL loss
在這裏插入圖片描述
LmL_m'是用GT和B, B’得到的loss,就是普通的BCE。
LcL_c是KL loss。T是軟標籤係數,用來軟化標籤的。

另外B和B’是沒有經過softmax的logits。loss公式裏面的p都市經過softmax的。

而q是則是帶有軟化係數的softmax得到的。
在這裏插入圖片描述

代碼實踐

作者開放了源碼和模型,可以直接使用。源碼也很好讀。
這是按照閾值爲0.5分割的結果。可以看出人物的大部分區域都已經覆蓋了,也僅有很少的區域被誤判。另外頭髮有一部分沒有分割出來。
在這裏插入圖片描述
下圖是將前景提出,虛化背景,模擬景深模式的效果(右圖)
在這裏插入圖片描述

總體來說,2019年2月提出的portraitNet是很不錯的工作了。速度確實快。

另外,portraitNet其實已經被extremeC3Net(2019年七月)和SINet(2019年11月)超越了。以後也會帶來這兩篇論文的解讀,兩篇論文是同一作者,一個韓國人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章