无监督深度估计、运动估计的深度学习方法(二)——SSIM损失函数

    在自监督深度估计中,一般输入2张图像(若为视频,则输入邻近的两帧图像)frame1和frame2,模型先估计相机拍摄这2张图像是的姿态变化pose,然后根据pose将frame1变换到frame2的视角下,得到合成图像synthetic frame1。

    估算的pose越准确,synthetic frame1与frame2的图像相似度就越高。那么,常用SSIM(结构相似性)来评价这两张图片的相似度。

   若希望详细了解单目深度估计,可参考文章《动态场景下的单目深度估计》、《Instance-wise Depth and Motion Learning from Monocular Videos》和《MonoDepth2_单目深度估计》。

SSIM

    用于检测两张尺寸相同的图像的相似度,它主要通过分别比较两个图像的亮度(l)、对比度(c)、结构(s),然后对这三个要素加权并乘积表示,在论文中这三个要素用下面公式来表示:

这里 μx 为均值,σ 为方差,σxy 表示协方差。这里 C1、C2、C3 是为了避免当分母为 0 时造成的不稳定问题(所以写算法的时候可以放心,一定不会出现除 0 的情况)。

而 SSIM 的一般方程为:

这里一般\alpha,\beta,\gamma 取1,并且令 C3=0.5*C2,这样就得到简化的 SSIM 公式:

c_1=(k_1*L)^2c_2=(k_2*L)^2是用来维持稳定的常数。L是像素值的动态范围。k_1=0.01,k_2=0.03
结构相似性的范围为-1到+1(即SSIM∈(-1, 1])。当两张图像一模一样时,SSIM的值等于1。

tensorflow实现代码,戳here,滑至末尾

pytorch code

SSIM(结构相似性指数)损失函数是一种衡量两个图像相似度的指标,其基本思想是通过比较图像的亮度、对比度和结构信息来量化图像质量。SSIM通常用于评估图像处理算法,比如压缩、增强和重建等的效果。在深度学习中,SSIM可以作为损失函数来训练模型,以生成与参考图像更相似的图像。 在深度学习框架中,如PyTorch或TensorFlow,你可能需要使用现成的库或者自己实现SSIM损失函数。以下是在PyTorch中引用SSIM的一个例子: 首先,你可以从一些开源代码库中导入现成的SSIM函数,例如: ```python from pytorch_msssim import ssim as calculate_ssim ``` 然后,你可以在你的模型训练过程中使用这个函数来计算SSIM损失。以下是如何在一个简单的图像恢复任务中使用SSIM损失的示例: ```python import torch import torch.nn as nn from pytorch_msssim import ssim class SSIMLoss(nn.Module): def __init__(self, window_size=11, size_average=True): super(SSIMLoss, self).__init__() self.window_size = window_size self.size_average = size_average self.channel = 1 self.window = self.create_window(window_size) def create_window(self, window_size): # 这里实现高斯窗口的创建 ... def forward(self, x, y): (_, channel, _, _) = x.size() self.channel = channel return 1 - ssim(x, y, data_range=1.0, size_average=self.size_average, channel=self.channel, win=self.window) # 假设pred是模型输出的图像,target是真实的图像 ssim_loss = SSIMLoss() loss = ssim_loss(pred, target) ``` 请注意,这里的`pytorch_msssim`是一个第三方库,你需要先使用`pip`安装它。 如果你选择自己实现SSIM函数,你需要根据其数学定义来编写代码,包括计算亮度、对比度和结构相似性三个部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值