空间变换网络(STN)原理+2D图像空间变换+齐次坐标系讲解
空间变换网络(STN)原理+2D图像空间变换+齐次坐标系讲解
本文是对Google DeepMind 团队2015年发表的空间变换网络STN的详细讲解,笔记在编写的过程中借鉴了网上一些博客,在相应的内容位置有说明。如有侵权,请联系作者删除。
感谢台湾大学李宏毅老师的精彩讲解!
1 观点:CNN 不能学习到图像的不变性
一般来说,图像经过小小的平移和变形之后,人类还是信任CNN 能够把它们泛化,识别出里面的物体。归纳偏差(Inductive Bias) 是CNN 成功的一个关键。卷积和池化的选择,就是为了赋予神经网络一些不变性,避免因为一些小的改变,就丧失了原本的判断。然而,来自耶路撒冷希伯来大学的两位研究人员发现:一幅图像被平移了几个像素之后,现在的CNN 就很容易认不出来。旋转和缩放,也是一样。
该项研究利用测量习得表征(Learned epresentations) 线性度(Linearity) 的方法,来观察CNN 的不变性。测试了三种经典的CNN结构,VGG-16,ResNet-50 以及Inception
ResNet-V2。
结果——
只是把狗狗下移了一点点,只是把瓶子放大了一点点,只是把白熊的姿势换一下,系统的识别准确率就发生了猛烈的变化。
参考:http://m.elecfans.com/article/703297.html
2 坐标系与三维空间
2.1 笛卡尔坐标系
笛卡尔坐标系是直角坐标系和斜角坐标系的统称. 对于相交于原点的两条数轴,构成了平面放射坐标系。如果两条数轴上的度量单位相等,则称此放射坐标系为笛卡尔坐标系。若两条数轴互相垂直,则称为笛卡尔直角坐标系,否则称为笛卡尔斜角坐标系.
二维平面的直角坐标系是由两条互相垂直、零点重合的数轴构成的.通常被称为x-轴和y-轴,两个坐标轴的交点,称为原点,通常记为O,既有“零”的意思,又是英语“Origin”的首字母. 这两个不同线的坐标轴决定了一个平面,称为xy-平面/笛卡尔平面. 习惯性地将x-轴水平摆放,称为横轴,指向右方;y-轴被竖直放置,称为纵轴,指向上方. 两个坐标轴这样的位置关系,称为二维的右手坐标系,或右手系。如果把这个右手系画在一张透明纸片上,则在平面内无论怎样旋转它,所得到的都叫做右手系;但如果把纸片翻转,其背面看到的坐标系则称为“左手系”。这和照镜子时左右对掉的性质有关。
直角坐标系也可以推广至三维空间(3 dimension)与高维空间(higher dimension) 。
三维坐标系:
放射坐标系和笛卡尔坐标系平面向空间的推广:相交于原点的三条不共面的数轴构成空间的放射坐标系。三条数轴上度量单位相等的放射坐标系被称为空间笛卡尔坐标系。三条数轴互相垂直的笛卡尔坐标系被称为空间笛卡尔直角坐标系,否则被称为空间笛卡尔斜角坐标系。
2.2 向量和坐标


2.3 3D 空间常用坐标系
- 世界坐标系
世界坐标系是一个特殊的坐标系,它建立了描述其他坐标系所需要的参考框架. 从非技术意义上讲,世界坐标系建立的是整个场景的“最大”坐标系,其他的坐标系都是参考世界坐标系而建立的.世界坐标系也被广泛地称为全局坐标系或者宇宙坐标系。对于整个场景中的每个物体,它的位置和方向一般是指它在世界坐标系中的值,它是一个绝对坐标,不随观察者方向的变化而变化。 - 物体坐标系
物体坐标系是和特定的物体相关联的坐标系,也被称为模型坐标系或局部坐标系。对于场景中的每个物体都可以自己的物体坐标系,而且它和其他物体的物体坐标系是相互独立的.
参考:
- http://www.cnblogs.com/ojo-blogs/p/6754664.html
- https://blog.csdn.net/liu_yude/article/details/45194813
- https://blog.csdn.net/liu_yude/article/details/45195809?utm_source=blogxgwz1
2.4 三维空间中的旋转:旋转矩阵、欧拉角
参考:http://blog.miskcoo.com/2016/12/rotation-in-3d-space
2.5 Homogeneous Transformation (齐次坐标变换)
参考:http://www.doc88.com/p-3592172429143.html



3 透视投影原理
在计算机三维图像中,投影可以看作是一种将三维坐标变换为二维坐标的方法,常用到的有正交投影和透视投影。正交投影多用于三维建模,透视投影则由于和人的视觉系统相似,多用于在二维平面中对三维世界的呈现。
参考:
3.1 仿射变换和透视变换的区别




4 Spatial transformer networks详细介绍
参考:
- https://blog.csdn.net/u011961856/article/details/77920970
- https://blog.csdn.net/xholes/article/details/80457210
- https://blog.csdn.net/qq_14845119/article/details/79510714
- https://www.cnblogs.com/liaohuiqiang/p/9226335.html
- https://blog.csdn.net/weixin_39912556/article/details/79748671

Pointnet[7]: Pointnet: Deep learning on point sets for 3d classification and segmentation[J]. Proc. Computer Vision and Pattern Recognition (CVPR), IEEE, 2017, 1(2): 4.
4.1 背景介绍
4.1.1 CNN中存在的问题




4.1.2 双线性插值

4.2 图像/卷积特征图空间变换的直观解释



4.3 论文介绍


Matlab验证


4.4 空间变换网络的实际应用

4.4.1 空间变换网络作为网络的第一层



4.4.2 空间变换网络插入CNN 的中间层

本人能力有限,上述内容如有理解不当的地方,欢迎与我讨论!
空间变换网络(STN)原理+2D图像空间变换+齐次坐标系讲解的更多相关文章
- 论文笔记:空间变换网络(Spatial Transformer Networks)
2015, NIPS Max Jaderberg, Karen Simonyan, Andrew Zisserman, Koray Kavukcuoglu Google DeepMind 为什么提出( ...
- 纯干货:深度学习实现之空间变换网络-part2
https://www.jianshu.com/p/854d111670b6 纯干货:深度学习实现之空间变换网络-part1 在第一部分中,我们主要介绍了两个非常重要的概念:仿射变换和双线性插值,并了 ...
- pytorch空间变换网络
pytorch空间变换网络 本文将学习如何使用称为空间变换器网络的视觉注意机制来扩充网络.可以在DeepMind paper 阅读更多有关空间变换器网络的内容. 空间变换器网络是对任何空间变换的差异化 ...
- PyTorch 系列教程之空间变换器网络
在本教程中,您将学习如何使用称为空间变换器网络的视觉注意机制来扩充您的网络.你可以在DeepMind paper 阅读更多有关空间变换器网络的内容. 空间变换器网络是对任何空间变换的差异化关注的概括. ...
- dennis gabor 从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换(转载)
dennis gabor 题目:从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换 本文是边学习边总结和摘抄各参考文献内容而成的,是一篇综述性入门文档,重点在于梳理傅 ...
- OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...
- Atitit smb网络邻居原理与实现查询列表
Atitit smb网络邻居原理与实现查询列表 1.1. SAMBA的起源1 1.2. Smb是否依赖unpn SSDP ,还是使用扫描遍历0-255发现原理1 2. SMB共享不成功原因分享(WI ...
- 自学Zabbix9.1 Network Discovery 网络发现原理
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix9.1 Network Discovery 网络发现原理 1. 网络发现简介 网络 ...
- 指针生成网络(Pointer-Generator-Network)原理与实战
指针生成网络(Pointer-Generator-Network)原理与实战 阅读目录 0 前言 1 Baseline sequence-to-sequence 2 Pointer-Generat ...
随机推荐
- Ryu控制器安装部署和入门
Ryu官网简介,原滋原味 Ryu is a component-based software defined networking framework. Ryu provides software c ...
- puppeteer爬虫服务
爬虫文件 baidu.js const puppeteer = require("puppeteer"); const path = require('path'); const ...
- pwn学习日记Day19 《程序员的自我修养》读书笔记
windows PE/COFF章总结 本章学习了windows下的可执行文件和目标文件格式PE/COFF.PE/COFF文件与ELF文件非常相似,它们都是基于段的结构的二进制文件格式.Windows下 ...
- Ubuntu下制作deb包的方法详解
1 认识deb包 1.1 认识deb包 deb是Unix系统(其实主要是Linux)下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组. 由于 Unix ...
- WIN7+QT5.2.0 连接oracle11g问题及解决方法
用下面的代码建立连接之后,出现了几个问题 //连接数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QOCI"); /**连接Ora ...
- PHP多进程开发与Redis结合实践
原文:https://blog.51cto.com/laok8/2107892?source=drh 业务逻辑介绍: 用户在 APP 上发帖子,然后存储到 Redis 的 List 列表中 利用 Li ...
- django models 关系
1.一对多/多对一 class Entry(models.Model): name=models.CharField(max_length=50) def __str__(self): return ...
- $this->request->post 和input 区别
$this->request->post 和input 区别 Request是对象,而input是内置函数 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- cnpm与npm指定有什么区别?
CNPM跟NPM用法完全一致,只是在执行命令时将故宫改为CNPM. 因为故宫安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果故宫的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事来自 ...
- 深入浅出ConcurrentHashMap1.8+CAS+volatile
1.深入浅出CAS 前言 CAS(Compare and Swap),即比较并替换,实现并发算法时常用到的一种技术,Doug lea大神在java同步器中大量使用了CAS技术,鬼斧神工的实现了多线程执 ...