图像去燥——TV Loss

1. 背景介绍

        在图像复原过程中,图像上的一点点噪声可能就会对复原的结果产生非常大的影响,因为很多复原算法都会放大噪声。这时候我们就需要在最优化问题的模型中添加一些正则项来保持图像的光滑性,TV loss是常用的一种正则项(注意是正则项,配合其他loss一起使用,约束噪声)。图片中相邻像素值的差异可以通过降低TV loss来一定程度上解决。比如降噪,对抗checkerboard等等。

2. 公式表达 

      即:求每一个像素和横向下一个像素的差的平方,加上纵向下一个像素的差的平方。然后开β/2次根。一般β的默认值为2,所以可以不用考虑,β/2。

      TVLoss促进了生成的图像中的空间平滑性:当β < 1时,会出现下图左侧的小点点的artifact;当β > 1时,图像中小点点会被消除,但是代价就是图像的清晰度。效果图如下:

 

3. 代码实现 

import torch
from torch.autograd import Variable

class TVLoss(torch.nn.Module):
    """
    TV loss
    """

    def __init__(self, weight=1):
        super(TVLoss, self).__init__()
        self.weight = weight

    def forward(self, x):
        batch_size = x.size()[0]
        h_x = x.size()[2]
        w_x = x.size()[3]
        count_h = self._tensor_size(x[:,:,1:,:])
        count_w = self._tensor_size(x[:,:,:,1:])
        h_tv = torch.pow((x[:,:,1:,:]-x[:,:,:h_x-1,:]),2).sum()
        w_tv = torch.pow((x[:,:,:,1:]-x[:,:,:,:w_x-1]),2).sum()
        return self.weight*2*(h_tv/count_h+w_tv/count_w)/batch_size

    def _tensor_size(self, t):
        return t.size()[1]*t.size()[2]*t.size()[3]

if __name__ == "__main__":
    x = Variable(torch.FloatTensor([[[1, 2, 3], [2, 3, 4], [3, 4, 5]], [[1, 2, 3], [2, 3, 4], [3, 4, 5]]]).view(1, 2, 3, 3),requires_grad=True)
    addition = TVLoss()
    z = addition(x)
    print(z)
    z.backward()

  运行结果:tensor(4., grad_fn=<DivBackward0>)

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用内容,问题中提到的test——loss可能是指在训练模型过程中,测试集上的损失值。根据引用中的内容,如果训练模型的loss下降,但准确率却在下降,很可能是loss目标函数写错了。此外,还有可能是测试过程中的一些问题,比如测试数据没有在和训练数据相同的session中进行测试。要解决这个问题,可以检查loss函数的实现以及测试过程中的代码,确保它们正确并且一致。另外,引用中提到了在迭代过程中保存训练和测试的值,可以使用这些值来绘制train过程中的loss曲线和test过程中的accuracy曲线,帮助我们更好地理解模型的训练情况。123 #### 引用[.reference_title] - *1* [train loss与test loss结果分析](https://blog.csdn.net/w372845589/article/details/84303498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* *3* [caffe学习笔记——loss及accuracy曲线绘制](https://blog.csdn.net/wanty_chen/article/details/80232303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值