Eigen D., Puhrsch C. and Fergus R. Depth Map Prediction from a Single Image using a Multi-Scale Deep Network. NIPS 2014.

看这篇文章单纯是为了看一看这个scale-invariant error.

主要内容

我们时常通过平方误差来衡量两个图片的差异, 但是这个损失是很依赖与scale的.

比如, 有两个图片\(\bm{x}, \bm{x}'\), 则其误差为

\[\|\bm{x} - \bm{x}'\|_2^2 = \sum_{i=1}^n (\bm{x}_i - \bm{x}_i')^2,
\]

倘若此时\(x\)的每一个元素都增加了\(c\), 则变成了

\[\|\bm{x} + c - \bm{x}'\|_2^2,
\]

这个实际不是非常友好的, 我们是希望这个损失最好是Scale-Invariant的, 所以我们在损失的部分加入一个值

\[\| \bm{x} - \bm{x}' + \alpha \|_2^2,
\]

注意, 这里的\(\bm{x}\)可以理解为\(\bm{x} + c\), 那么选择一个怎样的\(\alpha\)能够使得上述的误差最小呢(关于特定的\(\bm{x}, \bm{x}'\)).

\[2(\bm{x} - \bm{x}' + \alpha)^T \bm{1} = 0 \Rightarrow
\alpha = \frac{1}{n} (\bm{x}'- \bm{x})^T \bm{1} = \frac{1}{n}\sum_{i=1}^n (x_i' - x_i).
\]

故, 最后的损失函数是

\[\| \bm{x} - \bm{x}' + \frac{1}{n}(\bm{x} - \bm{x}')^T \bm{1}\|_2^2 = \|\bm{x} - \bm{x}'\|_2^2 - \frac{1}{n} ((\bm{x} - \bm{x}')^T \bm{1})^2.
\]

注: 如果我们将像素置于对数空间, 即考虑\(\log \bm{x}\), 则上述实际上考虑的\(c \cdot \bm{x}\) 的scale.

代码

import torch
import torch.nn as nn
import torch.nn.functional as F def scale_invariant_loss(outs: torch.Tensor, targets: torch.Tensor, reduction="mean"):
"""
outs: N ( x C) x H x W
targets: N ( x C) x H x W
reduction: ...
"""
outs = outs.flatten(start_dim=1)
targets = targets.flatten(start_dim=1)
alpha = (targets - outs).mean(dim=1, keepdim=True)
return F.mse_loss(outs + alpha, targets, reduction=reduction)

Scale-Invariant Error的更多相关文章

  1. Computer Vision_33_SIFT:TILDE: A Temporally Invariant Learned DEtector——2014

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  2. Image Processing and Computer Vision_Review:Local Invariant Feature Detectors: A Survey——2007.11

    翻译 局部不变特征探测器:一项调查 摘要 -在本次调查中,我们概述了不变兴趣点探测器,它们如何随着时间的推移而发展,它们如何工作,以及它们各自的优点和缺点.我们首先定义理想局部特征检测器的属性.接下来 ...

  3. 【尺度不变性】An Analysis of Scale Invariance in Object Detection – SNIP 论文解读

    前言 本来想按照惯例来一个overview的,结果看到1篇十分不错而且详细的介绍,因此copy过来,自己在前面大体总结一下论文,细节不做赘述,引用文章讲得很详细,另外这篇paper引用十分详细,如果做 ...

  4. {ICIP2014}{收录论文列表}

    This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinc ...

  5. Computer Graphics Research Software

    Computer Graphics Research Software Helping you avoid re-inventing the wheel since 2009! Last update ...

  6. 卷积神经网络CNN

    卷积神经网络,在图像识别和自然语言处理中有很大的作用,讲cnn的中文博客也不少,但是个人感觉说的脉络清晰清晰易懂的不多. 无意中看到这篇博客,写的很好,图文并茂.建议英文好的直接去看原文.英文不好的就 ...

  7. Introduction to debugging neural networks

    http://russellsstewart.com/notes/0.html The following advice is targeted at beginners to neural netw ...

  8. [转]An Intuitive Explanation of Convolutional Neural Networks

    An Intuitive Explanation of Convolutional Neural Networks https://ujjwalkarn.me/2016/08/11/intuitive ...

  9. SIFT(Scale-invariant feature transform) & HOG(histogram of oriented gradients)

    SIFT :scale invariant feature transform HOG:histogram of oriented gradients 这两种方法都是基于图像中梯度的方向直方图的特征提 ...

  10. 记录Debug神经网络的方法

    debugNNIntroduction to debugging neural networksThe following advice is targeted at beginners to neu ...

随机推荐

  1. Vue3 父子组件通信

    1.父传子父组件:在子组件上通过 v-bind绑定属性子组件:先定义下基本类型,然后通过setup的第一个参数取获取传过来的值(详细代码见下面)2.子传父父组件:在子组件上绑定一个事件,并定义回调子组 ...

  2. Maven 学习第一步[转载]

    转载至:http://www.cnblogs.com/haippy/archive/2012/07/04/2576453.html 什么是 Maven?(摘自百度百科) Maven是Apache的一个 ...

  3. [学习总结]1、View的scrollTo 和 scrollBy 方法使用说明和区别

    参考资料:http://blog.csdn.net/vipzjyno1/article/details/24577023 非常感谢这个兄弟! 先查看这2个方法的源码: scrollTo: 1 /** ...

  4. Oracle trunc和round的区别

    1.关于trunc 和round函数比较 整体概括: round函数 四舍五入trunc函数 直接截取 对于时间: Round函数对日期进行"四舍五入",Trunc函数对日期进行截 ...

  5. BigDecimal 计算注意事项

    BigDecimal 在进行除法运算(divide)时一定要注意:如果被除数为变量,一定要指定精度 和 舍入模式,否则会报:Non-terminating decimal expansion; no ...

  6. matplotlib画3d图

    import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D fig = plt.f ...

  7. JVM堆空间结构及常用的jvm内存分析命令和工具

    jdk8之前的运行时数据区域 程序计数器 是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器.每个线程都有一个独立的程序计数器,这类内存区域为"线程私有",此内存 ...

  8. numpy基础教程--对数组进行水平拼接和竖直拼接

    在处理数组的时候经常要用到拼接,numpy中有两个非常实用的函数,可以快捷对数组进行拼接 1.hstack(tup)函数可以接收维度相同的数组,进行水平拼接. 2.vstack(tup)用来竖直拼接 ...

  9. 学习整理--vue篇(1)

    vue学习 vue指令 模板指令: v-model:绑定data数据实现数据双向绑定 v-html:绑定模板内容,可书写标签 v-text:绑定数据实现单向绑定 可缩写为{{}} 支持逻辑运算 可结合 ...

  10. 【WP】【web】中学生CTF | web部分wp

    $_GET 源码: <?php show_source(__FILE__); include 'config.php'; if(!isset($_GET['args'])){ die(); } ...