你好,我正試圖為張量或更精確的多通道影像實作總變化函式。我發現,對于上述總變異(圖片中),有這樣的源代碼:
def compute_total_variation_loss(img, weight)。
tv_h = ((img[:, :,1:, :] - img[:, :, :-1, :]). pow(2)).sum()
tv_w = ((img[:, :, :,1:] - img[:, :, :, :-1])。 pow(2)).sum()
return weight * (tv_h tv_w)
因為我是Python的初學者,我不明白在影像中i和j的指數是如何被提及的。我還想增加c的總變化(除了i和j),但我不知道哪個指數是指c。
或者說得更簡潔些,如何用python寫出以下公式。 在此輸入圖片描述
uj5u.com熱心網友回復:
這個函式假設是成批的影像。所以img是一個四維的張量(B, C, H, W)(B是批量影像的數量,C是顏色通道的數量,H是高度,W是寬度)。
因此,img[0, 1, 2, 3]是第一幅影像中第二種顏色(RGB中的綠色)的像素(2, 3)。
在Python(以及Numpy和PyTorch)中,可以用符號i:j來選擇元素的切片,意思是選擇元素i, i 1, i 2, ..., j - 1。在你的例子中,:表示所有元素,1:表示所有元素,但第一個,:-1表示所有元素,但最后一個(負指數檢索的元素向后)。請參考 "NumPy中的切分 "的教程。
所以img[:,:,1:,:] - img[:,:,:-1,:]相當于(一批)影像減去自己垂直移動了一個像素,或者,用你的符號X(i 1, j, k)- X(i, j, k)。然后張量被平方(.pow(2))并被求和(.sum())。請注意,在這種情況下,總和也是在批次上,所以你收到的是批次的總變化,而不是每個影像的變化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326117.html
標籤:
上一篇:如何使用JavaScript進行表單驗證使用戶輸入匹配
下一篇:如何轉移png
