1. 程式人生 > >【U-Net】語義分割之U-Net詳解

【U-Net】語義分割之U-Net詳解

一、簡介

  語義分割(Semantic Segmentation)是影象處理和機器視覺一個重要分支。與分類任務不同,語義分割需要判斷影象每個畫素點的類別,進行精確分割。語義分割目前在自動駕駛、自動摳圖等領域有著比較廣泛的應用。

分割網路現狀:
  在ResNet以後使用深度學習進行分類任務的效能已經超過了人類,但是目標檢測任務和分割任務的準確度卻一直較低,其中分割任務的準確度是最低的。因為分割任務需要對每個畫素點進行精確的分類,其難度最大。針對語義分割的需求,最早由Jonathan Long等人提出的Fully Convolutional Networks(FCN)成為了語義分割領域的基本框架之一,後續很多框架都多少參考了FCN的思想。但是FCN的準確度較低,不如U-net用的廣泛。
  目前已經有不少其他好用的分割網路:

二、U-net典型應用

  我第一次使用Unet是在Kaggle挑戰賽上,它是Kaggle的常客。因為它簡單,高效,易懂,容易定製,可以從相對較小的訓練集中學習。Unet的第一次提出是在2015年(論文),經過發展,目前有多個變形和應用。

  1. Kaggle-Airbus Ship Detection Challenge
    在衛星影象中找到船,在公開的kernal中最受歡迎的是Unet,達到了84.7的精度。

  2. Kaggle-衛星影象分割與識別:
    需要在衛星影象中分割出:房屋、道路、鐵路、樹木、農作物、河流、積水區、大型車輛、小轎車。在Unet基礎上微調,針對不同的分割物件,微調的地方不同,會產生不同的分割模型,最後融合。推薦一篇不錯的博文:

    Kaggle優勝者詳解:如何用深度學習實現衛星影象分割與識別

  3. Supervise.ly公司:
    在用Faster-RCNN(基於resnet)定位+Unet-like架構的分割,來做他們資料眾包影象分割方向的主動學習,當時沒有使用mask-rcnn,因為靠近物體邊緣的分割質量很低(終於!Supervise.ly釋出人像分割資料集啦(免費開源)

  4. 廣東政務資料創新大賽—智慧演算法賽 :
    國土監察業務中須監管地上建築物的建、拆、改、擴,高解析度影象和智慧演算法以自動化完成工作。並且:八通道U-Net:直接輸出房屋變化,可應對高層建築傾斜問題;資料增強:增加模型泛化性,簡單有效;加權損失函式:增強對新增建築的檢測能力;模型融合:取長補短,結果更全。其中季軍公佈了

    原始碼

  5. Kaggle車輛邊界識別——TernausNet 由VGG初始化權重 + U-Net網路,Kaggle Carvana Image
    Masking Challenge
    第一名,使用的預訓練權重改進U-Net,提升影象分割的效果。開源的程式碼在TernausNet

三、 U-net詳解

  U-net的原始碼很容易從上面應用的連線中找到。

  U-net網路非常簡單,前半部分作用是特徵提取,後半部分是上取樣。在一些文獻中也把這樣的結構叫做編碼器-解碼器結構。由於此網路整體結構類似於大寫的英文字母U,故得名U-net。

  U-net與其他常見的分割網路有一點非常不同的地方:U-net採用了完全不同的特徵融合方式:拼接,U-net採用將特徵在channel維度拼接在一起,形成更厚的特徵。而FCN融合時使用的對應點相加,並不形成更厚的特徵。

所以語義分割網路在特徵融合時有兩種辦法:
1. FCN式的對應點相加,對應於TensorFlow中的tf.add()函式;
2. U-net式的channel維度拼接融合,對應於TensorFlow的tf.concat()函式,比較佔視訊記憶體。

除了上述新穎的特徵融合方式,U-net還有以下幾個優點:

  1. 5個pooling layer實現了網路對影象特徵的多尺度特徵識別。
  2. 上取樣部分會融合特徵提取部分的輸出,這樣做實際上是將多尺度特徵融合在了一起,以最後一個上取樣為例,它的特徵既來自第一個卷積block的輸出(同尺度特徵),也來自上取樣的輸出(大尺度特徵),這樣的連線是貫穿整個網路的,你可以看到上圖的網路中有四次融合過程,相對應的FCN網路只在最後一層進行融合。