影象分割演算法總結

  • 作者:由 匿名使用者 發表于 攝影
  • 2022-10-06

影象分割演算法總結機器1718 2022-07-21

影象處理的很多工都離不開影象分割。因為影象分割在cv中實在太重要(有用)了,就先把影象分割的常用演算法做個總結。

接觸機器學習和深度學習時間已經不短了。期間看過各種相關知識但從未總結過。本文過後我會盡可能詳細的從工程角度來總結,從傳統機器學習演算法,傳統計算機視覺庫演算法到深度學習目前常用演算法和論文,以及模型在各平臺的轉化,量化,服務化部署等相關知識總結。

影象分割常用演算法大致分為下面幾類。由於影象的能量範函,邊緣追蹤等方法的效果往往只能解決特定問題,效果並不理想,這裡不再闡述。當然二值化本身也可以分割一些簡單影象的。但是二值化演算法較多,我會專門做一個文章來總結。這裡不再贅述。

1。基於邊緣的影象分割演算法:

有利用影象梯度的傳統演算法運算元的sobel,roberts,prewitt,拉普拉斯以及canny等。

這些演算法的基本思想都是採用合適的卷積運算元,對影象做卷積。從而求出影象對應的梯度影象。(至於為什麼透過如圖1這樣的運算元卷積,即可得到影象的梯度影象,請讀者複習下卷積和倒數的概念自行推導)由於影象的邊緣處往往是影象畫素差異較大,梯度較大地方。因此我們透過合適的卷積核得到影象的梯度影象,即得到了影象的邊緣影象。至於二階運算元的推導,與一階類似。優點:傳統運算元梯度檢測,只需要用合適的卷積核做卷積,即可快速得出對應的邊緣影象。缺點:影象邊緣不一定準確,複雜影象的梯度不僅僅出現在影象邊緣,可以能出現在影象內部的色彩和紋理上。

也有基於深度學習方法hed,rcf等。由於這類網路都有同一個比較嚴重的缺陷,這裡只舉例hed網路。hed是基於FCN和VGG改進,同時引出6個loss進行最佳化訓練,透過多個層輸出不同scale的粒度的邊緣,然後透過一個訓練權重融合各個層的邊緣結果。hed網路結構如下:

可以得到一個比較完整的梯度影象,可參考github的hed實現。優點:影象的梯度細節和邊緣完整性,相比傳統的邊緣運算元要好很多。但是hed對於邊緣的影象內部的邊緣並不能很好的區分。當然我們可以自行更改loss來嘗試只擬合外部的影象邊緣。但最致命的問題在於,基於vgg的hed的網路表達能力有限,對於影象和背景接近,或者影象和背景部分相融的圖片,hed似乎就有點無能為力了。

2。基於區域分割的演算法:

區域分割比較常用的如傳統的演算法結合遺傳演算法,區域生長演算法,區域分裂合併,分水嶺演算法等。這裡傳統演算法的思路是比較簡單易懂的,如果有無法理解的地方,歡迎大家一起討論學習。這裡不再做過多的分析。

基於區域和語意的深度學習分割演算法,是目前影象分割成果較多和研究的主要方向。例如FCN系列的全卷積網路,以及經典的醫學影象分割常用的unet系列,以及rcnn系列發展下的maskrcnn,以及18年底的PAnet。基於語意的影象分割技術,無疑會成為影象分割技術的主流。

其中,基於深度學習語意的其他相關演算法也可以間接或直接的應用到影象分割。如經典的影象matting問題。18年又出現了許多非常優秀的演算法和論文。如Deep-Image-Matting,以及效果非常優秀的MIT的 semantic soft segmentation(sss)。

基於語意的影象分割效果明顯要好於其他的傳統演算法。我在解決影象分割的問題時,首先嚐試用了hed網路。最後的效果並不理想。雖然也參考github,做了hed的一些fine-tune,但是還是上面提到的原因,在我多次嘗試後,最終放棄。轉而適用FCN系列的網路。但是fcn也無法解決影象和背景相融的問題。圖片相融的分割,感覺即需要大的感受野,又需要未相融部分原影象細節,所以單原FCN的網路,很難做出準確的分割。中間還測試過很多其他相關的網路,但都效果不佳。考慮到感受野和原影象細節,嘗試了resnet和densenet作為影象特徵提取的底層。最終我測試了unet系列的網路:

unet的原始模型如圖所示。在自己拍照爬蟲等手段採集了將近1000張圖片。去掉了圖片質量太差的,圖片內容太過類似的。爬蟲最終收集160多張,自己拍照收集200張圖片後,又用ps手動p了邊緣影象,採用影象增強變換,大約有300*24張圖片。原生unet網路的表現比較一般。在將unet普通的卷積層改為resnet後,網路的表達能力明顯提升。在將resnet改為resnet101,此時,即使對於部分相融的影象,也能較好的分割了。但是unet的模型體積已經不能接受。

在最後階段,看到maskrcnn的例項分割。maskrcnn一路由rcnn,fasterrcnn發展過來。於是用maskrcnn來加入自己的訓練資料和label影象進行訓練。maskrcnn的結果表現並不令人滿意,對於邊緣的定位,相比於其他演算法,略顯粗糙。在產品應用中,明顯還不合適。

3。基於圖的分割演算法

基於深度學習的deepgrab,效果表現並不是十分理想。deepgrab的git作者backbone採用了deeplabv2的網路結構。並沒有完全安裝原論文來做。

論文原地址參考: https://arxiv。org/pdf/1707。00243。pdf

整體結構類似於encode和decoder。並沒有太仔細的研究,因為基於resent101的結構,在模型體積,速度以及deeplab的分割精度上,都不能滿足當前的需求。之前大致總結過計算機視覺的相關知識點,既然目前在討論移動端模型,那後面就分模組總結下移動端模型的應用落地吧。

由於時間實在有限。這裡並沒有針對每個演算法進行詳細的講解。後續我會從基礎的機器學習演算法開始總結。

Top