在這篇文章中,我們將進入使用深度學習進行圖像分割的世界。我們將討論:
- 圖像分割是什么以及圖像分割的兩種主要類型
- 圖像分割結構
- 圖像分割中使用的損失函數
- 你可以使用的框架
就讓我們一探究竟吧。
什么是圖像分割?
顧名思義,這是將圖像分割為多個部分的過程。在這個過程中,圖像中的每個像素都與一個對象類型相關聯。圖像分割主要有兩種類型:語義分割和實例分割。在語義分割中,所有相同類型的對象都使用一個類標簽進行標記,而在實例分割中,相似的對象使用各自的標簽。
圖像分割結構
圖像分割的基本結構包括編碼器和解碼器。編碼器通過濾波器從圖像中提取特征。解碼器負責生成最終輸出,該輸出通常是包含對象輪廓的分割掩碼。大多數架構都有這種架構或它的變體。
讓我們來看幾個例子。
U-Net
U-Net是一種卷積神經網絡,最初是為分割生物醫學圖像而開發的。當它被可視化的時候,它的架構看起來像字母U,因此被命名為U-Net。其體系結構由兩部分組成,左側為收縮路徑,右側為擴展路徑。收縮路徑的目的是獲取上下文,而擴展路徑的作用是幫助精確定位。U-Net是由右側的擴張路徑和左側的收縮路徑組成的。收縮路徑由兩個3乘3的卷積組成。卷積之后是一個ReLU和一個2x2的最大池計算用於下采樣。
你可以在這里找到U-Net的完整實現:https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/。
FastFCN —Fast Fully-connected network
在這個架構中,使用一個聯合金字塔上采樣(JPU)模塊來替換膨脹卷積,因為它們消耗大量的內存和時間。在應用JPU進行上采樣時,其核心部分采用全連接網絡。JPU將低分辨率的feature map采樣到高分辨率feature map。如果你想動手實現一些代碼,看這里:https://github.com/wuhuikai/FastFCN。
Gated-SCNN
這個架構由一個 two-stream CNN架構組成。在該模型中,使用一個單獨的分支來處理圖像的形狀信息。利用形狀流來處理邊界信息。實現參考代碼:https://github.com/nv-tlabs/gscnn
DeepLab
在這種架構中,上采樣濾波器的卷積用於涉及密集預測的任務。多尺度的目標分割是通過空間金字塔池實現的。最后,利用DCNNs來改進目標邊界的定位。通過對濾波器插入零進行上采樣或對輸入特征圖進行稀疏采樣來實現卷積。實現參考代碼:https://github.com/fregu856/deeplabv3,https://github.com/sthalles/deeplab_v3
Mask R-CNN
在這個架構中,使用邊界框和語義分割將每個像素划分為一組類別,對對象進行分類和局部化。對每個感興趣的區域得到一個分割掩碼,生成一個類標簽和一個邊界框作為最終輸出。該架構是Faster R-CNN的擴展。Faster R-CNN由regions proposer和深度卷積網絡和利局部檢測器組成。這里是COCO測試集中的一張圖像的結果:
圖像分割損失函數
語義分割模型在訓練過程中通常使用一個簡單的交叉分類熵損失函數。但是,如果你對獲取圖像的細粒度信息感興趣,那么你需要用到稍微高級一點的損失函數。我們來看看其中的幾個。
Focal Loss
這種損失是對標准交叉熵的改進。這是通過改變它的形狀來實現的,這樣分配給分類良好的樣本的損失就降低了。最終,這確保了沒有類別不平衡。在這個損失函數中,交叉熵損失被縮放,隨着對正確類的置信度的增加,縮放因子衰減為零。在訓練時,比例因子會自動降低簡單樣本的權重,並聚焦於困難樣本。
Dice loss
這個損失是通過計算smooth dice coefficient得到的。這種損失是最常用的分割損失。
Intersection over Union (IoU)-balanced Loss
IoU平衡分類損失的目的是增加高IoU樣本的梯度,降低低IoU樣本的梯度。這樣提高了機器學習模型的定位精度。
Boundary loss
邊界損失的一種變體應用於分割高度不平衡的任務。這種損失的形式是空間等高線上的距離度量,而不是區域。這種方法解決了高度不平衡的分割任務中區域損失的問題。
Weighted cross-entropy
在交叉熵的一種變體中,所有正樣本都用一定的系數進行加權。它用於類別不平衡的場景。
Lovász-Softmax loss
該損失是對基於子模塊損失凸Lovasz擴展的神經網絡平均IoU損失的直接優化。其他值得一提的損失包括:
- TopK loss,其目的是確保網絡在訓練過程中聚焦於困難樣本上。
- 距離懲罰交叉熵損失,引導網絡難以分割的邊界地區。
- 敏感性-特異性(SS)損失,計算特異性和敏感性的均方差的加權和。
- Hausdorff distance(HD) loss,估計了卷積神經網絡的Hausdorff距離。
這只是在圖像分割中使用的幾個損失函數。想了解更多內容,看這里:https://github.com/JunMa11/SegLoss。
圖像分割數據集
從哪里可以得到一些數據集來開始?讓我們來看幾個例子。
Common Objects in COntext — Coco Dataset
COCO是一個大型物體檢測、分割和圖像描述數據集。數據集包含91個類。它有25萬個人標注了關鍵點。它的大小是37.57 GiB。它包含80個物體類別。它遵循Apache 2.0許可,下載鏈接:http://cocodataset.org/#download。
PASCAL Visual Object Classes (PASCAL VOC)
PASCAL有9963個圖像和20個不同的類。訓練/驗證集是一個2GB的tar文件。數據集下載:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/。
The Cityscapes Dataset
此數據集包含城市場景的圖像。它可以用來評估城市場景中視覺算法的性能。 數據集下載:https://www.cityscapes-dataset.com/downloads/。
The Cambridge-driving Labeled Video Database — CamVid
這是一個基於運動的分割和識別數據集。它包含32個語義類。數據集下載:http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/。
圖像分割框架
現在你已經有了數據集,讓我們介紹一些工具/框架,你可以使用它們來開始。
- FastAI library - 給定一幅圖像,該庫能夠創建該圖像中對象的mask。
- Sefexa Image Segmentation Tool - Sefexa是一個免費的工具,可以用於半自動圖像分割,圖像分析,創建ground truth
- Deepmask - Deepmask由Facebook Research開發,是Deepmask和SharpMask的Torch實現。
- MultiPath - 這是來源於A MultiPath Network for Object Detection的物體檢測網絡的Torch實現。
- OpenCV - 這是一個開源的計算機視覺庫,有超過2500個優化算法。
- MIScnn - 這是一個醫學圖像分割開源庫。它使用最先進的卷積神經網絡和深度學習模型建立管道,只需幾行代碼。
- Fritz - Fritz提供多種計算機視覺工具,包括用於移動設備的圖像分割工具。
總結
本文為你提供了一些圖像分割的背景知識,並為你提供了一些工具和框架,可以用於入門。我們討論了:
- 什么是圖像分割,
- 圖像分割架構,
- 圖像分割損失,
- 圖像分割工具和框架。
要了解更多信息,請查看每個架構和框架的鏈接。
英文原文:https://neptune.ai/blog/image-segmentation-in-2020
想要了解更多資訊,請掃描下方二維碼,關注機器學習研究會