最近把以前的几篇关于Low-rank的文章重新看了一遍,由于之前的一些积累,重新看一遍感觉收获颇多。写这篇博文的时候也参考了一些网上的博客,其中数这篇博文最为经典http://blog.csdn.net/abcjennifer/article/details/8572994。Rachel-zhang这个博客牛人,相信搞CV的都不陌生吧,研究生期间能有这么多积累确实难得,能把自己所学一点一滴的记录下来,这就更不容易了。科研无止境,希望以后我的博客也能像各位前辈一样,越写越好。如有人读了我的博客感觉受益匪浅,那就更是我莫大的荣幸了。好了闲话不说,还是来摆摆今天的几篇文章吧。

第一篇:RASL: Robust Alignment by Sparse and Low-rank Decomposition for Linearly Correlated Images ,这是我接触Low-rank的第一篇文章,文章利用Low-rank的算法进行图片的对齐(Alignment)同时还可以有效的去遮挡,从实验的效果来看,算法的对齐效果和去遮挡效果还是很好的。不过这种算法只能对批量的图片进行处理,不能对单张图片处理,这也局限了它的应用场景,下面我来简单的介绍下文章的实现过程。

首先矩阵里面秩的概念相信大家都很熟悉,假设给定我们同一个人的10张图片,如果这10张图片表情,光照,人脸的偏斜角度都是一模一样的,并且没有受到任何噪声的干扰没有任何的遮挡。那么把这10张图片拉成列构成一个矩阵,理想的角度来讲,这个矩阵的秩应该是1,我们可以认为这10张图片是完全对齐的的。如果这10张图片中只有少数图片不是对齐的,被遮挡了,位置偏移了或者受到了光照的影响,那么把这10张图片放在一起构成的矩阵,矩阵的秩肯定就不为1。如果这10张人脸的图片,相互的差异都非常大,那么把它们放在一起构成的矩阵,秩就可能是满纸的。从这个角度来说,我们可以认为low-rank是图片对齐的一种数学上的表示。由于实际情况中,对齐的图片不可能完全一样,所以不可能为1,但是我们可以放宽条件,当样本所组成的矩阵,秩比较小时,可以认为样本对齐的效果是比较好的。这就是文章的主要数学思想,貌似很简单是吧,不过要实现却不是那么容易,其中涉及到了大量的数学运算。

由于实际情况中,我们处理的样本都会引入噪声,样本本身也可能有一些遮挡,所以这里我们引入一个误差E。

其中是一个low-rank的矩阵,也就是说A可视化的样本是对齐好的,

, 矩阵E是误差,由于图片中噪声或者遮挡区域只占很少一部分,所以我们可以认为矩阵E是稀疏的。也就是说对于一类训练样本,我们拉成列组成矩阵D后,D可以分解为一个low-rank的矩阵A和误差矩阵E。这样我们可以认为A是对齐好了的矩阵,E是一个稀疏的误差矩阵。那么接下来的问题就是,怎么才能完成这样的一个分解,得到我们想要的对齐矩阵A呢?

首先我们把矩阵D到A+E看成是通过一种变换得到的,那么上式就可以写成这样:。其中是一种变换,通过这种变换,D可以转换为A+E,使得A的秩非常小,E非常稀疏。于是问题就转化为求解这样一个最小化问题:

矩阵D是已经给定的了,需要找到这样的一个变换,使得rank(A)足够小,误差矩阵E足够稀疏。试验中的初始值我们可以给定,通过不断的迭代来修正,从而求出A和E。但是问题就来了,这个式子是“非凸的”,我们找不到其求解办法。于是我们采用近似求解,也就是所谓的“凸松弛”。利用求nuclear norm代替求rank(A),利用求1-norm来代替求0-norm,并且引入parameter来均衡A的低秩性和E的稀疏性,至于参数的取值大小可以参考马毅的那篇文章:Robust Principal Component Analysis。于是问题就变成了下面这样:

这个式子的求解难点在于限制条件的非线性。但是如果每次的增加都非常的小,我们就可以认为限制条件是线性的,上式就可以写成这样:

其中是一个雅克比行列式,上式的得来其实就是泰勒级数展开的前两项。那么我们最终的优化式子就变成了这样:

剩下的工作就是如何来求解这样的一个公式,找出最好的A和E了。文中介绍了两种种算法,以及完整的数学证明(证明去看原文),这里我就直接粘贴下来:

Algorithm 1 是针对的,Algorithm 2是针对的。用这两种算法,我们就可以找到想要求解的A和E了。下面我们来看一下利用这样的低秩算法处理图片对齐的效果:

从图中可以看出对于x和y方向偏离0~0.4距离内,算法能很好的对齐,对偏移角度0~60°内,算法也能很好的对齐。

下面是对没有遮挡,关照角度变化较大情况的处理情况:

下面是对dummy head的处理效果,可以看出对去遮挡的效果还是很好的

下面是对自然图片的处理情况:

可以看出算法的实验效果是非常好的,其应用场景也是非常的广泛,可用于图像矫正与去噪,图像标签精华,文本分析,音乐词曲分离等场景。

第二篇:TILT: Transform Invariant Low-rank Texture,这篇文章的主要贡献是提出了一种从2D图像中提取3D结构的方法从而对图片进行矫正。其主要思想是:对于未加旋转的图像,由于图像的对称性与自相似性,我们可以将其看做是一个带噪声的低秩矩阵。当图像由端正发生旋转时,图像的对称性和规律性就会被破坏,也就是说各行像素间的线性相关性被破坏,因此矩阵的秩就会增加。低秩纹理映射算法(TILT)是一种用低秩性与噪声的稀疏性进行低秩纹理恢复的算法。它的思想是通过几何变换τ把D所代表的图像区域校正成正则的区域,如具有横平竖直、对称等特性,这些特性可以通过低秩性来进行刻画。

对于单张图片,比如说一张歪了的人脸,怎样才能矫正它让它左右对称,变得规整(也就是我要说的“正则”)呢。传统的方法是提取一种invariant feature(如SIFT),然后利用特征找出图中突出的地方(如人眼,鼻子,嘴角),然后利用这些points/regions来矫正图片,但是这种方法很不鲁棒,对光照,遮挡比较敏感。并且,严格来说,并不曾存在invariant feature under projective transformations or homographies。于是本文提出了一种,不经过任何仿射变换或者投影变换从2D图片中提取一种3D结构的方法,对图片进行“正则化”。上一篇文章提出的RASL算法能很好的对图片进行矫正对齐,去遮挡,去光照。但是这种算法的局限在于只能对批量的同类图片进行处理,对于单独的一张非“正则”的图片,RASL算法是无法处理的。那么有没有算法能解决这个问题,对单张“非正则”的图片进行对齐矫正呢?本文的出现就是要解决这样的一个问题,首先文章提出来一种“Low-rank Textures”的概念。

在这种“Low-rank Textures”的概念下,如果一张图片是“正则”的,那么这张图片的矩阵就具备“Low-rank Textures”性质,否则就不具备“Low-rank Textures”的性质。确定了这点,我们只需利用凸优化算法,是给定的图片具备Low-rank Textures,我们便完成了对这正图片的矫正了。那么这种概率是什么样的呢,这里我还没看懂,直接贴出原文:

在这种“Low-rank Textures”概念下,vertical和horizontal和slope可以看成秩1texture,corner可以看成秩2的texture,如下图所示:

a图是input image,处理前rank = 11, 处理后rank = 1. b和f一样,处理后变成了一个Corner,rank = 2。那么给定一张“非正则”的图片,怎么才能recovery the Low-rank Texture呢? 给定一张图片,我们可以把它看成是它的“Low-rank Textures”图片经过变换得到的。在文中,我们可以认为变换是仿射变换或者单应性变换。也就是说我们所看到的非“非正则”图片,可以看成是“正则”图经过这两种变化得到的,所以非低秩。由于噪声和遮挡的影响,我们引入误差矩阵E,于是

   求解这样的“Low-rank Textures”矩阵就变成了解下面这个式子:

剩下的就和文章一如出一辙了,在此我就不多讲了,本文和上文最大的不同就是提出来一种“Low-rank Textures”概念,对单张图片进行低秩处理,进行矫正。算法直接贴下:

下面展示实验的效果:

从图中可以看出,此算法能很好的矫正单张图片,文章也提供的代码。本人跑过代码,效果还是可以的,但有时候矫正效果也不如传统的方法,如人脸对齐中的仿射变换。

     第三篇:Robust Principal Component Analysis? 这篇文章仅在此提一下,文章中设计大量的数学公式实在看不下去,大家可以去看这个微博:http://blog.csdn.net/abcjennifer/article/details/8572994

cv论文(Low-rank相关)的更多相关文章

  1. cv 论文(CNN相关)

    最近发现很多以前看的论文都忘了,所以想写点东西来整理下之前的paper,paper主要是cv(computer vision)方向的. 第一篇:Gradient-based learning appl ...

  2. Generalized Low Rank Approximation of Matrices

    Generalized Low Rank Approximations of Matrices JIEPING YE*jieping@cs.umn.edu Department of Computer ...

  3. cv论文(SPARSE REPRESENTATION相关)

    上个博文我讲了一些CNN相关的论文,比较浅显都是入门知识,这节课来总结一些稀疏表示方面的文章.至于上个博文说到的要讲的sparse coding的知识,我将会放在Deep Learning的专题里面讲 ...

  4. 【CV论文阅读】Rank Pooling for Action Recognition

    这是期刊论文的版本,不是会议论文的版本.看了论文之后,只能说,太TM聪明了.膜拜~~ 视频的表示方法有很多,一般是把它看作帧的序列.论文提出一种新的方法去表示视频,用ranking function的 ...

  5. Learning to rank相关的pointwise,pairwise,listwise

    论文分享--- >Learning to Rank: From Pairwise Approach to Listwise Approach 学习排序 Learning to Rank 小结 [ ...

  6. 【CV论文阅读】Image Captioning 总结

    初次接触Captioning的问题,第一印象就是Andrej Karpathy好聪明.主要从他的两篇文章开始入门,<Deep Fragment Embeddings for Bidirectio ...

  7. 【CV论文阅读】Dynamic image networks for action recognition

    论文的重点在于后面approximation部分. 在<Rank Pooling>的论文中提到,可以通过训练RankSVM获得参数向量d,来作为视频帧序列的representation.而 ...

  8. 【CV论文阅读】Going deeper with convolutions(GoogLeNet)

    目的: 提升深度神经网络的性能. 一般方法带来的问题: 增加网络的深度与宽度. 带来两个问题: (1)参数增加,数据不足的情况容易导致过拟合 (2)计算资源要求高,而且在训练过程中会使得很多参数趋向于 ...

  9. 【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    由RCNN到FAST RCNN一个很重要的进步是实现了多任务的训练,但是仍然使用Selective Search算法来获得ROI,而FASTER RCNN就是把获得ROI的步骤使用一个深度网络RPN来 ...

随机推荐

  1. ZooKeeper Java例子(六)

    A Simple Watch Client 为了向你介绍ZooKeeper Java API,我们开发了一个非常简单的监视器客户端.ZooKeeper客户端监视一个ZooKeeper节点的改变并且通过 ...

  2. python内置函数lambda、filter、map、reduce

    lambda匿名函数 1.lambda只是一个表达式,函数体比def简单多. 2.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去 3.lambda函数 ...

  3. 【51NOD】独木舟

    [算法]贪心 [题解]比较经典,用l,r两个定位指针分别从左右向中间推进. #include<cstdio> #include<algorithm> #include<c ...

  4. 【洛谷 P3187】 [HNOI2007]最小矩形覆盖 (二维凸包,旋转卡壳)

    题目链接 嗯,毒瘤题. 首先有一个结论,就是最小矩形一定有条边和凸包重合.脑补一下就好了. 然后枚举凸包的边,用旋转卡壳维护上顶点.左端点.右端点就好了. 上顶点用叉积,叉积越大三角形面积越大,对应的 ...

  5. Spring Boot:定制自己的starter

    在学习Spring Boot的过程中,接触最多的就是starter.可以认为starter是一种服务——使得使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boo ...

  6. Linux简介——(一)

    1. 常见操作系统 - 服务端操作系统 : linux.unix.windows server - 单机操作系统 : windows(dos .ucdos.win95.win98.win2000.xp ...

  7. Android开发中的各种尺度单位

    px 像素(pixel),表示屏幕上一个物理像素点 不建议直接使用 px 绘制UI,因为受像素密度的影响,以 px 为单位绘制的UI在不同手机上显示的实际大小会不同 dp   (用于定义控件大小) 密 ...

  8. 寻找kernel32.dll的地址

    为了寻找kernel32.dll的地址,可以直接输出,也可以通过TEB,PEB等查找. 寻找TEB: dt _TEB nt!_TEB +0x000 NtTib : _NT_TIB +0x01c Env ...

  9. 一个文档让vim飞起来

    原文地址:http://www.cnblogs.com/songfy/p/5635757.html 引言 今天我们特地来讲讲这个vim的配置. vim这东西, 很多人装逼的时候经常会提到, 不过大部分 ...

  10. Yii 1.1.17 三、数据库连接、定义模型、数据查询、验证登录、SESSION使用与URL生成

    一.数据库连接 1.配置连接参数 在database.php里面开启: 'db' => array( 'connectionString' => 'mysql:host=127.0.0.1 ...