輪廓邊緣的學習與優化

2021-10-12 16:41:45 字數 2442 閱讀 5787

分割時,對於置信度不高的畫素,能否單獨處理?首先,確定其方向,找到其對應的內部畫素,用內部畫素代替該畫素

學習邊界到內部點的方向;

文獻概述:level set for segmentation:[1,14,53,31】

角度回歸:

devil is in the edges: learning semantic boundaries from noisy annotations cvpr 2019

deep watershed transform for instance segmentation cvpr 2017

現有的deeplabv3,gated_scnn,hrnet都不能很好的優化網路的邊緣;並且發現,距離邊緣越遠的**結果越好,即內部**結果更可靠。

我們的方法分為2步:定位目標邊界(通過邊界檢測模型**二進位制邊界);學習從邊界到內部的畫素的方向,並將邊界畫素沿著方向向內部移動一定的距離;

網路框架:

(1)先訓練乙個模型,選出來邊緣畫素(邊緣分割圖)及其對應的內部畫素(offset分割圖,並將邊緣沿著offset向內走,得到置信度更高的畫素);

根據distance_map生成boundary map:distance_map的distance小於指定值的,定義為boundary

我們的方法效果取決於3個量:(1)邊緣**結果,即是否為邊緣 (2)邊緣的方向**結果,即指向內部還是外部 (3)內部畫素的**準確度

結果

邊緣寬度的選擇3,5,10對結果的影響不大

訓練過程:

訓練過程分為2步,先根據**結果和標註輪廓,通過主動輪廓+能量場最小來得到refine contour,然後根據refine contour來計算3個損失(二進位制分割損失,nms損失和邊緣損失)來優化backbone:

主動輪廓+能量場能量場最小(沒看懂):

根據refine contour來計算3個損失:

其角度損失

對**的邊緣計算法線方向,對gt邊緣計算法線方向,

參考deep watershed transform for instance segmentation

**nms損失:**沒有看懂

邊緣經常出現在高頻資訊,所以如何將影象低頻與高頻資訊分離(原圖-高斯*原圖;頻率域)和結合,以**邊緣

語義邊緣檢測:36,34

casenet: deep category-aware semantic edge detection. cvpr 2017

holistically-nested edge detection iccv 2015

active contours

參考:

我們的模型將rgb影象(a)和半分割影象(e)作為輸入,**前景中每個畫素到其最近的邊緣的方向(f),方向編碼為2通道的單位向量;

角度損失:

**的單位向量和實際的單位向量計算角度的均方差損失:

角度的均方差損失:先計算角度的cos,然後得到角度,然後角度**2

errorangles = tf.acos(tf.reduce_sum(pred * gt, reduction_indices=[1], keep_dims=true))

lossangletotal = tf.reduce_sum((tf.abs(errorangleserrorangles))ssweight)

計算角度的cos:pred * gt,因為pred , gt都是單位向量,所以|pred||gt|cos=predgt,所以cos=predgt

然後計算角度值:tf.acos

然後計算均方差損失tf.reduce_sum((tf.abs(errorangleserrorangles))ssweight)

輪廓 邊緣 邊界的相關函式

opencv裡支援很多邊緣提取的辦法,可是如何在一幅影象裡得到輪廓區域的引數呢,這就需要用到findcontours函式,這個函式的原型為 c void findcontours inputoutputarray image,outputarrayofarrays contours,outputar...

OpenCV學習 輪廓檢測與重繪

出處 提取模式.cv retr external 只提取最外層的輪廓 cv retr list 提取所有輪廓,並且放置在 list 中 cv retr ccomp 提取所有輪廓,並且將其組織為兩層的 hierarchy 頂層為連通域的外圍邊界,次層為洞的內層邊界。cv retr tree 提取所有輪...

邊緣計算與移動邊緣計算的區別

如果說雲計算是集中式大資料處理,那麼邊緣計算就可以理解為邊緣式大資料處理。何為邊緣?通用術語表示就是,鄰近 接近。放在這句話中就是,臨近計算或接近計算。想象一下,資料每次都要傳到遙遠的雲端,雲端處理完,才能回傳回來,很麻煩吧!邊緣計算則在想,為啥要傳那麼遠呢?資料那麼多,傳來傳去浪費時間不說,還效率...