點擊上方「小白學視覺」,選擇加"星標"或「置頂」
git
重磅乾貨,第一時間送達
web
本文轉自AI公園算法
做者:Jingles (Hong Jing)性能優化
編譯:ronghuaiyang
微信
使用一系列的網格狀的密集跳躍路徑來提高分割的準確性。網絡
在這篇文章中,咱們將探索UNet++: A Nested U-Net Architecture for Medical Image Segmentation這篇文章,做者是亞利桑那州立大學的Zhou等人。本文是U-Net的延續,咱們將把UNet++與Ronneberger等人的U-Net原始文章進行比較。
架構
UNet++的目標是經過在編碼器和解碼器之間加入Dense block和卷積層來提升分割精度。app
分割的準確性對於醫學圖像相當重要,由於邊緣分割錯誤會致使不可靠的結果,從而被拒絕用於臨牀中。編輯器
爲醫學成像設計的算法必須在數據樣本較少的狀況下實現高性能和準確性。獲取這些樣本圖像來訓練模型多是一個消耗資源的過程,由於須要由專業人員審查的高質量、未壓縮和精確註釋的圖像。函數
UNet++裏有什麼新東西?
下面是UNet++和U-Net架構的示意圖。
UNet++ 在原始的U-Net上加了3個東西:
-
從新設計的跳躍路徑(顯示爲綠色) -
密集跳躍鏈接(顯示爲藍色) -
深度監督(顯示爲紅色)
從新設計的跳躍路徑
在UNet++中,增長了從新設計的跳躍路徑(綠色顯示),以彌補編碼器和解碼器子路徑之間的語義差異。
這些卷積層的目的是減小編碼器和解碼器子網絡的特徵映射之間的語義差距。所以,對於優化器來講,這多是一個更直接的優化問題。
U-Net採用跳躍鏈接,直接鏈接編碼器和解碼器之間的特徵映射,致使把語義上不類似的特徵映射相融合。
然而,在UNet++中,相同dense block的前一個卷積層的輸出與較低層dense block對應的上採樣輸出進行融合。這使得已編碼特徵的語義級別更接近於等待在解碼器中的特徵映射的語義級別,所以,當接收到語義上類似的特徵映射時,優化更容易。
跳躍路徑上的全部卷積層使用大小爲3×3的核。
密集跳躍鏈接
在UNet++中,密集跳躍鏈接(用藍色顯示)實現了編碼器和解碼器之間的跳躍路徑。這些Dense blocks是受到DenseNet的啓發,目的是提升分割精度和改善梯度流。
密集跳躍鏈接確保全部先驗特徵圖都被累積,並經過每一個跳躍路徑上的dense卷積塊而到達當前節點。這將在多個語義級別生成完整分辨率的特徵映射。
深度監督
UNet++中增長了深度監督(紅色顯示),經過修剪模型來調整模型的複雜性,在速度(推理時間)和性能之間實現平衡。
對於accurate模式,全部分割分支的輸出進行平均。
對於fast模式,最終的分割圖從分割分支之一選擇。
Zhou等人進行了實驗,以肯定在不一樣剪枝水平下的最佳分割性能。使用的度量是IoU和推理時間。
他們試驗了四種分割任務:a)細胞核,b)結腸息肉,c)肝臟,d)肺結節。結果以下:
L3與L4相比,平均減小了32.2%的推理時間,同時IoU略微下降了。
更激進的修剪方法,如L1和L2,能夠進一步減小推理時間,但以顯著的分割性能爲代價。
在使用UNet++時,咱們能夠調整用例的層數。
在UNet++上的實驗
我使用Drishti-GS數據集,這與Ronneberger等人在他們的論文中使用的不一樣。該數據集包含101幅視網膜圖像,以及用於檢測青光眼的光學disc和光學cup的mask標註。青光眼是世界上致盲的主要緣由之一。50張圖片用於訓練,51張用於驗證。
度量
咱們須要一組指標來比較不一樣的模型,這裏咱們有二元交叉熵,Dice 係數和IoU。
二元交叉熵
二分類的經常使用度量和損失函數,用於度量誤分類的機率。
咱們將使用PyTorch的binary_cross_entropy_with_logits函數,與Dice係數一塊兒做爲損失函數對模型進行訓練。
Dice 係數
對預測值和實際值之間重疊的通用的度量。計算方法爲 2 × 預測值與ground truth的重疊面積除以預測值與ground truth之和的總面積。
這個度量指標的範圍在0到1之間,其中1表示徹底重疊。
我使用這個度量和二元交叉熵做爲訓練模型的損失函數。
IoU
一個簡單(但有效!)的度量來計算預測的mask與ground truth mask的準確性。計算預測值與ground truth的重疊面積,併除以預測值與ground truth的並集面積。
相似於Dice係數,這個度量指標的範圍是從0到1,其中0表示沒有重疊,而1表示預測與地面真實之間徹底重疊。
訓練和結果
優化這個模型,訓練50多個epoch,使用Adam優化器,學習率1e-4,學習率衰減率爲沒10個epochs乘以0.1,損失函數是二元交叉熵和Dice 係數的組合。
模型在27分鐘內完成了36.6M可訓練參數的訓練,每一個epoch大約須要32秒。
表現最好的epoch是第45個epoch(在50個epochs中)。
-
二元交叉熵:0.2650 -
Dice係數:0.8104 -
IoU:0.8580
幾個U-Net模型之間的指標進行比較,以下所示。
測試首先經過模型處理一些沒見過的樣本,來預測光學disc(紅色)和光學cup(黃色)。
從指標表來看,UNet++在IoU上超越U-Net,但在Dice係數上表現較差。從定性測試的結果來看,UNet++成功地對第一張圖像進行了正確的分割,而U-Net作得並很差。也因爲UNet++的複雜性,訓練時間是U-Net的兩倍。必須根據它們的數據集評估每種方法。
總結
UNet++的目標是提升分割精度,經過一系列嵌套的,密集的跳躍路徑來實現。從新設計的跳躍路徑使語義類似的特徵映射更容易優化。密集的跳躍鏈接提升了分割精度,改善了梯度流。深度監督容許模型複雜性調優,以平衡速度和性能優化。
本文分享自微信公衆號 - 小白學視覺(NoobCV)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。