还记得在 “背景知识” 这一篇中,我们介绍了如何用微分方程和变分的方法来处理图像和视觉问题。一幅 N维 M通道的图片可以用一个函数来建模,即 f:Ωm ΩN 。 在早些年的图像处理问题里面,我们的图片都是黑白的,即二维单通道; 目前面向大众的图像处理和计算机视觉当中,我们的图片都是彩色的,即二维 RGB三通道。在 遥感探测,三维建模,医学成像等领域中采用的则是更为复杂的图像结构。 我们微分方程和变分法的好处在于,一个简单的模型几乎可以推广到所有的应用里面。

采用微分方程和变分法解决视觉问题,大致分为三步:(1)设计一个能量泛函;(2)把模型离散化;(3)采用某种数值算法求解。笔者认为,能量泛函的设计是最关键的一步,因为模型的升级直接给解的精确性带来指数级的增长;在好模型的基础上,先进的算法可以把解的精准度和运算的速度提到大概30%。

在背景知识这一篇中,我们举了 利用 Total Variation (TV)Regularisation 模型来给图片去噪声的例子,它的能量泛函为

E(u):=Ω(uf)2dx+αΩ|u|dx.

在这个能量泛函中,我们假设 观测误差 为 i.i.d 的高斯分布, 同时我们希望我们得到的图片是一个分段等值的函数。通过最小化 Ω|u|dx 这一项来进行正则化,被称作 total variation regularization. 在最优解中,它保留了图像的边,同时希望边中间的区域是等值的,因为它的梯度被最小化。

我们知道,任何一个平滑的函数可以由多段多项式函数来近似,多项式阶数越高,则近似的精度越精确。然而通过TV, 我们只能得到一个分段等值函数,这对于图片来说是远远不够的。因此笔者在此介绍两个高阶模型,它们都是对解函数的二阶导数进行正则化, 因此得到的解是一个分段仿射函数 (piece-wise affine function) 。

(1)Hessian TV regularisation

Lysaker,Marius,Arvid Lundervold,and Xue-Cheng Tai. “Noise removal using fourth-order partial differential equation with applications to medical magnetic resonance images in space and time.” Image Processing,IEEE Transactions on 12.12 (2003): 1579-1590.

能量泛函为

E(u):=Ω(uf)2dx+αΩ|2u|dx,

其中

2u=(uxxuyxuxyuyy)

(2) Total Generalized Variation Regularisation (TGV)

Bredies,Kristian,Karl Kunisch,and Thomas Pock. “Total generalized variation.” SIAM Journal on Imaging Sciences 3.3 (2010): 492-526.

能量泛函为

E(u,v):=Ω(uf)2dx+α1Ω|uv|dx+α2Ω|v|dx,

其中 v:Ω2

介绍完这么多理论,我们来进行一个简单的实验——给人像磨皮! X )

首先,我们有一张相片


下面一张是用 TV 处理后的结果:


下面一张是用 TGV 处理后的结果:


两幅图片的细节都被保存,但大家是不是隐约的感觉到第二幅图片比第一幅图片要光滑一些?? 这是因为 TGV 可以给一个 分段仿射的解,但TV只能给分段等值的。我们再对比一下脸部的效果,其中左边是TGV, 右边是TV。


我们看到用TGV得到的脸部线条更柔和光滑,皮肤更水嫩,人一下子就年轻了至少7岁。更重要的是,黑眼圈被完全除掉了!!

脸部磨皮:一个高阶正则化 ( higher-order regularisation ) 模型的应用的更多相关文章

  1. canvas简单连线动画的实现代码

    这篇文章主要介绍了canvas简单连线动画的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – 无论设备方向如何,物体落在地球上

    使用CoreMotion框架,我已经看到了两种方式来描述不同设备方向的落后对象行为.我已经在代码中尝试过这两个版本,它们似乎都像我期望的一样,即不论设备方向如何,都落在地球上.我只是好奇为什么两个版本的行为都一样,即使在第一个版本中,x和y方向的加速度,即dx和dy,是以横向切换的?1)2)解决方法我想你正在使用模拟器,所以重力总是与底部正交.在真实的设备上,行为应该有所不同,因为您将始终至少轻轻地倾斜设备.

  3. 运行Android Studio项目时出现DX错误

    我正在尝试使用其依赖项设置我的AndroidStudio项目.但是,当我尝试运行我的项目时,我收到以下错误消息:任何人都可以帮助我解决方法检查是否多次添加相同的jar文件.如果是,请从libs文件夹中删除其中任何一个并清理项目.

  4. 从命令行管理android项目

    我在不使用ant的情况下从命令行管理和运行我的Android应用程序,我按照以下步骤操作:>生成R.java>将src中的R.java和所有.java文件编译为.class文件>使用以下命令将类文件集合成dex文件dx–dex–verbose–output=./bin/classes.dex./bin.class文件位于bin目录中.但是我在这些步骤中遇到以下错误:因此,我无法创建Classes.

  5. 正则化DropPath/drop_path用法示例(Python实现)

    DropPath 类似于Dropout,不同的是 Drop将深度学习模型中的多分支结构随机"失效",而Dropout是对神经元随机"失效"这篇文章主要给大家介绍了关于正则化DropPath/drop_path用法的相关资料,需要的朋友可以参考下

  6. 快速实现一个简单的canvas迷宫游戏的示例

    本篇文章主要介绍了快速实现一个简单的canvas迷宫游戏的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. 机器学习 – 为什么需要在机器学习问题中使用正则化?

    为什么在这种情况下我们更喜欢较小的重量?

  8. 正则化方法:L1和L2 regularization、数据集扩增、dropout

    有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:trainingdata、validationdata,testingdata。因此,trainingdata的作用是计算梯度更新权重,validationdata如上所述,testingdata则给出一个accuracy以判断网络的好坏。避免过拟合的方法有很多:earlystopping、数据集扩增、正则化包括L1、L2,dropout。L1regularization在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的

  9. 机器学习中正则化项L1和L2的直观理解

    正则化机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作11-norm和22-norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数。L1正则化和L2正则化可以看做是损失函数的惩罚项。L1和L2正则化的直观理解这部分内容将解释为什么L1正则化可以产生稀疏模型,以及为什么L2正则化可以防止过拟合。而正则化前面的系数αα,可以控制LL图形的大小。

  10. 机器学习 – TensorFlow – L2丢失的正则化,如何应用于所有权重,而不仅仅是最后一个?

    我有一个任务,涉及到使用L2丢失的一个隐藏的ReLU层向网络引入泛化。我不知道如何正确引入它,以便所有权重都受到惩罚,不仅仅是输出层的权重。代码网络没有泛化是在底部的帖子。引入L2的明显方法是用这样的代替损失计算:但在这种情况下,它将考虑到输出层权重的值。是否需要或引入惩罚的输出层将以某种方式保持隐藏的权重也在检查?hidden_weights,hidden_biases,out_weights和out_biases都是您正在创建的模型参数。您可以按如下所示对所有这些参数添加L2正则化:

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部