目录
Chapter 4 Model fitting and optimization
Chapter 1 Introduction
1.1什么是计算机视觉? 3
1.2简史 10
1.3书籍概述 22
1.4样本教学大纲 30
1.5符号说明 31
1.6其他阅读材料 31
图1.2计算机视觉算法及其应用的一些示例。(a)面部检测算法,结合基于颜色的衣物和头发检测算法,可以定位并识别这幅图像中的个体(Sivic、Zitnick和Szeliski 2006)©2006斯普林格。(b)对象实例分割可以在复杂场景中区分每个人和物体(He、Gkioxari (et al.2017)©2017 IEEE. (c)运动结构算法可以从数百张部分重叠的照片中重建一个大型复杂场景的稀疏3D点模型(Snavely,Seitz和Szeliski2006)©2006 ACM. (d)立体
匹配算法可以从互联网上拍摄的数百张不同曝光度的照片中构建建筑物立面的详细3D模型(Goesele,Snavely et al.2007)©2007 IEEE。
1.1 什么是计算机视觉?
作为人类,我们似乎毫不费力地感知周围世界的三维结构。想象一下,当你看到桌旁摆放的一束花时,那种三维感知是多么生动。你可以通过花瓣表面微妙的光影变化,轻松分辨出每片花瓣的形状和透明度,并且毫不费力地将每朵花与场景背景区分开来(图1.1)。看着一幅装裱好的集体肖像画,你可以轻松数出并说出照片中所有人的名字,甚至能从他们的面部表情猜测他们的情绪(图1.2a)。知觉心理学家花费了数十年的时间试图理解视觉系统的工作原理,尽管他们可以通过设计光学错觉来揭示其部分原则(图1.3),但这一谜题的完整解答仍然遥不可及(Marr 1982;Wandell 1995;Palmer 1999;Livingstone 2008;Frisby和Stone 2010)。
计算机视觉领域的研究人员一直在并行开发数学技术,以恢复图像中物体的三维形状和外观。近二十年来,这一领域的进展非常迅速。现在,我们已经拥有了可靠的手段,能够从数千张部分重叠的照片中精确计算出一个环境的三维模型(图1.2c)。只要有一组足够多的特定对象或立面的视图,我们就可以使用立体匹配创建出精确且密集的三维表面模型(图1.2d)。我们甚至可以较为成功地勾勒出照片中大多数人物和物体的轮廓(图1.2a)。然而,尽管取得了这些进展,让计算机像两岁小孩一样详细、因果地解释图像的梦想仍然遥不可及。
为什么视觉如此困难?部分原因在于它是一个逆问题,在这个问题中,我们试图在信息不足的情况下恢复某些未知数。因此,我们必须借助基于物理的模型、概率模型或从大量示例中进行机器学习,以区分潜在的解决方案。然而,建模视觉世界及其丰富的复杂性远比建模产生语音的声道要困难得多。
我们在计算机视觉中使用的前向模型通常是在物理学(如测距学、光学和传感器设计)以及计算机图形学领域开发的。这两个领域都模拟了物体如何移动和动画化,光线如何从其表面反射,如何被大气散射,如何通过相机镜头(或人眼)折射,最终投射到平面(或曲面)图像平面上。尽管计算机图形学尚未完美,但在许多领域,例如渲染由日常物体组成的静止场景或动画化已灭绝的生物等。
图1.3一些常见的视错觉及其可能揭示的视觉系统特性:(a)经典的穆勒-莱尔视错觉,两条水平线的长度看起来不同,这可能是由于想象中的透视效果所致。(b)阴影中的“白色”方块B和亮处的“黑色”方块A实际上具有相同的绝对亮度值。这种感知是由于亮度恒常性,即视觉系统在解释颜色时试图忽略光照的影响。图片由Ted Adelson提供,http://persci.mit.edu/画廊/检查阴影。(c)赫尔曼网格视错觉的一个变体,由Hany Farid提供。当你用眼睛扫过图形时,在交点处会出现灰色斑点。(d)数一数图形左侧的红色X。现在数一数右侧的红色X。是否明显更难?解释与突显效应有关(Treisman 1985),这告诉我们大脑中并行感知和整合路径的操作方式。
就像恐龙一样,现实的幻觉本质上是存在的。
在计算机视觉中,我们试图做的是反向操作,即描述我们在一张或多张图像中看到的世界,并重建其属性,如形状、光照和颜色分布。令人惊讶的是,人类和动物能够如此轻松地完成这一任务,而计算机视觉算法却容易出错。没有在这个领域工作过的人往往低估了问题的难度。这种认为视觉应该简单的误解可以追溯到人工智能早期(见第1.2节),当时人们最初认为认知部分(逻辑证明和规划)比感知部分更难(Boden2006)。
好消息是,计算机视觉今天被广泛应用于各种现实世界的应用中,包括:
光学字符识别(OCR):读取信件上的手写邮政编码(图1.4a)和自动车牌识别(ANPR);
机器检查:使用立体视觉和专用照明快速检查零件,以确保质量,测量飞机机翼或汽车车身零件的公差(图1.4b),或使用X射线视觉寻找钢铸件中的缺陷;
零售:自动结账通道和全自动商店的对象识别(Wingfield2019);
仓库物流:自主包装递送和托盘搬运“驱动”(Guizzo 2008;O’Brian2019)以及机器人操作器的零件拣选(图1.4c;Acker- man2020);
医学成像:登记术前和术中影像(图1.4d)或对人们随着年龄增长的脑形态进行长期研究;
自动驾驶汽车:能够在城市之间进行点对点驾驶(图1.4e;Montemerlo,Becker等人,2008年;Urmson,Anhalt等人,2008年;Janai,G等人
,2020年)以及自主飞行(Kaufmann,Gehrig等人,2019年);
3D模型构建(摄影测量):从航拍和无人机照片中全自动构建3D模型(图1.4f);
•匹配移动:通过跟踪源视频中的特征点来估计环境的三维摄像机运动和形状,将计算机生成的图像(CGI)与实拍镜头融合。这种技术在好莱坞广泛使用,例如在《侏罗纪公园》等电影中(Roble1999;Roble和Zafar2009);它们还需要使用
机器识别(OCR),http://yann.lecun.com/exdb/lenet;(b)机械检查,
http://www.cognitens.com;(c)仓库拣货,https://covariant.ai;(d)医疗
成像,http://www.clarontech.com;(e)自动驾驶汽车,(Montemerlo,Becker .etal
2008)©2008 Wiley;(f)基于无人机的摄影测量,https://www.pix4d.com/blog/
无人机拍摄的马奇隆城堡。
精确的遮罩,用于在前景和背景元素之间插入新元素(Chuang,Agarwala等人,2002)。
动作捕捉(mocap):使用从多个摄像机或其他基于视觉的技术观察的逆反射标记来捕捉演员进行计算机动画;
监控:监视入侵者,分析高速公路交通和监测溺水受害者(例如,https://swimeye.com);
指纹识别和生物识别:用于自动访问认证以及法医应用。
David Lowe的工业视觉应用网站(http://www.cs.ubc.ca/spider/lowe/ vision.html)列出了许多其他有趣的计算机视觉工业应用。虽然上述应用都非常重要,但它们大多涉及相当专业的图像和狭窄的领域。
除了所有这些工业应用之外,还存在无数的消费者级应用,例如你可以用你自己的个人照片和视频做的事情。这些包括:
拼接:将重叠的照片转换成一个无缝拼接的全景图(图1.5a),如第8.2节所述;
曝光包围:将多个在具有挑战性的光照条件下(强阳光和阴影)拍摄的曝光合并成一个完美曝光的图像(图1.5b),如第10.2节所述;
Morphing:将你朋友的照片变成另一张,使用无缝的morph转换(图1.5c);
3D建模:将一个或多个快照转换为您正在拍摄的对象或人物的3D模型(图1.5d),如第13.6节所述;
视频匹配移动和稳定:通过自动跟踪附近的参考点(见第11.4.4节)或使用运动估计来消除视频中的抖动,将2D图片或3D模型插入到视频中(见第9.2.1节);
照片式漫游:通过在不同照片之间进行3D飞行,浏览大量照片,如您家的内部(参见第14.1.2节和第14.5.5节);
?面部检测:用于改进摄像头对焦以及更相关的图像搜索(参见第6.3.1节);
视觉认证:当家庭成员坐在摄像头前时,自动将他们登录到您的家庭电脑上(参见第6.2.4节)。
这些应用程序最棒的一点是,大多数学生已经熟悉它们;至少,这些技术可以让学生立即欣赏并使用自己的个人媒体。由于计算机视觉是一个具有挑战性的主题,涉及广泛的数学知识和问题的内在难度,因此拥有有趣且相关的问题来研究可以极大地激发学生的动力和灵感。
这本书之所以如此重视应用,另一个主要原因是这些应用可以用来构建和限制视觉中普遍存在的潜在开放性问题。因此,最好是从当前的问题出发,思考合适的技术,而不是随便采用你可能听说过的第一个技术。这种从问题反向推导解决方案的方法是工程学研究视觉的典型做法,也反映了我在该领域的背景。
首先,我制定详细的问题定义,并确定问题的约束条件和规格。然后,尝试找出已知有效的技术,实施其中一些,评估其性能,最后做出选择。为了使这一过程顺利进行,拥有现实的测试数据至关重要,包括可用于验证正确性和分析噪声敏感性的合成数据,以及系统最终使用时典型的现实世界数据。如果采用机器学习,则更需有足够数量的代表性无偏训练数据,以在真实输入上获得良好的结果。
然而,这本书不仅仅是一本工程教材(提供配方来源)。它还以科学的方法探讨了基本的视觉问题。在这里,我试图提出对当前系统物理的最佳模型:场景是如何形成的,光线如何与场景和大气效应相互作用,以及传感器的工作原理,包括噪声和不确定性的来源。然后,任务是尝试逆向获取过程,以得出对场景的最佳描述。
这本书经常采用统计方法来构建和解决计算机视觉问题。在适当的情况下,使用概率分布来建模场景和噪声图像获取过程。将先验分布与未知量关联起来通常称为贝叶斯建模(附录B)。可以将风险或损失函数与之关联。
图1.5计算机视觉的一些消费者应用:(a)图像拼接:合并不同视角(Szeliski和Shum 1997)©1997 ACM;(b)曝光包围:合并不同曝光度;(c)变形:两张照片之间的融合(Gomes,Darsa等1999)©1999 Morgan Kaufmann;(d)智能手机增强现实显示实时深度遮挡效果(Valentin,Kowdle等2018)©2018 ACM。
低估答案(第B.2节)并设置你的推理算法以最小化预期风险。(考虑一个机器人试图估计到障碍物的距离:通常低估比高估更安全。)使用统计技术,通常有助于收集大量训练数据来学习概率模型。最后,统计方法使你能够使用经过验证的推理技术来估计最佳答案(或答案分布),并量化结果估计中的不确定性。
由于计算机视觉很大程度上涉及逆问题的求解或未知量的估计,我的书也特别强调算法,特别是那些在实践中证明有效的算法。对于许多视觉问题,很容易提出一个数学描述,但这个描述要么不符合现实世界的实际情况,要么不利于未知量的稳定估计。我们需要的是既对噪声和模型偏差具有鲁棒性,又在运行时间和空间资源方面合理高效的算法。在这本书中,我详细探讨了这些问题,利用贝叶斯技术确保鲁棒性,并使用高效的搜索、最小化和线性系统求解算法来保证效率。书中描述的大多数算法都是高层次的,主要是列出一系列步骤,需要学生自行补充或参考更详细的描述。事实上,许多算法在练习部分都有简要概述。
既然我已经阐述了本书的目标以及我所使用的框架,接下来的章节将讨论另外两个主题。第1.2节是对计算机视觉历史的简要概述。对于那些只想快速了解书中新内容实质、而不关心谁在何时发明了什么的人来说,这一部分可以跳过。
第二部分是对本书内容的概述,即第1.3节,对于打算深入研究这一主题(或中途加入的人)来说非常有用(因为它描述了各章节之间的相互依赖关系)。这个大纲对于希望围绕这一主题构建一门或多门课程的教师也非常有帮助,因为它提供了基于本书内容的示例课程大纲。
1.2 简史
在本节中,我简要概述了过去五十年计算机视觉的主要发展(图1.6),重点介绍我个人认为有趣且经得起时间考验的进展。对各种思想起源和该领域演变不感兴趣的读者可以跳过这一部分,直接阅读第1.3节的书籍概览。
20世纪70年代。当计算机视觉在70年代初开始兴起时,它被视为一个雄心勃勃的议程中的视觉感知部分,旨在模仿人类智能并赋予机器人智能行为。当时,一些早期的人工智能和机器人学先驱(如麻省理工学院、斯坦福大学和卡内基梅隆大学)认为,解决“视觉输入”问题将是通往解决更复杂问题(如高级推理和规划)道路上的一个简单步骤。根据一个广为人知的故事,1966年,麻省理工学院的马文·明斯基要求他的本科生杰拉尔德·杰伊·苏斯曼“花一个夏天的时间将相机连接到计算机上,让计算机描述它所看到的内容”(Boden2006,第781页)。我们现在知道,这个问题比这稍微复杂一些。
计算机视觉与已有的数字图像处理领域(Rosenfeld和Pfaltz 1966;Rosenfeld和Kak 1976)的区别在于,它希望从图像中恢复世界的三维结构,并以此作为通向全面场景理解的垫脚石。Winston(1975)和Hanson及Riseman(1978)提供了这一早期阶段的两本经典论文集。
早期的场景理解尝试包括提取边缘,然后推断
图1.7一些早期(1970年代)的计算机视觉算法示例:(a)线性标注(Nalwa1993)©1993 Addison-Wesley,(b)图像结构(Fischler和Elschlager1973)©1973 IEEE,(c)关节模型(Marr1982)©1982 David Marr,(d)内在图像(Barrow和Tenenbaum1981)©1973 IEEE,(e)立体对应(Marr1982)©1982 David Marr,(f)光流(Nagel和Enkelmann1986)©1986 IEEE。
物体或“块世界”的三维结构基于二维线条的拓扑结构(Roberts 1965)。当时开发了几种线条标记算法(图1.7a)(Huffman 1971;Clowes 1971;Waltz 1975;Rosenfeld,Hummel和Zucker 1976;Kanade 1980)。Nalwa(1993)对此领域进行了很好的综述。边缘检测也是研究的热点之一;关于同期工作的综述可以在(Davis 1975)中找到。
非多面体物体的三维建模也在研究之中(Baum- gart1974;Baker1977)。一种流行的方法是使用广义圆柱体,即旋转体和扫掠闭合曲线(Agin和Binford1976;Nevatia和Binford1977),通常将其排列成部件关系(Hinton1977;Marr1982)(图1.7c)。Fischler和Elschlager(1973)称这种部件的弹性排列为图画结构(图1.7b)。
巴罗和特南鲍姆(1981)在其关于内在图像的论文中(图1.7d),以及马尔(1982)相关的21/2维素描概念,倡导了一种定性方法来理解强度和阴影变化,并通过图像形成现象的影响来解释这些现象,如表面方向和阴影。这种方法已经得到了应用。
周期性复兴,例如Tappen、Freeman和Adelson(2005)和Barron和Malik(2012)的工作。
当时还开发了更多定量的计算机视觉方法,包括许多基于特征的立体对应算法中的第一个(图1.7e)(Dev 1974;Marr和Poggio 1976,1979;Barnard和Fischler 1982;Ohta和Kanade 1985;Grimson 1985;Pollard、Mayhew和Frisby 1985),以及基于强度的光流算法(图1.7f)(Horn和Schunck 1981;Huang 1981;Lucas和Kanade 1981;Nagel 1986)。同时恢复三维结构和相机运动的早期工作(见第11章)也大约在同一时期开始(Ullman 1979;Longuet-Higgins 1981)。
当时关于视觉如何工作的许多哲学观点都在大卫·马尔(1982)的书中得到了总结。特别是,马尔提出了一个(视觉)信息处理系统的三个描述层次的概念。根据我自己的解释,这三个层次大致可以概括为:
计算理论:计算(任务)的目标是什么?已知或可以对问题施加的约束条件是什么?
表示和算法:如何表示输入、输出和中间信息,以及使用哪些算法来计算所需结果?
硬件实现:表示和算法如何映射到实际硬件上,例如生物视觉系统或专用硅片?反之,如何利用硬件限制来指导表示和算法的选择?随着图形处理器(GPU)和多核架构在计算机视觉中的广泛应用,这个问题再次变得非常重要。
正如我在前面的介绍中提到的,我坚信必须将对问题规范和已知图像形成及先验约束(科学和统计方法)的仔细分析与高效且稳健的算法(工程方法)相结合,才能设计出成功的视觉算法。因此,马尔的哲学似乎仍然是指导我们今天领域内问题框架和解决方法的良好指南,就像25年前一样。
20世纪80年代。在20世纪80年代,人们把更多的注意力集中在更复杂的数学技术上,以进行定量的图像和场景分析。
图像金字塔(见第3.5节)开始被广泛用于执行诸如图像混合(图1.8a)和粗到细对应搜索(Rosenfeld1980;Burt
图1.8 20世纪80年代计算机视觉算法示例:(a)金字塔融合(Burt和Adelson 1983b)©1983年ACM,(b)从阴影中提取形状(Freeman和Adelson 1991)©1991年IEEE,(c)边缘检测(Freeman和Adelson 1991)©1991年IEEE,(d)基于物理的模型(Terzopoulos和Witkin 1988)©1988年IEEE,(e)基于正则化的表面重建(Terzopoulos 1988)©1988年IEEE,(f)距离数据获取与合并(Banno、Masuda等2008)©2008年Springer。
以及阿德森1983b;罗森菲尔德1984;昆1984;阿南丹1989)。还开发了使用尺度空间处理概念的金字塔连续版本(维特金1983;维特金、特佐普洛斯和卡斯1986;林德伯格1990)。20世纪80年代末,小波(见第3.5.4节)开始在某些应用中取代或补充常规图像金字塔(马莱特1989;西蒙切利和阿德森1990a;西蒙切利、弗里曼等人1992)。
立体视觉作为定量形状线索的应用通过多种形状从X的技术得到了扩展,包括从阴影中提取形状(图1.8b)(参见第13.1.1节和Horn 1975;Pentland 1984;Blake、Zisserman和Knowles 1985;Horn和Brooks 1986,1989),光度立体(参见第13.1.1节和Woodham 1981),纹理从形状(参见第13.1.2节和Witkin 1981;Pentland 1984;Malik和Rosenholtz 1997),以及焦点从形状(参见第13.1.3节和Nayar、Watanabe和Noguchi 1995)。Horn(1986)对这些技术中的大多数进行了很好的讨论。
在此期间,对更好的边缘和轮廓检测(图1.8c)(见第7.2节)的研究也很活跃(Canny1986;Nalwa和Binford1986),包括引入动态演变的轮廓跟踪器(第7.3.1节),如蛇(Kass,Witkin,
以及三维物理模型(图1.8d)(Terzopoulos,Witkin和Kass1987;Kass,Witkin和Terzopoulos 1988;Terzopoulos和Fleischer1988)。
研究人员注意到,许多立体、流体、形状从X检测和边缘检测算法可以统一起来,或者至少可以用相同的数学框架描述。如果这些算法被表述为变分优化问题,并通过正则化使其更加稳健(图1.8e)(参见第4.2节和Terzopoulos 1983;Poggio、Torre和Koch1985;Terzopoulos1986b;Blake及Zisserman 1987;Bertero、Poggio和Torre 1988;Terzopoulos 1988)。大约同一时期,Geman和Geman(1984)指出,这些问题同样可以用离散马尔可夫随机场(MRF)模型来表述(参见第4.3节),这使得使用更好的(全局)搜索和优化算法成为可能,例如模拟退火法。
在线版本的MRF算法稍后引入,这些算法使用卡尔曼滤波器建模和更新不确定性(Dickmanns和Graefe 1988;Matthies、Kanade和Szeliski 1989;Szeliski 1989)。还尝试将正则化和MRF算法映射到并行硬件上(Poggio和Koch 1985;Poggio、little等1988;Fischler、Firschein等1989)。Fischler和Firschein的书(1987)收录了一系列文章,涵盖了所有这些主题(立体、流、正则化、MRFs,甚至高级视觉)。
三维范围数据处理(获取、合并、建模和识别;见图1.8f)在本十年中继续被积极探索(Agin和Binford 1976;Besl和Jain 1985;Faugeras和Hebert 1987;Curless和Levoy 1996)。Kanade(1987)的汇编包含了许多该领域的有趣论文。
20世纪90年代,虽然许多前面提到的主题继续被探索,但其中一些主题变得明显活跃起来。
使用射影不变量进行识别的活动(Mundy和Zisserman 1992)迅速发展成为解决运动结构问题的共同努力(见第11章)。初期的许多活动都集中在射影重建上,这不需要相机校准的知识(Faugeras 1992;Hartley、Gupta和Chang 1992;Hartley 1994a;Faugeras和Luong 2001;Hartley和Zisserman 2004)。同时,因子分解技术(第11.4.1节)被开发出来,以高效解决适用于正交相机近似的难题(图1.9a)(Tomasi和Kanade 1992;Poelman和Kanade 1997;Anandan和Irani 2002),随后扩展到透视情况(Christy和Horaud 1996;Triggs 1996)。最终,该领域开始采用全局优化方法(见第11.4.2节和Taylor、Kriegman和Anandan 1991;
图1.9 20世纪90年代计算机视觉算法示例:(a)因子分解-
基于运动的结构(Tomasi和Kanade1992)©1992 Springer,(b) dense stereo
匹配(Boykov,Veksler和Zabih2001),(c)多视图重建(Seitz和Dyer
1999)©1999 Springer,(d) face跟踪(Matthews,Xiao和Baker2007),(e)图像分割
译文(Belongie,Fowlkes (et al.2002)©2002 Springer,(f)人脸识别(Turk和
彭特兰1991)。
Szeliski和Kang1994;Azarbayejani和Pentland1995),后来被公认为
与传统摄影测量中使用的束调整技术相同(Triggs、McLauchlan等人,1999)。使用此类技术构建了全自动三维建模系统(Beardsley、Torr和Zisserman,1996;Schaffalitzky和Zisserman,2002;Snavely、Seitz和Szeliski,2006;Agarwal、Furukawa等人,2011;Frahm、Fite-Georgel等人,2010)。
20世纪80年代开始,人们利用颜色和强度的详细测量数据,结合辐射传输和彩色图像形成的真实物理模型,开创了一个新的子领域,称为基于物理的视觉。关于这一领域的综述,可以在三卷本的专题集中找到(Wolff,Shafer,和Healey 1992a;Healey和Shafer 1992;Shafer,Healey,和Wolff 1992)。
光学流方法(见第9章)继续得到改进(Nagel和Enkelmann 1986;Bolles、Baker和Marimont 1987;Horn和Weldon Jr.1988;Anandan1989;Bergen,
Anandan等人1992年;Black和Anandan1996年;Bruhn、Weickert和Schnorr2005年;Papen-
Berger、Bruhn等人2006),与(Nagel1986;Barron、Fleet和Beauchemin1994;Baker,
Scharstein等人(2011)的调查结果很好。同样,关于密集型的调查也取得了很大进展。
立体对应算法(见第12章,Okutomi和Kanade(1993,1994);Boykov,
Veksler和Zabih(1998);Birchfield和Tomasi(1999);Boykov、Veksler和Zabih(2001),
以及Scharstein和Szeliski(2002)中的调查和比较),最大的突破是
通过使用图切割技术进行可能的全局优化(图1.9b) (Boykov,
Veksler和Zabih2001)。
多视图立体算法(图1.9c)产生完整的三维表面(见第
(表12.7)也是研究的活跃主题(Seitz和Dyer1999;Kutulakos和Seitz
2000年)至今仍活跃(Seitz,Curless等人,2006年;Schops,Scho... etnberger
Al.2017;Knapitsch、Park等人2017)。生成三维体积描述的技术
从二元轮廓(见第12.7.3节)继续发展(Potmesil1987;Sri-
vasan、Liang和Hackwood1990;Szeliski1993;Laurentini1994),以及技术
基于跟踪和重建平滑遮挡轮廓(见第12.2.1节和
Cipolla和Blake1992;Vaillant和Faugeras1992;Zheng1994;Boyer和Berger1997;
Szeliski和Weiss1998;Cipolla和Giblin2000)。
跟踪算法也有了很大的改进,包括使用活动轮廓(见第7.3节)的轮廓跟踪,如蛇形(Kass,Witkin和Terzopoulos 1988)、粒子滤波器(Blake和Isard 1998)和水平集(Malladi,Sethian和Vemuri 1995),以及基于强度(直接)的技术(Lucas和Kanade 1981;Shi和Tomasi 1994;Rehg和Kanade 1994),这些技术常用于面部跟踪(图1.9d)(Lanitis,Taylor和Cootes 1997;Matthews和Baker 2004;Matthews,Xiao和Baker 2007)和全身跟踪(Sidenbladh,Black和Fleet 2000;Hilton,Fua和Ronfard 2006;Moeslund,Hilton和Kru...ger 2006)。
图像分割(见第7.5节)(图1.9e),这一主题自计算机视觉早期就已活跃(Brice和Fennema1970;Horowitz和Pavlidis1976;Riseman和Arbib1977;Rosenfeld和Davis1979;Haralick和Shapiro1985;Pavlidis和Liow1990),也是研究的热点,产生了基于最小能量(Mumford和Shah1989)和最小描述长度(Leclerc1989)、归一化切割(Shi和Malik2000)以及均值漂移(Comaniciu和Meer2002)的技术。
统计学习技术开始出现,首先是在将主成分特征脸分析应用于人脸识别(图1.9f)(参见第5.2.3节和Turk和Pentland1991)和线性动态系统应用于曲线跟踪(参见第7.3.1节和Blake和Isard1998)。
也许本十年计算机视觉领域最显著的发展是与计算机图形学的互动增加(Seitz和Szeliski,1999),特别是在
图1.10 2000年代计算机视觉算法示例:(a)基于图像的渲染(Gortler,Grzeszczuk等,1996),(b)基于图像的建模(Debevec,Taylor和Malik,1996)©1996 ACM,(c)交互式色调映射(Lischinski,Farbman等,2006)(d)纹理合成(Efros和Freeman,2001),(e)基于特征的识别(Fergus,Perona和Zisserman,2007),(f)基于区域的识别(Mori,Ren等,2004)©2004 IEEE.
跨学科领域的图像建模与渲染(见第14章)。直接操作现实世界图像以创建新动画的想法最初通过图像变形技术(Figure1.5c)(见第3.6.3节和Beier和Neely1992)崭露头角,后来应用于视图插值(Chen和Williams1993;Seitz和Dyer1996)、全景图像拼接(Figure1.5a)(见第8.2节和Mann和Picard1994;Chen 1995;Szeliski1996;Szeliski和Shum1997;Szeliski2006a)以及全光场渲染(图1.10a)(见第14.3节和Gortler、Grzeszczuk等人1996;Levoy和Hanrahan 1996;Shade、Gortler等人1998)。同时,基于图像的建模技术(图1.10b)用于从图像集合中自动生成逼真的3D模型也在被引入(Beardsley、Torr和Zisserman1996;Debevec、Taylor和Malik1996;Taylor、Debevec和Malik1996)。
2000年代。这个十年继续加深了视觉和图形领域之间的相互作用,但更重要的是,它将数据驱动和学习方法作为核心组成部分。
视觉领域的许多主题,如基于图像的渲染(见第8.2节)、光场捕捉与渲染(见第14.3节)以及通过曝光包围(Figure1.5b)实现的高动态范围(HDR)图像捕捉(见第10.2节和Mann及Picard1995;Debevec及Malik1997),被重新命名为计算摄影(见第10章),以承认这些技术在日常数码摄影中的广泛应用。例如,快速采用曝光包围来创建高动态范围图像,促使了色调映射算法的发展(图1.10c)(见第10.2.1节),将此类图像转换为可显示的结果(Fattal、Lischinski和Werman2002;Durand和Dorsey2002;Reinhard、Stark等人2002;Lischinski、Farbman等人2006)。除了合并多个曝光外,还开发了技术来合并闪光灯图像与非闪光灯图像(Eisemann和Durand2004;Petschnigg、Agrawala等人2004),以及从重叠图像中交互式或自动选择不同区域的方法(Agarwala、Dontcheva等人2004)。
纹理合成(Figure1.10d)(见第10.5节)、拼接(Efros和Leung 1999;Efros和Freeman 2001;Kwatra、Scho...dl等人2003)和图像修复(Bertalmio、Sapiro等人2000;Bertalmio、Vese等人2003;Criminisi、P rez和Toyama 2004)是其他可以归类为计算摄影技术的主题,因为它们重新组合输入图像样本以生成新的照片。
本十年的第二个显著趋势是基于特征的技术(结合学习)在物体识别中的出现(见第6.1节和Ponce,Hebert等人2006)。该领域的部分重要论文包括Fergus、Perona和Zisserman(2007)的星座模型(图1.10e)以及Felzenszwalb和Huttenlocher(2005)的图像结构。基于特征的技术还主导了其他识别任务,如场景识别(Zhang,Marszalek等人2007)和全景及位置识别(Brown和Lowe2007;Schindler,Brown和Szeliski2007)。尽管兴趣点(基于块)特征目前仍占主导地位,但一些研究小组正在探索基于轮廓(Belongie,Malik和Puzicha2002)和区域分割(图1.10f)的识别方法(Mori,Ren等人2004)。
本十年的另一个重要趋势是开发了更高效的算法来解决复杂的全局优化问题(见第4章和附录B.5以及Szeliski、Zabih等人2008;Blake、Kohli和Rother2011)。这一趋势始于图割的研究(Boykov、Veksler和Zabih2001;Kohli和Torr2007),同时,在消息传递算法方面也取得了很大进展,例如循环信念传播(LBP)(Yedidia、Freeman和Weiss2001;Kumar和Torr2006)。
从这个十年来看,最显著的趋势是应用了复杂的视觉识别和计算机视觉的大多数其他方面,现在已经完全占据了视觉识别的主导地位。
图1.11 2010年代计算机视觉算法示例:(a)SuperVision深度神经网络©Krizhevsky、Sutskever和Hinton(2012);(b)对象实例分割(He、Gkioxari等2017)©2017 IEEE;(c)单张图像中的全身、表情和手势拟合(Pavlakos、Choutas 。et al2019)©2019 IEEE;(d)使用KinectFusion实时系统融合多个彩色深度图像(Newcombe,Izadi (et al.2011)©2011 IEEE;(e)具有实时深度遮挡效果的智能手机增强现实(Valentin,Kowdle (f)在完全自主的Skydio R1无人机上实时计算的3D地图(Cross2019)。
将机器学习技术应用于计算机视觉问题(见第5章和第6章)。这一趋势与互联网上大量部分标记数据的可用性增加以及计算能力的显著提高相吻合,这使得在没有仔细的人工监督的情况下学习对象类别变得更加可行。
2010年代,使用大型标记数据集(以及自我监督数据集)开发机器学习算法的趋势成为一股浪潮,彻底改变了图像识别算法的开发以及其他应用,如去噪和光流,这些应用之前使用贝叶斯和全局优化技术。
这一趋势得益于高质量的大规模标注数据集的发展,如ImageNet (Deng,Dong等,2009;Russakovsky,Deng等,2015)、Microsoft COCO(上下文中的常见物体)(Lin,Maire等,2014)和LVIS (Gupta,Doll r,和Gir-
shick2019)。这些数据集不仅为跟踪识别和语义分割算法的进展提供了可靠的指标,更重要的是,提供了足够的标记数据来开发基于机器学习的完整解决方案。
另一个主要趋势是通用(数据并行)算法在图形处理单元(GPGPU)上的开发,带来了计算能力的显著提升。突破性的SuperVision(“AlexNet”)深度神经网络(图1.11a;Krizhevsky、Sutskever和Hinton 2012),作为首个赢得年度ImageNet大规模视觉识别挑战赛的神经网络,其性能大幅提升得益于GPU训练以及一系列技术进步。本文发表后,使用深度卷积架构的研究进展迅速,如今这些架构已成为图像识别和语义分割任务的首选(图1.11b),同时也是许多其他视觉任务的首选架构(第五章;LeCun、Bengio和Hinton 2015),包括光流(Sun、Yang等2018)、去噪和单目深度推断(Li、Dekel等2019)。
大型数据集和GPU架构,加上通过arXiv及时发表的快速传播思想,以及深度学习语言的发展和神经网络模型的开源,都促进了这一领域的爆炸性增长。不仅在快速进步和能力方面,而且在现在从事这些主题的出版物和研究人员的数量上也是如此。它们还使得图像识别方法得以扩展到视频理解任务,如动作识别(Feichtenhofer,Fan等,2019),以及结构回归任务,如实时多人姿态估计(Cao,Simon等,2017)。
用于计算机视觉任务的专用传感器和硬件也在继续进步。
微软于2010年发布的Kinect深度相机,迅速成为许多3D建模(图1.11d)和人体跟踪(Shotton,Fitzgibbon等,2011)系统的重要组成部分。十年间,3D身体形状建模和跟踪系统不断进步,如今已能通过单张图像推断出一个人的3D模型及其手势和表情(图1.11c)。
而深度传感器尚未普及(除了高端手机上的安全应用),计算摄影算法却已应用于当今所有智能手机。计算机视觉领域引入的创新,如全景图像拼接和高动态范围图像合并,现在已成为标准功能,多图像低光去噪算法也越来越常见(Liba,Murthy等,2019)。光场成像算法,能够创建柔和的景深效果,也变得越来越普及(Garg,Wadhwa等,2019)。最后,移动增强现实应用中实现实时姿态估计和环境感知的功能也在不断进步。
使用特征跟踪和惯性测量的组合进行增强是常见的,目前正扩展到包括像素精确深度遮挡效应(图1.11e)。
在自动驾驶汽车和无人机等高端平台上,强大的实时SLAM(同时定位与建图)和VIO(视觉惯性里程计)算法(Engel,Scho...ps,and Cremers2014;Forster,Zhang et al.2017;Engel,Koltun,and Cremers2018)可以构建精确的3D地图,例如,使自动驾驶汽车能够通过森林等具有挑战性的场景(图1.11f)。
总之,过去十年间,计算机视觉算法的性能和可靠性取得了令人难以置信的进步,部分得益于向机器学习的转变以及在大量真实数据集上的训练。同时,视觉算法也被应用于各种商业和消费场景中,同时也带来了由其广泛应用引发的新挑战(Su和Crandall 2021)。
1.3 书籍概述
在本引言的最后一部分,我将简要介绍本书的内容,并附上一些关于符号的说明和额外的一般参考文献。由于计算机视觉是一个非常广泛的领域,可以研究其某些方面,例如几何图像形成和三维结构恢复,而无需涉及其他部分,如反射率和阴影建模。本书中的一些章节与其他章节联系较为松散,因此不必严格按顺序阅读所有材料。
图1.12展示了本书内容的大致布局。由于计算机视觉涉及从图像到场景的语义理解和三维结构描述,我将各章节按其在这一谱系中的位置横向排列,并根据它们之间的依赖关系纵向排列。9
书中穿插着一些示例应用,将各章节中介绍的算法和数学材料与实际应用联系起来。许多示例应用也出现在练习部分,以便学生自己动手编写。
在每个部分的结尾,我提供了一组练习,学生可以用来实现、测试和改进每部分中介绍的算法和技术。有些练习适合作为书面作业,其他则适合作为为期一周的短期项目,
图1.12本书涵盖主题的分类,展示了不同章节之间的(大致)依赖关系,这些章节大致沿着左右轴定位,取决于它们更接近图像(左)还是三维几何(右)表示。顶部轴上的“什么-哪里”指的是视觉系统中的不同视觉路径(Goodale和Milner 1992),但不应过于认真对待。基础技术如优化和深度学习在后续章节中被广泛使用。
还有一些是开放性研究问题,它们构成了具有挑战性的最终项目。有动力的学生如果实施了这些练习中的合理子集,在读完这本书后,将拥有一个可用于各种有趣任务和项目的计算机视觉软件库。
如果学生或课程对编程语言没有强烈偏好,Python配合NumPy科学和数组运算库以及OpenCV视觉库,是开发算法和学习视觉的好环境。学生不仅会学会使用数组/张量表示法和线性/矩阵代数(这是使用PyTorch进行深度学习的良好基础),还可以通过Jupyter笔记本准备课堂作业,这样可以将描述性教程、示例代码和需要扩展或修改的代码整合在一个方便的位置。10
作为一本参考书,我尽可能地讨论哪些技术和算法在实践中表现良好,并提供最新的研究结果指向。这些练习可以用来构建你自己的个人视觉算法库,经过自我测试和验证,这从长远来看(假设你有时间)比简单地从一个你并不真正了解其性能的库中提取算法更有价值。
这本书从第二章开始,回顾了形成我们所见和捕捉图像的过程。理解这一过程对于想要采取科学(基于模型)方法的计算机视觉至关重要。希望直接开始实现算法的学生(或时间有限的课程)可以跳到下一章,稍后再深入学习这部分内容。在第二章中,我们将图像形成分解为三个主要组成部分。几何图像形成(第2.1节)涉及点、线和平面,以及如何使用射影几何和其他模型(包括径向镜头畸变)将这些映射到图像上。光度图像形成(第2.2节)涵盖了辐射测量学,描述了光线如何与世界中的表面相互作用,以及光学,即光线如何投射到传感器平面上。最后,第2.3节讨论了传感器的工作原理,包括采样和混叠、色彩感知和相机内压缩等主题。
第三章涵盖了图像处理,这是几乎所有计算机视觉应用中都需要的技术。这包括线性和非线性滤波(第3.3节)、傅里叶变换(第3.4节)、图像金字塔和小波(第3.5节),以及几何变换如图像变形(第3.6节)。第三章还介绍了无缝图像融合和图像变形等应用。
第4章以一个新的数据拟合和插值部分开始,它提供了
图1.13本章内容的图解摘要。资料来源:Burt和Adelson(1983b);Agarwala和Dontcheva 等(2004);Glassner(2018);He,Gkioxari .etal(2017);Brown、Szeliski和Winder(2005);Butler、Wulff .etal(2012);Debevec和Malik(1997);Snavely、Seitz和Szeliski(2006);Scharstein、Hirschmu... .L.lleretal(2014);Curless和Levoy(1996);Gortler、Grzeszczuk等人(1996)——请参见各章节中的版权信息。
概念框架涵盖了全局优化技术,如正则化和马尔可夫随机场(MRF),以及机器学习,这些内容将在下一章中讨论。第4.2节介绍了经典的正则化技术,即使用快速迭代线性系统求解器实现的分段连续平滑样条(又称变分技术),这种方法在时间关键的应用中,如移动增强现实,仍然经常被选为首选方法。接下来的部分(4.3)介绍了相关的马尔可夫随机场主题,同时也作为贝叶斯推断技术的介绍,相关内容在附录B中以更抽象的形式覆盖。本章还讨论了交互式着色和分割的应用。
第五章是一个全新的章节,涵盖了机器学习、深度学习和深度神经网络。本章从第5.1节开始,回顾了经典的监督机器学习方法,这些方法旨在根据中间层特征对图像进行分类(或回归值)。第5.2节探讨了无监督学习,这不仅有助于理解未标记的训练数据,还能提供现实世界分布的模型。第5.3节介绍了前馈神经网络的基本要素,包括权重、层和激活函数,以及网络训练的方法。第5.4节详细讨论了卷积网络及其在识别和图像处理中的应用。本章的最后一节则讨论了更复杂的网络,包括三维、时空、递归和生成网络。
第六章涵盖了识别主题。本书第一版时,这一章排在最后,因为它建立在分割和特征匹配等早期方法之上。随着深度网络的出现,许多这些中间表示已不再必要,因为网络可以在训练过程中学习它们。由于计算机视觉研究现在大量致力于各种识别课题,我决定将这一章提前,以便学生能在课程早期就了解相关内容。
本章以实例识别的经典问题开篇,即在杂乱的场景中找到已知3D物体的实例。第6.2节涵盖了传统和深度网络方法的整体图像分类,即过去称为类别识别的内容。该节还讨论了面部识别这一特殊情况。第6.3节介绍了对象检测算法(围绕识别出的对象绘制边界框),并简要回顾了早期的人脸和行人检测方法。第6.4节涵盖了各种形式的语义分割(生成逐像素标签),包括实例分割(区分不同的物体)、姿态估计(用身体部位标记像素)和全景分割(同时标记事物和背景)。在第6.5节中,我们简要回顾了一些视频理解和动作识别领域的最新论文,而在Section6.6we部分则提到了一些图像描述和视觉问答方面的最新研究。
在第7章中,我们讨论了特征检测和匹配。目前很多3D重建都是如此
并且识别技术建立在提取和匹配特征点(第7.1节)的基础上,因此这是许多后续章节(第8章和第11章)乃至实例识别(第6.1节)所需的基本技术。我们还在第7.2节和第7.4节中讨论了边缘和直线检测,在第7.3节中讨论了轮廓跟踪,在第7.5节中讨论了低级分割技术。
特征检测与匹配在第8章中用于执行图像对齐(或配准)和图像拼接。我们介绍了基于特征的对齐的基本技术,并展示了如何根据涉及的运动,使用线性或非线性最小二乘法来解决这一问题。我们还引入了其他概念,如不确定性加权和鲁棒回归,这些对于使实际系统正常运行至关重要。基于特征的对齐随后被用作构建块,不仅用于二维应用,如图像拼接(第8.2节)和计算摄影(第10章),还用于三维几何对齐任务,如姿态估计和运动结构(第11章)。
第八章的第二部分专门讨论图像拼接,即构建大型全景图和合成图。虽然拼接只是计算摄影的一个例子(见第十章),但这里的内容足够深入,值得单独设一个章节。我们首先讨论各种可能的运动模型(第8.2.1节),包括平面运动和纯相机旋转。接着讨论全局对齐(第8.3节),这是通用束调整的一个特殊(简化)情况,然后介绍全景图识别技术,即自动发现哪些图像实际上形成了重叠的全景图。最后,我们涵盖图像合成和混合(第8.4节)的主题,这涉及选择来自哪些图像的像素以及将它们融合在一起以掩盖曝光差异。
图像拼接是一项美妙的应用,它将本书前几部分讨论的大部分内容串联起来。同时,它也是一个很好的中期课程项目,可以在此基础上进一步发展之前开发的技术,如图像变形和特征检测与匹配。第8.2至8.4节还介绍了拼接的更专业变体,例如白板和文档扫描、视频摘要、全景摄影、完整的360°球形全景图以及用于融合重复动作镜头的交互式照片合成。
在第9章中,我们将基于特征的图像对齐概念推广到涵盖密集强度基运动估计,即光流。我们从最简单的运动模型开始,即平移运动(第9.1节),并讨论了层次(粗到细)运动估计、傅里叶技术以及迭代优化等主题。接着,我们介绍了参数化运动模型,这些模型可用于补偿相机旋转和变焦,以及仿射或平面透视运动(第9.2节)。随后,这一概念被推广到样条基运动模型(第9.2.2节),最后扩展到一般的逐像素方法。
光学流(第9.3节)。在第9.4节中,我们讨论了分层和学习运动模型以及视频对象分割和跟踪。运动估计技术的应用包括自动变形、视频去噪和帧插值(慢动作)。
第10章介绍了计算摄影的更多示例,计算摄影是从一张或多张输入照片中创建新图像的过程,通常基于对成像过程的精心建模和校准(第10.1节)。计算摄影技术包括合并多个曝光以生成高动态范围图像(第10.2节),通过模糊消除和超分辨率提高图像分辨率(第10.3节),以及图像编辑和合成操作(第10.4节)。我们还在第10.5节讨论了纹理分析、合成和修复(孔洞填充)的主题,以及非真实感渲染和风格转换。
从第11章开始,我们深入探讨了从图像重建3D模型的技术。首先,在第11.1节介绍了相机内参校准的方法,以及在第11.2节中讨论了3D姿态估计,即外参校准。这些章节还描述了单视图建筑模型重建和3D定位识别的应用。接着,我们讨论了三角测量(第11.2.4节),这是在已知相机位置的情况下,通过匹配特征点进行的3D重建。
第十一章接着讨论了运动结构问题,涉及从一组跟踪的二维特征中同时恢复三维相机运动和三维场景结构。我们首先介绍两帧运动结构(第11.3节),该领域存在代数技术以及稳健的采样技术,如RANSAC,可以排除错误的特征匹配。接下来,我们探讨多帧运动结构技术,包括分解(第11.4.1节)、束调整(第11.4.2节)和约束运动与结构模型(第11.4.8节)。我们展示了视觉效果(匹配移动)和稀疏三维模型构建在大型(例如互联网)照片集中的应用。本章的最后一部分(第11.5节)新增了关于同时定位与建图(SLAM)及其在自主导航和移动增强现实(AR)中的应用的内容。
在第12章中,我们转向立体对应这一主题,可以将其视为运动估计的一个特例,其中相机位置已知(第12.1节)。这种额外的知识使立体算法能够在更小的对应空间内搜索,通过各种匹配标准、优化算法和/或深度网络的不同组合来生成密集的深度估计(第12.3至12.6节)。我们还讨论了多视图立体算法,这些算法构建的是真实的三维表面表示,而不仅仅是单个深度图(第12.7节),以及单目深度推断算法。
从单张图像中产生深度图(第12.8节)。立体匹配的应用包括头部和注视点跟踪,以及基于深度的背景替换(Z键)。
第13章涵盖了额外的三维形状和外观建模技术。这些技术包括经典的从X中提取形状的方法,如阴影形状、纹理形状和焦点形状(第13.1节)。除了所有这些被动计算机视觉技术外,还可以使用主动测距技术(第13.2节),即向场景投射图案化的光线并通过三角测量恢复三维几何结构。处理所有这些三维表示通常涉及插值或简化几何结构(第13.3节),或者使用其他表示方法,例如表面点集(第13.4节)或隐式函数(第13.5节)。
从一张或多张图像生成部分或完整的3D模型的技术集合通常被称为基于图像的建模或3D摄影。第13.6节探讨了三个更专业的应用领域(建筑、人脸和人体),这些领域可以使用基于模型的重建技术将参数化模型与感知数据对齐。第13.7节则讨论了外观建模的主题,即估计纹理贴图、反射率或有时甚至是完整的双向反射分布函数(BRDF)的技术,这些技术描述了3D表面的外观。
在第14章中,我们讨论了过去三十年开发的大量基于图像的渲染技术,包括更简单的技术如视图插值(第14.1节)、分层深度图像(第14.2节)和精灵与图层(第14.2.1节),以及更通用的光场和光图框架(第14.3节)和高阶场如环境遮罩(第14.4节)。这些技术的应用包括使用照片旅游导航三维照片集合。
接下来,我们讨论基于视频的渲染,这是图像渲染的时间扩展。涵盖的主题包括基于视频的动画(第14.5.1节)、周期性视频转化为视频纹理(第14.5.2节)以及从多个视频流构建的3D视频(第14.5.4节)。这些技术的应用包括静态图像的动画制作和基于360°视频的家庭导览创建。本章最后概述了新兴的神经渲染领域。
为了支持本书作为教科书的使用,附录和相关网站包含更详细的数学主题和额外材料。附录A涵盖了线性代数和数值技术,包括矩阵代数、最小二乘法和迭代技术。附录B涵盖了贝叶斯估计理论,包括最大似然估计、稳健统计、马尔可夫随机场和不确定性建模。附录C描述了可用于补充本书的附加材料,包括图像和数据集、软件指向和课程幻灯片。
周 |
章次 |
主题 |
1. |
第1-2章 |
介绍和图像形成 |
2. |
第3章 |
图像处理 |
3. |
第4-5章 |
优化和学习 |
4. |
第5章 |
深度学习 |
5. |
第6章 |
认证 |
6. |
第7章 |
特征检测与匹配 |
7. |
第8章 |
图像对齐和拼接 |
8. |
第9章 |
运动估计 |
9. |
第10章 |
计算摄影 |
10. |
第十一章 |
从运动中获得结构 |
11. |
第十二章 |
深度估计 |
12. |
第十三章 |
三维重建 |
13. |
第十四章 |
基于图像的渲染 |
表1.1一个学期13周课程的示例教学大纲。10周的季度可以深入一些或省略一些主题。
1.4 样本教学大纲
在单个季度或学期课程中教授本书涵盖的所有内容是一项艰巨的任务,很可能不值得尝试。11最好是挑选与讲师偏好的重点相关的主题,并根据为学生设想的一系列小型项目进行调整。
史蒂夫·塞茨和我成功地使用了类似于表1.1所示的10周课程大纲,作为计算机视觉的本科和研究生课程。本科课程倾向于减少数学内容,花更多时间复习基础知识;而研究生课程则更深入地探讨技术,并假设学生已经具备良好的视觉或相关数学技术基础。相关的课程还包括3D摄影和计算摄影。附录C.3和本书的网站列出了其他使用此书教授类似课程的课程。
当史蒂夫和我教授这门课程时,我们更倾向于在课程初期给学生布置几个小的编程作业,而不是专注于书面作业或测验。通过选择合适的话题,这些项目可以相互衔接。例如,早期引入特征匹配可以在第二次作业中用于图像对齐和拼接。或者,可以直接使用(光流)技术来进行对齐,并更多地关注图割缝线选择或多分辨率融合技术。
过去,我们也要求学生在课程中期提出一个最终项目(我们为需要想法的学生提供了一套建议主题),并留出最后一周的时间让学生进行展示。有时,这些项目中的一些甚至变成了会议提交的论文!
无论你决定如何构建课程或选择如何使用这本书,我都鼓励你至少尝试几个小型编程任务,以了解视觉技术的工作原理及其失败的原因。更好的是,挑选一些有趣且可以应用于自己照片的主题,并努力突破创意界限,创造出令人惊喜的结果。
1.5 符号说明
无论好坏,计算机视觉和多视图几何教科书中出现的符号往往各不相同(Faugeras1993;Hartley和Zisserman2004;Girod、Greiner和Niemann2000;Faugeras和Luong2001;Forsyth和Ponce2003)。在本书中,我采用的是高中物理课上学到的惯例(后来又在多元微积分和计算机图形学课程中学习),即向量v用小写粗体表示,矩阵M用大写粗体表示,标量(T,s)用斜体混合大小写表示。除非另有说明,向量通常作为列向量操作,即它们后乘以矩阵Mv,尽管有时也会写成逗号分隔的括号列表x =(x,y),而不是括号内的列向量x = [x y]T。一些常用的矩阵有R表示旋转矩阵,K表示校准矩阵,I表示单位矩阵。齐次坐标(第2.1节)用带波浪线的向量表示,例如,在P2中表示为,,。矩阵形式下的叉积运算符记作[]×。
1.6 其他阅读材料
本书力求自成一体,以便学生可以不借助外部参考资料而完成这里描述的基本作业和算法。但是,它确实预先
假设对线性代数和数值技术的基本概念有基本的了解,这些内容在附录A中进行了回顾,以及图像处理,这在第3章中进行了回顾。
希望深入研究这些主题的学生可以参考戈卢布和范洛恩(1996)的矩阵代数,以及斯特兰(1988)的线性代数。在图像处理领域,有许多受欢迎的教科书,包括克兰(1997)、戈梅斯和韦尔霍(1997)、雅各布(1997)、普拉特(2007)、拉塞尔(2007)、伯格和伯奇(2008)以及冈萨雷斯和伍兹(2017)。对于计算机图形学,热门教材包括休斯、范达姆等人(2013)和马尔施纳和雪莉(2015),而格拉斯纳(1995)则提供了关于图像形成和渲染的更深入探讨。在统计学和机器学习方面,克里斯·毕晓普(2006)的书是一本极佳且全面的入门读物,包含大量练习题;而墨菲(2012)则提供了该领域的最新视角,哈斯蒂、蒂布沙里尼和弗里德曼(2009)则提供了更为经典的处理方法。关于深度学习的优秀入门教材是格拉斯纳(2018),而古德费洛、本吉奥和库尔维尔(2016)以及张、利普顿等人(2021)则提供了更为详尽的处理方法。学生还可以查阅其他计算机视觉教科书,以获取我们未涵盖的内容,以及更多的项目创意(纳尔瓦1993;特鲁科和维里1998;哈特利和齐瑟曼2004;福赛思和庞斯2011;普林斯2012;戴维斯2017)。
然而,阅读最新的研究文献是无可替代的,无论是对谁来说
最新的思想和技术,以及最相关的文献参考。在这本书中,我尽量引用了每个领域的最新作品,以便学生可以直接阅读并从中获得灵感,用于自己的研究。浏览过去几年的主要视觉、图形和机器学习会议的论文集,如CVPR、ECCV、ICCV、SIGGRAPH和NeurIPS,同时关注arXiv上的最新出版物,可以提供大量新的想法。这些会议上提供的教程,通常在线上有幻灯片或笔记,也是宝贵的资源。
Chapter 2 Image formation
2.1几何基本元素和变换 36
2.1.1 2D变换 40
2.1.2三维变换 43
2.1.3 3D旋转 45
2.1.4 3D到2D投影 51
2.1.5镜头畸变 63
2.2光度图像形成 66
2.2.1照明 66
2.2.2反射率和阴影 67
2.2.3光学 74
2.3数码相机 79
2.3.1取样和混叠 84
2.3.2颜色 87
2.3.3压缩 98
2.4其他阅读材料 101
2.5练习 102
(b)撞击表面时的光散射;(c)透镜光学;(d)拜耳彩色滤光阵列。
在我们能够分析和处理图像之前,需要建立一套词汇来描述场景的几何特征。同时,还需要理解在特定光照条件、场景几何形状、表面属性和相机光学条件下生成特定图像的过程。本章中,我们将介绍这一图像生成过程的简化模型。
第2.1节介绍了全书使用的几何基本元素(点、线和平面)以及将这些三维量投影到二维图像特征中的几何变换(图2.1a)。第2.2节描述了光照、表面属性(图2.1b)和相机光学(图2.1c)如何相互作用,产生落在图像传感器上的颜色值。第2.3节描述了连续彩色图像如何在图像传感器内转换为离散数字样本(图2.1d),以及如何避免(或至少识别)采样缺陷,如混叠。
本章所涵盖的内容只是众多独立领域中丰富而深入主题的简要概述。关于点、线、面和投影几何的更全面介绍,可以在多视图几何(哈特利和齐瑟曼2004;福加拉斯和隆2001)和计算机图形学(休斯、范达姆等人2013)的教科书中找到。图像形成(合成)过程传统上作为计算机图形学课程的一部分进行教学(格拉斯纳1995;瓦特1995;休斯、范达姆等人2013;马尔施纳和雪莉2015),但也在基于物理的计算机视觉研究中探讨(沃尔夫、沙弗和希利1992a)。相机镜头系统的特性在光学中被研究(莫勒1988;雷1902;赫克特2015)。一些优秀的色彩理论书籍包括希利和沙弗(1992)、万德尔(1995)以及维泽基和斯蒂尔斯(2000),而利文斯顿(2008)则提供了一个更加有趣且非正式的色彩感知入门。与采样和混叠相关的话题则在信号和图像处理教科书中有所涉及(克兰1997;雅各布森1997;奥本海姆和沙弗1996;奥本海姆、沙弗和巴克1999;普拉特2007;拉塞尔2007;伯格和伯奇2008;冈萨雷斯和伍兹2017)。最近由池内、松下等人(2020)撰写的书籍也涵盖了三维几何、光度学和传感器模型,重点放在主动照明系统上。
给学生的提示:如果你已经学习过计算机图形学,可以略读第2.1节的内容,尽管第2.1.4节末尾关于投影深度和以物体为中心的投影的部分可能对你来说是新的。同样,物理系学生(以及计算机图形学学生)大多会对第2.2节的内容熟悉。最后,具有良好图像处理背景的学生已经熟悉采样问题。
2.1 几何基本元素和变换
在本节中,我们将介绍本教材中使用的二维和三维基本元素,即点、线和平面。我们还将描述三维特征如何投影到二维特征上。关于这些主题的更详细描述(以及更加温和直观的介绍)可以在多视图几何教科书中找到(Hartley和Zisserman 2004;Faugeras和Luong 2001)。
几何基本元素构成了描述三维形状的基本构建块。在本节中,我们将介绍点、线和面。本书后续章节将讨论曲线(第7.3节和第12.2节)、曲面(第13.3节)以及体积(第13.5节)。
二维点。二维点(图像中的像素坐标)可以用一对值表示,x =(x,y)∈R2,或
(如引言中所述,我们使用(x1,x2,.. .)符号表示列向量。)
二维点也可以用齐次坐标表示,∈P2,其中只相差比例的向量被视为
其中,x- = (x,y,1)是增广向量。=0称为理想
点或无穷远点,没有等价的非齐次表示。
~
二维直线。二维直线也可以用齐次坐标l =(a,b,c)表示。相应的直线方程为
x- · = ax + by + c = 0. (2.3)
我们可以使直线方程向量l =(x,y,d)=(,d)归一化,其中Ⅱ = 1。
在这个例子中,n是垂直于直线的法向量,d是它到原点的距离
(图2.2)。(唯一的例外是无穷线= (0,0,1),
包括所有(理想)无穷点。)
图2.2 (a) 2D直线方程和(b) 3D平面方程,以如下方式表示
正常值和到原点的距离d。
我们也可以表示为旋转角度θ的函数,=(x,y)==(cosθ,sinθ)(图2.2a)。这种表示方法常用于霍夫变换中的直线寻找算法,相关内容将在第7.4.2节讨论。组合(θ,d)也被称为极坐标。
= 1 × 2 , (2.4)
其中×是叉积运算符。同样地,连接两点的直线可以表示为
= 1
× 2 . (2.5)
当试图将一个交点拟合到多条线或相反地,将一条线拟合到多个点时,可以使用最小二乘法技术(第8.1.1节和附录A.2),如练习2.1中所讨论的。
二维圆锥曲线。还有其他代数曲线可以用简单的多项式齐次方程来表示。例如,圆锥曲线(之所以这样称呼是因为它们是平面与三维圆锥相交产生的)可以用二次方程来表示
T
Q~x = 0. (2.6)
二次方程在多视图几何和相机校准研究中发挥着重要作用(Hartley和Zisserman2004;Faugeras和Luong2001),但本书并未广泛使用二次方程。
三维点。可以用非齐次坐标x =(x,y,z)∈R3,,,∈P3来表示三维点的坐标。和之前一样,
有时用增广向量x- = (x,y,z,1)表示一个三维点是有用的
三维平面,带相应
- · = ax + by + cz + d = 0. (2.7)
我们也可以将平面方程规范化为m =(x,y,z,d)=(,d),其中Ⅱ Ⅱ = 1。
在这种情况下,法向量垂直于平面,d是它到原点的距离(图2.2b)。与二维直线的情况类似,包含所有无穷远点的=(0,0,0,1)无法归一化(即
,它没有唯一的法向量或有限距离)。
=(cos θ cos φ,sin θ cos φ,sin φ), (2.8)
即,使用球面坐标系,但是这些坐标系的使用频率低于极坐标系,因为它们不能均匀地采样可能的法向量空间。
三维线。三维线不如二维线或三维平面那么优雅。一种可能的表示方法是使用线上的两个点,(p,q)。线上的任何其他点都可以用这两个点的线性组合来表示
r = (1 — λ)p + λq, (2.9)
如图2.3所示,如果我们将0≤λ≤1限制起来,我们得到连接p和q的线段。如果我们使用齐次坐标,我们可以将这条直线写为
~r =
当第二个点位于无穷远时,即x、y、z、0) = (,0),这是一个特殊
情况。这里,我们看到的是直线的方向。然后,我们可以将非齐次三维直线方程重写为
r = p + λ . (2.11)
三维线的端点表示的一个缺点是它具有过多的自由度,即六个(每个端点三个),而不是三维线真正拥有的四个自由度。然而,如果我们固定线上的两个点位于特定平面上,就可以得到一个具有四个自由度的表示。例如,如果我们表示接近垂直的线,则z = 0和z = 1形成了两个合适的平面,也就是说,这两个平面上的(x,y)坐标提供了描述这条线所需的四个坐标。这种双平面参数化方法在第14章中描述的光场和基于光图的图像渲染系统中被用于表示相机在物体前移动时看到的光线集合。端点表示对于表示线段也非常有用,即使它们的确切端点无法直接看到(只能猜测)。
如果我们希望表示所有可能的线而不偏向任何特定的方向,可以使用普莱克坐标(Hartley和Zisserman
2004,第3.2节;Faugeras和Luong 2001,第3章)。这些坐标是4×4斜对称矩阵中的六个独立非零元素。
L = ~p~qT - ~q~pT , (2.12)
线
上的
任意两点(非相同点)。这种表示法只有四个自由度,因为L是齐次的并且也满足j Lj = 0,这导致了对Plcker坐标的二次约束。
在实际应用中,最小表示对于大多数情况并非必不可少。通过估计线的方向(例如,在建筑设计中可能事先已知)和可见部分的一个点(见第11.4.8节),或者使用两个端点,可以获得三维直线的适当模型,因为直线通常以有限线段的形式可见。然而,如果您对最小线参数化的主题更感兴趣,Fo...rstner(2005)讨论了投影几何中推断和建模三维直线的各种方法,以及如何估计这些拟合模型中的不确定性。
三维二次曲面。圆锥曲线的三维类比是二次曲面
x-TQx- = 0 (2.13)
(Hartley和Zisserman2004,第3章)。同样,虽然二次曲面在多视图几何研究中很有用,也可以作为有用的建模原语(球体、椭球体、圆柱体),但我们在本书中没有详细研究它们。
在定义了基本元素之后,现在我们可以考虑如何对它们进行变换。最简单的二维平面变换如图2.4所示。
转换。二维转换可以写成x,= x + t或
其中I是(2×2)单位矩阵或
(2.15)
其中0是零向量。使用2×3矩阵可以得到更简洁的表示,而使用满秩的3×3矩阵(可以通过在2×3矩阵后面添加一行[0T 1]得到)则可以利用矩阵乘法进行变换链式计算以及求逆变换。请注意,在任何包含增广向量的方程中,例如
x- .
旋转+平移。这种变换也被称为二维刚体运动或二维欧几里得变换(因为保持了欧几里得距离)。它可以写成x,= Rx + t或
是一个正交旋转矩阵,其中RRT = I且j Rj = 1。
缩放旋转。也称为相似变换,该变换可以表示为x,= sRx + t,其中s是任意比例因子。它也可以写为
我们不再要求a2 + b2 = 1。相似变换保持线之间的角度。
仿射变换。仿射变换写为x,= Ax-,其中A是任意的2×3矩阵,即
(2.19)
在仿射变换下,平行线保持平行。
投影变换。这种变换也被称为透视变换或单应性变换,它作用于齐次坐标,
= ~x, (2.20)
是一个任意的3×3矩阵。注意,它是齐次的,即它仅在尺度上定义,而且两个仅在尺度上不同的矩阵是等价的。结果
透视变换保留直线(即,变换后保持直线)。
二维变换的层次结构。上述变换集如图2.4所示,并总结于表2.1中。最简单的理解方式是将其视为一组(可能受限的)3×3矩阵,作用于二维齐次坐标向量。Hartley和Zisserman(2004)对二维平面变换的层次结构进行了更详细的描述。
上述变换构成了一组嵌套的群,即它们在组合下是封闭的,并且有一个逆元属于同一群。(这将在第3.6节中将这些变换应用于图像时非常重要。)每个(更简单的)群都是其下方更复杂群的子群。这类李群及其数学性质
表2.1二维坐标变换层次,列出了变换名称、矩阵形式、自由度数、所保留的几何性质以及助记图标。每个变换还保留了其下方行中列出的性质,例如,相似性不仅保持角度,还保持平行性和直线。2×3矩阵通过增加第三行[0T 1]扩展为完整的3×3矩阵,用于齐次坐标变换。
相关的代数(原点处的切空间)在最近的一些机器人教程中有所讨论(Dellaert和Kaess 2017;Blanco 2019;Sol、Deray和Atchuthan 2019),其中二维旋转和刚体变换被称为SO(2)和SE(2),分别代表特殊正交群和特殊欧几里得群。
共向量。虽然上述变换可以用于变换二维平面上的点,但它们是否也可以直接用于变换直线方程?考虑齐次方程
· / = /T~x = (T/ )T
= ·
即,/=—T。因此,射影变换对一个协向量的作用,如二维
线或三维法线可以用矩阵的转置逆来表示,即等价于
对的副手,因为射影变换矩阵是齐次的。吉姆
Blinn(1998)在第9章和第10章中描述了表示和操作共向量的细节。
虽然上述转换是我们最常用的,但有时也会使用一些其他转换。
拉伸/压扁。此转换会更改图像的纵横比,
x, = sxx + tx y, = syy + ty ,
是一种受限形式的仿射变换。不幸的是,它不能与表2.1中列出的群干净地嵌套在一起。
平面表面流。该八参数变换(Horn1986;Bergen、Anandan等人1992;Girod、Greiner和Niemann2000),
x, = a0 + a1 x + a2 y + a6 x2 + a7 xy y, = a3 + a4 x + a5 y + a6 xy + a7 y2 ,
当一个平面表面发生小的三维运动时,就会产生这种误差。因此,可以认为它是对完整单应性的小运动近似。它的主要优点是它在运动参数ak中是线性的,而这些参数通常是被估计的量。
双线性插值。这种八参数变换(Wolberg1990),
x, = a0 + a1 x + a2 y + a6 xy y, = a3 + a4 x + a5 y + a7 xy,
可以用来插值由于正方形四个角点运动引起的变形。(实际上,它可以插值任何四个非共线点的运动。)虽然变形与运动参数呈线性关系,但通常不会保持直线(仅保持与正方形轴平行的直线)。然而,它在使用样条插值稀疏网格时非常有用(第9.2.2节)。
三维坐标变换集与二维变换集非常相似,总结在表2.2中。与二维一样,这些变换形成一个嵌套的组集。Hartley和Zisserman(2004,第2.4节)给出了这个层次结构的更详细描述。
表2.2三维坐标变换层次。每个变换还保留了其下方行中列出的属性,即相似性不仅保持角度,还保持平行性和直线。3×4矩阵通过增加第四个[0T 1]行扩展为完整的4×4矩阵,用于齐次坐标变换。助记图标以二维形式绘制,但旨在表示在完整的三维立方体中发生的变换。
转换。3D转换可以写成xI = x + t或
(2.23)
其中I是(3×3)单位矩阵。
旋转+平移。也称为三维刚体运动或三维欧几里得变换或SE(3),可以写为xI = Rx + t或
(2.24)
其中R是一个3×3的正交旋转矩阵,满足RRT = I且jRj = 1。注意有时用下面的方法来描述刚体运动更为方便
xI = R (x - c) = Rx - Rc; (2.25)
其中c是旋转中心(通常是摄像机中心)。
紧凑地参数化三维旋转是一项非平凡的任务,我们在下面更详细地描述了这一点。
旋转尺度。三维相似变换可以表示为x,= sRx + t,其中s是任意的尺度因子。它也可以写成
(2.26)
这种变换保持了直线和平面之间的角度。
仿射变换。仿射变换写为x,= Ax-,其中A是任意的3×4矩阵,即
(2.27)
平行线和平面在仿射变换下保持平行。
投影变换。这种变换也被称为三维透视变换、同态变换或共线变换,它作用于齐次坐标,
= ~x, (2.28)
其中是一个任意的4×4齐次矩阵。与二维一样,得到的结果是齐次的 必须进行归一化处理
,以获得非均匀结果x。透视变换保持直线(即,变换后仍为直线)。
2D和3D坐标变换之间的最大区别在于,3D旋转矩阵R的参数化不是那么直接,因为存在几种不同的可能性。
欧拉角
旋转矩阵可以由绕三个主轴的三次旋转相乘形成,例如x、y和z轴,或者x、y和x轴。这通常不是一个好主意,因为结果取决于变换应用的顺序。更糟糕的是,在参数空间中平滑移动并不总是可能的,即有时一个或多个欧拉角会因旋转的小变化而剧烈改变。因此,我们甚至不
本书给出了欧拉角的公式,感兴趣的读者可以查阅其他教科书或技术报告(Faugeras1993;Diebel2006)。请注意,在某些应用中,如果已知旋转是一组单轴变换,则它们总是可以使用一组显式的刚体变换来表示。
轴/角度(指数扭转)
一个旋转可以用一个旋转轴和一个角度θ来表示,或者等效地用一个三维向量! = θ来表示。图2.5显示了如何计算等效的旋转。首先,我们将向量v投影到轴上以获得
v Ⅱ = (· v) = (^n^nT )v; (2.29)
v丄=v-vⅡ=(I-^n^nT)v。 (2.30)
我们可以使用交叉积将这个向量旋转90°,
v × = × v丄 = × v = [] × v; (2.31)
其中[]×是向量=(x;y;z)的叉积算子的矩阵形式,
(2.32)
注意,将这个向量再旋转90°等同于再次取交叉积,
v ×× = × v × = []v =
—v丄 ;
因此
v Ⅱ = v - v丄 = v + v ×× = (I + []
现在我们可以计算旋转向量u的平面内分量
u丄=cosθv丄+sinθv×=(sin θ[]×- cos θ[])v.
将所有这些项放在一起,我们得到最终的旋转向量
u=u丄+ vⅡ =(I + sin θ[]×+(1 - cos θ)[])v
. (2.33)
因此,我们可以写出围绕轴旋转θ的旋转矩阵
作为
R(,θ)= I + sin θ[]×+(1 - cos θ)[],
(2.34)
这被称为罗德里格斯公式(Ayache1989)。
轴和角度θ的乘积,! = θ =(ωx,ωy,ωz),是一个最小的代表-
用于三维旋转。通过常见的角度如90°的倍数进行旋转时,如果θ以度为单位存储,可以精确表示(并转换为精确矩阵)。不幸的是,这种表示并不唯一,因为我们可以总是加上360°(2π弧度)的倍数。
θ和得到相同的旋转矩阵。同样地,(,θ)和(-,-θ)表示相同的旋转。
但是,对于小旋转(例如,对旋转的修正),这是一个很好的选择。
特别是对于小(无穷小或瞬时)旋转和以弧度表示的θ,Rodrigues公式简化为
这给出了旋转参数!和R之间的一个很好的线性关系。我们也可以写成R(!)v≈v +!×v,当我们想要计算Rv关于!的导数时,这个公式非常方便。
(2.36)
另一种推导有限角度旋转的方法称为指数扭转(Murray,Li,and Sastry1994)。一个角度θ的旋转等同于k个角度θ/k的旋转。当k→∞时,我们得到
(2.37)
图2.6单位四元数位于单位球ⅡqⅡ = 1上。该图显示了通过三个四元数q0、q1和q2的平滑轨迹。q2的对径点,即-q2,表示与q2相同的旋转。
如果我们把矩阵指数展开为泰勒级数(使用恒等式[]+
2 =—[,
k > 0,再次假设θ是弧度),
(2.38)
这就产生了熟悉的罗德里格斯公式。
在机器人学(和群论)中,旋转被称为SO(3),即三维空间中的特殊正交群。增量旋转与李代数se(3)相关联,是构建旋转导数和建模旋转估计不确定性时的首选方法(Blanco2019;Sola、Deray和Atchuthan2019)。
单位四元数
单位四元数表示与角度/轴表示密切相关。单位四元数是一个长度为1的4维向量,其分量可以写成q =(qx,qy,qz,qw)或简写为q =(x,y,z,w)。单位四元数位于单位球ⅡqⅡ = 1上,而对偶(符号相反)的四元数q和—q表示相同的旋转(图2.6)。除了这种歧义(对偶覆盖)外,旋转的单位四元数表示是唯一的。此外,该表示是连续的,即随着旋转矩阵的连续变化,可以找到一个连续的四元数表示,尽管在四元数球上的路径可能会绕一圈再回到原点qo =(0,0,0,1)。对于
由于这些原因以及其他原因,四元数是计算机图形中用于姿态和姿态插值的非常流行的表示方法(Shoemake1985)。
四元数可以通过公式从轴/角度表示法推导出来
(2.39)
其中θ是旋转轴和角度。利用三角恒等式sin θ =
2 sin cos
2,罗德里格斯
公式
可以转换为
R(,θ)= I + sin θ[]×+(1—cos θ)[]
= I + 2w[v]× + 2[v] .
(2.40)
这表明使用一系列交叉乘积,通过四元数快速旋转向量v,
缩放和添加。为了得到R(q)作为(x,y,z,w)的函数的公式,回想一下
因此,我们得到
对角项可以通过用(x2+w2-y2-z2)等替换1-2(y2+z2)来使其更加对称。
单位四元数最吸引人的地方在于,它提供了一种简单的代数方法来组合以单位四元数表示的旋转。给定两个四元数q0 =(v0,w0)和q1 =(v1,w1),四元数乘法运算符定义为
q2 = q0 q1 = (v0 × v1 + w0 v1 + w1 v0 , w0 w1 — v0 · v1 ), (2.42)
具有这样的性质:R(q2)= R(q0)R(q1)。注意,四元数乘法不是交换的,就像三维旋转和矩阵乘法不是一样。
取四元数的逆很简单:只需翻转v或w的符号(但不能同时翻转!)。
(你可以验证这具有在(2.41)中置换R矩阵的预期效果。)因此,我们也可以定义四元数除法为
q2 = q0 /q1 = q0 q 1 = (v0 × v1 + w0 v1 — w1 v0 , —w0 w1 — v0 · v1 ). (2.43)
1. qr = q1 /q0 = (vr ; wr ) 2.如果wr < 0,则qr←—qr 3. θr = 2 tan-1(Ⅱvr Ⅱ/wr) 4. r = N (vr) = vr /Ⅱvr Ⅱ 5. θα = Q θr 6. qα =(sin θ r;cos θ) |
算法2.1球面线性插值(slerp)。首先根据四元数比例计算轴和总角度。(此计算可以移出生成动画中一组插值位置的内循环。)然后计算增量四元数,并将其乘以起始旋转四元数。
当需要两个旋转之间的增量旋转时,这很有用。
特别是,如果我们想要确定两个给定旋转之间的中间旋转,可以计算增量旋转,取角度的一部分,然后计算新的旋转。这个过程称为球线性插值或简称slerp(Shoemaker1985),并在算法2.1中给出。请注意,Shoemaker提出了除这里给出的公式外的两个其他公式。第一个公式是先将qr指数化为alpha,然后再乘以原始四元数,
q2 = qq0 ; (2.44)
而第二种方法是将四元数视为球面上的4维向量并使用
(2.45)
其中θ = cos-1(q0·q1),点积直接作用于四元数的四维向量之间。所有这些公式都能给出相似的结果,但当q0和q1接近时需要特别小心,这也是我更倾向于使用反正切来确定旋转角度的原因。
哪种旋转表示法更好?
三维旋转的表示方式的选择部分取决于应用。
轴/角表示是最简化的,因此不需要对参数施加任何额外的约束(无需每次更新后重新归一化)。如果角度以度数表示,更容易理解姿态(例如,绕儿轴旋转90°),也更容易表达精确的旋转。当角度以弧度表示时,可以轻松计算R关于θ的导数(2.36)。
另一方面,如果你想跟踪一个平滑移动的摄像机,四元数会更好,因为表示中没有不连续性。它也更容易在旋转之间插值,并且可以链接刚体变换(Murray、Li和Sastry 1994;Bregler和Malik 1998)。
我通常倾向于使用四元数,但要使用第11.2.2节中描述的增量旋转来更新其估计值。
既然我们已经知道如何表示二维和三维几何基元以及如何在空间中变换它们,接下来需要确定三维基元如何投影到图像平面上。我们可以使用线性三维到二维投影矩阵来实现这一点。最简单的模型是正交投影,它不需要除法就能得到最终(非齐次)结果。更常用的模型是透视投影,因为这种模型更能准确模拟真实相机的行为。
正字法和旁视角
正交投影就是将三维坐标p的z分量丢弃,得到二维点x。(在本节中,我们用p表示三维点,用x表示二维点。)可以写为
x = [I2×2 j0] p. (2.46)
如果我们使用的是齐次(射影)坐标系,我们可以写成
(2.47)
即,我们舍弃z分量,但保留w分量。正射投影是长焦距(远摄)镜头和相对于相机距离较浅的物体的近似模型(Sawhney和Hanson1991)。它仅对远心镜头精确(Baker和Nayar1999,2001)。
图2.7常用投影模型:(a)三维视图,(b)正射投影,(c)缩放正射投影,(d)平行透视,(e)透视,(f)物体中心。每个图都展示了投影的俯视图。请注意,在非透视投影中,地面平面和盒子侧面的平行线仍然保持平行。
在实际操作中,世界坐标(可能以米为单位测量尺寸)需要进行缩放才能适应图像传感器(物理上以毫米为单位测量,但最终是
以像素为单位)。因此,缩放正字法实际上更常用,
x = [sI2×2 j0] p. (2.48)
该模型相当于首先将世界点投影到局部前视平行图像平面上,然后使用常规透视投影对该图像进行缩放。这种缩放可以适用于场景的所有部分(图2.7b),也可以针对独立建模的对象进行不同的缩放(图2.7c)。更重要的是,在从运动中估计结构时,缩放可以在帧与帧之间变化,这能更好地模拟物体接近相机时发生的尺度变化。
正交坐标是一种流行的模型,用于重建远离相机的物体的三维形状,因为它大大简化了某些计算。例如,姿态(相机方向)可以使用简单的最小二乘法进行估计(第11.2.1节)。在正交坐标下,结构和运动可以通过分解(奇异值分解)同时进行估计,如第11.4.1节所述(Tomasi和Kanade 1992)。
一个密切相关投影模型是旁透视(Aloimonos1990;Poelman和Kanade1997)。在这个模型中,物体点首先被投影到与图像平面平行的局部参考线上。然而,它们并不是正交于该平面地投影,而是平行于视线方向投影到物体中心(图2.7d)。随后,这些点再进行常规的投影到最终的图像平面上,这实际上相当于缩放。因此,这两种投影的组合是仿射的,可以表示为
(2.49)
注意,三维中的平行线在Figure2.7b-d投影后仍然保持平行。与缩放正交法相比,平行透视提供了一个更精确的投影模型,而无需增加每像素透视分割的复杂性,后者会破坏传统的分解方法(Poelman和Kanade1997)。
前景
在计算机图形学和计算机视觉中,最常用的投影是真实三维透视(图2.7e)。在这里,通过将点除以它们的坐标来将其投影到图像平面上。
(2.50)
在齐次坐标中,投影具有简单的线性形式,
(2.51)
即,我们丢弃p的w分量。因此,在投影之后,无法恢复三维点与图像的距离,这对于二维成像传感器来说是有意义的。
计算机图形系统中常见的形式是两步投影,首先将三维坐标投影到归一化的设备坐标(x,y,z)∈[—1,1]×[—1,1]×[0,1],然后使用视口变换将这些坐标重新缩放为整像素坐标(Watt1995;OpenGL-ARB1997)。(初始)透视投影随后用一个4×4矩阵表示。
其中znear和zfar分别是近裁剪平面和远裁剪平面,zrange = zfar—znear。请注意,前两行实际上通过焦距和宽高比进行了缩放,使得可见光线被映射到(x,y,z)∈[—1,1]²。保留第三行而不是删除它的原因是,诸如z缓冲区等可见性操作需要为每个正在渲染的图形元素提供深度信息。
如果我们设置znear = 1,zfar→∞,并交换第三行的符号,归一化屏幕向量的第三个元素就会变成逆深度,即视差(Okutomi和Kanade 1993)。这在许多情况下非常方便,因为对于户外移动的相机而言,相对于相机的逆深度通常比直接的三维距离参数化更为稳定。
虽然普通的二维图像传感器无法测量到表面点的距离,但测距传感器(第13.2节)和立体匹配算法(第12章)可以计算这些值。然后,利用4×4矩阵的逆(第2.1.4节),可以直接将基于传感器的深度或视差值d映射回三维位置,这非常方便。如果我们使用满秩的4×4矩阵来表示透视投影,就可以实现这一点,如公式(2.64)所示。
p. Oc是光学中心(节点点),cs是传感器平面坐标系的三维原点,sx和sy是像素间距。
摄像头内参
一旦我们使用投影矩阵通过理想针孔投射出一个三维点,仍需根据像素传感器间距和传感器平面与原点的相对位置来变换所得坐标。图2.8展示了涉及的几何关系。在本节中,我们首先介绍从二维像素坐标到三维光线的映射,使用传感器单应性矩阵Ms,因为这更容易用物理可测量的量来解释。然后,我们将这些量与更常用的相机内参矩阵K联系起来,该矩阵用于将以相机为中心的三维点pc映射到二维像素坐标。
图像传感器返回由整数像素坐标(儿s;ys )索引的像素值,通常坐标从图像的左上角开始向下向右移动。(这一惯例并非所有成像库都遵循,但对其他坐标系的调整是直截了当的。)为了将像素中心映射到三维坐标,我们首先根据像素间距(sx;sy)(对于固态传感器有时以微米表示)缩放(儿s;ys)值,然后用原点cs和三维旋转Rs描述传感器阵列相对于相机投影中心Oc的方向(图2.8)。
组合的二维到三维投影可以写为
(2.53)
3×3矩阵Ms的前两列是图像像素阵列沿儿s和ys方向的单位步长对应的三维向量,而第三列是三维
矩阵Ms由八个未知数参数化:三个描述旋转的参数Rs,三个描述平移的参数cs,以及两个缩放因子(sx;sy)。请注意,这里我们忽略了图像平面上两轴之间的倾斜可能性,因为固态制造技术使得这一点可以忽略不计。实际上,除非我们有传感器间距或传感器方向的精确外部知识,否则只有七个自由度,因为仅凭外部图像测量无法区分传感器与原点的距离和传感器间距。
然而,估计具有所需7个自由度的相机模型Ms(即,在适当重新缩放后,前两列是正交的)是不切实际的,因此大多数实践者假设一个通用的3×3齐次矩阵形式。
3D像素中心点p与3D相机中心点pc之间的关系由未知缩放比例s给出,p = spc。因此,我们可以将pc s的完整投影写为
从上述讨论中,我们看到理论上K有七个自由度,而在实践中则有八个自由度(即一个3×3齐次矩阵的全部维度)。那么,为什么大多数关于三维计算机视觉和多视图几何的教科书(如Faugeras 1993;Hartley和Zisserman 2004;Faugeras和Luong 2001)将K视为具有五个自由度的上三角矩阵呢?
虽然这些书中通常没有明确说明,但这是因为我们无法仅凭外部测量恢复完整的K矩阵。当基于外部3D点或其他测量(Tsai1987)校准相机时(第11.1节),最终会使用一系列测量同时估计相机的内参(K)和外参(R;t),
(2.55)
P = K[Rjt] (2.56)
被称为相机矩阵。检查这个方程,我们看到我们可以后乘
用R1对K进行乘法运算,再用R对[Rjt]进行乘法运算,最终得到一个有效的校准。因此,它
仅根据图像测量值无法知道传感器的真实方向和相机的真内参。
图2.9简化的相机内参,显示焦距f和图像中心(cx,cy)。图像宽度和高度为W和H。
选择K的上三角形式似乎是惯例。给定一个完整的3×4相机矩阵P = K[Rjt],我们可以使用QR分解计算出一个上三角的K矩阵(Golub和Van Loan 1996)。(请注意术语上的不幸冲突:在矩阵代数教科书中,R表示一个上三角(对角线右侧)矩阵;而在计算机视觉中,R是一个正交旋转。)
有几种方法可以写出K的上三角形式。一种可能性是
(2.57)
使用独立的焦距fx和fy来表示传感器的x和y方向。条目s编码了由于传感器未垂直安装在光轴上而可能产生的传感器轴之间的偏斜,(cx,cy)表示以像素坐标表示的图像中心。在计算机视觉文献中,图像中心也常被称为主点(Hartley和Zisserman 2004),尽管在光学领域,主点是通常位于镜头内部、主平面与主(光学)轴相交处的三维点(Hecht 2015)。另一种可能性是
(2.58)
其中,已经明确地给出了纵横比a,并且使用了共同的焦距f。
在实践中,对于许多应用,通过设置=1可以获得更简单的形式
图2.10中心投影,显示了3D和2D坐标p和x之间的关系,以及焦距f、图像宽度W和水平视场θH之间的关系。
且s = 0,
通常,将原点设置在图像的大致中心处,例如,(cx,cy)=(W/2,H/2),其中W和H分别是图像的宽度和高度,可以产生一个具有单个未知数的完美可用的相机模型,即焦距f。
图2.9展示了这些量如何作为简化成像模型的一部分进行可视化。请注意,现在我们将图像平面置于节点点(镜头的投影中心)之前。y轴的方向也进行了反转,以获得与大多数成像库处理垂直(行)坐标方式相兼容的坐标系。
关于焦距的说明
如何表达焦距的问题常常在计算机视觉算法的实现和讨论结果时引起混淆,这是因为焦距取决于用来测量像素的单位。
如果我们用整数值来编号像素坐标,比如[0,W)×[0,H),那么焦距f和相机中心(cx,cy)在公式(2.59)中就可以表示为像素值。这些量与摄影师常用的焦距有什么关系呢?
图2.10说明了焦距f、传感器宽度W和水平视场θH之间的关系,它们遵循公式
对于传统的35毫米胶片相机,其有效曝光面积为24毫米×36毫米,因此W=36毫米,所以f也以毫米表示。例如,单反(单镜头反光)相机常用的“标准”镜头焦距是50毫米,这是一个很好的长度,而85毫米则是人像摄影的标准焦距。然而,由于我们处理的是数字图像,因此用像素来表示W更为方便,这样焦距f可以直接用于校准矩阵K中,如公式(2.59)所示。
另一种可能性是调整像素坐标,使其沿较长的图像维度变化范围为[-1,1),沿较短的轴变化范围为[-a-1,a-1],其中a≥1是图像宽高比(与前面介绍的传感器单元宽高比相反)。这可以通过使用修改后的归一化设备坐标来实现,
=(2xs - W)/S和ys,=(2ys - H)/S,其中S = max(W,H)。(2.61)
这有一个优点,即焦距f和图像中心(cx,cy)不再依赖于图像分辨率,这在使用多分辨率图像处理算法时非常有用,例如图像金字塔(第3.5节)。使用S而不是W还使得风景(水平)和人像(垂直)照片的焦距相同,就像35毫米摄影中那样。(在某些计算机图形学教科书和系统中,归一化设备坐标范围为[-1,1]×[-1,1],这需要使用两个不同的焦距来描述相机内参(Watt1995)。)将S = W = 2代入(2.60),我们得到更简单的(无量纲的)关系。
(2.62)
各种焦距表示之间的转换是直接的,例如,从无单位的f到以像素表示的f,乘以W/2,而从以像素表示的f转换为等效的35mm焦距,乘以18mm。
既然我们已经展示了如何参数化校准矩阵K,那么我们可以将相机内参和外参组合在一起,得到一个单一的3×4相机矩阵
(平面)。
有时最好使用可逆的4×4矩阵,可以通过不删除P矩阵的最后一行来获得,
(2.64)
其中E是一个三维刚体(欧几里得)变换,是满秩校准矩阵。4×4的相机矩阵可以直接将三维世界坐标p-w =(xw,yw,zw,1)映射到屏幕坐标(加上视差),xs =(xs,ys,1,d),
xs ~ p-w , (2.65)
其中~表示在比例上相等。注意,在乘以之后,向量被除以向量的第三个元素,以获得归一化形式xs =(xs,ys,1,d)。
一般来说,使用4×4矩阵时,我们可以自由地将最后一行重新映射为任何适合我们的用途(而不仅仅是作为视差的“标准”解释,即逆深度)。让我们将最后一行重写为p3 = s3 [0 Ic0],其中Ⅱ0Ⅱ = 1。然后我们有如下方程
其中z = p2·p-w = rz·(pw - c)是pw从相机中心C(2.25)沿光轴Z的距离(图2.11)。因此,我们可以将d解释为参考平面0·pw + c0 = 0上的三维场景点pw的投影视差或投影深度(Szeliski和Coughlan 1997;Szeliski和Golland 1999;Shade,Gortler等1998;Baker,
Szeliski和Anandan1998)。(投影深度有时也被称为视差
使用“平面加视差”一词的重建算法(Kumar,Anandan和Hanna
1994;Sawhney1994)。)设置0 = 0和c0 = 1,即把参考平面置于无穷远,
结果是更标准的d = 1/z版本的视差(Okutomi和Kanade1993)。
另一种方法是将矩阵反转,这样我们就可以映射像素加视差
直接返回到3D点,
. (2.67)
一般来说,我们可以选择任何方便的形式,即使用任意投影来采样空间。这在设置多视图立体重建算法时特别有用,因为它允许我们通过一系列平面(第12.1.2节)在空间中进行扫描,采用可变(投影)采样,以最佳匹配感知到的图像运动(Collins1996;Szeliski和Golland1999;Saito和Kanade1999)。
当我们从不同的摄像机位置拍摄一个三维场景的两个图像时会发生什么
方向(图2.12a)?使用来自(2.64)的4×4相机矩阵=E的满秩,
~ 0 E0 p = 0 p. (2.68)
假设我们已知一个图像中像素的z缓冲区或视差值d0,我们可以使用以下公式计算三维点位置p:
p ~ E0-10-10
(2.69)
~ 1 E1 p = 1 E1 E0-10-10
= 1 0-10
(2.70)
不幸的是,我们通常无法获得常规摄影图像中像素的深度坐标。但是,对于平面场景,如上文(2.66)所述,我们可以
用一般平面方程0·p + c0替换(2.64)中P0的最后一行,该方程可以映射
平面上的点对应于d0 = 0的值(图2.12b)。因此,如果我们设d0 = 0,就可以忽略M10中的最后一列(2.70)及其最后一行,因为我们不关心最终的Z缓冲区深度。映射方程(2.70)因此简化为
图2.12一个点被投影到两个图像中:(a)三维点坐标(X,Y,Z,1)与二维投影点(x,y,1,d)之间的关系;(b)平面单应性引起的
所有点都在一个公共平面上0·p + c0 = 0。
其中,1 0 是一般3×1 0现在是
2D
均匀坐标(即,3-向量)(Szeliski1996)。这证明了使用8参数均匀模型作为平面场景马赛克的一般对齐模型是合理的(Mann和Picard1994;Szeliski1996)。
在不需要知道深度就能执行相机间映射的另一种特殊情况下,就是当相机进行纯旋转时(第8.2.3节),即t0 = t1。在这种情况下,我们可以写
1 ~ K1
R1 R0-1K0-10 =
K1 R10 K0-10
对象中心投影
使用长焦镜头时,仅凭图像测量来可靠地估算焦距往往变得困难。这是因为焦距与物体距离高度相关,很难将这两种效应区分开来。例如,通过变焦远摄镜头观察到的物体比例变化,可能是由于变焦变化或向用户靠近造成的。(这种效果在阿尔弗雷德·希区柯克的电影《迷魂记》中被戏剧性地运用,同时变焦和摄像机运动的变化产生了令人不安的效果。)
如果我们写出与之对应的投影方程,这种模糊性就变得更加清晰了
其中,rx、ry和rz是R的三行。如果到物体中心的距离tz≥ⅡpⅡ(即物体的大小),则分母近似为tz,投影物体的整体比例取决于f与tz的比值。因此,这两个量很难区分。
为了更清楚地看到这一点,设ηz = tz-1和s = ηz f。然后我们可以将上面的方程重写为
(Szeliski和Kang 1994;Pighin、Hecker等1998)。如果我们观察的是已知物体(即,三维坐标p已知),则可以可靠地估计投影尺度s。逆距离ηz现在大多与s的估计值脱钩,可以从物体旋转时的透视缩短量来估算。此外,随着镜头变长,即投影模型变为正射投影,无需用正射投影模型替换透视成像模型,因为可以使用相同的方程,且ηz→0(而f和tz都趋向于无穷大)。这使得我们能够自然地建立正射重建技术(如分解)与其投影/透视对应技术之间的联系(第11.4.1节)。
上述成像模型均假设相机遵循线性投影模型,即世界中的直线在图像中也是直线。(这是由于线性矩阵运算应用于齐次坐标而自然得出的结果。)不幸的是,许多广角镜头存在明显的径向畸变,这表现为直线投影中的可见曲率。(有关镜头光学的更详细讨论,包括色差,请参见第2.2.3节。)如果不考虑这种畸变,就无法创建高度准确的逼真重建。例如,未考虑径向畸变构建的图像马赛克通常会因对应特征在像素融合前的错位而产生模糊(第8.2节)。
幸运的是,在实际操作中,补偿径向畸变并不那么困难。对于大多数镜头而言,一个简单的四次方畸变模型就能产生良好的效果。设(xc,yc)是透视分割后但在焦距f缩放和图像中心(cx,cy)移动前获得的像素坐标,即,
径向畸变模型指出,观测图像中的坐标会根据其径向距离的大小而向中心偏移(桶形畸变)或远离中心(枕形畸变)(图2.13a-b)。最简单的径向畸变模型使用低阶多项式,例如:
c = yc (1 + h1 r + h2 r),
其中r = x + y,h1和h2称为径向畸变参数。7该模型,
该模型还包括一个切向分量,以考虑透镜偏心,最初由Brown(1966)在摄影测量文献中提出,因此有时被称为Brown或Brown-Conrady模型。然而,通常忽略畸变的切向分量,因为它们可能导致估计不那么稳定(Zhang2000)。
径向畸变步骤之后,可以使用以下公式计算最终像素坐标
xs = fc + cx ys = fc + cy .
如第11.1.4节所述,可以使用多种技术来估计给定透镜的径向畸变参数。
有时,上述简化模型无法准确模拟复杂透镜产生的真实畸变(尤其是在非常宽的角度下)。更完整的分析模型还包括切向畸变和偏心畸变(Slama1980)。
7有时,xc和c之间的关系是反过来的,即xc = c(1 + 1 +
2).如果我们通过除以f将图像像素映射到(扭曲的)光线中,这是很方便的。然后我们可以消除畸变
光线和空间中的真实3D光线。
图2.13径向镜头畸变:(a)桶形、(b)枕形和(c)鱼眼。鱼眼
图像从侧面到侧面跨度近180°。
偏离光轴的角的投影(Xiong和Turkowski,1997),
r = f θ; (2.80)
这与方程(8.55–8.57)描述的极坐标投影相同。由于从中心到视点的距离(像素)与视角之间的映射主要呈线性关系,这类镜头有时被称为f-θ镜头,这可能是流行的RICOH THETA 360°相机得名的原因。熊和图尔科夫斯基(1997)描述了如何通过在φ中增加一个额外的二次校正来扩展这一模型,以及如何使用直接(基于强度的)非线性最小化算法从一组重叠的鱼眼图像中估计未知参数(投影中心、缩放因子等)。
对于更大、更不规则的畸变,可能需要使用样条函数的参数化畸变模型(Goshtasby1989)。如果透镜没有单一的投影中心,可能需要分别建模每个像素对应的三维线(而不是方向)(Gremban,Thorpe和Kanade1988;Champleboux,Lavall e等1992a;Grossberg和Nayar2001;Sturm和Ramalingam2004;Tardif,Sturm等2009)。这
技术中的一些在第11.1.4节中有更详细的描述,该节讨论了如何校准透镜畸变。
有一个与简单的径向畸变模型相关的微妙问题,通常被轻描淡写地忽略。我们引入了透视投影和最终传感器阵列投影步骤之间的非线性关系。因此,一般来说,我们无法将任意的3×3矩阵K乘以一个旋转矩阵,使其变为上三角形式并将其吸收进全局旋转中。然而,这种情况并没有乍看之下那么糟糕。对于许多应用而言,保持简化后的对角线形式(2.59)仍然是一个合适的模型。此外,如果我们纠正径向和其他畸变到能够保留直线的程度,我们有
图2.14光度图像形成的简化模型。光由一个或多个光源发出,然后从物体表面反射。这部分光线的一部分被导向相机。这个简化模型忽略了多次反射,这在现实场景中经常发生。
基本上将传感器转换回线性成像器,之前的分解仍然适用。
2.2 光度图像形成
在建模图像形成过程时,我们描述了世界中的三维几何特征如何投影到图像中的二维特征。然而,图像并不是由二维特征组成的。相反,它们是由离散的颜色或强度值构成的。这些值来自哪里?它们与环境中的光照、表面属性和几何形状、相机光学以及传感器特性(图2.14)有何关系?在本节中,我们将开发一套模型来描述这些相互作用,并制定图像形成的生成过程。关于这些主题的更详细讨论可以在计算机图形学和图像合成的教科书中找到(Cohen和Wallace 1993;Sillion和Puech 1994;Watt 1995;Glassner 1995;Weyrich,Lawrence等2009;Hughes,van Dam等2013;Marschner和Shirley 2015)。
图像离不开光。要生成图像,场景必须被一个或多个光源照亮。(某些模式如荧光显微镜和X射线断层扫描不符合这一模型,但本书不涉及这些。)光源通常可以分为点光源和面光源。
点光源起源于空间中的单一位置(例如,一个小灯泡),也可能位于无穷远处(例如,太阳)。(请注意,在某些应用中,如模拟柔和阴影(半影),太阳可能需要被视为一个区域光源。)除了位置外,点光源还具有强度和色谱,即波长分布L(λ)。光源的强度随光源与被照亮物体之间距离的平方而衰减,因为相同的光被分散到更大的(球形)区域。光源还可能有方向衰减(依赖性),但在我们的简化模型中忽略这一点。
区域光源更为复杂。一个简单的区域光源,如带有扩散器的荧光天花板灯,可以建模为一个有限的矩形区域,向所有方向均匀发光(Cohen和Wallace 1993;Sillion和Puech 1994;Glassner 1995)。当分布强烈定向时,可以使用四维光场来替代(Ashdown 1993)。
更复杂的光照分布,例如,可以近似表示坐在室外庭院中的物体上的入射光照,通常可以用环境映射(Greene1986)(最初称为反射映射(Blinn和Newell1976))来表示。
将入射光的方向映射到颜色值(或波长,λ),
L( ; λ); (2.81)
并且等同于假设所有光源都位于无穷远处。环境贴图可以表示为一组立方体面(Greene 1986),也可以表示为单个经纬度图(Blinn和Newell 1976),或者表示为反射球的图像(Watt 1995)。获取真实环境贴图的大致模型的一种便捷方法是拍摄一个反射镜面球的图像(有时会附带一个较暗的球以捕捉高光),然后将此图像解包到所需的环境贴图上(Debevec 1998)。Watt(1995)对环境映射进行了很好的讨论,包括用于将方向映射到像素的三个最常用表示形式所需的公式。
当光线照射到物体表面时,会发生散射和反射(图2.15a)。为了描述这种相互作用,已经开发了多种模型。在本节中,我们首先介绍最通用的形式——双向反射分布函数,然后探讨一些更专业的模型,包括漫反射、镜面反射和Phong着色模型。我们还将讨论如何利用这些模型来计算场景对应的全局光照。
图2.15 (a)光照射到表面时发生散射。(b)双向反射率分布函数(BRDF)f(θi;φi;θr;φr)由入射角参数化。
与局部表面坐标系方向相交、i和反射、r光线方向
(x ; y ; ).
双向反射分布函数(BRDF)
最普遍的光散射模型是双向反射率分布函数(BRDF)。相对于表面的某个局部坐标系,BRDF是一个四维函数,描述了每个波长到达入射方向i的部分在反射方向r中的发射量(图2.15b)。该函数可以用入射方向和反射方向相对于表面坐标系的角度来表示。
fr (θi ; φi ; θr ; φr ; λ). (2.82)
BRDF是互易的,即由于光传输的物理特性,可以交换i和r的角色,仍然得到相同的结果(这有时被称为亥姆霍兹互易)。
大多数表面是各向同性的,即在光传输方面,表面上没有优先方向。(例外情况是各向异性表面,如拉丝(划痕)铝,其反射率取决于光线与划痕方向的关系。)对于各向同性材料,我们可以简化BRDF为
fr (θi;θr;jφr - φi j;λ)或fr (i;r;;λ); (2.83)
图2.16这张雕像的特写显示了漫反射(平滑阴影)和镜面反射(闪亮高光),以及由于光线可见度降低和相互反射而造成的凹槽和褶皱变暗。(照片由加州理工学院视觉实验室提供,http://www.vision.caltech.edu/archive.html。)
为了计算在给定光照条件下,从表面点p沿方向r射出的光量,我们需要积分入射光Li(i;λ)与BRDF的乘积(一些作者将这一步称为卷积)。考虑到缩短因子cos+ θi,我们得到
在哪里
cos+ θi = max (0; cos θi ). (2.85)
如果光源是离散的(有限数量的点光源),我们可以用求和代替积分
给定表面的BRDF可以通过物理建模(Torrance和Sparrow 1967;Cook和Torrance 1982;Glassner 1995)、启发式建模(Phong 1975;Lafortune、Foo等1997)或通过经验观察(Ward 1992;Westin、Arvo和Torrance 1992;Dana、van Ginneken等1999;Marschner、Westin等2000;Matusik、Pfister等2003;Dorsey、Rushmeier和Sillion 2007;Weyrich、Lawrence等2009;Shi、Mo等2019)获得。典型的BRDF通常可以分为漫反射和镜面反射两部分,如下所述。
图2.17 (a)由缩短引起的反射光减少取决于入射光方向i与表面法线之间的夹角的余弦值i·。(b)镜面(镜面反射):入射光线方向i沿表面法线反射到镜面方向^si。
漫射反射
漫射成分(也称为兰伯特反射或哑光反射)均匀地向各个方向散射光线,这是我们通常与阴影现象联系在一起的现象,例如,在观察雕像时所看到的表面法线上的平滑(非反光)强度变化(图2.16)。漫射反射还经常赋予光线强烈的体色,因为这是由物体材料内部选择性吸收和重新发射光线引起的(Shafer1985;Glassner1995)。
虽然光在所有方向上均匀散射,即BRDF是恒定的,
fd(i;r;;λ)= fd (λ); (2.87)
光的强度取决于入射光线方向与表面法线θi之间的角度。这是因为,在倾斜的角度下,相同光照面积会变得更大,当出射表面法线远离光源时,整个区域完全被遮挡(图2.17a)。(想象一下你如何面向太阳或壁炉以获得最大的温暖,以及手电筒斜射到墙上比直射时亮度低的情况。)因此,漫反射的阴影方程可以表示为
在哪里
[i·]+ = max(0,i·)。 (2.89)
典型BRDF的第二个主要组成部分是镜面(光泽或高光)反射,这强烈依赖于出射光的方向。考虑光线从镜面反射的情况(图2.17b)。入射光线沿表面法线旋转180°后被反射。使用与方程(2.29–2.30)相同的符号,我们可以计算镜面反射方向^si为
^si = v Ⅱ - v丄 = (2^n^nT - I)vi. (2.90)
因此,光线在给定方向r上的反射量取决于视向r与镜面方向^si之间的夹角θs = cos-1(r·^si)。例如,Phong(1975)模型使用了该角度余弦值的幂,
fs (θs ; λ) = ks (λ) coske θs , (2.91)
而Torrance和Sparrow(1967)的微面模型使用高斯,
fs (θs ; λ) = ks (λ) exp(-cθ). (2.92)
较大的指数ke(或逆高斯宽度cs )对应于具有明显高光的更多镜面表面,而较小的指数则更好地模拟具有较柔和光泽的材料。
光阴影
冯(1975)将反射的漫射和镜面成分与另一个术语结合,他称之为环境光照。这一术语解释了物体通常不仅受到点光源的照射,还受到与漫反射相关的普遍漫射光照的影响(例如房间内的墙壁)或远处的光源,如蓝天。在冯模型中,环境光项不依赖于表面的方向,而是取决于环境光照La (λ)和物体ka (λ)的颜色,
fa (λ) = ka (λ)La (λ). (2.93)
图2.18在固定入射光照方向下通过Phong着色模型BRDF的横截面:(a)分量值随偏离表面法线角度的变化;(b)极坐标图。Phong指数ke的值由“Exp”标签表示,光源与法线呈30°角。
图2.18显示了与表面法线(在包含光照方向和观察者平面内)成一定角度时的Phong着色模型组件的典型集合。
通常,环境反射色分布ka (λ)和漫反射色分布kd (λ)是相同的,因为它们都源自表面材料内部的次表面散射(体反射)(Shafer 1985)。镜面反射色分布ks (λ)通常是均匀的(白色),因为它由界面反射引起,不会改变光的颜色。(例外情况是金属材料,如铜,与更常见的电介质材料,如塑料相对。)
环境光照La (λ)通常与直接光源Li (λ)的颜色不同,例如,在晴朗的户外场景中可能是蓝色,而在用蜡烛或白炽灯照明的室内则可能是黄色。(阴影区域存在环境天空光照是导致阴影比相应亮部更蓝的原因)。还需注意的是,Phong模型(或任何阴影模型)中的漫反射成分取决于入射光源i的角度,而镜面反射成分则取决于观察者vr与镜面反射方向^si之间的相对角度(后者本身又取决于入射光方向i和表面法线)。
冯氏着色模型在物理精度方面已被计算机图形学中的新模型所超越,包括库克和托伦斯(1982)基于托伦斯和斯帕罗(1967)的原始微面模型开发的模型。最初,计算机图形硬件实现了冯氏模型,但可编程像素着色器的出现使得使用更复杂的模型成为可能。
Torrance和Sparrow(1967)的反射模型也是Shafer(1985)的双色反射模型的基础,该模型指出,从单一光源照射的均匀材料的表观颜色取决于两个项的总和,
即,界面反射光的辐射度Li和表面物体反射的辐射度Lb。每个辐射度都是相对功率谱c(λ)和几何量m(r;i;)的简单乘积,其中c(λ)仅依赖于波长,而m(r;i;)仅依赖于几何形状。(该模型可以通过假设单个光源且没有环境光照,并重新排列项,从广义版本的Phong模型中轻松推导出来。)双色模型已成功应用于计算机视觉领域,用于分割具有大阴影变化的镜面彩色物体(Klinker 1993),并启发了局部双色模型,例如拜耳模式去马赛克化(Bennett,Uyttendaele等2006)。
全局光照(光线追踪和辐射度)
迄今为止提出的简单阴影模型假设光线从光源发出,反射到可见于相机的表面,从而改变强度或颜色,最终到达相机。实际上,光源可能会被遮挡物遮住,光线在从光源到相机的路径中可能多次绕过场景。
传统上,有两种方法用于模拟此类效果。如果场景主要为镜面反射(经典例子包括玻璃物体和高抛光或镜面球体组成的场景),首选的方法是光线追踪或路径追踪(Glassner 1995;Akenine-Moeller和Haines 2002;Marschner和Shirley 2015),这种方法会从相机出发,沿着多条路径向光源(或反之)追踪单个光线。如果场景主要由均匀反照率的简单几何照明器和表面组成,则更倾向于使用辐射度(全局光照)技术(Cohen和Wallace 1993;Sillion和Puech 1994;Glassner 1995)。两种技术的结合也被开发出来(Walace、Cohen和Greenberg 1987),以及更为通用的光传输技术,用于模拟如波纹水面上投射的焦散等效果。
基本的光线追踪算法将光线与摄像机图像中的每个像素关联起来,并找到其与最近表面的交点。然后,可以使用前面介绍的简单着色方程(例如,公式(2.94))计算出主要贡献。
对于该表面元素可见的所有光源。(另一种计算哪些表面被光源照亮的技术是生成阴影贴图或阴影缓冲区,即从光源视角渲染场景,然后将渲染像素的深度与贴图进行比较(Williams 1983;Akenine-Mo...ller和Haines 2002)。)随后可以沿着镜面反射方向向场景中的其他物体投射额外的次级光线,同时跟踪镜面反射引起的任何衰减或颜色变化。
辐射度通过将亮度值与场景中的矩形表面区域(包括区域光源)关联起来工作。场景中任意两个(相互可见的)区域之间的光交换量可以被捕捉为一个形式因子,这取决于它们的相对位置和表面反射特性,以及随着光线分布到更大的有效球体中而产生的1/r²衰减(Cohen和Wallace 1993;Sillion和Puech 1994;Glassner 1995)。然后可以建立一个大型线性系统来求解每个区域块的最终亮度,使用光源作为强迫函数(右侧)。一旦系统求解完成,可以从任何所需视角渲染场景。在某些情况下,可以使用计算机视觉技术从照片中恢复场景的整体光照(Yu、Debevec等1999)。
基本辐射算法没有考虑某些近场效应,例如角落内的变暗和划痕,或者由于其他表面的部分遮挡而造成的有限环境光照。这些效应已经在许多计算机视觉算法中得到了利用(Nayar、Ikeuchi和Kanade 1991;Langer和Zucker 1994)。
虽然所有这些全局光照效果都可能对场景的外观产生强烈影响,从而影响其三维解释,但本书并未详细讨论这些内容。(但是,请参见第13.7.1节中关于从真实场景和物体恢复BRDF的讨论。)
一旦场景中的光线到达相机,它仍然必须通过镜头才能到达模拟或数字传感器。对于许多应用而言,将镜头视为一个理想的针孔就足够了,它只是将所有光线投射到一个共同的投影中心(图2.8和2.9)。
然而,如果我们要处理诸如焦点、曝光、暗角和像差等问题,我们需要开发一个更复杂的模型,这就是光学研究的切入点(Mo...ller1988;Ray2002;Hecht2015)。
图2.19显示了最基本的透镜模型的示意图,即由单片玻璃制成的薄透镜,其两侧曲率非常低且相等。根据透镜定律(可以通过光束折射的简单几何论证得出),
图2.19焦距为f的薄透镜将位于透镜前方距离zo的平面发出的光聚焦到距离zi的焦平面上(垂直灰线紧邻c)。当焦平面(垂直灰线紧邻c)向前
移动时,图像不再清晰,模糊圈(细长线段)取决于图像平面移动距离△zi与透镜孔径直径d之间的关系。视场(f.o.v.)取决于传感器宽度W与焦距f的比值(更精确地说,是聚焦距离zi,通常接近于f)。
物体到镜头的距离zo与成像在镜头后形成的距离zi之间的关系可表示为
, (2.97)
其中f称为透镜的焦距。如果我们让zo→∞,即调整透镜(移动像面),使无穷远处的物体处于焦点上,我们得到zi = f,这就是为什么我们可以认为焦距为f的透镜在近似情况下等同于距离焦平面f处的一个针孔(图2.10),其视场由公式(2.60)给出。
如果焦平面偏离其正确的对焦位置zi(例如,通过转动镜头上的对焦环),位于zo的物体将不再清晰,如图2.19中的灰色平面所示。失焦的程度由弥散圆c表示(在灰色平面上以短粗的蓝色线段表示)。弥散圆的方程可以通过相似三角形推导得出;它取决于焦平面内的移动距离△zi与原始对焦距离zi的关系以及光圈直径d(见练习2.4)。
场景中允许的深度变化,将模糊圈限制在可接受的数量,通常称为景深,是聚焦距离和光圈的函数,如许多镜头标记所示(图2.20)。由于这个
景深取决于光圈直径d,我们还必须知道它如何随通常显示的f数变化,通常表示为f/#或N,定义为
其中焦距f和孔径直径d以相同的单位(例如,毫米)测量。
通常写入光圈值的方法是将f/#中的#替换为实际数值,例如f/1.4、f/2、f/2.8、...、f/22。(或者,我们也可以表示为N = 1.4等。)一个简单的理解方法是注意到焦距除以光圈值等于光圈直径d,因此这些公式实际上就是光圈直径的计算公式。
请注意,f数字通常以全点表示,这些数字是√2的倍数,因为每次选择更小的f数字
,入口光圈的面积都会翻倍。(这种翻倍也称为曝光值或EV的变化。它对到达传感器的光线量的影响与将曝光时间加倍相同,例如从1/250增加到1/125;参见练习2.5。)
现在你已经知道如何在光圈系数和光圈直径之间进行转换,你可以根据焦距f、弥散圆c和焦点距离zo构建自己的景深图,如练习2.4所解释的那样,并观察这些图表与实际镜头上的观察结果有多吻合,例如图2.20中所示的镜头。
当然,真实的透镜并非无限薄,因此会受到几何像差的影响,除非使用复合元件来校正这些像差。经典的五种塞德尔像差,当使用三阶光学时产生,包括球面像差、彗差、散光、场曲和畸变(Mo...ller1988;Ray2002;Hecht2015)。
图2.21在受色差影响的透镜中,不同波长的光(例如红色和蓝色箭头)聚焦在不同的焦距f上,因此具有不同的深度zi,导致几何(平面内)位移和失焦。
由于玻璃的折射率随波长略有变化,简单的透镜会受到色差的影响,即不同颜色的光聚焦在略微不同的距离(因此放大倍数也略有不同),如图2.21所示。波长依赖的放大倍数,即横向色差,可以建模为每种颜色的径向畸变(第2.1.5节),因此可以使用第11.1.4节中描述的技术进行校准。由纵向色差引起的波长依赖模糊可以通过第10.1.4节中描述的技术进行校准。不幸的是,由纵向像差引起的模糊更难消除,因为高频成分会被强烈衰减,从而难以恢复。
为了减少色差和其他类型的像差,当今大多数摄影镜头都是由不同玻璃元件(带有不同涂层)组成的复合透镜。这些透镜不能再被建模为只有一个节点P,所有光线都必须通过这个节点(当用针孔模型近似透镜时)。相反,这些透镜既有前节点,光线从这里进入透镜,也有后节点,光线从这里离开并前往传感器。实际上,在进行仔细的相机校准时,只有前节点的位置是感兴趣的,例如,在确定旋转点以捕捉无视差全景图时(参见第8.2.3节和Littlefield(2006)及Houghton(2013))。
然而,并非所有镜头都能建模为具有单一节点。特别是像鱼眼镜头(第2.1.5节)和某些由透镜和曲面镜组成的折反射成像系统(Baker和Nayar 1999)这样的广角镜头,并没有一个所有获取光线都通过的单一点。在这种情况下,最好
图2.22光照射到面积δi的像素上的光量取决于孔径直径d与焦距f之比的平方,以及离轴角Q余弦的四次方cos4 Q。
如第2.1.5节所述,明确构建像素坐标与空间中的三维射线之间的映射函数(查找表)(Gremban、Thorpe和Kanade1988;Champleboux、Lavall e等人1992a;Grossber
和Nayar 2001;Sturm和Ramalingam 2004;Tardif、Sturm等人2009)。
暗角
现实世界中透镜的另一个特性是暗角,即图像亮度向图像边缘下降的趋势。
通常有两种现象对此效果有所贡献(Ray2002)。第一种称为自然暗角,是由于物体表面、投影像素和镜头光圈的缩短造成的,如图2.22所示。考虑从位于离轴角度Q处的大小为δo的物体表面区域发出的光线。因为这个区域相对于相机镜头被缩短了,到达镜头的光量减少了cos Q倍。到达镜头的光量还受到通常的1/r²衰减影响;在这种情况下,距离ro = zo / cos Q。实际通过光圈的面积被额外缩短了一个cos Q倍,即从点O看去,光圈是一个尺寸为d×d cos Q的椭圆。综合所有这些因素,我们看到从O发出并穿过光圈到达位于I的图像像素的光量与
由于三角形△OP Q和△IP J相似,物体表面δo和图像像素δi的投影面积与zo: zi成相同的(平方)比例,
将这些组合在一起,我们得到到达像素i的光量与孔径直径d、聚焦距离zi≈f和离轴角Q之间的最终关系,
(2.101)
称为场景辐射度L与到达像素传感器的光(辐照度)E之间的基本辐射关系,
(Horn 1986;Nalwa 1993;Ray 2002;Hecht 2015)。请注意,在这个公式中,光量取决于像素表面积(这也是为什么便携式相机的小传感器比单反相机(SLR)更嘈杂的原因),f数的平方倒数N = f/d(2.98),以及离轴衰减的四次方cos4 Q,这是自然暗角效应。
另一种主要的暗角类型称为机械暗角,由复式透镜中靠近边缘的透镜元件内部光线遮挡引起,不进行实际透镜设计的全光路追踪就难以用数学方法描述。然而,与自然暗角不同,通过减小相机光圈(增加f值)可以减少机械暗角。此外,还可以使用积分球、均匀照明目标或相机旋转等特殊设备对其进行校准(与自然暗角一起),具体讨论见第10.1.3节。
2.3 数码相机
从一个或多个光源开始,光线反射一次或多次后穿过相机的光学系统(镜头),最终到达成像传感器。这些到达传感器的光子是如何转换成我们观察到的数字图像(红、绿、蓝)值的呢?在本节中,我们将建立一个简单的模型,以考虑最重要的效应,如曝光(增益和快门速度)、非线性映射、采样和混叠以及噪声。图2.23基于Healey和Kondepudy(1994)、Tsin、Ramesh和Kanade(2001)以及Liu、Szeliski等人(2008)开发的相机模型,展示了现代数码相机处理阶段的一个简化版本。Chakrabarti、Scharstein和Zickler(2009)开发了一个复杂的24参数模型,该模型更接近于数码相机中的实际处理过程,而Kim、Lin等人(2012)、Hasinoff、Sharlet等人(2016)以及Karaimer和Brown则进一步研究了这一领域。
图2.23图像传感管道,显示各种噪声源以及典型的数字后处理步骤。
(2016)提供了更现代的相机内处理流程模型。最近,布鲁克斯、米尔登霍尔等人(2019)开发了详细的相机内图像处理流程模型,用于将噪声JPEG图像反向(未处理)还原为其原始RAW格式,以便更好地去噪;而曾、余等人(2019)则开发了一种可调相机处理流程模型,可用于图像质量优化。
落在成像传感器上的光线通常由活动感应区域接收,在曝光期间集成(通常以秒的分数表示,例如,,感测放大器。目前数字静态和视频摄像机中使用的两种主要传感器是电荷耦合器
(CCD)和互补金属氧化物硅(CMOS)。
在CCD中,光子在曝光时间内会在每个活性阱中累积。然后,在传输阶段,电荷以一种“接力赛”的方式从一个阱转移到另一个阱,直到它们被沉积到感应放大器上,放大信号并传递给模数转换器(ADC)。较旧的CCD传感器容易发生溢出现象,即一个过度曝光像素的电荷会溢入相邻的像素,但大多数新型CCD都采用了防溢技术(即多余的电荷可以流入的“凹槽”)。
图2.24数字成像传感器:(a)CCD将光生电荷从一个像素移动到另一个像素,并在输出节点将其转换为电压;CMOS成像器则在每个像素内部将电荷转换为电压(Litwiller 2005)©2005光子学光谱;来自https://micro.magnet.fsu.edu/primer/digitalimaging/ cmosimagesensors.html的CMOS像素传感器剖面图。
光电探测器,可以选择性地进行门控以控制曝光时间,并在读出前通过多路复用方案局部放大。传统上,在质量敏感的应用中,如数码单反相机,CCD传感器的表现优于CMOS,而CMOS则更适合低功耗应用,但如今大多数数码相机都使用了CMOS。
影响数字图像传感器性能的主要因素包括快门速度、采样间距、填充因子、芯片尺寸、模拟增益、传感器噪声以及模数转换器的分辨率(和质量)。许多这些参数的实际值可以从嵌入数字图像中的EXIF标签读取,而其他参数则可以从相机制造商的规格表或相机评测和校准网站获取。
快门速度。快门速度(曝光时间)直接影响到达传感器的光线量,从而决定图像是否过曝或欠曝。(对于明亮场景,为了获得浅景深或运动模糊效果,摄影师有时会使用中性密度滤镜。)对于动态场景,快门速度还决定了最终照片中的运动模糊程度。通常,较高的快门速度(较少的运动模糊)会使后续分析更加容易(有关消除这种模糊的技术,请参见第10.3节)。然而,在录制视频以供显示时,为了避免频闪效应,可能需要一些运动模糊。
采样间距。采样间距是指成像芯片上相邻传感器单元之间的物理间隔(图2.24)。采样间距越小,传感器的采样密度越高,因此在给定的有源芯片面积内,分辨率(以像素计)更高。然而,较小的间距也意味着每个传感器的面积更小,无法积累足够的光子;这使得它对光线的敏感度降低,更容易产生噪声。
填充因子。填充因子是指实际感光区域大小与理论可用感光区域(水平和垂直采样间距的乘积)的比例。较高的填充因子通常更优,因为它们能捕捉更多的光线并减少混叠现象(见第tion2.3.1节)。虽然最初填充因子受限于需要在活动感光区域之间放置额外的电子元件,但现代背面照明(或背照式)传感器结合高效的微透镜设计,已大大消除了这一限制(Fontaine 2015)。相机的填充因子可以通过光度相机校准过程经验确定(见第10.1.4节)。
芯片尺寸。
),而数码单反相机则试图接近传统35毫米胶片画幅的大小。17当整体设备尺寸不重要时,较大的芯片尺寸更为理想,因为每个传感器单元可以更敏感地捕捉光线。(对于紧凑型相机而言,较小的芯片意味着所有光学元件都可以按比例缩小。)然而,更大的芯片生产成本更高,不仅因为每片晶圆中可容纳的芯片数量减少,还因为芯片缺陷的概率会随着芯片面积的增加呈指数级增长
模拟增益。在模数转换之前,通常会通过一个感知放大器来增强检测信号。在摄像机中,这些放大器的增益传统上由自动增益控制(AGC)逻辑控制,以调整这些值以获得良好的整体曝光。在较新的数码静态相机中,用户现在可以通过ISO设置对此增益进行额外控制,ISO通常以ISO标准单位表示,如100、200或400。由于大多数相机中的自动曝光控制也会调整
这些数字指的是旧摄像机中使用的视频管的“管径”。佳能SD800相机上的1/2.5英寸传感器实际上测量为5.76毫米×4.29毫米,即相当于35毫米全画幅(36毫米×24毫米)DSLR传感器尺寸的六分之一(在侧面)。
当DSLR芯片未能填满35毫米全画幅时,会对镜头焦距产生倍增效应。例如,一个只有35毫米画幅0.6倍大小的芯片,会使50毫米镜头的图像角范围与50/0.6 = 50×1.6=80毫米镜头相同,如公式(2.60)所示。
光圈和快门速度,手动设置ISO会从相机控制中移除一个自由度,就像手动指定光圈和快门速度一样。理论上,更高的增益可以让相机在低光条件下表现更好(当光圈已经最大时,长时间曝光可以减少运动模糊)。然而,在实际操作中,较高的ISO设置通常会放大传感器的噪点。
传感器噪声。在整个感知过程中,噪声来自各种来源,可能包括固定模式噪声、暗电流噪声、散粒噪声、放大器噪声和量化噪声(Healey和Kondepudy 1994;Tsin、Ramesh和Kanade 2001)。采样图像中最终存在的噪声量取决于所有这些因素,以及入射光(由场景辐射度和光圈控制)、曝光时间和传感器增益。此外,在低光照条件下,由于光子计数较低导致的噪声,泊松模型可能比高斯模型更合适(Alter、Matsushita和Tang 2006;Matsushita和Lin 2007a;Wilburn、Xu和Matsushita 2008;Takamatsu、Matsushita和Ikeuchi 2008)。
正如第10.1.1节中详细讨论的那样,Liu、Szeliski等人(2008)使用该模型,结合Grossberg和Nayar(2004)获得的相机响应函数(CRFs)的经验数据库,来估计给定图像的噪声水平函数(NLF),该函数预测了给定像素的整体噪声方差,作为其亮度的函数(每个颜色通道分别估计一个NLF)。另一种方法是在拍摄前访问相机,通过多次拍摄包含各种颜色和亮度的场景来预校准NLF,例如图10.3b所示的麦凯布色卡(McCamy、Marcus和Davidson 1976)。(在估计方差时,务必丢弃或降低梯度较大的像素权重,因为曝光之间的微小变化会影响这些像素的感知值。)不幸的是,由于传感系统内部发生的复杂相互作用,预校准过程可能需要针对不同的曝光时间和增益设置重复进行。
在实际应用中,大多数计算机视觉算法,如图像去噪、边缘检测和立体匹配,都至少需要一个初步的噪声水平估计。除了能够预先校准相机或对同一场景进行多次拍摄外,最简单的方法是寻找值接近常数的区域,并估计这些区域中的噪声方差(刘、斯泽利斯基等,2008)。
模拟分辨率。成像传感器内部模拟处理链的最后一步是模拟到数字转换(ADC)。虽然可以使用多种技术来实现这一过程,但两个重要的量是该过程的分辨率
(它产生的位数)和其噪声水平(这些位中有多少在实际应用中是有用的)。对于大多数相机而言,所引用的位数(压缩JPEG图像为8位,而某些单反相机提供的RAW格式则标称为16位)超过了实际可用的位数。判断的最佳方法是校准特定传感器的噪声,例如,通过拍摄同一场景的多次照片,并绘制估计噪声与亮度的关系图(练习2.6)。
数字后处理。一旦到达传感器的辐照度值被转换为数字位,大多数相机会执行多种数字信号处理(DSP)操作来增强图像,然后再压缩和存储像素值。这些操作包括彩色滤光阵列(CFA)去马赛克、白点设置以及通过伽玛函数映射亮度值以增加信号的感知动态范围。我们将在第2.3.2节中讨论这些主题,但在那之前,我们先回到与传感器阵列填充因子相关的混叠问题
新型成像传感器。成像传感器及相关技术如深度传感器的能力正在迅速发展。跟踪这些发展的会议包括由影像科学与技术学会赞助的电子影像科学与技术IS&T研讨会和影像传感器世界博客。
当一束光照射到图像传感器上,落在成像芯片的有源感应区域时会发生什么?到达每个有源单元的光子会被积分并数字化,如图2.24所示。然而,如果芯片上的填充因子较小且信号没有其他带限,可能会产生视觉上不悦的混叠现象。
为了探讨混叠现象,我们首先来看一个一维信号(图2.25),其中包含两个正弦波,一个频率为f = 3/4,另一个频率为f = 5/4。如果我们以f = 2的频率采样这两个信号,我们会发现它们产生了相同的样本(用黑色表示),因此我们说它们是混叠的。为什么这是一个不良效应?本质上,我们无法重建原始信号,因为我们不知道哪个原始频率存在。
事实上,Shannon的采样定理表明,重建信号所需的最小采样(Oppenheim和Schafer1996;Oppenheim、Schafer和Buck1999)速率
图2.25一维信号的混叠:当采样频率为f = 2时,频率为f = 3/4的蓝色正弦波和频率为f = 5/4的红色正弦波具有相同的数字样本。即使经过100%填充因子的矩形滤波器卷积后,这两个信号虽然不再具有相同的幅度,但仍然存在混叠现象,即采样的红色信号看起来像是蓝色信号的倒置低幅度版本。(右侧图像放大以提高可见度。实际正弦波的幅度分别为其原始值的30%和-18%。)
从其瞬时采样值必须至少是最高频率的两倍,19
fs ≥ 2fmax. (2.103)
信号中的最大频率称为奈奎斯特频率,最小采样频率的倒数rs = 1/fs称为奈奎斯特速率。
然而,你可能会问,由于成像芯片实际上是在有限区域内平均光场,那么点采样的结果是否仍然适用?在传感器区域内取平均值确实会减弱一些高频成分。但是,即使填充因子为100%,如图2.25右侧所示,高于奈奎斯特极限(采样频率的一半)的频率仍然会产生混叠信号,尽管其幅度小于相应的带限信号。
一个更令人信服的理由是,使用质量较差的滤波器(如方波滤波器)对信号进行降采样时,混叠效应会更加明显。图2.26展示了一个高频线性调频图像(之所以称为线性调频,是因为频率随时间增加),并显示了用25%填充因子面积传感器、100%填充因子传感器以及高质量9抽头滤波器对其进行采样的结果。关于降采样(抽取)滤波器的更多示例,可参见第3.5.2节和图3.29。
预测成像系统(甚至图像处理算法)产生的混叠量的最佳方法是估计点扩散函数(PSF),它表示特定像素传感器对理想点光源的响应。PSF是光学系统(透镜)引起的模糊与有限分辨率的组合(卷积)。
图2.26二维信号的混叠:(a)原始全分辨率图像;(b)使用25%填充因子的25倍下采样×滤波器;(c)使用100%填充因子的25倍下采样×滤波器;(d)使用高质量9抽头滤波器的25倍下采样×滤波器。请注意,使用低质量滤波器时,高频部分被混叠到可见频率中,而9抽头滤波器则完全去除了这些高频成分。
芯片传感器的集成区域。20
如果我们知道镜头的模糊函数以及成像芯片的填充因子(传感器面积形状和间距)(可选地,还包括抗混叠滤波器的响应),我们就可以将这些参数卷积(如第3.2节所述)以获得PSF。图2.27a显示了一个假设其模糊函数为半径等于像素间距s的圆盘的镜头的一维截面,该镜头的水平填充因子为80%。通过对这个PSF进行傅里叶变换(第3.4节),我们可以得到调制传递函数(MTF),从而估计混叠量,即傅里叶幅度在f≤fs奈奎斯特频率之外的区域。21如果我们将镜头失焦,使模糊函数的半径变为2s(图2.27c),我们会发现混叠量显著减少,但图像细节(接近f = fs的频率)也减少了。
在实验室条件下,可以通过观察一个点光源(如黑色纸板上的针孔)从后面照亮来估算PSF(精确到像素级别)。然而,这种PSF(即针孔的实际图像)仅能精确到像素分辨率,虽然它可以模拟较大的模糊(例如由失焦引起的模糊),但无法模拟PSF的亚像素形状并预测混叠的程度。另一种技术,如第10.1.4节所述,是观察校准图案(例如由倾斜的台阶边缘组成的图案(Reichenbach,Park和Narayanswamy 1991;Williams和Burns 2001;Joshi,Szeliski和
图2.27样本点扩散函数(PSF):(a)中模糊圆盘(蓝色)的直径等于像素间距的一半,而(c)中的直径是像素间距的两倍。感测芯片的水平填充因子为80%,以棕色显示。这两个核的卷积给出了点扩散函数,以绿色显示。PSF的傅里叶响应(MTF)在(b)和(d).中绘制。奈奎斯特频率以上的区域,即发生混叠的地方,用红色表示。
Kriegman2008))的理想外观可以重新合成到亚像素精度。
除了在图像采集过程中发生外,混叠现象还可能出现在各种图像处理操作中,如重采样、上采样和下采样。第3.4节和第3.5.2节讨论了这些问题,并展示了如何通过精心选择滤波器来减少混叠现象。
在第2.2节中,我们探讨了光照和表面反射如何随波长变化。当入射光照射到成像传感器时,来自光谱不同部分的光线以某种方式整合为我们在数字图像中看到的离散红、绿、蓝(RGB)颜色值。这一过程是如何运作的?我们又如何分析和操控这些颜色值?
你可能还记得童年时混合颜料颜色的神奇过程
图2.28原色和次色:(a)加法颜色红、绿、蓝可以混合产生青色、品红色、黄色和白色;(b)减法颜色青色、品红色和黄色可以混合产生红色、绿色、蓝色和黑色。
获取新的颜色。你可能记得,蓝色+黄色产生绿色,红色+蓝色产生紫色,红色+绿色产生棕色。如果你稍后重新学习这个主题,可能会了解到正确的减法三原色实际上是青色(浅蓝绿色)、品红(粉红色)和黄色(图2.28b),尽管黑色在四色印刷(CMYK)中也经常使用。如果你后来上过绘画课,就会学到颜色还有更奇特的名字,比如胭脂红、天蓝和黄油绿。减色颜料之所以称为减色,是因为颜料中的色素会吸收光谱中的某些波长。
稍后,您可能已经了解了加法原色(红色、绿色和蓝色),以及它们如何被添加(通过幻灯机或计算机显示器)来产生青色、品红、黄色、白色以及我们在电视机和显示器上通常看到的所有其他颜色(图2.28a)。
两种不同的颜色,比如红色和绿色,通过什么过程可以相互作用产生第三种颜色,比如黄色?波长是否以某种方式混合起来产生新的波长?
你可能知道,正确答案与物理混合波长无关。相反,三种原色的存在是由于人类视觉系统的三刺激(或三色)特性,因为我们有三种不同类型的细胞,称为视锥细胞,每种细胞对颜色光谱的不同部分都有选择性的反应(Glassner 1995;Wandell 1995;Wyszecki和Stiles 2000;Livingstone 2008;Frisby和Stone 2010;Reinhard,Heidrich等2010;Fairchild2013).23注意对于机器
图2.29标准CIE颜色匹配函数:(a) r-(λ),g-(λ),(λ)从纯色与R=700.0nm、G=546.1nm和B=435.8nm基色匹配得到的颜色光谱;(b) x-(λ),y-(λ),z-(λ)颜色匹配函数,它们是这些基色的线性组合。
(r-(λ),g-(λ),b(λ))光谱。
在诸如遥感和地形分类等应用中,最好使用更多的波长。同样,在近红外(NIR)范围内进行探测往往有利于监视应用。
CIE RGB和XYZ
为了测试和量化感知的三色理论,我们可以尝试将所有单色(单一波长)颜色作为三种适当选择的基色混合物来重现。(纯波长光可以通过棱镜或特制的颜色滤光片获得。)20世纪30年代,国际照明委员会(CIE)通过使用红(700.0纳米波长)、绿(546.1nm)和蓝(435.8nm)三种基色进行颜色匹配实验,标准化了RGB表示法。
图2.29展示了使用标准观察者进行这些实验的结果,即在大量受试者中平均感知结果。你会注意到,在蓝绿色范围内的某些纯色谱中,需要添加负数的红光量,也就是说,为了匹配颜色,需要向被匹配的颜色中加入一定量的红色。这些结果还提供了一个简单的解释,说明了同色异谱现象的存在,即具有不同光谱但感知上无法区分的颜色。请注意,两种在特定光源下是同色异谱的织物或颜料颜色,在不同的光照条件下可能不再如此。
由于混合负光的问题,CIE也开发了一种
正如Michael Brown在他的颜色教程中指出的那样(Brown2019),标准观察者实际上只是在20世纪20年代对17名英国受试者进行的平均测量。
新的颜色空间称为XYZ,其中包含其正八分之一中所有的纯光谱颜色。(它还将Y轴映射到亮度,即感知相对亮度,并将纯白色映射到一个对角线(等值)向量。)从RGB到XYZ的转换由下式给出
(2.104)虽然CIE XYZ标准的官方定义将矩阵标准化,使得纯红色对应的Y值为1,但更常用的形式是省略前导分数,使得第二行加起来等于1,即RGB三元组(1,1,1)对应一个Y值。
根据公式(2.104),将图2.29a中的(r-(λ),g-(λ),(λ))曲线线性混合,得到图2.29b所示的(x-(λ),y-(λ),z-(λ))曲线。请注意,现在所有三个光谱(颜色匹配函数)都只有正值,且y-(λ)曲线与人类感知的亮度相吻合。
如果我们将XYZ值除以X+Y+Z的总和,我们得到色度坐标
(2.105)
它们之和为1。色度坐标忽略了给定颜色样本的绝对强度,仅表示其纯色。如果我们从图2.29b中的单色参数λ = 380nm到λ = 800nm扫动,就会得到图2.30a所示的熟悉色度图。该图显示了大多数人类可感知的所有颜色值的(x,y)坐标。(当然,本书中的CMYK再现过程实际上并未覆盖所有可感知的颜色范围。)外部弯曲边缘表示所有纯单色值在(x,y)空间中的映射位置,而连接两个端点的下直线称为紫线。插图中的三角形表示原始颜色匹配实验中使用的红、绿、蓝单波长基色,而E表示白点。
因此,当我们想要将亮度和色度分开时,颜色值的方便表示是Yxy(亮度加上两个最独特的色度分量)。
虽然XYZ颜色空间具有许多方便的特性,包括能够将亮度与色度分开,但它实际上并不能预测人类感知颜色或亮度差异的能力。
图2.30 CIE色度图,显示了沿边缘的纯单波长光谱颜色以及E处的白点,按其对应的(x,y)值绘制。(a)红色、绿色和蓝色原色未能覆盖整个色域,因此需要添加负数的红色来覆盖蓝绿范围;(b)麦克亚当椭圆
显示具有相同辨别能力的颜色区域,并构成Lab感知颜色空间的基础。
由于人类视觉系统的响应大致呈对数关系(我们能够感知到大约1%的相对亮度差异),CIE定义了XYZ空间的非线性重新映射,称为L*a*b*(有时也称为CIELAB),其中亮度或色度的差异在感知上更加均匀,如图2.30b.25所示。
亮度的L*分量定义为
(2.106)
其中Yn是标称白光的亮度值(Fairchild2013)
(2.107)
同时开发并标准化了另一种感知驱动色彩空间,称为L*u*v*(Fairchild2013)。
同样地,a*和b*分量定义为
2.108)
其中,(Xn、Yn、Zn)是测量的白点。图2.33i-k显示了样本彩色图像的L*a*b*表示法。
虽然前面的讨论告诉我们如何唯一地描述任何颜色(光谱分布)的感知三刺激描述,但它并没有解释RGB静态和视频摄像机实际上是如何工作的。它们是否只是测量红(700.0nm)、绿(546.1nm)和蓝(435.8nm)的名义波长下的光量?彩色显示器是否只是发出这些特定波长的光,如果是这样,它们又是如何发出负红色光来再现青色范围内的颜色呢?
事实上,RGB摄像机的设计历来基于电视中使用的彩色荧光粉的可用性。当标准清晰度彩色电视发明时(NTSC),定义了驱动阴极射线管(CRT)中的三个颜色枪的RGB值与明确定义感知颜色的XYZ值之间的映射关系(这一标准被称为ITU-R BT.601)。随着高清电视和新型显示器的出现,创建了一个新的标准,即ITU-R BT.709,该标准规定了每种颜色基色的XYZ值,
(2.109)
在实践中,每个彩色相机根据其红、绿、蓝传感器的光谱响应函数来整合光线,
R = ∫ L(λ)SR (λ)dλ,
G = ∫ L(λ)SG (λ)dλ, (2.110)
B = ∫ L(λ)SB (λ)dλ,
其中L(λ)是给定像素处的入射光谱,{SR (λ),SG (λ),SB (λ)}是相应传感器的红、绿、蓝光谱灵敏度。
我们能知道相机实际的光谱敏感度吗?除非相机制造商提供这些数据,或者我们观察到相机对整个单色光谱的响应,否则这些敏感度不会被像BT.709这样的标准所规定。相反,重要的是给定颜色的三刺激值能够产生指定的RGB值。制造商可以自由使用与标准XYZ定义不匹配的传感器,只要它们之后可以通过线性变换转换为标准颜色即可。
同样地,虽然电视和电脑显示器应该按照公式(2.109)生成RGB值,但没有理由不能使用数字逻辑将接收到的RGB值转换成不同的信号来驱动每个颜色通道。26校准良好的显示器可以将这些信息提供给执行色彩管理的软件应用,从而使现实中的颜色、屏幕上的颜色以及打印机上的颜色尽可能地匹配。
早期彩色电视摄像机使用三个视像管(电子管)进行感光,后来的摄像机使用三个独立的RGB感光芯片,而当今大多数数字静态和视频摄像机使用彩色滤光阵列(CFA),其中交替的传感器被不同颜色的滤光片覆盖(图2.24)。27
当今彩色相机中最常用的图案是拜耳模式(Bayer 1976),该模式在传感器的一半上放置绿色滤镜(以棋盘格形式排列),其余部分则放置红色和蓝色滤镜(图2.31)。绿色滤镜的数量是红色和蓝色滤镜的两倍,这是因为亮度信号主要由绿色值决定,而视觉系统对亮度中的高频细节比色度更为敏感(这一事实被用于彩色图像压缩——见第2.3.3节)。通过插值缺失的颜色值,使所有像素都有有效的RGB值的过程称为去马赛克,详细内容见第10.3.1节。
同样,彩色液晶显示器通常使用交替排列的红、绿、蓝滤光片,置于每个液晶活动区域前,以模拟全彩显示的效果。由于视觉系统在亮度分辨率(清晰度)上高于色度分辨率,因此可以对RGB(及单色)图像进行数字预滤波,以增强
图2.31拜耳RGB模式:(a)彩色滤光片阵列布局;(b)插值像素值,
未知(猜测)值显示为小写。
脆度的感知(Betrisey,Blinn等人,2000;Platt2000b)。
在编码感知到的RGB值之前,大多数相机会执行某种颜色平衡操作,试图将给定图像的白点移得更接近纯白色(即RGB值相等)。如果色彩系统和照明条件相同(例如BT.709系统使用日光光源D65作为参考白),这种变化可能很小。然而,如果光源颜色强烈,如室内白炽灯(通常会导致黄色或橙色调),补偿可能会相当显著。
一种简单的颜色校正方法是将每个RGB值乘以不同的因子(即,在RGB色彩空间中应用对角矩阵变换)。更复杂的变换有时是通过映射到XYZ空间再返回实现的,实际上执行的是颜色扭曲,即使用一个通用的3×3颜色变换矩阵。练习2.8让你探索这些问题。
在黑白电视的早期,用于显示电视信号的CRT中的荧光粉对输入电压的响应是非线性的。电压与最终亮度之间的关系由一个称为gamma(√)的数字来表征,因为公式大致为
B = V ; (2.111)
你们中那些还记得彩色电视早期的人自然会想到电视机上的色调调节旋钮,它可以产生真正奇怪的结果。
图2.32伽玛压缩:(a)输入信号亮度Y与传输信号Y之间的关系由Y,=Y 1/给出。(b)在接收器中,信号Y,
乘以因子√,=Y。传输过程中引入的噪声被压缩
在黑暗区域,这对应于视觉系统中更敏感的噪声区域。
√约为2.2。为了补偿这种影响,电视摄像机中的电子设备将通过逆伽玛预映射感知亮度Y,
Y, = Y ;
(2.112)
典型值为1 = 0.45。
信号在传输前通过这种非线性映射有一个有益的副作用:传输过程中增加的噪声(记住,那是模拟时代!)会在信号较暗的部分减少(在接收端应用伽马函数后),这些部分的噪声更为明显(图2.32)。29(记住,我们的视觉系统大致对亮度的相对差异敏感。)
当彩色电视发明时,决定将红、绿、蓝信号分别通过相同的伽马非线性处理,然后再合并进行编码。如今,尽管我们的传输系统中不再有模拟噪声,但在压缩过程中信号仍然会被量化(见第2.3.3节),因此对感知值应用逆伽马仍然有用。
不幸的是,对于计算机视觉和计算机图形学而言,图像中伽马的存在常常是一个问题。例如,正确模拟辐射现象如阴影(见第2.2节和公式(2.88))发生在线性辐射空间中。一旦所有计算完成,在显示前应应用适当的伽马值。然而,许多计算机图形系统(如着色模型)运行时
直接使用RGB值并直接显示这些值。(幸运的是,较新的彩色成像标准,如16位scRGB使用线性空间,这使得这个问题不那么严重(Glassner1995)。)
在计算机视觉中,情况可能会更加严峻。准确确定表面法线,使用光度立体技术(第13.1.1节)或更简单的操作如精确图像去模糊,都需要测量值处于强度的线性空间中。因此,在进行这些详细的定量计算时,首先需要消除感知颜色值中的伽马和每幅图像的颜色重新平衡。查克拉巴蒂、沙尔斯坦和齐克勒(2009)开发了一个复杂的24参数模型,该模型与当今数字相机的处理过程非常匹配;他们还提供了一个颜色图像数据库,供您自行测试使用。
对于其他视觉应用,例如特征检测或立体信号匹配和运动估计,这种线性化步骤通常不是必需的。事实上,判断是否需要反向处理伽马值可能需要仔细思考,例如,在图像拼接中补偿曝光变化的情况(见练习2.7)。
如果所有这些处理步骤对模型来说听起来很混乱,那确实如此。练习2.9要求你尝试通过经验研究来区分其中的一些现象,即拍摄彩色图表的照片并比较RAW和JPEG压缩后的颜色值。
其他色彩空间
虽然RGB和XYZ是用于描述颜色信号的光谱内容(因此,三刺激响应)的主要颜色空间,但在视频和静止图像编码以及计算机图形中已经开发了各种其他表示。
最早的用于视频传输的颜色表示是为北美NTSC视频开发的YIQ标准,以及为欧洲PAL开发的密切相关YUV标准。在这两种情况下,都希望有一个亮度通道Y(之所以这样命名是因为它仅大致模拟真实的亮度),使其与常规黑白电视信号相当,同时还有两个较低频率的色度通道。
在这两个系统中,Y信号(或者更准确地说,Y‘亮度信号,因为它经过了伽马压缩)是从以下获得的:
Y6,01 = 0.299R, + 0.587G, + 0.114B, , (2.113)
其中,R、G、B是伽玛压缩颜色分量的三元组。当使用BT.709中HDTV的新颜色定义时,公式为
Y7,09 = 0.2125R, + 0.7154G, + 0.0721B,. (2.114)
(B’-Y’)和(R’-Y’)的缩放版本,即U=0.492111(B’-Y’)和V=0.877283(R’-Y’), (2.115)
而IQ分量是UV分量旋转了33°的角度。在复合(NTSC和PAL)视频中,色度信号先经过水平低通滤波,然后调制并叠加在Y‘亮度信号上。为了实现向后兼容,旧的黑白电视机要么忽略高频色度信号(因为电子设备较慢),或者最坏的情况是在主信号上叠加一个高频图案。
虽然这些转换在计算机视觉早期非常重要,当时帧采集器会直接将复合电视信号数字化,但如今所有数字视频和静态图像压缩标准都基于较新的YCbCr转换。YCbCr与YUV密切相关(Cb和Cr信号携带蓝红色差信号,比UV更有用的助记符),但使用不同的比例因子以适应数字信号可用的八位范围。
对于视频,Y信号被重新缩放以适应[16... 235]的值范围,而Cb和Cr信号则被缩放到[16... 240](Gomes和Velho 1997;Fairchild 2013)。对于静态图像,JPEG标准使用完整的八位范围,没有保留值,
其中,R‘G’B‘值是八位伽马压缩的颜色分量(即我们打开或显示JPEG图像时实际获得的RGB值)。对于大多数应用而言,这个公式并不那么重要,因为你的图像读取软件会直接提供八位伽马压缩的R’G‘B’值。然而,如果你尝试进行精细的图像去块处理(练习4.3),这些信息可能会很有用。
你可能会遇到另一种颜色空间,即色相、饱和度、亮度(HSV),这是RGB颜色立方体投影到非线性色度角度、径向饱和百分比和受亮度启发的值上的结果。具体来说,亮度定义为平均或最大颜色值,饱和度定义为与对角线的距离比例,而色相则定义为围绕色轮的方向(确切公式由Hall(1989)、Hughes、van Dam等人(2013)和Brown(2019)描述)。这种分解在图形应用中非常自然,例如颜色选择(它近似于穆塞尔色卡的颜色描述)。图2.33l-n展示了样本彩色图像的HSV表示,
如果您希望您的计算机视觉算法只影响图像的值(亮度),而不影响其饱和度或色调,一个更简单的解决方案是使用定义在(2.105)中的Y xy(亮度+色度)坐标或更简单的颜色比率,
(2.117)
(图2.33e-h)。在对亮度(2.113)进行处理后,例如通过直方图均衡化过程(第3.1.4节),您可以将每个颜色比率乘以新亮度与旧亮度的比率,以获得调整后的RGB三元组。
虽然所有这些颜色系统听起来可能令人困惑,但最终你选择哪一个其实并不那么重要。Poynton在他的《颜色常见问题》https://www.poynton.com/ ColorFAQ.html中指出,感知驱动的L*a*b*系统在定性上与我们主要使用的伽马压缩R‘G’B‘系统相似,因为两者都具有分数幂缩放(近似对数响应)特性,即实际强度值与被处理的数字之间存在这种关系。正如所有情况一样,在决定使用哪种技术之前,请仔细考虑你的目标是什么。
相机处理管道的最后一个阶段通常是某种形式的图像压缩(除非您使用的是无损压缩方案,如camera RAW或PNG)。
所有彩色视频和图像压缩算法首先将信号转换为YCbCr(或某些密切相关的变体),以便能够以更高的保真度压缩亮度信号,而不是色度信号。(记住,人眼对颜色变化的频率响应不如对亮度变化的频率响应。)在视频中,通常会将Cb和Cr水平方向上以二分之一的比例抽样;对于静态图像(如JPEG),抽样(平均)则同时发生在水平和垂直方向。
一旦亮度和色度图像被适当地子采样并分离成单独的图像,它们就会传递到块变换阶段。这里最常用的技术是离散余弦变换(DCT),这是离散傅里叶变换(DFT)的一个实值变体(见第3.4.1节)。DCT是对自然图像块的卡鲁恩-洛夫或特征值分解的一种合理近似,即同时将最大能量打包到前几个系数中,并对像素之间的联合协方差矩阵进行对角化(使变换系数在统计上独立)。MPEG和JPEG都使用8×8 DCT变换(Wallace1991;
图2.33色彩空间转换:(a-d)RGB;(e-h)rgb。(i-k)L*a*b*;(l-n)HSV。注意,RGB、L*a*b*和HSV值都重新调整以适应打印页面的动态范围。
块伪影和高频混叠(“蚊子噪声”)从左到右增加。
尽管有更新的变体,包括新的AV1开放标准,30使用更小的4×4甚至2×2块。替代变换,如小波(Taubman和Marcellin2002)和重叠变换(Malvar1990,1998,2000)被用于JPEG 2000和JPEG XR等压缩标准中。
变换编码后,系数值被量化为一组小整数值,这些值可以使用可变比特长度方案进行编码,例如霍夫曼码或算术码(Wallace1991;Marpe、Schwarz和Wiegand2003)。(直流(最低频率)系数也从前一个块的直流值自适应预测。术语“DC”来源于“直流”,即信号的非正弦或非交变部分。)量化中的步长是主要变量,由JPEG文件的质量设置控制(图2.34)。
使用视频时,通常还会执行基于块的运动补偿,即编码每个块与前一帧中移位块预测出的一组像素值之间的差异。(例外情况是旧款数字摄像机中使用的运动JPEG方案,这不过是一系列单独的JPEG压缩图像帧。)虽然基本的MPEG使用16×16的运动补偿块和整数运动值(Le Gall 1991),但新标准采用了自适应大小的块、亚像素运动以及引用旧帧中的块的能力(Sullivan,Ohm等2012)。为了更优雅地从故障中恢复并允许对视频流进行随机访问,预测的P帧被穿插在独立编码的I帧之间。(双向B帧有时也会使用。)
压缩算法的质量通常使用其峰值信噪比(PSNR)来报告,该信噪比是从平均均方误差得出的,
其中,I(x)是原始未压缩图像,(x)是其压缩对应物,或者等效地,均方根误差(RMS误差),定义为
(2.119)
(2.120)
其中,Imax是最大信号范围,例如,对于8位图像,Imax为255。
虽然这只是图像压缩工作原理的一个高层次概述,但了解这一点有助于在各种计算机视觉应用中补偿由这些技术引入的伪影。此外,研究人员目前正在开发基于深度神经网络的新颖图像和视频压缩算法,例如(Rippel和Bourdev 2017;Mentzer、Agustsson等2019;Rippel、Nair等2019)以及https://www. compression.cc。这些技术会产生哪些不同类型的伪影,将是一件有趣的事情。
2.4 其他阅读材料
正如我们在本章开头提到的,本书只是对传统上在多个独立领域中所涵盖的一系列丰富而深入的主题进行的简要概述。
关于点、线、面和投影的几何更深入的介绍可以在多视图几何(Faugeras和Luong 2001;Hartley和Zisserman 2004)以及计算机图形学(Watt 1995;OpenGL-ARB 1997;Hughes,van Dam等2013;Marschner和Shirley 2015)的教科书中找到。更深入的主题包括高阶基元,如二次曲面、圆锥曲线和三次曲线,以及三视图和多视图几何。
图像形成(合成)过程传统上作为计算机图形学课程的一部分进行教学(Glassner1995;Watt1995;Hughes,van Dam等2013;Marschner和Shirley 2015),但在基于物理的计算机视觉中也有研究(Wolff,Shafer和Healey 1992a)。相机镜头系统的特性在光学领域也有探讨(Mo...ller1988;Ray 2002;Hecht2015)。
关于色彩理论的一些好书包括:希利和沙弗(1992)、万德尔(1995)、维斯切基和斯蒂尔斯(2000)以及费尔柴尔德(2013)。利文斯通(2008)则提供了一种更有趣且非正式的色彩感知入门。马克·费尔柴尔德的色彩书籍和链接页面列出了许多其他资源。
与采样和混叠有关的主题在信号和图像处理教科书中都有介绍(Crane1997;Ja...hne1997;Oppenheim和Schafer1996;Oppenheim、Schafer和Buck 1999;Pratt 2007;Russ 2007;Burger和Burge2008;Gonzalez和Woods2017)。
两门课程详细地涵盖了上述许多主题(图像形成、镜头、色彩和采样理论),分别是斯坦福大学的马克·莱沃伊的《数字摄影》课程(Levoy2010)和迈克尔·布朗在2019年国际计算机视觉会议上的图像处理流水线教程(Brown2019)。最近,池内、松下等人(2020)出版的一本书也涉及了三维几何、光度测量和传感器模型,但重点放在主动照明系统上。
2.5 练习
给学生的提示:本章练习较少,因为内容主要集中在背景知识上,实用技巧不多。如果你希望深入理解多视图几何,我建议你阅读并完成哈特利和齐瑟曼(2004)提供的练习。同样,如果你想了解与图像形成过程相关的练习,格拉斯纳(1995)的书充满了挑战性的问题。
例2.1:最小二乘法交点和直线拟合-高级。方程(2.4)显示了如何将两条二维线的交点表示为它们的叉积,假设
线用齐次坐标表示。
与每条线的平方距离,
(2.121)
将量平方化为二次形式,TA~x。)
2.为了将一条直线拟合到一组点上,可以计算这些点的质心(平均值)以及围绕该平均值的点的协方差矩阵。证明通过质心并沿着协方差椭球的主要轴(最大特征向量)的直线,能够最小化到各点的距离平方和。
3.这两种方法本质上是不同的,尽管射影对偶告诉我们点和线是可以互换的。为什么这两种算法看起来如此不同?它们实际上是在最小化不同的目标吗?
例2.2:二维变换编辑器。编写一个程序,让你可以交互式地创建一组矩形,然后修改它们的“姿态”(二维变换)。你应该实现以下步骤:
1.打开一个空白窗口(“画布”)。
2.拖动(橡皮筋)以创建新矩形。
3.选择变形模式(运动模型):平移、刚性、相似性、仿射或透视。
4.拖动轮廓的任意一角,以更改其变换。
这个练习应该建立在一组像素坐标和变换类的基础上,这些类可以由你自己实现,也可以从软件库中获取。还应该支持创建的表示的持久性(保存和加载)(对于每个矩形,保存其变换)。
例2.3:3D查看器。编写一个简单的3D点、线和多边形查看器。导入一组点和线命令(基元)以及视图变换。交互式修改对象或相机变换。此查看器可以是您在练习2.2中创建的查看器的扩展。只需将视图变换替换为它们的3D对应物即可。
(可选)添加一个z-buffer以对多边形进行隐藏表面消除。(可选)使用3D绘图包并仅编写查看器控件。
例2.4:焦距和景深。找出镜头上的焦距和景深指示器是如何确定的。
1.计算并绘制焦距为Δzi的镜头(例如,焦距为100毫米)的焦点距离zo随行程距离的变化关系。这是否解释了你在典型镜头上看到的焦点距离呈双曲线变化的现象(图2.20)?
2.计算给定焦距设置zo的景深(最小和最大对焦距离),作为模糊圆直径c(使其成为传感器宽度的一部分)、焦距f和光圈值N(与光圈直径d相关)的函数。这是否解释了镜头上常见的景深标记,这些标记包围了对焦标记,如图2.20a所示?
3.现在考虑一个焦距变化的变焦镜头。假设在变焦过程中,镜头保持对焦,即后节点到传感器平面的距离zi自动调整以固定对焦距离zo。景深指示器随焦距的变化如何变化?你能重现图2.20b中镜头上看到的弯曲景深线的二维图吗?
例2.5:光圈值和快门速度。列出你的相机提供的常见光圈值和快门速度。在较旧的单反相机上,这些信息显示在镜头和快门速度拨盘上。在较新的相机上,你需要通过电子取景器(或液晶屏/指示器)手动调整曝光时查看这些信息。
1.这些是否形成几何级数?如果是,它们的比值是多少?这些与曝光值(EV)有何关系?
两倍,还是相差125/60 = 2.083?
3.你认为这些数字有多准确?你能设计出一种方法来精确测量光圈如何影响到达传感器的光线以及实际的曝光时间吗?
例2.6:噪声水平校准。通过将相机安装在三脚架上,多次拍摄同一场景来估算相机中的噪声量。(如果你拥有DSLR,购买一个遥控快门释放器是个不错的投资。)或者,拍摄一个颜色区域恒定的场景(如色卡),通过拟合每个颜色区域的平滑函数并计算与预测函数的差异来估算方差。
1.将每个颜色通道的估计方差作为级别函数绘制出来。
2.改变相机的ISO设置;如果不能这样做,减少场景中的整体光线(关掉灯光,拉上窗帘,等到黄昏)。噪声量是否随着ISO/增益而变化很大?
3.将你的相机与另一个不同价位或年份的相机进行比较。是否有证据表明“你付出了多少,就得到了多少”?数码相机的质量是否随着时间的推移而提高?
例2.7:图像拼接中的伽马校正。这是一个相对简单的谜题。假设你有两个图像,它们是全景图的一部分,你希望将它们拼接在一起(见第8.2节)。这两个图像是在不同的曝光条件下拍摄的,因此你需要调整RGB值,使它们在接缝处匹配。为了达到这个目的,是否需要先取消颜色值中的伽马校正?
例2.8:白点平衡——很棘手。执行白点调整的常见(在相机内或后处理)技术是拍摄一张白色纸张的照片,然后调整图像的RGB值,使其成为中性颜色。
1.描述如何根据样本“白色”(Rw;Gw;Bw)调整图像中的RGB值,使该颜色变为中性(不改变曝光)。
2.您的转换是否涉及对RGB值的简单(每个通道)缩放,还是需要一个完整的3×3颜色扭曲矩阵(或其他什么)?
3.将你的RGB值转换为XYZ。现在适当的校正是否仅依赖于XY(或xy)值?如果是这样,当你转换回RGB空间时,是否需要一个完整的3×3颜色扭曲矩阵来达到相同的效果?
4.如果你在直接RGB模式下使用纯对角线缩放,但在XYZ空间中工作时却出现了扭曲,你如何解释这种明显的二元性?哪种方法是正确的?(或者这两种方法都不正确吗?)
如果你想了解你的相机到底能做什么,请继续下一个练习。
例2.9:相机内色彩处理——具有挑战性。如果您的相机支持RAW像素模式,那么拍摄一对RAW和JPEG图像,看看您是否能够推断出当相机将RAW像素值转换为最终的、经过颜色校正和伽马压缩的八位JPEG像素值时所做的事情。
1.从共定位的RAW像素值和颜色映射像素值之间的对应关系中推断出颜色滤波器阵列的模式。如果这能让你的工作更轻松,可以使用色卡。你可能会发现将RAW图像分成四个独立的图像(偶数列和行与奇数列和行进行采样)并将其视为“虚拟”传感器会有所帮助。
2.通过拍摄包含强烈色彩边缘的具有挑战性的场景(如第10.3.1节所示)来评估去马赛克算法的质量。
3.如果在改变相机的色彩平衡值后,仍能拍出完全相同的照片,请比较这些设置对处理的影响。
4.将您的结果与(Chakrabarti、Scharstein和Zickler 2009)、Kim、Lin et al.(2012)、Hasinoff、Sharlet et al.(2016)、Karaimer和Brown中所列的结果进行比较
(2016),以及Brooks,Mildenhall等人(2019)或使用其彩色图像数据库中的可用数据。
Chapter 3 Image processing
3.1点位操作员 109
3.1.1像素变换 111
3.1.2颜色变换 112
3.1.3合成和遮罩 113
3.1.4直方图均衡化 115
3.1.5应用:音调调整 119
3.2线性滤波 119
3.2.1可分离过滤 124
3.2.2线性滤波器示例 125
3.2.3带通和可调滤波器 127
3.3更多社区运营商 131
3.3.1非线性滤波 132
3.3.2双边滤波 133
3.3.3二值图像处理 138
3.4傅里叶变换 142
3.4.1二维傅立叶变换 146
3.4.2应用:锐化、模糊和去噪 148
3.5塔和波浪 149
3.5.1插值 150
3.5.2消减 153
3.5.3多分辨率表示 154
3.5.4小波 159
3.5.5应用:图像融合 165
3.6几何变换 168
3.6.1参数变换 168
3.6.2基于网格的变形 175
3.6.3应用:基于特征的变形 177
3.7其他阅读材料 178
3.8练习 180
图3.1一些常见的图像处理操作:(a)局部直方图均衡化;(b)由二阶可导向滤波器计算的方向图(Freeman 1992)©1992 IEEE;(c)双滤波器(Durand和Dorsey 2002)©2002 ACM;(d)图像金字塔;(e)拉普拉斯金字塔融合(Burt和Adelson 1983b)©1983 ACM;(f)基于线的图像变形(Beier和Neely 1992)©1992 ACM。
既然我们已经了解了图像如何通过三维场景元素、光照和相机光学及传感器的相互作用形成,现在让我们来看看大多数计算机视觉算法中的第一阶段,即使用图像处理来预处理图像并将其转换为适合进一步分析的形式。这些操作的例子包括曝光校正和色彩平衡、减少图像噪声、增强锐度或通过旋转来校正图像。其他例子还包括图像变形和图像融合,这些通常用于视觉效果(图3.1和第3.6.3节)。虽然有些人可能认为图像处理超出了计算机视觉的范畴,但大多数计算机视觉应用,如计算摄影甚至识别,都需要在设计图像处理阶段时谨慎行事,以获得满意的结果。
在本章中,我们回顾了将像素值从一张图像映射到另一张图像的标准图像处理算子。图像处理通常作为信号处理入门课程的后续课程,在电气工程系教授(Oppenheim和Schafer 1996;Oppenheim、Schafer和Buck 1999)。关于图像处理,有几本广受欢迎的教科书,包括Gomes和Velho(1997)、Ja...hne(1997)、Pratt(2007)、Burger和Burge(2009)以及Gonzalez和Woods(2017)。
我们从最简单的图像变换开始,即那些独立于邻近像素操作每个像素的变换(第3.1节)。这类变换通常被称为点算子或点过程。接下来,我们将探讨邻域(基于区域)算子,其中每个新像素的值取决于少数几个相邻输入值(第3.2节和第3.3节)。分析(有时加速)此类邻域操作的一个便捷工具是傅里叶变换,我们在第3.4节中介绍。邻域算子可以级联形成图像金字塔和小波,这些对于在不同分辨率(尺度)下分析图像以及加速某些操作非常有用(第3.5节)。另一类重要的全局算子是几何变换,如旋转、剪切和透视变形(第3.6节)。
虽然本章主要介绍了经典图像处理技术,这些技术大多由线性和非线性滤波操作组成,但接下来的两章将介绍基于能量和贝叶斯图模型,即马尔可夫随机场(第4章),以及深度卷积网络(第5章),这两种方法现在在图像处理应用中被广泛使用。
3.1 点位操作员
最简单的图像处理变换是点运算符,其中每个输出像素的值只取决于相应的输入像素值(可能还有一些
图3.2一些局部图像处理操作:(a)原始图像及其三个颜色(每通道)直方图;(b)亮度增加(加性偏移,b = 16);(c)对比度增加(乘性增益,a = 1.1);(d)伽马(部分)线性化(√= 1.2);
(e)全直方图均衡化;(f)部分直方图均衡化。
图3.3图像数据可视化:(a)原始图像;(b)使用图像检查工具裁剪部分和扫描线图;(c)数字网格;(d)表面图。对于图(c)-(d),首先将图像转换为灰度。
全局收集的信息或参数)。此类操作的示例包括亮度和对比度调整(图3.2)以及颜色校正和转换。在图像处理文献中,此类操作也被称为点过程(Crane1997)。1
我们首先简要回顾简单的点操作,如亮度缩放和图像叠加。接着,讨论如何处理图像中的颜色。然后介绍图像合成和遮罩操作,这些在计算摄影(第十章)和计算机图形应用中起着重要作用。最后,描述全局的直方图均衡过程。以一个示例应用结束,该应用通过调整色调值(曝光和对比度)来改善图像效果。
3.1.1像素变换
一般图像处理运算符是一个函数,它接受一个或多个输入图像并产生输出图像。在连续域中,这可以表示为
g(x) = h(f (x))或g(x) = h(f0 (x),...,fn (x)), (3.1)
其中,x属于输入和输出函数f和g的D维(通常D = 2,对于图像而言)域,这些函数作用于某个范围,该范围可以是标量或向量值,例如彩色图像或二维运动。对于离散(采样)图像,域由有限数量的像素位置组成,x =(i,j),我们可以表示为
g(i, j) = h(f (i, j)). (3.2)
图3.3显示了如何用颜色(外观)、数字网格或二维函数(表面图)来表示图像。
两个常用的点过程是乘法和加法与常数,
g (x) = af (x) + b. (3.3)
参数a > 0和b通常被称为增益和偏置参数;有时这些参数分别被说成是控制对比度和亮度(图3.2b-c)。2偏置和增益参数也可以是空间变化的,
g(x) = a(x)f (x) + b(x), (3.4)
例如,当模拟摄影师使用的分级密度滤镜以选择性地加深天空或在光学系统中建模暗角时。
乘法增益(全局和空间变化)是一个线性操作,因为它遵循叠加原理,
h(f0 + f1 ) = h(f0 ) + h(f1 ). (3.5)
(关于线性移位不变算子,我们将在第3.2节中详细讨论。)像图像平方这样的算子(通常用于获得带通滤波信号的能量局部估计,参见第3.5节)不是线性的。
另一个常用的二元(两个输入)运算符是线性混合运算符,
g (x) = (1 - Q)f0 (x) + Qf1 (x). (3.6)
通过将Q从0→1变化,该运算符可用于在两个图像或视频之间执行时间交叉溶解,如幻灯片和电影制作中所见,或作为图像变形算法(Section3.6.3)的组成部分。
伽马校正是一种常用的非线性变换,通常在图像进一步处理之前应用。它用于消除输入辐射与量化像素值之间的非线性映射(第2.3.2节)。为了逆向传感器应用的伽马映射,我们可以使用
g(x) = [f (x)]1/ , (3.7)
对于大多数数码相机来说,伽马值√≈2.2是一个合理的拟合。
3.1.2颜色变换
虽然彩色图像可以被看作是任意的矢量值函数或独立波段的集合,但通常认为它们是高度相关的信号
图3.4图像遮罩和合成(Chuang,Curless (et al.2001)©2001 IEEE:
(a)源图像;(b)提取前景对象F;(c)灰度显示的alpha遮罩Q;(d)新的合成C。
与图像形成过程(第2.2节)、传感器设计(第2.3节)和人类感知(第2.3.2节)有密切联系。例如,考虑通过向所有三个通道添加一个常数值来增强图片亮度,如图3.2b所示。你能判断这是否达到了使图像看起来更亮的效果吗?你能否看到任何不良的副作用或伪影?
事实上,向每个颜色通道添加相同的值不仅会增加每个像素的表观强度,还会对像素的色调和饱和度产生影响。我们如何定义和操作这些量以达到预期的感知效果?
如第2.3.2节所述,可以先计算色度坐标(2.105)或更简单的颜色比率(2.117),然后在调整亮度Y(例如,增强亮度)后,重新计算出具有相同色调和饱和度的有效RGB图像。图2.33f至h显示了一些颜色比率图像与中间灰度值相乘后的图像,以便更好地可视化。
同样地,色彩平衡(例如,补偿白炽灯照明)可以通过将每个通道乘以不同的比例因子来实现,或者通过更复杂的过程,即映射到XYZ颜色空间,改变标称白点,然后再映射回RGB,这可以使用线性的3×3颜色扭曲变换矩阵来表示。练习2.8和3.1让你探索这些问题。
另一个有趣的项目,最好是在你掌握了本章的其他内容之后再尝试,就是拍一张有彩虹的照片并增强彩虹的强度(练习3.29)。
3.1.3合成和遮罩
在许多照片编辑和视觉效果应用程序中,通常希望将前景对象从一个场景中剪切出来,并将其置于不同的背景之上(图3.4)。从原始图像中提取对象的过程通常称为遮罩(Smith和Blinn
图3.5合成方程C =(1 - Q)B + QF。图像取自a
图3.4中狮子右上方头发区域的特写。
1996),而将其插入到另一图像中(无可见伪影)的过程称为合成(Porter和Duff1984;Blinn1994a)。
用于这两个阶段之间前景对象的中间表示称为透明度图像(图3.4b-c)。除了三个颜色的RGB通道外,透明度图像还包含一个第四通道Q(或A),描述每个像素的相对不透明度或部分覆盖量(图3.4c和3.5b)。不透明度是透明度的对立面。对象内的像素完全不透明(Q = 1),而完全位于对象外部的像素则完全透明(Q = 0)。对象边界上的像素在这两个极端之间平滑变化,这隐藏了仅使用二值不透明度时可能出现的视觉锯齿。
若要在旧图像(背景)上合成新图像(前景),则使用覆盖运算符,该运算符最初由Porter和Duff(1984)提出,然后由Blinn(1994a;1994b)进行了广泛研究:
C = (1 - Q)B + QF. (3.8)
该运算符以因子(1 - Q)减弱背景图像B的影响,然后添加与前景层F相对应的颜色(和不透明度)值,如图3.5所示。
在许多情况下,以预乘形式表示前景颜色更为方便,即直接存储(和处理)QF值。正如布林(1994b)所展示的,预乘RGBA表示法因其多种优势而受到青睐,包括能够模糊或重采样(例如旋转)透明图像而不会产生额外复杂性(只需独立处理每个RGBA通道)。然而,在使用局部颜色一致性进行遮罩时(鲁宗和托马西2000;庄、柯尔斯等2001),则使用纯未乘前景颜色F,因为这些颜色在物体边缘附近保持不变(或变化缓慢)。
过度操作并不是唯一可以使用的合成操作。Porter
图3.6图片框透明玻璃反射光线的例子(Black和Anandan1996)©1996 Elsevier。你可以清楚地看到,图片框内的女性肖像与玻璃上反射出的男性面孔重叠在一起。
Duff(1984)描述了一些在照片编辑和视觉效果应用中可能有用的其他操作,在本书中我们只关注一个常见的额外情况(但请参见练习3.3)。
当光线从干净透明的玻璃反射时,穿过玻璃的光和从玻璃反射回来的光简单地相加(图3.6)。这种模型在分析透明运动时非常有用(Black和Anandan 1996;Szeliski、Avidan和Anandan 2000),这发生在从移动摄像机观察此类场景时(见第9.4.2节)。
实际的抠图过程,即从一张或多张图像中恢复前景、背景和透明度值,有着丰富的历史,我们将在第10.4节中研究。Smith和Blinn(1996)对传统的蓝幕抠图技术进行了很好的综述,而Toyama、Krumm等人(1999)则回顾了差异抠图。自那时起,计算摄影领域在自然图像抠图方面开展了大量活动(Ruzon和Tomasi 2000;Chuang、Curless等人2001;Wang和Cohen 2009;Xu、Price等人2017),这些研究试图从单个自然图像(图3.4a)或扩展的视频序列中提取抠图(Chuang、Agarwala等人2002)。所有这些技术都在第10.4节中有更详细的描述。
3.1.4直方图均衡化
虽然第3.1.1节中描述的亮度和增益控制可以改善图像的外观,但我们如何自动确定它们的最佳值呢?一种方法可能是查看图像中最暗和最亮的像素值,并将它们映射为纯黑和纯白。另一种方法可能是找到图像中的平均值,然后将其
图3.7直方图分析和均衡化:(a)原始图像;(b)颜色通道和强度(亮度)直方图;(c)累积分布函数;(d)均衡化(转移)函数;(e)全直方图均衡化;(f)部分直方图均衡化。
向中间灰度方向扩展范围,使其更接近于可显示的值(Kopf,Uyttendaele等人,2007)。
我们如何将图像中的亮度值集可视化以测试这些启发式方法?答案是绘制各个颜色通道和亮度值的直方图,如图3.7b.3所示。通过这一分布,我们可以计算出相关的统计量,例如最小值、最大值和平均强度值。请注意,图3.7a中的图像既有过多的暗值也有过多的亮值,但中间范围的值却明显不足。如果我们能够同时增强一些暗值并减弱一些亮值,同时充分利用可用的动态范围,岂不是更好?你能想到一个可能实现这一点的映射吗?
一个广受欢迎的答案是进行直方图均衡化,即找到一个强度映射函数f (I),使得生成的直方图变得平坦。寻找这种映射的方法与人们从概率密度函数中生成随机样本的方法相同,首先计算累积分布函数。
3直方图就是每个灰度级的像素数的计数。对于8位图像,需要一个包含256个条目的累加表。对于更高位深度,应该使用具有适当条目数(可能少于全部灰度级)的表。
如图3.7c所示。
将原始直方图h(I)视为某次考试后班级成绩的分布。如何将某个特定分数映射到相应的百分位数,使得处于第75%百分位的学生得分高于其同学的四分之三?答案是整合分布h(I),以获得累积分布c(I),
其中N是图像中的像素数或班级中的学生人数。对于任何给定的等级或强度,我们可以查找其对应的百分位数c(I),并确定该像素应取的最终值。在处理八位像素值时,I和c轴会从[0,255]进行重新缩放。
图3.7e展示了将f (I) = c(I)应用于原始图像的结果。可以看出,生成的直方图是平坦的;因此生成的图像也是如此(它“平坦”是指缺乏对比度且看起来模糊)。一种补偿方法是部分地校正直方图的不均匀性,例如使用映射函数f (I) = Qc(I) +(1 - Q)I,这是累积分布函数与恒等变换(一条直线)之间的线性混合。如图3.7f所示,生成的图像保留了更多的原始灰度分布,同时具有更吸引人的平衡。
直方图均衡化(或更广泛地说,图像增亮)的另一个潜在问题是,暗区的噪声可能会被放大并变得更加明显。练习3.7建议了一些可能的方法来缓解这一问题,以及替代技术以保持原始图像的对比度和“冲击力”(Larson,Rushmeier和Piatko 1997;Stark 2000)。
局部自适应直方图均衡化
虽然全局直方图均衡化可能有用,但对于某些图像来说,在不同区域应用不同类型的均衡化可能更为合适。例如图3.8a中的图像,其亮度值范围很广。与其计算一条曲线,不如将图像划分为M×M像素块,并在每个子块中分别进行直方图均衡化呢?如图3.8b所示,这样处理后得到的图像出现了许多块状伪影,即在块边界处强度不连续。
消除块状伪影的一种方法是使用移动窗口,即针对每个像素为中心的M×M块重新计算直方图。这一过程可能相当缓慢(每像素需要M²次操作),但通过巧妙编程,只需处理进出块的像素对应的直方图条目(在图像的光栅扫描过程中)。
图3.8局部自适应直方图均衡化:(a)原始图像;(b)块
togram均衡;(c)全局部自适应均衡。
需要更新(每个像素的M次操作)。请注意,此操作是我们将在第3.3.1节中详细研究的非线性邻域操作的一个示例。
一种更高效的方法是像以前那样计算非重叠块基等化函数,但在移动到不同块时平滑插值传输函数。这种技术被称为自适应直方图均衡(AHE),其对比度受限(增益受限)版本称为CLAHE (Pizer,Amburn等,1987)。给定像素(i,j)的加权函数可以作为其在块内的水平和垂直位置(s,t)的函数来计算,如图3.9a所示。为了混合四个查找函数{f00,...,f11 },使用双线性混合函数,
fs,t (I) =(1 - s)(1 - t)f00 (I) + s(1 - t)f10 (I) +(1 - s)tf01 (I) + stf11 (I)(3.10)
可以使用。(有关此类样条函数的高阶推广,请参见第3.5.2节。)请注意,我们不必为每个输出像素混合四个查找表(这将非常慢),而是可以混合给定像素通过四个相邻查找表映射的结果。
该算法的一个变体是将查找表放置在每个M×M块的角落(见图3.9b和练习3.8)。除了通过混合四个查找来计算最终值外,我们还可以在直方图累积阶段将每个输入像素分配到四个相邻的查找表中(注意图3.9b中的灰色箭头双向指向),即,
hk,l(I(i,j))+= w(i,j,k,l), (3.11)
其中w(i,j,k,l)是像素(i,j)和查找表(k,l)之间的双线性加权函数。这是软直方图的一个例子,它被用于多种其他应用中,包括SIFT特征描述符的构建(第7.1.3节)和词汇树(第7.1.4节)。
4 CLAHE算法是OpenCV的一部分。
图3.9使用相对(s;t)坐标进行局部直方图插值:(a)基于块的直方图,块中心以圆圈表示;(b)基于角点的“样条”直方图。像素位于网格交点上。黑色方像素的传输函数通过计算出的(s;t)值从四个相邻的查找表(灰色箭头)中插值得到。块边界用虚线表示。
3.1.5应用:音调调整
点处理图像运算符最广泛的应用之一是调整照片的对比度或色调,使其看起来更加吸引人或更易理解。你可以通过打开任何照片编辑工具并尝试各种对比度、亮度和颜色调整选项来了解可能的操作范围,如图3.2和3.7所示。
练习3.1、3.6和3.7要求你实现一些操作,以便熟悉基本的图像处理运算符。更复杂的色调调整技术(Bae、Paris和Durand 2006;Reinhard、Heidrich等2010)在高动态范围色调映射部分(第10.2.1节)中有所描述。
3.2 线性滤波
局部自适应直方图均衡是一种邻域算子或局部算子的例子,它利用给定像素周围的一组像素值来确定其最终输出值(图3.10)。除了进行局部色调调整外,邻域算子还可以用于滤波图像,以增加柔和的模糊效果、锐化细节、突出边缘或去除噪声(图3.11b-d)。在本节中,我们将探讨线性滤波算子,这些算子涉及小邻域内像素的固定加权组合。在第3.3节中,
图3.10邻域滤波(卷积):左边的图像与中间的滤波器进行卷积,得到右边的图像。浅蓝色像素表示浅绿色目标像素的源邻域。
我们研究非线性算子,如形态学滤波器和距离变换。
最常用的邻域运算符是线性滤波器,其中输出像素的值是小邻域N(图3.10)内像素值的加权和,
(3.12)
权重核或掩模h(k,l)中的条目通常被称为滤波器系数。上述相关算子可以更简洁地表示为
g = f h. (3.13)
该公式的常见变体是
其中f的偏移量的符号被反转了,这被称为卷积算子,
g = f * h, (3.15)
然后,h被称为脉冲响应函数。5这个名称的原因是,核函数h与脉冲信号δ(i,j)(一个除原点外处处为0的图像)卷积后会重现自身,即h * δ = h,而相关则会产生反射信号。(你可以自己尝试验证这一点。)
5连续卷积可以写成g(x)=f(x-u)h(u)du。
图3.11某些邻域操作:(a)原始图像;(b)模糊;(c)锐化;(d)使用边缘保持滤波器平滑;(e)二值图像;(f)膨胀;(g)距离变换;(h)连通分量。对于膨胀和连通分量,假设黑色(墨水)像素为活跃像素,即在公式(3.44–3.48)中值为1。
图3.12一维信号卷积作为稀疏矩阵-向量乘法,g = Hf。
事实上,公式(3.14)可以解释为移位脉冲响应函数h(i-k,j-l)与输入像素值f(k,l)的叠加(相加)。卷积具有额外的优良性质,例如,它既可交换又可结合。此外,两个卷积图像的傅里叶变换是它们各自傅里叶变换的乘积(第3.4节)。
相关和卷积都是线性移位不变(LSI)算子,它们都遵循叠加原理(3.5),
h o (f0 + f1 ) = h o f0 + h o f1 , (3.16)
以及变换不变性原理,
g(i, j) = f (i + k, j + l) , (h o g)(i, j) = (h o f)(i + k, j + l), (3.17)
这意味着移动信号与应用算子是等价的(o代表LSI算子)。另一种理解移位不变性的方式是,算子“在任何地方都表现相同”。
偶尔,可能会使用相关或卷积的移位变体版本,例如,
(3.18)
其中h(k,l;i,j)是像素(i,j)处的卷积核。例如,这种空间变化的核可以用来模拟由于深度依赖的离焦而引起的图像模糊。
如果我们将二维图像f (i,j)和g(i,j)转换为栅格顺序向量f和g,相关性和卷积都可以写成矩阵-向量乘法,
g = Hf , (3.19)
其中(稀疏)H矩阵包含卷积核。图3.12显示了一维卷积如何以矩阵-向量形式表示。
图3.13边框填充(上排)和模糊填充图像的结果(下排)。归一化零图像是将模糊零填充RGBA图像除以相应的软阿尔法值的结果。
边距(边框效果)
精明的读者会注意到,图3.10所示的相关性结果比原始图像要小,这在许多应用中可能并不理想。这是因为典型的相关性和卷积操作的邻域延伸到了图像边缘附近,因此滤波后的图像受到了边界效应的影响。
为了解决这个问题,已经开发了多种不同的填充或扩展模式用于邻域操作(图3.13):
零:将源图像外的所有像素设置为0(alpha-matted剪切图像的好选择);
constant(边框颜色):将源图像外部的所有像素设置为指定的边框值;
-clamp(复制或夹紧到边缘):无限重复边缘像素;
•(循环)缠绕(重复或拼接):以“环形”配置在图像上“环绕”;
•镜头:在图像边缘反射像素;
-扩展:通过从边缘像素值中减去信号的镜像版本来扩展信号。
在计算机图形学文献中(Akenine-Mo...ller和Haines2002,第124页),这些机制被称为“包装模式”(OpenGL)或“纹理寻址模式”(Direct3D)。这些模式的公式留给读者自己去研究(练习3.9)。
图3.13展示了使用上述每种机制对图像进行填充,然后对填充后的图像进行模糊处理的效果。如你所见,零填充会使边缘变暗,夹紧(复制)填充会将边界值向内传播,镜像(反射)填充则保留靠近边界的颜色。扩展填充(未显示)在模糊过程中保持边界像素不变。
零填充的RGBA图像的替代方法是模糊零填充的RGBA图像,然后将得到的图像除以其alpha值以消除变暗效果。结果可以相当好,如图3.13中的归一化零图像所示。
3.2.1可分离过滤
执行卷积的过程需要对每个像素进行K2次(乘加)运算,其中K是卷积核的大小(宽度或高度),例如图3.14a中的框滤波器。在许多情况下,可以通过先进行一维水平卷积,再进行一维垂直卷积来显著加速这一操作,这总共需要每像素2K次运算。能够这样操作的卷积核被称为可分离的。
很容易证明,与水平核h和垂直核v连续卷积对应的二维核K是这两个核的外积,
K = vhT (3.20)
(见图3.14的一些示例)。由于效率的提高,计算机视觉应用中卷积核的设计通常受到其可分离性的影响。
我们如何判断给定的核函数K是否确实可分离?这通常可以通过检查或查看核函数的解析形式来完成(Freeman和Adelson1991)。更直接的方法是将二维核函数视为二维矩阵K,并对其进行奇异值分解(SVD),
(SVD的定义见附录A.1.1)。如果只有第一个奇异值σ0是非零的,那么核是可分离的,√σ0 u0和√σ0 v提供垂直和水平方向
(上)为对应的水平一维核(中),(下)为滤波后的图像。滤波后的Sobel和角点图像分别以2×和4×的尺度放大,并在显示前加上灰度偏移。
核函数(Perona1995)。例如,高斯拉普拉斯核函数(3.26和7.23)可以实现为两个可分离滤波器的总和(7.24)(Wiejak,Buxton,and Buxton1985)。
如果你的核函数不可分离,但你仍然希望找到一种更快的实现方法呢?Perona(1995)首次建立了核函数可分离性与奇异值分解之间的联系,建议在(3.21)系列中使用更多的项,即累加多个可分离卷积。这样做是否值得,取决于K的相对大小以及显著奇异值的数量,以及其他考虑因素,如缓存一致性与内存局部性。
3.2.2线性滤波器示例
现在我们已经描述了执行线性滤波的过程,让我们来研究一些常用的滤波器。
最简单的滤波器是移动平均或箱型滤波器,它只是在K×K窗口内对像素值进行平均。这相当于用全为1的核卷积图像,然后进行缩放(图3.14a)。对于较大的核,更高效的实现方式是在每条扫描线上滑动一个移动窗口(在可分离滤波器中),同时累加
最新的像素和从运行总和中减去最旧的像素。这与我们稍后描述的累加面积表的概念有关。
通过将图像与分段线性“帐篷”函数(也称为巴特莱特滤波器)进行分离卷积,可以获得更平滑的图像。图3.14b展示了该滤波器的3×3版本,称为双线性核,因为它是由两个一阶线性样条的外积构成的(见第3.5.2节)。
将线性帐篷函数与其自身卷积得到三次近似样条,这被称为“高斯”核(图3.14c),在伯特和阿德森(1983a)的拉普拉斯金字塔表示中(第3.5节)。请注意,通过与盒滤波器迭代卷积也可以获得近似的高斯核(威尔斯1986)。在滤波器确实需要旋转对称的应用中,应使用精心调整的采样高斯核版本(弗里曼和阿德森1991)(练习3.11)。
我们刚刚讨论的内核都是模糊(平滑)或低通内核的例子,因为它们通过了较低频率的信号,同时衰减了较高频率的信号。它们在这方面做得如何呢?在第3.4节中,我们将使用频域傅里叶分析来检验这些滤波器的确切频率响应。我们还将介绍sinc((sin x)/x)滤波器,它执行理想的低通滤波。
在实际应用中,平滑核常用于减少高频噪声。关于使用平滑变体来消除噪声,我们稍后会详细讨论(参见第3.3.1节、第3.4节以及第4章和第5章)。
令人惊讶的是,平滑核也可以用于使用一种称为非锐化掩模的过程来锐化图像。由于模糊图像会减少高频,添加一些原始图像和模糊图像之间的差异会使它更清晰,
gsharp = f + √ (f — hblur * f). (3.22)
事实上,在数码摄影出现之前,这是在暗房里锐化图像的标准方法:通过错误对焦从原始负片中创建一个模糊的(“正片”)负片,然后在打印最终图像之前将两个负片叠加在一起,这对应于
gunsharp = f (1 — √ hblur * f). (3.23)
这不再是线性滤波器,但它仍然工作良好。
线性滤波也可用作边缘提取(第7.2节)和兴趣点检测(第7.1节)算法的预处理阶段。图3.14d展示了一个简单的3×3边缘提取器,称为Sobel算子,它是水平中心差分(之所以这样命名是因为水平导数以像素为中心)和垂直的可分离组合。
平滑滤镜(用于平滑结果)。如下面的图像所示,该滤镜有效地强调了垂直边缘。
简单的角点检测器(图3.14e)寻找同时存在的水平和垂直二阶导数。然而,如你所见,它不仅对正方形的角点有反应,还对对角线边缘有反应。更好的角点检测器,或者至少是旋转不变性更强的兴趣点检测器,在第7.1节中有所描述。
3.2.3带通和可调滤波器
Sobel和角点算子是带通和定向滤波器的简单示例。通过首先用高斯(单位面积)滤波器平滑图像,可以创建更复杂的内核,
(3.24)
然后取一阶或二阶导数(Marr1982;Witkin1983;Freeman和Adelson 1991)。这些滤波器统称为带通滤波器,因为它们可以滤除低频和高频。
二维图像的(无向)二阶导数,
(3.25)
被称为拉普拉斯算子。用高斯模糊图像,然后取其拉普拉斯算子等同于直接与高斯拉普拉斯(LoG)滤波器卷积,
(3.26)
具有某些良好的尺度空间特性(Witkin1983;Witkin、Terzopoulos和Kass 1986)。五点拉普拉斯算子只是这种更复杂的滤波器的紧凑近似。
同样,Sobel算子是方向或定向滤波器的简单近似,可以通过用高斯(或其他滤波器)进行平滑,然后取方向导数▽获得
梯度场▽和单位方向=(cos θ,sin θ),
· ▽(G * f) = ▽ (G * f) = (▽ G) * f. (3.27)
平滑的方向导数滤波器,
(3.28)
图3.15二阶可转向滤波器(Freeman1992)©1992 IEEE:(a)爱因斯坦的原始图像;(b)从二阶定向能量计算出的方向图;(c)增强定向结构的原始图像。
其中=(u,v)是一个可转向滤波器的例子,因为图像与G卷积后的值可以通过首先与一对滤波器(Gx,Gy)卷积,然后通过将这个梯度场与单位向量相乘(自由曼和阿德森1991)来局部地调整滤波器。这种方法的优点是可以在几乎不增加成本的情况下评估整个滤波器族。
如何引导一个方向二阶导数滤波器▽·▽G,它是取(平滑的)方向导数,然后再次取方向导数的结果?例如,Gxx是x方向上的二阶方向导数。
乍一看,似乎转向技巧不起作用,因为对于每一个二-
修正,我们需要计算一个不同的第一方向导数。有点令人惊讶的是,
Freeman和Adelson(1991)表明,对于方向高斯导数,可以用相对较少的基函数来控制任何阶导数。例如,只需要三个基函数就可以得到二阶方向导数,
G ^u^u = u2 Gxx + 2uvGxy + v2 Gyy . (3.29)
此外,每个基础滤波器虽然不一定可分离,但可以使用少量可分离滤波器的线性组合进行计算(Freeman和Adelson,1991)。
这一显著成果使得构建方向选择性逐渐增强的方向导数滤波器成为可能,即仅对具有强烈局部方向一致性的边缘作出响应的滤波器(图3.15)。此外,高阶可转向滤波器可以在给定位置对多个边缘方向作出响应,并且可以同时对条状边缘(细线)和经典的阶梯边缘作出响应(图3.16)。然而,为了实现这一点,需要使用完整的希尔伯特变换对来处理二阶和
图3.16四阶可调滤波器(Freeman和Adelson 1991)©1991 IEEE:(a)测试图像包含不同方向的条纹(线)和台阶边缘;(b)平均定向能量;(c)主要定向;(d)定向能量随角度变化(极坐标图)。
如(Freeman和Adelson1991)所述,使用更高滤波器。
可转向滤波器常用于构建特征描述符(第7.1.3节)和边缘检测器(第7.2节)。虽然弗里曼和阿德森(1991)开发的滤波器最适合检测线性(边缘状)结构,但科特(2003)的最新研究展示了如何使用2×2边界张量来编码边缘和连接点(“角”)特征。练习3.13要求你实现这样的可转向滤波器,并将其应用于寻找边缘和角特征。
面积总和表(积分图像)
如果一个图像将被重复卷积不同的盒滤波器(特别是不同位置的不同大小的滤波器),你可以预先计算总和面积表(Crow 1984),它只是从原点开始的所有像素值的累加
(3.30)
这可以通过递归(光栅扫描)算法高效地计算,
s(i, j) = s(i - 1, j) + s(i, j - 1) - s(i - 1, j - 1) + f (i, j). (3.31)
图像s(i,j)也常被称为积分图像(见图3.17),如果使用单独的行和,实际上每个像素只需进行两次加法即可计算(Viola和Jones 2004)。为了找到矩形[i0,i1]×[j0,j1]内的累加面积(积分),我们只需将累加面积表中的四个样本合并,
S(i0. . . i1 , j0. . . j1 ) = s(i1 , j1 ) - s(i1 , j0 - 1) - s(i0 - 1, j1 ) + s(i0 - 1, j0 - 1). (3.32)
图3.17汇总面积表:(a)原始图像;(b)汇总面积表;(c)面积总和计算。汇总面积表中的每个值(i,j)(红色)都是从其三个相邻的(蓝色)邻居递归计算得出的(3.31)。面积总和S(绿色)是通过结合矩形四个角上的四个值(紫色)计算得出的(3.32)。正值用粗体表示,负值用斜体表示。
潜在的缺点是,与原始图像相比,累加图像需要额外的M + log N位来表示,其中M和N分别是图像的宽度和高度。累加表的扩展也可以用于近似其他卷积核(Wolberg(1990,第6.5.2节)包含了相关综述)。
在计算机视觉中,累加面积表被用于人脸检测(Viola和Jones 2004),以计算简单的多尺度低级特征。这些特征由正负值相邻的矩形组成,也被称为盒单元(Simard、Bottou等1998)。原则上,累加面积表也可以用于计算平方差和(SSD)立体和运动算法中的总和(第12.4节)。实际上,除非需要考虑多种不同的窗口形状和大小,通常更倾向于使用可分离的移动平均滤波器(Kanade、Yoshida等1996),Veksler(2003)指出。
递归过滤
增量公式(3.31)用于求和面积,是递归滤波器的一个例子,即其值依赖于先前的滤波器输出。在信号处理文献中,这类滤波器被称为无限脉冲响应(IIR),因为当输入一个脉冲(单个非零值)时,滤波器的输出会持续不断。例如,对于求和面积表,脉冲会在其下方和右侧生成一个无限长的1矩形。我们在本章之前研究过的涉及有限范围核图像的滤波器,则被称为有限脉冲响应(FIR)。
二维IIR滤波器和递归公式有时用于计算量化
图3.18中值滤波和双边滤波:(a)原始图像,带有高斯噪声;(b)
高斯滤波;(c)中值滤波;(d)双边滤波;(e)原始图像带散粒噪声;(f)高斯滤波;(g)中值滤波;(h)双边滤波。请注意,双边滤波未能去除散粒噪声,因为噪声像素与其邻近像素差异过大。
涉及大面积相互作用的实体,如二维距离函数(第3.3.3节)和连通分量(第3.3.3节)。
然而,更常见的是,在一维可分离滤波阶段内部使用IIR滤波器来计算大范围平滑核,例如高斯函数和边缘滤波器的有效近似(Deriche1990;Nielsen、Florack和Deriche1997)。基于金字塔的算法(第3.5节)也可以用于执行此类大面积平滑计算。
3.3 更多社区运营商
正如我们刚才所见,线性滤波器可以执行多种图像变换。然而,非线性滤波器,如边缘保持中值滤波器或双边滤波器,在某些情况下表现得更好。其他邻域算子的例子包括作用于二值图像的形态学算子,以及计算距离变换和查找二值图像中连通组件的半全局算子(图3.11f–h)。
图3.19中值滤波和双边滤波:(a)中值像素(绿色);(b)选择Q-
精简的像素;(c)域滤波器(边缘上的数字是像素距离);(d)范围滤波器。
3.3.1非线性滤波
我们迄今为止所讨论的滤波器都是线性的,即它们对两个信号之和的响应与这两个信号各自响应之和相同。这相当于说每个输出像素是若干个输入像素的加权总和(3.19)。线性滤波器更容易组合,并且适合进行频率响应分析(第3.4节)。
然而,在许多情况下,通过使用相邻像素的非线性组合可以获得更好的性能。例如,考虑图3.18e中的图像,其中噪声不是高斯噪声,而是散粒噪声,即偶尔会出现非常大的值。在这种情况下,使用高斯滤波器进行常规模糊处理无法去除这些噪声像素,反而会使它们变成更柔和(但仍然可见)的斑点(图3.18f)。
中值过滤
在这种情况下,更好的滤波器是中值滤波器,它从每个像素的邻域中选择中值(图3.19a)。中值可以通过随机选择算法(Cormen2001)以预期的线性时间计算出来,增量变体也已开发(Tomasi和Manduchi1998;Bovik2000,第3.2节),以及一个与窗口大小无关的常数时间算法(Perreault和Hbert2007)。由于散粒噪声值通常远高于邻域内的真实值,中值滤波器能够过滤掉这些不良像素(图3.18g)。
中值滤波器的一个缺点是,除了其适度的计算成本外,由于它仅选择一个输入像素值来替换每个输出像素,因此在平均消除常规高斯噪声方面效率较低(Huber 1981;Hampel,Ronchetti等1986;Stewart 1999)。更好的选择可能是Q剪切均值(Lee和Redner 1990;Crane 1997,
p. 109),它将除最小和最大α分数以外的所有像素平均(图3.19b)。
另一种可能性是计算加权中值,其中每个像素根据其与中心的距离被使用若干次。这等同于最小化加权目标函数
(3.33)
其中g(i,j)是期望输出值,对于加权中位数,p = 1。p = 2则是常用的加权平均值,在归一化后相当于相关系数(3.12),通过权重之和进行归一化(Haralick和Shapiro 1992,第7.2.6节;Bovik 2000,第3.2节)。加权平均值还与其他稳健统计方法有深刻联系(见附录B.3),例如影响函数(Huber 1981;Hampel、Ronchetti等1986)。
非线性平滑具有另一个也许更为重要的特性,尤其是在当今的摄像机中,光子噪声很少。这种滤波更有利于边缘保持,即在滤除高频噪声的同时,它对边缘软化的作用更小。
考虑图3.18a中的噪声图像。为了去除大部分噪声,高斯滤波器被迫平滑掉高频细节,这在强边缘附近尤为明显。中值滤波效果更好,但如前所述,在平滑不连续处的效果较差。有关边缘保持平滑技术的更多参考文献,请参见Tomasi和Manduchi(1998)。
虽然我们可以尝试使用α修剪的平均值或加权中位数,但这些技术仍然倾向于圆滑锐角,因为平滑区域中的大多数像素来自背景分布。
3.3.2双边滤波
如果我们把加权滤波核的概念与更好的异常值拒绝方法结合起来会怎样?如果不用固定比例α来拒绝,而是简单地(以一种柔和的方式)拒绝那些值与中心像素值差异过大的像素呢?这就是双边滤波的核心思想,这一概念最初由汤马西和曼杜奇(1998年)在计算机视觉领域推广开来,尽管奥里奇和韦勒(1995年)以及史密斯和布雷迪(1997年)在此之前已经提出了类似的方法。帕里斯、科尔普罗斯特等人(2008年)对这一领域的研究进行了很好的综述,并介绍了其在计算机视觉、图形学和计算摄影中的广泛应用。在双滤波器中,输出像素值取决于邻近像素的加权组合。
枯燥的像素值
(3.34)
加权系数w(i,j,k,l)取决于域核的乘积(图3.19c),
(3.35)
以及一个数据依赖的范围核(Figure3.19d),
图3.20显示了噪声阶跃边缘的双边滤波的一个例子。注意域内核是通常的高斯核,范围核测量外观(强度)与中心像素的相似性,而双边滤波核是这两个的乘积。
注意,对于彩色图像,范围滤波器(3.36)使用中心像素与相邻像素之间的向量距离。这在彩色图像中非常重要,因为任何一个颜色带中的边缘都表示材料的变化,因此需要降低像素的影响。7
由于双边滤波相比常规可分离滤波速度较慢,因此开发了多种加速技术,如Durand和Dorsey(2002)、Paris和Durand(2009)、Chen、Paris和Durand(2007)以及Paris、Kornprobst等人(2008)所讨论的。特别是双边网格(Chen、Paris和Durand 2007),它在高维颜色/位置空间上以均匀网格进行子采样,至今仍被广泛使用,包括双边求解器的应用(第4.2.3节和Barron及Poole(2016))。通过Adams、Baek和Davis(2010)开发的置换体晶格方法,可以实现更快的双边滤波。
迭代自适应平滑和各向异性扩散
双边(和其他)滤波器也可以以迭代方式应用,特别是如果需要更像“卡通”的外观时(Tomasi和Manduchi1998)。当应用迭代滤波时,通常可以使用更小的邻域。
图3.20双边滤波(Durand和Dorsey2002)©2002 ACM:(a)噪声阶跃边缘输入;(b)域滤波器(高斯);(c)范围滤波器(与中心像素值相似);(d)
双滤波器;(e)滤波后的台阶边缘输出;(f)像素之间的三维距离。
例如,考虑仅使用最近的四个邻居,即限制jk -ij + j l - jj≤1在(3.34)中。观察到
因此,我们可以将(3.34)重写为
其中R = Σ(k,l)r(i,j,k,l),(k,l)是(i,j)的N4(最近的四个)邻居,我们已经明确地表明了过滤的迭代性质。
正如Barash(2002)指出的,(3.40)与离散各向异性扩散方程相同。
最初由佩罗纳和马利克(1990b)提出。自首次引入以来,各向异性扩散已被扩展并应用于广泛的问题(尼尔森、弗洛拉克和德里奇1997;布莱克、萨皮罗等人1998;魏克特、特哈·罗梅尼和维尔热弗1998;魏克特1998)。它还被证明与其它自适应平滑技术密切相关(圣马尔克、陈和Medioni1991;Barash2002;Barash及科马尼丘2004),以及带有非线性平滑项的贝叶斯正则化,该平滑项可以从图像统计中推导出来(沙尔、布莱克和豪塞克2003)。
在其一般形式中,范围核r(i,j,k,l)= r(Ⅱf(i,j)- f(k,l)Ⅱ),通常称为增益或边缘停止函数,或扩散系数,可以是任何单调递增的函数,且当x→∞时,r(x)→0。Black、Sapiro等人(1998)展示了各向异性扩散等价于最小化图像梯度上的稳健惩罚函数,我们将在第4.2节和第4.3节中讨论这一点。Scharr、Black和Haussecker(2003)展示了如何从局部图像统计中以原则性的方式推导出边缘停止函数。他们还将扩散邻域从N4扩展到N8,这使得他们能够创建一个既旋转不变又包含局部结构张量特征值信息的扩散算子。
请注意,如果没有偏向于原始图像的偏差项,各向异性扩散和迭代自适应平滑会收敛到一个恒定的图像。除非迭代次数很少。
(例如,用于速度),通常最好将平滑问题表述为平滑项和数据保真度项的联合最小化,如第4.2节和第4.3节以及Scharr、Black和Haussecker(2003)所述,他们以一种有原则的方式引入了这种偏差。
引导图像滤波
虽然到目前为止我们讨论了用于滤除图像以获得改进版本的技术,例如减少噪声或锐化边缘的版本,但也可以使用不同的引导图像来自适应地滤除噪声输入(Eisemann和Durand 2004;Petschnigg、Agrawala等人2004;He、Sun和Tang 2013)。一个例子是使用闪光灯图像,该图像具有强烈的边缘但色彩较差,来自适应地滤除低光非闪光彩色图像,后者含有大量噪声,如第10.2.2节所述。在他们的论文中,Eisemann和Durand(2004)将他们应用范围滤波器(3.36)到不同引导图像h()的方法称为交叉双边滤波,而Petschnigg、Agrawala等人(2004)则称之为联合双边滤波。
He、Sun和Tang(2013)指出,这些论文只是引导图像滤波这一更一般概念的两个例子,在该概念中,引导图像h()用于计算
8 1/(1 + ηR)因子在各向异性扩散中不存在,但当η→0时变得可以忽略不计。
图3.21指导图像滤波(He、Sun和Tang 2013)©2013 IEEE。与左侧所示的联合双边滤波不同,后者从指导图像(图中表示为I,文中表示为h)计算每个像素的权重掩模,指导图像滤波将输出值(图中表示为qi,文中表示为g(i,j))建模为指导像素的局部仿射变换。
局部适应的像素间权重w(i,j,k,l),即,
(3.41)
在他们的论文中,作者建议使用局部仿射变换来建模引导图像和输入图像之间的关系,
g(i,j)=Ak,lh(i,j)+bk,l, (3.42)
其中,Ak,l和bk,l的估计值是通过在以像素(k,l)为中心的正方形邻域上进行正则化最小二乘拟合而获得的,即最小化
ⅡAk,lh(i,j
)+ bk,l - f(i,j)Ⅱ2 + λⅡAⅡ2。 (3.43)
这类正则化最小二乘问题被称为岭回归(第4.1节)。该算法背后的原理如图3.21所示。
不是仅仅从该像素为中心的窗口中获取过滤像素g(i,j)的预测值,而是使用覆盖该像素的所有窗口的平均值。所得算法(He,Sun和Tang 2013,算法1)包括一系列局部均值图像和图像矩滤波器、逐像素线性系统求解(如果引导图像是标量,则简化为除法),以及另一组滤波步骤。作者描述了这一快速简便的过程如何应用于各种计算机视觉问题,包括图像抠图(第10.4.3节)、高动态范围图像色调映射(第10.2.1节)、立体匹配(Hosni,Rhemann等2013)和图像去噪。
图3.22二值图像形态学:(a)原始图像;(b)膨胀;(c)腐蚀;(d)多数;(e)开运算;(f)关闭运算。所有示例的结构元素均为5×5的正方形。多数效应会使尖角变得略微圆润。由于宽度不足,开运算无法消除点。
3.3.3二值图像处理
虽然非线性滤波器通常用于增强灰度和彩色图像,但它们也广泛用于处理二进制图像。这种图像通常是在阈值操作之后出现的,
(3.44)
例如,将扫描的灰度文档转换为二进制图像以进行进一步处理,例如光学字符识别。
形态学
最常见的二值图像操作称为形态学操作,因为它们会改变底层二值对象的形状(Ritter和Wilson 2000,第7章)。要执行此类操作,我们首先用二值结构元素对二值图像进行卷积,然后根据卷积结果的阈值选择一个二值输出值。(这并不是通常描述这些操作的方式,但我认为这是一种简单而统一的方法。)结构元素可以是任意形状,从简单的3×3盒滤波器到更复杂的圆盘结构。它甚至可以对应于图像中要寻找的特定形状。
图3.22显示了二进制图像f与3×3结构的卷积的放大图
图灵元件和下面描述的操作的图像结果。设
c = f s (3.45)
S为结构元素的大小(像素数),S为在图像上扫描时每个结构元素内部1的数量的整数值。二值形态学中使用的标准操作包括:
扩增:扩增(f,s) = θ(c,1);
侵蚀:侵蚀(f,s) = θ(c,S);
多数数:maj(f,s)= θ(c,S/2);
打开:打开(f,s) =扩张(侵蚀(f,s),s);
•结束:close(f,s)= erode(dilate(f,s),s)。
从图3.22可以看出,膨胀作用使由1组成的对象变大(变厚),而腐蚀作用使对象变小(变薄)。开运算和闭运算往往不会影响大的区域和平滑的边界,而会去除小的对象或孔洞并平滑边界。
虽然在本书其余部分我们不会大量使用数学形态学,但当你需要清理一些阈值图像时,它是一个非常有用的工具。关于形态学的更多细节,你可以在其他计算机视觉和图像处理教科书中找到(Haralick和Shapiro 1992,第5.2节;Bovik 2000,第2.2节;Ritter和Wilson 2000,第7节),以及专门讨论这一主题的文章和书籍中(Serra 1982;Serra和Vincent 1992;Yuille、Vincent和Geiger 1992;Soille 2006)。
距离转换
距离变换在使用两遍光栅算法快速预计算到曲线或点集的距离方面非常有用(Rosenfeld和Pfaltz 1966;Danielsson 1980;Borge-Fors 1986;Paglieroni 1992;Breu、Gil等1995;Felzenszwalb和Huttenlocher 2012;Fabbri、Costa等2008)。它有许多应用,包括水平集(第7.3.2节)、快速查姆匹配(二值图像对齐)(Huttenlocher、Klanderman和Rucklidge 1993)、图像拼接和融合中的羽化处理(第8.4.2节),以及最近点对齐(第13.2.1节)。
二值图像b(i,j)的距离变换D(i,j)定义如下。设d(k,l)为像素偏移之间的距离度量。两种常用的度量包括城市街区或曼哈顿距离
d1 (k, l) = jk j + j lj (3.46)和欧几里得距离
(3.47)距离变换定义为
图3.23城市街区距离变换:(a)原始二值图像;(b)从上到下
(前向)光栅扫描:使用绿色值计算橙色值;(c)从底部到顶部
(后向)光栅扫描:绿色值与旧的橙色值合并;(d)最终距离变换。
即,它是到最近的背景像素的距离,其值为0。
D1城市街区距离变换可以通过简单的光栅扫描算法的前向和后向遍历来高效计算,如图3.23所示。在前向遍历时,b中的每个非零像素被其北或西邻居的距离的最小值+1所替代。在后向遍历时,情况相同,只是最小值同时取当前值D和南或东邻居距离的最小值+1(图3.23)。
高效计算欧几里得距离变换更为复杂(Danielsson 1980;Borgefors 1986)。这里,仅在两次遍历中保留与边界之间的最小标量距离是不够的。相反,需要保留一个包含距离边界的儿和y坐标的向量值距离,并使用平方距离(斜边)规则进行比较。此外,为了获得合理的结果,还需要使用更大的搜索区域。
图3.11g展示了一个从二值图像计算出的距离变换。请注意,数值如何远离黑色(墨水)区域并形成原始图像白色区域的脊线。由于这种从起始边界像素开始的线性增长,距离变换有时也被称为草火变换,因为它描述了从黑色区域内开始的火灾会消耗任何给定像素或切角的时间,因为这类似于木工和工业设计中使用的类似形状。距离变换中的脊线成为该变换计算区域的骨架(或中轴变换(MAT)),由与两个(或更多)边界等距的像素组成(Tek和Kimia2003;Sebastian和Kimia2005)。
基本距离变换的一个有用的扩展是带符号距离变换,它计算所有像素到边界像素的距离(Lavall e和Szeliski1995)。创建它的最简单方法是计算原始二进制的两
距离变换。
图像及其补集,在结合之前先否定其中一个。由于这些距离场通常较为平滑,因此可以使用定义在四叉树或八叉树数据结构上的样条函数来更紧凑地存储它们(相对精度损失最小)(Lavalle和Szeliski 1995;Szeliski和Lavalle 1996;Frisken、Perry等2000)。这种预计算的带符号距离变换对于高效对齐和合并二维曲线和三维表面非常有用(Huttenlocher、Klanderman和Rucklidge 1993;Szeliski和Lavalle 1996;Curless和Levoy 1996),特别是当存储并插值了距离变换的向量版本,即每个像素或体素到最近边界或表面元素的指针时。带符号距离场也是水平集演化的关键组成部分(第7.3.2节),在那里它们被称为特征函数。
连通分量
另一个有用的半全局图像操作是寻找连通区域,定义为具有相同输入值或标签的相邻像素区域。如果像素在水平或垂直方向上紧邻,则称为N4相邻;如果它们还可以对角线相邻,则称为N8相邻。连通区域的这两种变体在各种应用中被广泛使用,例如在扫描文档中识别单个字母,或在阈值图像中找到对象(如细胞)并计算其面积统计。多年来,已经开发出多种高效的算法来查找这些区域,包括Haralick和Shapiro ( 1992年,第2.3节)以及He、Ren等人(2017年)所描述的方法。这些算法通常包含在图像处理库中,如OpenCV。
一旦二值或多值图像被分割成其连通分量,通常对每个单独区域R计算面积统计是很有用的。这些统计包括:
区域(像素数);
周长(边界像素数);
质心(平均x和y值);
第二矩,
(3.49)
通过该方法可以使用特征值分析计算出主轴和副轴的方向和长度。
这些统计量可以用于进一步处理,例如,按区域大小对区域进行排序(以考虑最大的区域)或对不同图像中的区域进行初步匹配。
3.4 傅里叶变换
在第3.2节中,我们提到傅里叶分析可以用于分析各种滤波器的频率特性。本节将解释傅里叶分析如何帮助我们确定这些特性(即图像的频率成分),以及如何利用快速傅里叶变换(FFT)在时间上执行与核大小无关的大核卷积。关于傅里叶变换的更全面介绍,可参见布雷斯韦尔(1986)、格拉斯纳(1995)、奥本海姆和沙弗(1996)以及奥本海姆、沙弗和巴克(1999)。
我们如何分析给定滤波器对高频、中频和低频的作用呢?答案很简单,就是让一个已知频率的正弦波通过滤波器,然后观察它被衰减了多少。
s(x) = sin(2πfx + φi)= sin(ωx + φi) (3.50)
作为输入的正弦波,其频率为f,角频率为ω = 2πf,相位为φi。请注意,在本节中,我们使用变量x和y来表示图像的空间坐标,而不是像前几节中使用的i和j。这既是因为字母i和j常用于表示虚数(具体取决于你是在阅读复变量还是电气工程文献),也是因为这样更容易区分频率空间中的水平(x)和垂直(y)分量。在本节中,我们使用字母j来表示虚数,因为这是信号处理文献中最常见的形式(Bracewell1986;Oppenheim和Schafer1996;Oppenheim,Schafer,和Buck1999)。
如果我们用一个脉冲响应为h(x)的滤波器对正弦信号s(x)进行卷积,我们得到另一个相同频率但幅度A和相位φo不同的正弦波,
o(x) = h(x) * s(x) = A sin(ωx + φo), (3.51)
如图3.24所示。要了解这一点,记住卷积可以表示为移位输入信号的加权求和(3.14),而一组相同频率的移位正弦波的求和只是一个该频率的单个正弦波。
图3.24傅里叶变换作为滤波器h(x)对输入正弦波s(x) = ejωx的响应,产生输出正弦波o(x) = h(x) * s(x) = Aej(ωx+φ)。
新的幅度A称为滤波器的增益或幅度,而相位差
△φ=φo-φi称为移位或相位。
实际上,更紧凑的符号是使用复数值正弦波
s (x) = ejωx = cos!x + j sin!x. (3.52)
在这种情况下,我们可以简单地写,
o (x) = h (x) * s (x) = Aej(ωx+φ) . (3.53)
傅里叶变换只是每个频率的幅度和相位响应的列表,
H(!) = F {h (x)} = Aejφ ; (3.54)
即,它是频率为!的复数正弦波通过滤波器h(x)后的响应。傅里叶变换对也常写成
h(x)
F
$ H(!).
(3.55)
不幸的是,(3.54)并没有给出计算傅里叶变换的实际公式。
相反,它给出一个配方,即,将滤波器与正弦波卷积,观察幅度和相位偏移,重复。幸运的是,傅里叶变换在连续域中都存在闭式方程,
这是音响发烧友的噩梦,他们坚持使用没有谐波失真的设备。现在数字音频已经引入了纯无失真的声音,一些音响发烧友开始购买复古的电子管放大器或模拟这种失真的数字信号处理器,因为它们“更温暖的声音”。
在离散域中,
(3.57)
其中,N是信号或分析区域的长度。这些公式既适用于滤波器,如h(x),也适用于信号或图像,如s(x)或g(x)。
傅里叶变换的离散形式(3.57)被称为离散傅里叶变换(DFT)。注意,虽然(3.57)可以为任何k值求解,但只有在以下情况下才有意义
表面上看,DFT需要O(N^2)次运算(乘加)来计算。幸运的是,存在一种更快的算法,称为快速傅里叶变换(FFT),它只需要O(N log2 N)次运算(Bracewell 1986;Oppenheim,Schafer和Buck 1999)。我们在这里不详细解释该算法的细节,只是说明它涉及一系列log2 N阶段,每个阶段执行小的2×2转换(带有已知系数的矩阵乘法),随后进行一些半全局置换。(你经常会看到“蝶形”一词用于这些阶段,因为涉及的信号处理图具有这种形状。)大多数数值和信号处理库中都提供了FFT的实现。
傅里叶变换具有一系列极其有用的性质,这些性质涉及原始信号及其傅里叶变换之间的关系,包括叠加、平移、反转、卷积、相关、乘法、微分、域缩放(拉伸)以及能量守恒(帕斯卡定理)。为了容纳第二版中所有新的内容,我删除了所有这些细节,以及常用傅里叶变换对的讨论。感兴趣的读者可以参考(Szeliski2010,第3.1节,表3.1-3.3)或信号处理和傅里叶变换的标准教科书(Bracewell1986;Glassner 1995;Oppenheim和Schafer1996;Oppenheim,Schafer,和Buck1999)。
我们还可以计算图3.14中所示的小离散核的傅里叶变换(见表3.1)。请注意,移动平均滤波器并不能均匀地抑制高频,因此可能导致振铃效应。伯特和阿德森(1983a)在拉普拉斯金字塔中使用的二项式滤波器(Gomes和Velho 1997)作为“高斯”滤波器(见第3.5节),在分离高低频方面表现不错,但仍保留了相当多的高频细节,这可能导致降采样后的混叠。索贝尔边缘检测器最初线性增强频率,但在更高频率处衰减,因此难以检测细小的边缘,例如相邻的黑白像素。
表3.1图3.14所示的可分离核的傅里叶变换,通过计算Σk h(k)e-jkw得到。
列。我们在第3.5.2节中查看了小核傅里叶变换的其他示例,其中我们研究了在抽取(尺寸缩减)之前更好的预滤波器核。
3.4.1二维傅立叶变换
我们为一维信号及其变换开发的公式和见解可以直接应用于二维图像。在这里,我们不必仅仅指定一个水平或垂直频率!x或!y,我们可以创建一个频率为(!x;!y)的定向正弦波,
s (x; y) = sin(!xx + !yy). (3.58)
相应的二维傅里叶变换为
(3.59)
在离散域中,
其中M和N是图像的宽度和高度。
所有一维傅里叶变换的性质在二维情况下同样适用,只需将标量变量x、!、x0和a替换为它们的二维向量对应物x =(x;y),! =(!x;!y),x0 =(x0;y0),以及a =(ax;ay),并使用向量内积代替乘法。
维纳滤波
虽然傅里叶变换是分析滤波器核或图像的频率特性的有用工具,但它也可以用于分析整个类别的图像的频谱。
图像的一个简单模型是假设它们是随机噪声场,其在每个频率上的预期幅度由功率谱Ps(!x;!y)给出,即,
([S(!x ; !y )]2〉= Ps (!x ; !y ); (3.61)
其中,尖括号〈·〉表示随机变量的期望(均值)值。为了生成这样的图像,我们只需创建一个随机高斯噪声图像S(!x;!y),其中每个“像素”是一个零均值、方差为Ps(!x;!y)的高斯分布,然后取其逆FFT。
10也常用符号E[·]表示。
图3.25离散余弦变换(DCT)基函数:第一个DC(即常数)基函数是水平蓝线,第二个是棕色半周期波形等。这些基函数广泛用于图像和视频压缩标准中,如JPEG。
信号频谱捕捉空间统计的一阶描述这一观察结果,在信号和图像处理中被广泛使用。特别是,假设图像是从一个相关的高斯随机噪声场中抽取的样本,并结合测量过程的统计模型,可以得到一个最优恢复滤波器,即维纳滤波器。
本书的第一版包含Wiener滤波器的推导(Szeliski2010,第3.4.3节),但我决定从当前版本中删除这一部分,因为它在实践中几乎不再使用,已经被性能更好的非线性滤波器所取代。
离散余弦变换
离散余弦变换(DCT)是傅里叶变换的一种变体,特别适合以块状方式压缩图像。一维DCT是通过将每个N宽像素块与一组不同频率的余弦值进行点积来计算的,
(3.62)
其中k是系数(频率)索引,1/2像素偏移用于使基函数系数对称(Wallace1991)。图3.25显示了一些离散余弦基函数。如你所见,第一个基函数(蓝色直线)编码了像素块中的平均直流值,而第二个基函数则编码了一个略微弯曲的斜率版本。
结果表明,DCT是自然图像统计量在小块上的最优Karhunen-Love分解的良
近似,这可以通过对图像进行主成分分析(PCA)获得,如第5.2.3节所述。KL-
变换可对信号进行最佳去相关(假设信号由其频谱描述),因此,理论上,可实现最佳压缩。
DCT的二维版本定义类似,+)l) f(i,j)。(3.63)与二维快速傅里叶变换类似,二维离散余弦变换也可以分离实现,即首先计算块中每行的离散余弦变换,然后计算每个结果列的离散余弦变换。与FFT一样,每次离散余弦变换也可以在O(N log N)时间内完成。
正如我们在第2.3.3节中提到的,DCT在当今的图像和视频压缩算法中被广泛应用,尽管如小波变换(Simoncelli和Adelson 1990b;Taubman和Marcellin 2002)等替代方法,以及JPEG2000和JPEG XR标准中使用的DCT的重叠变体(Malvar 1990,1998,2000),在第3.5.4节中讨论过。这些较新的算法较少受到块效应的影响(即每个块(通常是8×8)中的像素独立变换和量化导致的边缘对齐不连续性)。有关如何从压缩的JPEG图像中去除块效应的想法,请参见练习4.3。
3.4.2应用:锐化、模糊和去噪
图像处理的另一个常见应用是通过使用锐化和去噪操作来增强图像,这些操作需要某种邻域处理。传统上,这类操作是通过线性滤波(见第3.2节和第3.4.1节)来完成的。如今,更常用的是非线性滤波器(第3.3.1节),例如加权中值或双边滤波器(3.34–3.37)、各向异性扩散(3.39–3.40)或非局部均值(Buades、Coll和Morel 2008)。变分方法(第4.2节),特别是那些使用非二次(鲁棒)范数的方法,如L1范数(称为全变差),也经常被采用。最近,深度神经网络已经主导了去噪领域(第10.3节)。图3.19展示了一些使用线性和非线性滤波器去除噪声的例子。
在测量图像去噪算法的有效性时,通常将结果报告为峰值信噪比(PSNR)测量值(2.120),其中I(x)是
原始(无噪声)图像和(x)是去噪后的图像;这是在以下情况下的结果
噪声图像已被合成生成,因此干净的图像是已知的。更好的质量测量方法是使用基于感知的相似性度量,例如结构相似性(SSIM)指数(王、博维克等,2004;王、博维克和西蒙切利,2005)或FLIP图像差异评估器(安德森、尼尔松等,2020)。最近,
人们开始使用神经“感知”相似度指标来衡量相似性(John- son,Alahi和Fei-Fei 2016;Dosovitskiy和Brox 2016;Zhang,Isola等2018;Tariq,Tursun等2020;Czolbe,Krause等2020),这些指标与L2(PSNR)或L1指标不同,后者倾向于平滑或平坦的平均结果,而前者更偏好具有相似纹理量的图像(Cho,Joshi等2012)。当干净的图像不可用时,也可以使用无参考图像质量评估来评估图像质量(Mittal,Moorthy和Bovik 2012;Talebi和Milanfar 2018)。
练习3.12,3.21和3.28要求你实现一些操作并比较它们的有效性。更复杂的去模糊技术和相关的超分辨率任务在第10.3节中讨论。
3.5 塔和波浪
到目前为止,在本章中我们研究的所有图像变换都生成与输入图像相同大小的输出图像。然而,很多时候,我们可能希望在继续之前改变图像的分辨率。例如,我们需要插值一个小图像,使其分辨率与输出打印机或计算机屏幕相匹配。或者,我们可能希望减小图像的尺寸,以加快算法执行速度,节省存储空间或传输时间。
有时,我们甚至不知道图像的适当分辨率应该是多少。例如,在图像中寻找人脸的任务(第6.3.1节)。由于我们不知道人脸出现的比例,因此需要生成一系列不同大小的图像金字塔,并逐一扫描以寻找可能的人脸。(生物视觉系统也遵循比例层次结构(Marr1982)。)这样的金字塔还可以通过首先在金字塔的较粗层次找到该对象的小实例,然后仅在粗略检测区域附近寻找全分辨率的对象,从而加速对象的搜索(第9.1.1节)。最后,图像金字塔对于执行多尺度编辑操作非常有用,如在保持细节的同时融合图像。
在本节中,我们首先讨论用于改变图像分辨率的良好滤波器,即上采样(插值,Section3.5.1)和下采样(降采样,Section3.5.2)。然后,我们介绍多分辨率金字塔的概念,它可以用来创建不同大小图像的完整层次结构,并支持多种应用(第3.5.3节)。一个密切相关概念是小波,这是一种具有更高频率选择性和其他有用特性的特殊金字塔(第3.5.4节)。最后,我们介绍了一种金字塔的有用应用,即将不同图像融合在一起,以隐藏图像边界之间的接缝(第3.5.5节)。
图3.26信号插值,g(i) = Σk f (k)h(i - rk):输入值的(a)加权求和;(b)多相滤波器解释。
3.5.1插值
为了将图像插值(或上采样)到更高的分辨率,我们需要选择一些插值核来与图像进行卷积,
(3.64)
什么样的核函数是好的插值器?答案取决于应用和计算时间。表3.1中所示的任何平滑核函数都可以在适当重新缩放后使用。线性插值器(对应于帐篷核)生成分段线性曲线,应用于图像时会产生不美观的折痕(图3.27a)。立方B样条,其离散1/2像素采样在表3.1中表现为二项式核,是一种近似核(插值图像不会穿过输入数据点),生成具有减少高频细节的柔和图像。立方B样条的方程最简单地通过将帐篷函数(线性B样条)与自身卷积来推导。
11平滑核在Table3.1have中是一个单位面积。要将它们转换为插值核,我们只需进行缩放
图3.27二维图像插值:(a)双线性;(b)双三次(=-1);(c)双三次(=-0.5);(d)窗口sinc(9个抽头)。
虽然大多数显卡使用双线性内核(可选地与MIP映射结合——见第3.5.3节),但大多数照片编辑软件使用双三次插值。双三次插值是一种C1(导数连续)分段三次样条(“样条”一词等同于“分段多项式”)12,其方程为其中a指定在x = 1处的导数(Parker,Kenyon和Troxel 1983)。a的值通常设为-1,因为这最符合sinc函数的频率特性(图3.28)。它还引入了一点锐化效果,这种效果可能具有视觉吸引力。不幸的是,这一选择并不能线性插值直线(强度渐变),因此可能会出现一些可见的振铃现象。对于大量插值,更好的选择可能是a = -0.5,这会产生一个二次样条;它可以精确插值线性和二次函数(Wolberg 1990,第5.4.3节)。图3.28显示了a = -1的情况。
图3.28 (a)一些窗函数的sinc函数及其对数傅里叶变换:蓝色表示升余弦窗函数,绿色和紫色表示三次插值器(a = -1和a = -0.5),棕色表示帐篷函数。这些函数常用于执行高精度低通滤波操作。
以及一个= -0.5立方插值核及其傅里叶变换;图3.27b和c显示了它们在二维插值中的应用。
样条曲线因其能够精确指定控制点处的导数以及高效的增量算法进行评估,长期以来一直被用于函数和数据值插值(Bartels,Beatty和Barsky 1987;Farin 1992,2002)。样条曲线广泛应用于几何建模和计算机辅助设计(CAD)领域,尽管它们已经开始被细分曲面所取代(Zorin,Schroeder和Sweldens 1996;Peters和Reif 2008)。在计算机视觉中,样条曲线常用于弹性图像变形(第3.6.2节)、散点数据插值(第4.1节)、运动估计(第9.2.2节)和表面插值(第13.3节)。事实上,通过将图像表示为样条曲线并在多分辨率框架下对其进行操作,可以执行大多数图像处理任务(Unser 1999;Nehab和Hoppe 2014)。
高质量插值器通常被认为是窗函数sinc,因为它既能保留低分辨率图像中的细节,又能避免混叠。(也可以通过匹配其导数在零点处来构建窗函数sinc的C1分段三次逼近(Szeliski和Ito 1986)。)然而,有些人反对窗函数sinc可能引入的过度振铃现象以及振铃频率的重复性(见图3.27d)。因此,一些摄影师倾向于以较小的比例多次插值图像(这有助于使原始像素网格与最终图像去相关)。其他选择包括使用双边滤波器作为插值器(Kopf,Cohen等2007),采用全局优化(第3.6节)或
图3.29信号抽取:(a)原始样本与低通滤波器(b)卷积
在下采样之前进行过滤。
幻觉性细节(第10.3节)。
3.5.2消减
虽然插值可以用来提高图像的分辨率,但降低分辨率则需要进行抽取(降采样)。为了执行抽取,我们首先(概念上)用低通滤波器对图像进行卷积(以避免混叠),然后保留每第r个样本。实际上,我们通常只在每第r个样本处评估卷积,
(3.66)
如图3.29所示。注意,在这种情况下,平滑核h(k,l)通常是插值核的拉伸和重新缩放版本。或者,我们可以写为
(3.67)
并且保持相同的内核h(k,l)用于插值和抽取。
常用的(r = 2)抽取滤波器是伯特和阿德森(1983a)引入的二项式滤波器。如表3.1所示,该核函数在分离高低频方面表现良好,但仍保留了相当数量的高频细节,这可能导致降采样后的混叠。然而,对于图像融合等应用(本节后文将讨论),这种混叠影响不大
对于高降采样率,窗形sinc预滤波器是一个很好的选择(图3.28)。但是,对于小降采样率,例如r = 2,则需要更仔细的滤波器设计。
表3.2显示了一些常用的r = 2下采样滤波器,而图-
图3.30显示了它们对应的频率响应。这些滤波器包括:
线性[1;2;1]滤波器给出的响应较差;
二项式[1;4;6;4;1]滤波器截断了很多频率,但对计算机视觉分析金字塔很有用;
立方滤波器来自(3.65);a = -1滤波器的衰减比a = -0.5滤波器更陡峭(图3.30);
cosine窗口sinc函数;
Simoncelli和Adelson(1990b)的QMF-9滤波器用于小波去噪,并对相当多的滤波器系数进行了别名处理(注意,原始滤波器系数被归一化为√2增益,因可以“自反”);
?JPEG 2000的9/7分析滤波器(Taubman和Marcellin2002)。
请参阅原始论文,了解这些系数的全精度值。
3.5.3多分辨率表示
现在我们已经描述了插值和抽取算法,我们可以构建一个完整的图像金字塔(图3.31)。正如我们之前提到的,金字塔可以用来加速
表3.2 2×抽取滤波器系数。这些滤波器的长度为奇数,是对称的,并且归一化为具有单位直流增益(总和为1)。它们的频率响应见图3.30。
图3.30一些2×抽取滤波器的频率响应。立方a = -1滤波器衰减最陡峭,但也有点振铃;小波分析滤波器(QMF-9和JPEG 2000)虽然用于压缩,但有更多混叠。
粗到细的搜索算法,用于在不同尺度上寻找对象或模式,并执行多分辨率混合操作。它们还广泛用于计算机图形硬件和软件中,以使用MIP-map执行分数级减缩,我们将在第3.6节中讨论。
计算机视觉中最著名(也可能是使用最广泛)的金字塔是伯特和阿德森(1983a)提出的拉普拉斯金字塔。构建金字塔时,我们首先将原始图像模糊并以两倍的比例下采样,并将其存储在金字塔的下一层(图3.31和3.32)。由于金字塔中相邻层次之间的采样率r = 2,这种金字塔被称为八度金字塔。伯特和阿德森最初提出了一种五抽头核的形式
, (3.68)
b = 1/4,c = 1/4 - a/2。实际上,他们和其他人都使用= 3/8,这导致了熟悉的二项式核,
图3.31传统图像金字塔:每一层的分辨率(宽度和(高度),因此是其父级的四分之一像素。
图3.32高斯金字塔作为信号处理图示:(a)分析和(b)重合成阶段使用了类似的计算。白色圆圈表示由↑2上采样操作插入的零值。请注意,重建滤波器系数是分析系数的两倍。无论我们是从粗到细还是从细到粗,计算过程都沿着页面向下流动。
图3.33拉普拉斯金字塔。黄色图像构成高斯金字塔,这是通过依次对输入图像进行低通滤波和下采样获得的。蓝色图像与最小的低通图像一起构成了拉普拉斯金字塔,该最小低通图像是重建所需的。每个带通(蓝色)图像都是通过对低分辨率高斯金字塔图像进行上采样和插值计算得出的,结果是该层级低通图像的模糊版本,然后从低通图像中减去这个模糊版本以得到蓝色带通图像。在重建过程中,从最粗略的层级开始,将插值图像和(可选过滤的)高通图像重新加在一起。Q框表示量化或其他金字塔处理,例如通过核心化(将小波值设为0)来去除噪声。
为了计算拉普拉斯金字塔,伯特和阿德森首先将低分辨率图像插值以获得原始图像的低通版本(图3.33)。然后,他们从原始图像中减去这个低通版本,得到带通“拉普拉斯”图像,该图像可以存储起来以便进一步处理。由此产生的金字塔具有完美的重建性,即拉普拉斯图像加上基级高斯(图3.33中的L2)足以精确地重建原始图像。图3.32以信号处理图的形式展示了相同的一维计算过程,完全捕捉了分析和再合成阶段所进行的计算。
伯特和阿德尔森还描述了拉普拉斯金字塔的一个变体,其中低通滤波图像取自原始模糊图像,而不是重建的金字塔(piping
图3.34两个低通滤波器的差值产生一个带通滤波器。虚线蓝色表示与高斯半八度拉普拉斯的接近拟合。
L盒的输出直接用于图3.33中的减法运算)。这种变体的混叠现象较少,因为它避免了下采样和上采样循环往返,但不是自反的,因为拉普拉斯图像不再足以再现原始图像。
与高斯金字塔一样,Laplacian这个词有点名不副实,因为它们的带通图像实际上是(近似)高斯函数或DoGs的差异,
DoG{I;σ1,σ2 } = Gσ1 * I - Gσ2 * I =(Gσ1 - Gσ2)* I。 (3.70)
高斯拉普拉斯(我们在(3.26)中看到的)实际上是它的二阶导数,
LoG{I;σ} =▽2(Gσ*I)=(▽2 Gσ)* I, (3.71)
在哪里
(3.72)
是函数的拉普拉斯(算子)。图3.34显示了高斯差分和高斯拉普拉斯在空间和频率上的表现。
高斯拉普拉斯算子具有优雅的数学特性,这些特性在尺度空间领域得到了广泛研究(Witkin1983;Witkin、Terzopoulos和Kass1986;Lindeberg1990;Nielsen、Florack和Deriche1997),并且可以用于多种应用,包括边缘检测(Marr和Hildreth1980;Perona和Malik1990b)、立体匹配(Witkin、Terzopoulos和Kass1987)和图像增强(Nielsen、Florack和Deriche1997)。
拉普拉斯金字塔的一个特别有用的应用是在局部对比度的处理以及高动态范围图像的色调映射(第10.2.1节)。帕里斯、哈辛诺夫和考茨(2011)提出了一种称为局部拉普拉斯滤波器的技术,该技术在构建修改后的拉普拉斯金字塔时使用了局部范围裁剪,以及
图3.35多分辨率金字塔:(a)金字塔采用半八度(五点)采样(奇数层级以灰色显示,便于清晰区分)。(b)小波金字塔——每个小波层级存储原始像素的3/4(通常是水平、垂直和混合梯度),因此小波系数和原始像素的总数相同。
针对小细节和大细节采用不同的强调和衰减曲线,实现边缘保持滤波和色调映射。Aubry、Paris等人(2014)讨论了如何加速单调(单通道)图像的处理,并展示了风格转换应用。
一种较少使用的变体是半八度金字塔,如图3.35a所示。这些最早由克劳利和斯特恩(1984)引入视觉领域,他们称之为低通差分(DOLP)变换。由于相邻层次之间的尺度变化较小,作者认为粗到细的算法表现更好。在图像处理领域,半八度金字塔与棋盘采样网格结合被称为五点采样(费尔纳、范德维尔和昂瑟2005)。在检测多尺度特征时(第7.1.1节),通常会使用半八度甚至四分之一八度金字塔(洛2004;特里格斯2004)。然而,在这种情况下,子采样仅发生在每个八度级别,即图像通过更宽的高斯函数反复模糊,直到实现一个完整的八度分辨率变化(图7.11)。
3.5.4小波
虽然金字塔在计算机视觉应用中被广泛使用,但有些人选择小波分解作为替代方案。小波是能够在空间和频率上局部化信号的滤波器(类似于Gabor滤波器),并且定义在一个尺度层次结构上。小波提供了一种平滑地将信号分解为频率成分的方法,不会产生块状效应,并且与金字塔密切相关。
图3.36图像的小波分解:(a)单层分解,使用PyWavelet代码(https: //pywavelets.readthedocs.io)构建水平、垂直和对角细节小波;(b)多层分解的系数幅度,高-高成分位于右下角,基底位于左上角(Buccigrossi和Simoncelli 1999)©1999 IEEE。请注意,低-高和高-低成分增强了水平和垂直边缘及梯度,而高-高成分则存储了较少出现的混合导数。
小波最初是在应用数学和信号处理领域发展起来的,并由马莱特(1989)引入计算机视觉社区。斯特兰格(1989)、西蒙切利和阿德森(1990b)、里奥尔和维特利(1991)、崔(1992)以及迈耶(1993)都提供了对该主题的良好介绍及历史回顾,而崔(1992)则提供了更全面的应用综述。斯韦尔登斯(1997)描述了我们稍后将讨论的小波提升方法。
小波在计算机图形学领域被广泛用于执行多分辨率几何处理(Stollnitz、DeRose和Salesin1996),并且也被用于计算机视觉中的类似应用(Szeliski1990b;Pentland1994;Gortler和Cohen1995;Yaou和Chang1994;Lai和Vemuri1997;Szeliski2006b;Krishnan和Szeliski2011;Krishnan、Fattal和Szeliski2013),以及多尺度定向滤波(Simoncelli、Freeman等人1992)和去噪(Portilla、Strela等人2003)。
作为图像金字塔和小波分解将图像分解为多分辨率描述,这些描述在空间和频率上都是局部化的,它们之间有何不同?通常的回答是传统金字塔过于冗余,即它们使用比原始图像更多的像素来表示分解,而小波则提供了一个紧密框架,即它们保持分解的大小与图像相同(图3.35b)。然而,某些小波家族实际上也是过度冗余的,以提供更好的平移性或方向控制(Simoncelli,Freeman等,1992)。因此,更好的区分可能是小波比常规带通金字塔更具有方向选择性。
图3.37二维小波分解:(a)高层次图,显示低通和高通变换为单个方框;(b)可分离实现,首先水平进行小波变换,然后垂直进行。I和F方框是用于从其小波分量重新合成图像所需的插值和滤波方框。
二维小波是如何构建的?图3.37a展示了(递归)粗到细构造(分析)流程的一个阶段的高层次示意图,以及互补的重构(合成)阶段。在这个图中,高通滤波器后接抽取,保留了原始像素的3/4,而低频系数的1/4则传递给下一阶段进行进一步分析。实际上,滤波通常被分解为两个可分离的子阶段,如图3.37b所示。生成的三个小波图像有时被称为高-高(HH)、高-低(HL)和低-高(LH)图像。高-低和低-高图像突出了水平和垂直边缘及梯度,而高-高图像则包含较少出现的混合导数(图3.36)。
图3.37b中所示的高通H滤波器和低通L滤波器是如何选择的,以及如何
图3.38一维小波变换:(a)通常使用高通+低通滤波器,随后进行奇数(↓2o)和偶数(↓2e )降采样;(b)提升版本,首先选择奇数和偶数子序列,然后以易于逆向的方式应用低通预测阶段L和高通校正阶段C。
相应的重构滤波器I和F能否计算出来?能否设计出所有都具有有限脉冲响应的滤波器?这一主题在过去二十多年里一直是小波研究领域的主攻方向。答案很大程度上取决于预期的应用,例如,小波是否用于压缩、图像分析(特征提取)或去噪。西蒙切利和阿德森(1990b)在表4.1中展示了一些良好的奇长正交镜像滤波器(QMF)系数,在实际应用中表现良好。
由于小波滤波器的设计是一门极其复杂的艺术,或许有更好的方法?确实,一种更简单的方法是将信号分解为其偶数和奇数部分,然后对每个序列执行可逆的滤波操作,从而产生所谓的提升小波(Figures3.38和3.39)。Sweldens(1996)对第二代小波的提升方案进行了非常易懂的介绍,随后又进行了全面的综述(Sweldens 1997)。
如图3.38所示,而不是首先过滤整个输入序列(图像)
图3.39提升变换以信号处理图形式展示:(a)分析阶段首先从其偶数邻居预测奇数值,存储差分小波,然后通过加入一小部分小波来补偿较粗的偶数值。(b)合成阶段则简单地反转计算流程和某些滤波器及操作的符号。浅蓝色线条显示了使用四个抽头进行预测和校正时的情况,而不仅仅是两个。
使用高通和低通滤波器,然后保留奇数和偶数子序列,提升方案首先将序列分为其偶数和奇数子部分。用低通滤波器L过滤偶数序列,并从奇数序列中减去结果是可逆的:只需执行相同的过滤操作,然后将结果加回去即可。此外,此操作可以原地完成,从而节省大量空间。同样的方法适用于用校正滤波器C过滤差值信号,以确保偶数序列为低通。一系列这样的提升步骤可用于创建更复杂的滤波响应,同时具有较低的计算成本和保证的可逆性。
通过考虑图3.39中的信号处理图,可以更容易地理解这一过程。在分析过程中,从奇数值中减去偶数值的平均值,以获得高通小波系数。然而,偶数样本仍然包含低频信号的混叠样本。为了补偿这一点,向偶数序列中添加一小部分高通小波,使其正确地经过低通滤波。(很容易证明有效的低通滤波器是[- 1/8;1/4;3/4;1/4;- 1/8],这确实是一个低通滤波器。)在合成过程中,同样的操作会通过巧妙地改变符号来反转。
当然,我们不必局限于两抽头滤波器。图3.39以浅蓝色箭头显示了可以选加入提升方案中的额外滤波系数,这不会影响其可逆性。实际上,低通和高通滤波操作可以互换,例如,我们可以先对奇数序列(加上中心值)使用五抽头立方低通滤波器,然后用四抽头立方低通预测器来估计小波,
图3.40可转向可移动的多尺度变换(Simoncelli,Freeman (et al.1992)©1992 IEEE:(a)径向多尺度频域分解;(b)原始图像;(c)一组四个可操纵滤波器;(d)径向多尺度小波分解。
虽然我没有看到这个计划被写下来。
提升小波被称为第二代小波,因为它们能够轻松适应非规则采样拓扑结构,例如计算机图形学应用中出现的多分辨率表面操作(Schroeder和Sweldens 1995)。事实证明,提升加权小波,即其系数能适应所解决的基本问题的小波(Fattal 2009),在低级图像处理任务中以及预处理基于优化的视觉算法中出现的稀疏线性系统时,效果极为显著。这些算法在第四章中讨论(Szeliski 2006b;Krishnan和Szeliski 2011;Krishnan、Fattal和Szeliski 2013)。
一种替代广泛使用的“可分离”小波构造方法的方法是使用一种更具旋转对称性和方向选择性的表示方式,同时避免了采样信号低于奈奎斯特频率时固有的混叠问题。15西蒙切利、弗里曼等人(1992)引入了一种这样的表示方法,他们称之为可平移多尺度变换的金字塔径向频率实现,或更简洁地说,可转向金字塔。他们的表示不仅过完备(消除了混叠问题),而且
15通常,这种混叠现象可视为信号内容在频带之间移动,而原始信号则缓慢移动。
同时,它具有方向选择性,并且具有相同的分析和合成基函数,即它是自反转的,就像“常规”小波一样。因此,这使得可转向金字塔成为计算机视觉中常用的结构分析和匹配任务的更有用的基础。
图3.40a展示了这种分解在频率空间中的表现。与将频域递归地划分为2×2的正方形不同,这里使用了径向弧线。图3.40d展示了由此产生的金字塔子带。即使这种表示是过度完备的,即小波系数的数量超过了输入像素的数量,但额外的频率和方向选择性使得这种表示在纹理分析和合成(Portilla和Simon-celli 2000)以及图像去噪(Portilla,Strela等2003;Lyu和Simoncelli 2009)等任务中更为优越。
3.5.5应用:图像融合
第3.5.3节中介绍的拉普拉斯金字塔最引人入胜且有趣的应用之一是创建混合复合图像,如图3.41所示(Burt和Adelson 1983b)。虽然将苹果和橙子图像沿中线拼接会产生明显的切口,但通过分段拼接(Burt和Adelson(1983b)称之为他们的方法)则能创造出一种美丽的混合水果的错觉。他们方法的关键在于,红色苹果与橙子之间的低频色彩变化被平滑地融合在一起,而每种水果上的高频纹理则更快地融合,以避免两种纹理叠加时产生的“重影”效果。
为了创建混合图像,首先将每个源图像分解为其自身的拉普拉斯金字塔(图3.42,左列和中列)。然后,每个波段分别乘以一个平滑的权重函数,该函数的范围与金字塔层级成正比。最简单且通用的方法是使用二值掩模图像(图3.41g),并从这个掩模构建高斯金字塔。接着,将每个拉普拉斯金字塔图像与其对应的高斯掩模相乘,这两个加权金字塔的总和用于构建最终图像(图3.42,右列)。
图3.41e–h显示了这一过程可以应用于任意掩模图像,并取得了令人惊讶的结果。将金字塔融合扩展到任意数量的图像也非常简单,这些图像的像素来源由一个整数值标签图像表示(见练习3.18)。这在图像拼接和合成应用中特别有用,因为不同图像之间的曝光可能有所不同,如第8.4.4节所述,在该节中我们还介绍了更近期的变体,例如泊松融合和梯度域融合(P rez,Gangnet和Blake 2003;Levin,Zomet等2004)。
图3.41拉普拉斯金字塔融合(Burt和Adelson 1983b)©1983 ACM:苹果的原始图像,(b)橙子的原始图像,(c)常规拼接,(d)金字塔融合。两个图像的掩码融合:(e)第一输入图像,(f)第二输入图像,(g)区域掩码,(h)融合后的图像。
图3.42拉普拉斯金字塔融合细节(Burt和Adelson 1983b)©1983 ACM。前三个行显示了拉普拉斯金字塔的高频、中频和低频部分(分别取自第0、2和4层)。左列和中列显示了原始苹果和橙子图像,经过平滑插值函数加权后,而右列则显示了平均贡献。
图3.43图像变形涉及修改图像函数的域,而不是其范围。
3.6 几何变换
在前几节中,我们探讨了如何通过插值和抽取来改变图像的分辨率。本节我们将研究如何执行更一般的变换,例如图像旋转或一般变形。与第3.1节中讨论的点过程不同,在点过程中应用于图像的函数会转换图像的范围,
g(x) = h(f (x)); (3.73)
在这里,我们研究那些改变域的函数,
g(x) = f (h(x)); (3.74)
如图3.43所示。
我们首先研究第2.1.1节中首次介绍的全局参数化二维变换(这种变换被称为参数化,因为它由少量参数控制)。接着,我们将注意力转向更局部的一般变形,例如定义在网格上的变形(第3.6.2节)。最后,在第3.6.3节中,我们将展示如何将图像扭曲与交叉溶解结合,以创建有趣的变形(中间动画)。对于对这些主题感兴趣的读者,有赫克伯特(1986)的优秀综述,以及沃尔伯格(1990)、戈梅斯、达萨等人(1999)和阿肯宁-莫勒与海恩斯(2002)的非常易懂的教科书。请注意,赫克伯特的综述是关于纹理映射的,这是计算机图形学界对将图像扭曲到表面这一主题的称呼。
3.6.1参数变换
参数变换对图像应用全局变形,其中变换的行为由少量参数控制。图3.44显示了几个例子。
图3.44二维几何图像变换的基本集合。
变换
矩阵
# DoF
保护
图标
翻译
刚性(欧几里得)
[I t]2×3
[R t]2×3
2
3
方向
长
相似仿射
[sR t]2×3
[A]2×3
4
6
角
平行 / /
与投影有关的
[]3×3
8
直线
表3.3二维坐标变换层次。每个变换还保留了其下方行中列出的属性,即相似性不仅保持角度,还保持平行性和直线。2×3矩阵通过增加第三行[0T 1]扩展为完整的3×3矩阵,用于齐次坐标变换。
这些变换的示例基于图2.4所示的二维几何变换。这些变换的公式最初列于表2.1中,为便于参考,此处重印于表3.3中。
一般来说,给定一个由公式xI = h(x)指定的变换和源图像f (x),我们如何计算新图像g(x)中像素的值,如公式(3.74)所示?思考一下这个问题,看看你能否解决。
如果你和大多数人一样,你会想出一个类似于算法3.1的算法。这个过程被称为前向变形或前向映射,如图3.45a所示。你能想到这种方法有什么问题吗?
事实上,这种方法存在一些局限性。当xI的值为非整数时,将像素f (x)复制到g中的位置xI的过程是不明确的。我们
图3.45前向变形算法:(a)将像素f (x)复制到图像g(x9)中对应位置x9 = h(x);(b)源和目标像素位置的细节。
过程forwardWarp(f;h;out g):
对于函数f (x)中的每个像素x
1.计算目标位置x9 = h(x)。
2.将像素f (x)复制到g(x9)。
算法3.1通过参数变换x9 = h(x)将图像f (x)转换为图像g(x9)的前向变形算法。
在这种情况下你会怎么做?你会怎么做?
你可以将x9的值四舍五入到最近的整数坐标并复制该像素,但生成的图像会出现严重的锯齿现象,且在动画变换时像素会频繁跳跃。你也可以以加权(双线性)方式将其值分配给四个最近邻,同时跟踪每个像素的权重并在最后进行归一化。这种技术称为“散射”,有时用于图形学领域的体绘制(Levoy和Whitted 1985;Levoy 1988;Westover 1989;Rusinkiewicz和Levoy 2000)。不幸的是,这种方法不仅存在一定程度的锯齿现象,还伴随着相当程度的模糊(高分辨率细节丢失)。
前向变形的第二个主要问题是出现裂缝和孔洞,特别是在放大图像时。用附近的邻居填充这些孔洞会导致进一步的混叠和模糊。
那么,我们能做些什么呢?一个更好的解决方案是使用逆变形(算法3.2),其中目标图像g(x9)中的每个像素都从原始图像f (x)中采样(图3.46)。
这与前向扭曲算法有何不同?首先,由于(x9)(大概)定义了g(x9)中的所有像素,我们不再有空洞。更重要的是,
图3.46反向变形算法:(a)像素g(x,)从图像f (x)中对应位置x = (x,)处采样;(b)源和目标像素位置的细节。
过程inverseWarp(f;h;out g):
对于每个像素x,在g(x,)中
1.计算源位置x = (x,)
2.在位置x处重新采样f (x),并复制到g(x,)
算法3.2逆变形算法,用于利用参数变换x、= h(x)从图像f (x)创建图像g(x,)。
在非整数位置重采样图像是一个研究得很好的问题(一般图像插值,参见第3.5.2节),可以使用控制混叠的高质量滤波器。
函数(x,)来自哪里?通常,它可以简单地计算为h(x)的逆。事实上,表3.3中列出的所有参数变换都有闭式解的逆变换:只需取指定变换的3×3矩阵的逆即可。
在其他情况下,最好将图像变形问题表述为根据映射关系x =(x,)从目标像素x到源像素x重新采样源图像f (x)。例如,在光流(第9.3节)中,我们估计流场是生成当前像素的位置,而不是计算它要去的目标像素。同样地,在校正径向畸变(第2.1.5节)时,我们通过计算最终(未畸变)图像中每个像素在原始(已畸变)图像中的对应位置来校准镜头。
哪些插值滤波器适合重采样过程?第3.5.2节中研究的所有滤波器都可以使用,包括最近邻、双线性、双三次和窗化sinc函数。虽然双线性滤波器常用于加速(例如,在补丁跟踪算法的内循环中,见第9.1.3节),但双三次和窗化sinc滤波器更为优选。
在视觉质量很重要的情况下。
为了计算非整数位置x处的f (x)值,我们只需应用通常的FIR重采样滤波器,
(3.75)
其中(x,y)是子像素坐标值,h(x,y)是某种插值或平滑核。回想第3.5.2节,当进行抽取时,平滑核根据下采样率r被拉伸和重新缩放。
不幸的是,对于一般的(非缩放)图像变换,重采样率r并没有明确定义。考虑一种变换,它拉伸x方向而压缩y方向。重采样核应该沿x方向进行规则插值,并在y方向上平滑(以消除模糊图像的锯齿)。对于一般的仿射或透视变换,情况会变得更加复杂。
我们能做些什么呢?幸运的是,傅里叶分析可以提供帮助。一维域缩放定律的二维推广是
g(Ax),jAj -1G(A-T f)。 (3.76)
对于表3.3中除透视变换外的所有变换,矩阵A已经定义。对于透视变换,矩阵A是透视变换的线性化导数(图3.47a),即投影引起的拉伸的局部仿射近似(Heckbert1986;Wolberg1990;Gomes,Darsa等1999;Akenine-Mo...ller和Haines2002)。
为了防止混叠,我们需要使用一个频率响应为最终所需频谱通过A-T变换投影的滤波器来预滤图像f(x)(Szeliski,Winder,和Uyttendaele 2010)。通常情况下(对于非缩放变换),这个滤波器是非可分离的,因此计算速度非常慢。因此,在实际应用中,通常采用该滤波器的一些近似方法,包括MIP映射、椭圆加权高斯平均和各向异性滤波(Akenine-Mo...ller和Haines 2002)。
MIP-映射
MIP映射最初由威廉姆斯(1983)提出,作为快速预滤用于计算机图形纹理映射的图像的一种方法。MIP图16是一种标准的图像金字塔(图3.31),其中每一层都用高质量滤波器预滤,而不是使用质量较差的近似方法,例如伯特和阿德森(1983b)提出的五抽头二项式滤波器。为了重新采样
图3.47各向异性纹理滤波:(a)变换A的雅可比矩阵及其诱导的水平和垂直重采样率{ax,x,ax,y,ay,x,ay,y };(b)椭圆形EWA平滑核的足迹;(c)沿主轴使用多个样本进行各向异性滤波。图像像素位于线段交点处。
从MIP图中获取图像,首先计算重采样率r的标量估计值。例如,r可以是A中绝对值的最大值(这抑制了混叠)或最小值(这减少了模糊)。Akenine-Mo...ller和Haines(2002)对此进行了更详细的讨论。
一旦指定了重采样率,就使用以2为底的对数计算出一个分数金字塔级别,
l = log2 r. (3.77)
一个简单的解决方案是从更高或更低的金字塔层级重新采样纹理,具体取决于减少混叠还是模糊更为重要。更好的方法是重新采样两幅图像,并使用l的分数部分线性混合它们。由于大多数MIP映射实现都在每个层级内使用双线性重采样,这种方法通常被称为三线性MIP映射。计算机图形渲染API,如OpenGL和Direct3D,提供了参数,可以根据所需的速度与质量之间的权衡选择不同的MIP映射变体(以及采样率r的计算方式)。练习3.22让你更详细地考察这些权衡。
椭圆加权平均值
椭圆加权平均(EWA)滤波器由格林和赫克伯特(1986)发明,基于这样的观察:仿射映射x=Ax‘在每个源像素x附近定义了一个偏斜的二维坐标系(图3.47a)。对于每一个目标像素x’,计算x‘上小像素网格到x的椭球投影(图3.47b)。然后使用高斯函数的逆来过滤源图像g(x)。
Figure 3.48 One-dimensional signal resampling (Szeliski, Winder, and Uyttendaele2010): (a) original sampled signal f (i); (b) interpolated signal g1 (儿); (c) warped signal g2 (儿); (d) filtered signal g3 (儿); (e) sampled signal f, (i). The corresponding spectra are shown below the signals, with the aliased portions shown in red.
图3.48一维信号重采样(Szeliski,Winder和Uyttendaele 2010):(a)原始采样信号f (i);(b)插值信号g1(儿);(c)变形信号g2(儿);(d)滤波信号g3(儿);(e)采样信号f (i)。相应的频谱显示在信号下方,混叠部分以红色表示。
covariance matrix is this ellipsoid.
协方差矩阵就是这个椭球体。
尽管它以高质量滤波器著称(Akenine-Mo...ller和Haines 2002),我们在研究中发现(Szeliski、Winder和Uyttendaele 2010),由于使用了高斯核,该技术同时存在模糊和混叠问题,与更高品质的滤波器相比。EWA速度也相当慢,尽管已提出基于MIP映射的更快变体,如(Szeliski、Winder和Uyttendaele 2010)所述。
Anisotropic filtering
各向异性滤波
一种替代方法是使用各向异性滤波(Barkans1997;Akenine-Mo...ller和Haines2002),有时在图形硬件(GPU)中实现。这种方法通过沿EWA高斯分布的主要轴线结合不同分辨率的多个样本(MIP图中的分数级)来实现(图3.47c)。
Multi-pass transforms
多遍变换
处理图像时,最佳的方法是在每个像素处使用理想的低通滤波器自适应预滤源图像,以避免过度模糊或混叠,即使用定向偏斜的sinc函数或低阶(例如三次)近似(图3.47a)。图3.48展示了这一过程在一维中的实现方式。信号首先(理论上)被插值为连续波形,(理想情况下)低通滤波至新的奈奎斯特率以下,然后重新采样到
图3.49图像变形的替代方案(Gomes,Darsa等,1999)©1999 Morgan Kauf-man:(a)稀疏控制点-→变形网格;(b)密集的控制点对应集;(c)方向线对应;(d)均匀四边形网格。
the final desired resolution. In practice, the interpolation and decimation steps are concate- nated into a single polyphase digital filtering operation (Szeliski, Winder, and Uyttendaele 2010).
最终所需的分辨率。在实践中,插值和抽取步骤被合并为一个单一的多相数字滤波操作(Szeliski、Winder和Uyttendaele 2010)。
对于参数变换,定向二维滤波和重采样操作可以通过一系列一维重采样和剪切变换来近似实现(Catmull和Smith 1980;Heckbert 1989;Wolberg 1990;Gomes、Darsa等1999;Szeliski、Winder和Uyttendaele 2010)。使用一系列一维变换的优势在于,它们比大型、不可分离的二维滤波器核更高效(就基本算术运算而言)。然而,为了防止混叠,可能需要在应用剪切变换之前反方向上采样(Szeliski、Winder和Uyttendaele 2010)。
3.6.2 Mesh-based warping
3.6.2基于网格的变形
例如,考虑将一张脸从皱眉变成微笑(图3.49a)。在这种情况下,需要做的是将嘴角向上弯曲
保持脸部其他部分不变。17要实现这种变换,需要在图像的不同部位进行不同程度的运动。图3.49显示了一些常用的方法。
第一种方法如图3.49a-b所示,是指定一组稀疏的对应点。然后可以使用多种技术(详见第9章)将这些点的位移插值到一个密集的位移场中,具体方法在第4.1节关于散点数据插值的部分有详细描述。一种可能性是在一张图像中的点集进行三角化(de Berg,Cheong等人,2006;Litwinowicz和Williams,1994;Buck,Finkelstein等人,2000),并使用由每个三角形内的三个顶点指定的仿射运动模型(表3.3)。如果目标图像根据新的顶点位置进行了三角化,则可以使用逆变形算法(图3.46)。如果源图像进行了三角化并用作纹理贴图,则可以使用计算机图形渲染算法来绘制新图像(但在三角形边缘处需谨慎操作以避免潜在的混叠现象)。
插值稀疏位移集的替代方法包括移动附近的四边形网格顶点,如图3.49a所示,使用变分(能量最小化)插值器,例如正则化(Litwinowicz和Williams1994),参见第4.2节,或使用局部加权(径向基函数)组合的位移(Section4.1.1)。(参见第4.1节了解其他散数据插值技术。)如果使用四边形网格,则可能需要使用平滑插值器,如二次B样条(Farin2002;Lee、Wolberg等人1996),将位移插值到单个像素值。
在某些情况下,例如,如果已经为图像估计了一个密集深度图(Shade,Gortler等,1998),我们只知道每个像素的前向位移。如前所述,在目标位置绘制源像素,即前向变形(图3.45),会遇到多个潜在问题,包括混叠和小裂缝的出现。在这种情况下,另一种技术是将位移场(或深度图)前向变形到新位置,填补结果地图中的小孔,然后使用逆向变形进行重采样(Shade,Gortler等,1998)。这种方法通常比前向变形效果更好,因为位移场往往比图像平滑得多,所以在位移场的前向变形过程中引入的混叠现象要少得多。
第二种指定局部变形位移的方法是使用对应的定向线段(Beier和Neely 1992),如图3.49c和3.50所示。每条线段上的像素按照指定的方式从源转移到目标,其他像素则通过这些位移的平滑插值进行扭曲。每条线
图3.50基于线的图像变形(Beier和Neely1992)©1992 ACM:(a) distance
计算和位置转移;(b)渲染算法;(c)用于变形的两个中间扭曲。
段对应关系指定了邻近像素的平移、旋转和缩放,即相似变换(表3.3),如图3.50a所示。线段通过一个权重函数影响图像的整体位移,该权重函数取决于与线段的最小距离(如果u∈[0,1],则为图3.50a中的v;否则取P和Q之间较短的距离)。
指定位移场的最后一种方法是使用专门适应底层图像内容的网格,如图3.49d所示。手动指定这样的网格可能涉及相当多的工作;Gomes、Darsa等人(1999)描述了一个交互式系统来实现这一点。一旦两个网格被指定,就可以通过线性插值生成中间变形,并使用样条函数插值网格节点处的位移。
3.6.3应用:基于特征的变形
虽然扭曲可以用来改变单个图像的外观或动画效果,但通过使用现在通常称为变形(Beier和Neely1992;Lee、Wolberg等人1996;Gomes、Darsa等人1999)的过程来扭曲和混合两个或多个图像可以获得更强大的效果。
图3.51展示了图像变形的本质。与简单地在两张图像之间交叉溶解导致如上行所示的重影不同,每张图像在融合前都会向另一张图像进行变形,如下行所示。如果对应关系设置得当(使用图3.49中展示的任何技术),相应的特征将对齐,不会产生重影。
上述过程在变形过程中生成的每个中间帧上重复进行,每次间隔使用不同的混合(和变形量)。设t∈[0,1]是描述插值帧序列的时间参数。权重函数-
图3.51图像变形(Gomes,Darsa (et al.1999)©1999摩根考夫曼。上排:如果两个图像只是简单混合,会出现可见的重影效果。下排:首先将两个图像分别变形到相同的中间位置(例如,向另一个图像的一半处),然后将变形后的图像混合,从而实现无缝变形。
对于混合图像中的两个扭曲图像,对应关系的参数是(1 - t)和t,像素的运动也通过线性插值来指定。定义部分扭曲图像向目标移动的意义时需谨慎,特别是当期望的运动远非线性时(Sederberg,Gao等,1993)。练习3.25要求你实现一个变形算法,并在这些具有挑战性的条件下进行测试。
3.7 其他阅读材料
如果你对图像处理这一主题感兴趣,可以深入探索,一些受欢迎的教科书包括戈梅斯和韦尔霍(1997)、贾(1997)、普拉特(2007)、伯格和伯奇(2009)以及冈萨雷斯和伍兹(2017)。该领域的顶级会议和期刊是IEEE国际图像处理会议和IEEE图像处理汇刊。
对于图像合成操作,波特和达夫(1984)的开创性参考文献是该领域的权威,而布林(1994a,b)则提供了更详细的教程。在图像合成领域,史密斯和布林(1996)首次将这一主题带入图形学界,而王和科恩(2009)则提供了深入的综述。
在线性滤波领域,Freeman和Adelson(1991)对可分离和可控定向带通滤波器进行了很好的介绍,而Perona(1995)则展示了如何
将任何滤波器近似为可分离组件的总和。
非线性滤波的文献非常广泛且多样;它包括诸如双边滤波(Tomasi和Manduchi1998;Durand和Dorsey2002;Chen、Paris和Du-Rand2007;Paris和Durand2009;Paris、Kornprobst等人2008)、相关迭代算法(Saint-Marc、Chen和Medioni1991;Nielsen、Florack和Deriche1997;Black、Sapiro等人1998;Weickert、ter Haar Romeny和Viergever1998;Weickert1998;Barash2002;Scharr、Black和Haussecker2003;Barash和Comaniciu2004)以及变分方法(Chan、Osher和Shen2001;Tschumperl 和Deriche2005 ;Tschumperl2006;Kaftory,Schechner以及Zeevi2007)和引导滤波(Eisemann和Durand2004;Petschnigg、Agrawala等人2004;He、Sun和Tang2013)。
图像形态学的参考文献包括Haralick和Shapiro ( 1992,第5.2节)、Bovik (2000,第2.2节)、Ritter和Wilson (2000,第7节)、Serra(1982)、Serra和Vincent(1992)、Yuille、Vincent和Geiger(1992)以及Soille(2006)。
经典的图像金字塔和金字塔融合论文由伯特和阿德森(1983a,b)撰写。小波首次被引入计算机视觉领域是由马莱特(1989)提出的,相关的优秀教程、综述文章和书籍也已出版(斯特兰格1989;西蒙切利和阿德森1990b;里奥尔和Vetterli1991;Chui1992;Meyer1993;Sweldens1997).)。小波在计算机图形学中广泛用于多分辨率几何处理(斯托尔尼茨、德罗斯和塞利辛1996),并在计算机视觉中的类似应用中得到使用(舍利斯基1990b;彭特兰1994;戈特勒和科恩1995;雅乌和张1994;莱和维穆里1997;舍利斯基2006b;克里希南和舍利斯基2011;克里希南、法塔尔和舍利斯基2013),以及多尺度定向滤波(西蒙切利、弗里曼等人1992)和去噪(波蒂利亚、斯特雷拉等人2003)。
虽然图像金字塔(第3.5.3节)通常使用线性滤波器构建,但最近的研究采用了非线性滤波器,因为这些滤波器能更好地保留细节和其他显著特征。计算机视觉领域的代表性论文包括Gluckman(2006a,b);Lyu和Simoncelli(2008),以及计算摄影领域的Bae、Paris和Durand(2006),Farbman、Fattal等人(2008)和Fattal(2009)。
高质量的图像变形和重采样算法在图像处理文献(Wolberg 1990;Dodgson 1992;Gomes,Darsa等1999;Szeliski,Winder和Uyttendaele 2010)和计算机图形学(Williams 1983;Heckbert 1986;Barkans 1997;Weinhaus和Devarajan 1997;Akenine-Mo...ller和Haines 2002)中都有涉及,这些算法通常被称为纹理映射。图像变形和图像混合技术的结合用于实现图像之间的变形,这一主题在一系列文章中有所讨论。
开创性的论文和书籍(Beier和Neely1992;Gomes,Darsa et al.1999)。
3.8 练习
例3.1:颜色平衡。编写一个简单的应用程序,通过将每个颜色值乘以不同的用户指定常数来改变图像的颜色平衡。如果您想更复杂一些,您可以使这个应用程序具有交互性,并使用滑块。
1.如果在乘法之前或之后进行伽玛变换,你得到的结果是否不同?为什么?
2.使用不同的色彩平衡设置(大多数相机通过菜单控制色彩平衡)用数码相机拍摄同一张照片。你能恢复不同设置之间的色彩平衡比例吗?你可能需要将相机放在三脚架上,并手动或自动对齐图像以实现这一点。或者,可以使用色卡(图10.3b),如第2.3节和第10.1.1节所述。
3.你能想到任何原因,为什么你可能想要对图像执行颜色扭曲(第3.1.2节)吗?参见练习2.8以了解一些相关的想法。
例3.2:去马赛克。如果你有相机的RAW图像,可以自行进行去马赛克处理(第10.3.1节)。如果没有,只需以拜耳马赛克模式对RGB图像进行降采样。除了简单的双线性插值外,还可以尝试第10.3.1节中描述的更高级技术。将你的结果与相机生成的结果进行比较。你的相机是否在RAW值和JPEG中的颜色平衡值之间执行简单的线性映射?一些高端相机具有RAW+JPEG模式,这使得这种比较变得更加容易。
例3.3:合成与反射。第3.1.3节描述了将一个alpha蒙版图像叠加到另一个图像上的合成过程。回答以下问题,并可选择通过实验验证:
1.大多数捕获的图像都应用了伽玛校正。这是否使基本合成公式(3.8)失效;如果是这样,应该如何修复?
2.添加剂(纯反射)模型可能有局限性。如果玻璃被染色,特别是非灰色调的?如果玻璃脏了或有污渍呢?如何建模波纹玻璃或其他类型的折射物体?
例3.4:蓝色背景遮罩。设置一个蓝色或绿色背景,例如通过购买一大块彩色海报板。先拍摄一张空白背景的照片,然后拍摄一张有新物体出现在背景前的照片。利用每个彩色像素与其假设对应的背景像素之间的差异来拉伸遮罩,可以采用第3.1.3节或史密斯和布林(1996)描述的技术之一。
例3.5:差分密钥。实现差分密钥算法(参见第3.1.3节)(Toyama,Krumm等人,1999年),包括以下步骤:
1.计算“空”视频序列中每个像素的均值和方差(或中位数和稳健方差)。
2.对于每个新帧,将每个像素分类为前景或背景(将背景像素设置为RGBA=0)。
3.(可选)计算alpha通道,并在新背景上合成。
4.(可选)使用形态学清理图像(第3.3.1节),标记连通分量(第3.3.3节),计算它们的质心,并从一帧到另一帧跟踪它们。利用此功能构建“人数计数器”。
例3.6:照片效果。编写各种照片增强或效果滤镜:对比度、太阳化(量化)等。哪些是实用的(执行合理的校正),哪些是更具创意的(创建不寻常的图像)?
例3.7:直方图均衡化。计算图像的灰度(亮度)直方图,并对其进行均衡化,使色调看起来更好(并且图像对曝光设置不那么敏感)。您可能需要使用以下步骤:
1.将彩色图像转换为亮度(第3.1.2节)。
2.计算直方图、累积分布和补偿传递函数(第3.1.4节)。
3.(可选)尝试通过确保一定比例的像素(例如,5%)映射到纯黑白来增加图像的“冲击力”。
4.(可选)限制传递函数中的局部增益f (I)。一种方法是在执行累积(3.9)时,将f (I) <吖I或f (I) <吖,同时保留任何未累积的值作为“储备”。(具体细节由你来确定。)
5.通过查找表补偿亮度通道,并使用颜色比率(2.117)重新生成彩色图像。
6.(可选)在原始图像中被裁剪的颜色值,即具有一个或多个饱和颜色通道的颜色值,在重新映射到非裁剪值时可能会显得不自然。扩展您的算法以以某种有用的方式处理这种情况。
例3.8:局部直方图均衡化。计算每个补丁的灰度(亮度)直方图,但根据距离(样条曲线)添加顶点。
1.在练习3.7(亮度计算)的基础上进行扩展。
2.将值(计数)分配给相邻顶点(双线性)。
3.转换为CDF(查找函数)。
4.(可选)使用CDF的低通滤波。
5.为最终查找插值相邻的CDF。
例3.9:邻域运算的填充。写出计算公式
图3.13所示的每种填充模式的宽度和高度(M,N)。例如,对于复制(夹紧),
f (i, j) = f (k, l),
k = max(0,min(M - 1,i)),l = max(0,min(N - 1,j)),
(提示:除了常规算术运算符之外,您可能还需要使用最小值、最大值、模和绝对值运算符。)
详细描述这些不同模式的优缺点。
•(可选)通过绘制一个纹理坐标超出[0.0,1.0]范围的纹理映射矩形并使用不同的纹理限制模式来检查图形卡的功能。
例3.10:可分离滤波器。使用可分离核实现卷积。输入应为灰度或彩色图像,以及水平和垂直核。确保支持前一个练习中开发的填充机制。你将在后续的一些练习中需要这些功能。如果你已经在使用的图像处理包(如IPL)中可以访问可分离滤波器,则跳过此练习。
•(可选)使用Pietro Perona(1995)的技术将卷积近似为多个可分离内核的和。让用户指定内核的数量,并报告一些合理的近似保真度指标。
例3.11:离散高斯滤波器。讨论实现离散高斯滤波器时的以下问题:
•如果你仅在离散位置采样连续高斯滤波器的方程,能否得到期望的特性,例如系数是否总和为1?同样地,如果你采样高斯函数的导数,样本是否总和为0或具有消失的高阶矩?
是否最好采用原始信号,用sinc插值,用连续高斯模糊,然后在重新采样前用sinc预滤波?在频域中是否有更简单的处理方法?
在傅里叶域中产生高斯频率响应,然后取逆FFT以获得离散滤波器是否更有意义?
截断滤波器如何改变其频率响应?是否引入任何额外的伪影?
二维滤波器是否与连续滤波器一样具有旋转不变性?是否有改进的方法?事实上,任何二维离散(可分离或不可分离)滤波器是否都能真正具有旋转不变性?
例3.12:锐化、模糊和噪声消除。实现一些软化、锐化和非线性扩散(选择性锐化或噪声消除)滤波器,如高斯、中值和双边(第3.3.1节),如第3.4.2节所述。
处理模糊或嘈杂的图像(在低光下拍摄是获得两者的好方法),并尝试改善它们的外观和可读性。
例3.13:可操纵滤波器。实现Freeman和Adelson(1991)的可操纵滤波器算法。输入应为灰度或彩色图像,输出应为多波段
图像由G和G0组成。滤波器的系数可以在论文中找到
Freeman和Adelson(1991)提出。
在你选择的多张图像上测试各种顺序滤波器,看看是否可以可靠地找到角点和交点特征。这些滤波器在以后检测拉长结构时会非常有用,例如线(第7.4节)。
图3.52用于测试重采样算法质量的样本图像:(a)合成
chirp;(b)和(c)一些来自图像压缩社区的高频图像。
例3.14:双边和引导图像滤波器。实现或下载双边和/或引导图像滤波器的代码,并使用它来实现一些图像增强或处理应用
插件,如第3.3.2节所述
例3.15:傅里叶变换。证明Szeliski(2010,表3.1)中列出的傅里叶变换性质,并推导Szeliski(2010,表3.2)和表3.1中列出的傅里叶变换对的公式。这些练习对于希望熟练掌握傅里叶变换非常有用,因为这是一项在分析和设计许多计算机视觉算法的行为和效率时非常有用的技能。
例3.16:高质量图像重采样。实现第3.5.2节中介绍的几种低通滤波器,以及图3.28中所示的窗函数sinc。可以自由实现其他滤波器(Wolberg1990;Unser1999)。
应用滤镜来持续调整图像大小,包括放大(插值)和缩小(裁剪);比较不同滤镜生成的动画效果。使用合成的啁啾图像(图3.52a)和具有大量高频细节的自然图像(图3.52b-c)。
您可能会发现编写一个简单的可视化程序很有帮助,该程序可以同时连续播放两个或多个过滤器的动画,并允许您在不同的结果之间“闪烁”。
讨论每个过滤器的优点和缺点,以及速度和质量之间的权衡。
例3.17:金字塔。构建一个图像金字塔。输入应该是灰度或彩色图像、可分离滤波器核和所需级别的数量。至少实现以下核:
?2×2块过滤;
Burt和Adelson的二项式核1/16(1;4;6;4;1)(Burt和Adelson1983a);
高质量的七或九抽滤器。
比较各种降采样滤波器的视觉质量。同时,将输入图像移位1到4个像素,并比较由此产生的降采样(四分之一大小)图像序列。
例3.18:金字塔混合。编写一个程序,输入两个颜色图像和一个二进制掩模图像,并生成这两个图像的拉普拉斯金字塔混合。
1.为每个图像构建拉普拉斯金字塔。
2.为两个掩模图像(输入图像及其补码)构建高斯金字塔。
3.将每个拉普拉斯图像乘以相应的掩模,并将图像相加(见图3.41)。
4.从混合的拉普拉斯金字塔中重建最终图像。
将你的算法推广到输入n张图像和一张标签图像,标签值为1...n(值0可以保留用于“无输入”)。讨论加权求和阶段(第3步)是否需要跟踪总权重以进行重新归一化,或者数学上是否可以直接计算。使用你的算法来混合两张曝光不同的图像(以避免过曝和欠曝区域),或创作性地混合两个不同场景。
例3.19:PyTorch中的金字塔融合。用PyTorch重写你的金字塔融合练习。
1. PyTorch支持所有你需要的基本元素,即固定大小的卷积(确保它们分别过滤每个通道)、下采样、上采样以及加法、减法和乘法(尽管后者很少使用)。
2.这个练习的目标不是训练卷积权重,而是熟悉PyTorch中可用的DNN原语。
3.将您的结果与使用标准Python或C++计算机视觉库的结果进行比较。它们应该是相同的。
4.讨论您是否更喜欢或更不喜欢这种API用于这些类型的固定管道成像任务。
例3.20:局部拉普拉斯——具有挑战性。实现局部拉普拉斯对比度操作技术(Paris、Hasinoff和Kautz2011;Aubry、Paris等人2014),并使用该技术实现边缘保持滤波和色调操作。
例3.21:小波构造和应用。实现第3.5.4节中描述的小波族之一,或由Simoncelli和Adelson(1990b)描述的小波族之一,以及基本拉普拉斯金字塔(练习3.17)。将得到的表示应用于以下两个任务之一:
•压缩:计算不同小波实现中每个频带的熵,假设给定的量化级别(例如,1/4灰度级,以保持舍入误差在可接受范围内)。对小波系数进行量化并重建原始图像。哪种技术表现更好?(参见西蒙切利和阿德森(1990b)或大量关于小波压缩的论文中的典型结果。)
去噪。计算小波后,使用核法抑制小值,即使用分段线性或其他C0函数将小值设为零。比较不同小波和金字塔表示的去噪结果。
例3.22:参数化图像变形。编写代码,进行仿射和透视图像变形(可选双线性)。尝试各种插值方法,并报告它们的视觉质量。特别是,讨论以下内容:
在MIP映射中,仅选择与计算出的分数级相邻的较粗级别会产生更模糊的图像,而选择更细的级别则会导致混叠。解释为什么会这样,并讨论将混叠图像和模糊图像(三线性MIP映射)混合是否是一个好主意。
当水平重采样率与垂直重采样率的比值相差很大(各向异性)时,MIP-map的表现更差。建议一些方法来减少此类问题。
例3.23:局部图像变形。打开一个图像,并以以下方式之一改变其外观:
1.点击多个像素并将其移动(拖动)到新位置。对由此产生的稀疏位移场进行插值,以获得密集运动场(第3.6.2节和第3.5.1节)。
2.在图像中绘制多条线。移动线的端点以指定它们的新位置,并使用第3.6.2节讨论的Beier-Neely插值算法(Beier和Neely1992)来获得密集运动场。
3.叠加样条控制网格,并一次移动一个网格点(可选择变形级别)。
4.具有密集的每像素流场,并使用软“画笔”设计水平和垂直速度场。
5.(可选):证明当线段变短时,Beier-Neely线性变形是否可以简化为基于点的稀疏变形(简化为点)。
例3.24:前向变形。给定上一练习中的位移场,编写一个前向变形算法:
1.使用splatting编写一个前向平滑器,可以是最近邻或软累积(第3.6.1节)。
2.编写一个两步算法,该算法对位移场进行前向变形,填补小孔,然后使用反向变形(Shade、Gortler等人,1998)。
3.比较这两种算法的质量。
例3.25:基于特征的变形。扩展你在练习3.23中编写的变形代码,以导入两个不同的图像,并指定两个图像之间的对应关系(点、线或基于网格)。
1.通过部分扭曲图像并交叉溶解(第3.6.3节)来创建变形。
2.尝试使用变形算法执行图像旋转,并讨论它是否按你想要的方式工作。
例3.26:二维图像编辑器。扩展你在练习2.2中编写的程序,导入图像并让你创建图片的“拼贴”。你应该实现以下步骤:
1.打开一个新的图像(在单独的窗口中)。
2.拖动(橡皮筋)以裁剪子区域(或选择整个图像)。
3.粘贴到当前画布。
4.选择变形模式(运动模型):平移、刚性、相似性、仿射或透视。
5.拖动轮廓的任意一角,以更改其变换。
图3.53在这幅图片的右侧可以看到一个微弱的彩虹图像。你能想出一种方法来增强它(练习3.29)吗?
6.(可选)更改图像的相对顺序以及当前正在操作的图像。
用户应该看到各种图像的组成是重叠在一起的。
该练习应基于软件库中支持的图像转换类构建。还应支持创建表示的持久性(保存和加载)(对于每个图像,保存其转换)。
例3.27:三维纹理映射查看器。将你在练习2.3中创建的查看器扩展到包含纹理映射多边形渲染。将每个多边形(u;v;w)坐标增强到图像中。
例3.28:图像去噪。实现本章中描述的至少两种不同的图像去噪技术,并在合成噪声图像序列和真实世界(低光)序列上进行比较。算法的性能是否取决于噪声水平估计的正确选择?你能得出哪些结论,关于哪种技术更有效?
例3.29:彩虹增强器-具有挑战性。拍摄一张包含彩虹的照片,如图3.53所示,并增强彩虹的强度(饱和度)。
1.在图像中画一个弧线,标出彩虹的范围。
2.将一个累加彩虹函数(解释为什么它是累加的)拟合到这条弧上(最好使用线性化的像素值),以光谱作为横截面,并估计弧的宽度和添加的颜色量。这是最棘手的部分
问题在于,你需要把(低频的)彩虹图案和隐藏在它后面的自然图像分开。
3.放大彩虹信号并将其重新加入图像中,必要时重新应用伽玛函数以生成最终图像。
Chapter 4 Model fitting and optimization
4.1散点数据插值 194
4.1.1径向基函数 196
4.1.2过拟合和欠拟合 199
4.1.3稳健的数据拟合 202
4.2变分法和正则化 204
4.2.1离散能量最小化 206
4.2.2总变异 210
4.2.3双侧求解器 210
4.2.4应用:交互式着色 211
4.3马尔可夫随机场 212
4.3.1条件随机场 222
4.3.2应用:交互式分割 227
4.4其他阅读材料 230
4.5练习 232
图4.1数据插值和全局优化示例:(a)散点数据插值(曲线拟合)(Bishop2006)©2006斯普林格;(b)一阶正则化的图形模型解释;(c)使用优化进行着色(Levin,Lischinski,和Weiss 2004)©2004 ACM;(d)多图像拼接被表述为无序标签MRF(Agarwala,Dontcheva等2004)©2004 ACM。
在上一章中,我们介绍了大量图像处理操作符,这些操作符以一张或多张图像作为输入,并生成这些图像的某种过滤或转换版本。然而,在许多情况下,我们得到的是不完整的数据作为输入,例如稀疏位置的深度信息,或者用户涂鸦建议如何对图像进行着色或分割(图4.1c-d)。
从不完整或质量参差的数据中插值出完整的图像(或更广泛地说,是一个函数或场)的问题通常被称为散点数据插值。本章开篇将回顾这一领域的技术,因为除了在计算机视觉中广泛应用外,这些技术也是大多数机器学习算法的基础,我们将在下一章详细探讨。
我们没有进行详尽的调查,而是在第4.1节介绍了一些易于使用的技巧,如三角测量、样条插值和径向基函数。尽管这些技术被广泛使用,但它们难以调整以提供受控的连续性,即无法生成我们在估计深度图、标签图甚至彩色图像时所期望的那种分段连续的重建。
为此,我们在第4.2节介绍了变分方法,这些方法将插值问题表述为在精确或近似数据约束下恢复分段光滑函数。由于平滑度是通过作为函数范数的惩罚来控制的,这类技术通常被称为正则化或基于能量的方法。为了找到这些问题的最小能量解,我们对其进行离散化(通常是在像素网格上),从而得到一个离散的能量函数,然后可以使用稀疏线性系统或相关的迭代技术进行最小化。
在本章的最后一部分,第4.3节中,我们展示了基于能量的公式如何与作为马尔可夫随机场形式化的贝叶斯推断技术相关联,后者是通用概率图模型的一个特例。在这些公式中,数据约束可以解释为噪声和/或不完整的测量,而分段平滑约束则作为先验假设或解决方案空间的模型。这类公式通常也被称为生成模型,因为原则上可以从先验分布中生成随机样本,以检验它们是否符合我们的预期。由于先验模型可以比简单的平滑约束更复杂,且解决方案空间可能有多个局部最小值,因此需要使用更为复杂的优化技术。
4.1 散点数据插值
散点数据插值的目标是产生一个(通常连续且平滑的)函数f(x),该函数通过一组位于位置xk的数据点dk,使得
f (xk) = dk . (4.1)
散点数据逼近的相关问题只需要函数在数据点附近通过(Amidror2002;Wendland2004;Anjyo、Lewis和Pighin2014)。这通常使用惩罚函数来表述,例如
- dk Ⅱ2 ; (4.2)
在上述公式中,平方范数有时会被不同的范数或稳健函数所替代(第4.1.3节)。在统计学和机器学习中,给定有限数量样本预测输出函数的问题称为回归(第5.1节)。向量x被称为输入,而输出y则被称为目标。图4.1a展示了一维散点数据插值的一个例子,而图4.2和4.8则展示了几个二维的例子。
乍一看,散点数据插值似乎与我们在第3.5.1节中研究的图像插值密切相关。然而,与图像不同的是,图像中的数据点是规则网格化的,而散点数据插值中的数据点在整个域内分布不规则,如图4.2所示。这需要我们对所使用的插值方法进行一些调整。
如果域x是二维的,如图像所示,一种简单的方法是使用数据点xk作为三角形顶点来三角化域x。所得的三角网络如图4.2a所示,称为不规则三角网(TIN),这是早期用于从散射场测量数据生成高程图的技术之一。
图4.2a中的三角剖分是使用Delaunay三角剖分生成的。Delaunay三角剖分因其计算特性而被广泛采用,例如避免长条形三角形。高效的计算此类三角剖分的算法现已有现成的解决方案,并在计算几何教科书中有所介绍(Preparata和Shamos 1985;de Berg,Cheong等人2008)。利用外接球的性质,即所有选定的单纯形(如三角形、四面体等)在其外接球内没有其他顶点的要求,Delaunay三角剖分可以扩展到更高维度的空间。
图4.2一些简单的散点数据插值和逼近算法:(a)
一种定义在一组数据点位置上的Delaunay三角化;(b)用于拉推算法的数据结构和中间结果(Gortler,Grzeszczuk (et al.1996)©1996 ACM。
一旦三角剖分确定,就可以轻松地在每个三角形上定义一个分段线性插值函数,从而得到一个C0连续但通常不是C1连续的插值函数。每个三角形内的函数公式通常是使用重心坐标推导出来的,这些坐标在顶点处取最大值,并且总和为一(Farin2002;Amidror2002)。
如果需要更平滑的表面作为插值函数,我们可以用高阶样条函数替换每个三角形上的分段线性函数,就像我们在图像插值中所做的那样(第3.5.1节)。然而,由于这些样条现在是在不规则三角剖分上定义的,因此必须使用更复杂的技术(Farin2002;Amidror2002)。其他基于计算机图形学中的几何建模技术的插值器还包括细分曲面(Peters和Reif2008)。
三角化数据点的替代方法是使用如图4.2b所示的规则n维网格。定义在该域上的样条通常称为张量乘积样条,并且已用于插值散射数据(Lee、Wolberg和Shin,1997)。
一种更快但不那么精确的方法称为拉推算法,最初是为在Lumigraph中插值缺失的4D光场样本而开发的(Gortler、Grzeszczuk等人,1996)。该算法分为三个阶段,如图4.2b所示。
首先,不规则数据样本被散布到最近的网格顶点上(即,分布在这些顶点上),使用我们在第3.6.1节讨论的参数图像变换方法。散布操作会在附近的顶点累积值和权重。在第二阶段,通过结合高分辨率网格的系数值,在一系列低分辨率网格中计算值和权重。在较低的
分辨率网格中,间隙(权重较低的区域)变得越来越小。在第三阶段,即推移阶段,每个较低分辨率网格的信息与下一个较高分辨率网格的信息结合,填补这些间隙,同时不会过度模糊已经计算出的高分辨率信息。这三个阶段的详细内容可参见(Gortler,Grzeszczuk等1996)。
拉推算法非常快,因为它本质上是线性的输入数据点和精细网格样本的数量。
虽然我刚才描述的基于网格的表示可以提供高质量的插值,但它们通常仅限于低维域,因为网格的大小会随着域的维度呈组合增长。在高维情况下,通常使用无网格方法,将所需的插值定义为基函数的加权和,类似于图像插值中使用的公式(3.64)。在机器学习中,这些方法常被称为核函数或核回归(Bishop2006,第6章;Murphy2012,第14章;Scho...lkopf和Smola2001)。
更详细地说,插值函数f是每个输入数据点中心的基础函数的加权和(或叠加)
(4.3)
其中,xk是散射数据点的位置,φs是径向基函数(或核函数),wk是与每个核相关的局部权重。基函数φ()称为径向的,因为它们应用于数据样本xk和评估点x之间的径向距离。φ的选择决定了插值函数的平滑特性,而权重wk的选择则决定了函数对输入的逼近程度。
一些常用的基函数(Anjyo、Lewis和Pighin2014)包括
在这些方程中,r是径向距离,c是一个尺度参数,它控制基函数的大小(径向衰减),因此它的平滑度(更紧凑的基函数会导致
“峰值”解)。薄板样条方程适用于二维(一般n维样条称为多谐样条,见(Anjyo,Lewis,和Pighin2014)),是(4.19)中推导出的二阶变分样条的解析解。
如果我们要使函数精确地插值数据值,我们求解线性方程组(4.1),即:
dk , (4.8)
为了获得所需的权重向量wk。请注意,当基函数重叠较大(c值较大)时,这些方程可能会非常病态,即数据值或位置的微小变化可能导致插值函数发生显著变化。还需注意,这类方程组的解通常为O(m^3),其中m是数据点的数量(除非我们使用有限范围的基函数以获得稀疏方程组)。
一种更为谨慎的方法是解决正则化数据近似问题,该问题涉及最小化数据约束能量(4.2)以及形式如下的权重惩罚(正则化器)
wk Ⅱp , (4.9)
然后最小化正则化最小二乘问题
当p=2(二次权重惩罚)时,得到的能量是一个纯最小二乘问题,并且可以使用正规方程(附录A.2)来解决,其中λ值沿着对角线添加以稳定方程组。
在统计学和机器学习中,二次(正则化最小二乘)问题被称为岭回归。在神经网络中,对权重添加二次惩罚称为权重衰减,因为它鼓励权重向零衰减(第5.3.3节)。当p = 1时,该技术被称为套索回归(最小绝对收缩和选择算子),因为对于足够大的λ值,许多权重wk会被驱动到零(Tibshirani 1996;Bishop 2006;Murphy 2012;Deisenroth,Faisal,和Ong 2020)。这导致在插值中使用了一组稀疏的基础函数,可以大大加快计算新f (x)值的速度。我们将在支持向量机部分(第5.1.4节)进一步讨论稀疏核技术。
求解一组方程以确定权重wk的替代方法是简单地将它们设置为输入数据值dk。然而,这无法插值数据,而是
在高密度区域产生更高的值。这在我们试图从一组样本中估计概率密度函数时非常有用。在这种情况下,通过将样本加权基函数之和归一化为单位积分得到的结果密度函数被称为帕森窗口或核方法的概率密度估计(Duda、Hart和Stork 2001,第4.3节;Bishop 2006,第2.5.1节)。这些概率密度可用于(空间上)聚类颜色值以进行图像分割,即所谓的均值漂移方法(Comaniciu和Meer 2002)(第7.5.2节)。
如果,我们不只估计密度,而是希望实际插值一组数据值dk,我们可以使用一种相关技术,称为核回归或Nadaraya-Watson模型,在这种模型中,我们将数据加权的基函数之和除以所有基函数之和,
(4.12)
注意,从概念上讲,此操作与我们在第3.6.1节中讨论的正向渲染的喷溅法类似,不同之处在于,这里的基可以比图形中使用的最近邻双线性基宽得多(Takeda,Farsiu和Milanfar2007)。
核回归等同于创建一组新的空间变化的归一化移位基函数
(4.13)
它们构成单位分量,即在每个位置的总和为1(Anjyo、Lewis和Pighin 2014)。现在,所得插值可以更简洁地表示为
(4.14)
在大多数情况下,预先计算和存储Kφ函数
比存储更昂贵
评估(4.12)。
虽然在计算机视觉中没有被广泛使用,但Takeda、Farsiu和Milanfar(2007)已经将核回归技术应用于许多低级图像处理操作,包括最先进的手持多帧超分辨率(Wronski、Garcia-Dorado等人,2019)。
最后值得一提的一种散点插值技术是移动最小二乘法,该方法使用附近点的加权子集来计算局部平滑表面。这类技术在三维计算机图形学中广泛应用,尤其是在基于点的表面建模方面,详见第13.4节及(Alexa,Behr等,2003;Pauly,Keiser等,2003;Anjyo,Lewis和Pighin,2014)。
图4.3对蓝色圆圈进行多项式曲线拟合,这些圆圈是从绿色正弦曲线(Bishop2006)中获取的噪声样本。四个图表分别展示了零阶常数函数、一阶线性拟合、M = 3三次多项式以及九阶多项式。请注意,前两条曲线表现出欠拟合,而最后一条曲线则表现出过拟合,即过度波动。
当我们引入权重正则化(4.9)时,我们提到通常更倾向于近似数据,但没有解释原因。在大多数数据拟合问题中,样本dk(有时甚至是它们的位置xk )都是有噪声的,因此精确拟合是没有意义的。事实上,这样做可能会引入许多虚假的波动,而真实的解可能更加平滑。
为了深入探讨这一现象,让我们从一个简单的多项式拟合例子开始,该例子摘自(Bishop2006,第1.1章)。图4.3展示了多个不同阶数M的多项式曲线拟合到蓝色圆圈上,这些圆圈是从基础绿色正弦曲线上获取的噪声样本。请注意,低阶(M = 0和M = 1)的多项式严重欠拟合了基础数据,导致曲线过于平坦;而阶数M = 9的多项式则完全拟合了数据,但表现出远超实际可能的波动。
我们如何量化这种欠拟合和过拟合的程度,以及如何获得正确的程度?这个主题在机器学习中被广泛研究,并在许多文献中得到讨论。
图4.4对两个不同λ值的M = 9多项式拟合(Bishop 2006)©2006 Springer。左图显示了合理的正则化量,导致了合理的拟合,而右图中较大的λ值则导致了欠拟合。
图4.5拟合(训练)和验证误差与正则化或平滑量的关系©Glassner(2018)。右侧的正则化较少的解虽然具有较低的拟合误差,但在验证数据上的表现较差。
文献,包括Bishop (2006,第1.1章)、Glassner (2018,第9章)、Deisenroth、Faisal和Ong (2020,第8章)以及Zhang、Lipton等人(2021,第4.4.3节)。
一种方法是使用正则化最小二乘法,该方法在(4.11)中引入。图4.4展示了通过最小化(4.11)并使用多项式基函数φk (x) = xk得到的M = 9次多项式拟合,其中λ取了两个不同的值。左图显示了合理的正则化程度,导致了一个可信的拟合结果,而右图中较大的λ值则导致了欠拟合。请注意,图4.3右下角显示的M = 9插值对应于未正则化的λ = 0情况。
如果现在测量红色(估计)和绿色(无噪声)曲线之间的差异,我们会发现选择一个良好的中间值λ将产生最好的结果。
图4.6更加正则化的解log λ = 2.6显示出更高的偏差(偏离原始曲线),而较少正则化的版本(log λ = -2.4)则具有更高的方差(Bishop 2006)©2006斯普林格。左侧的红色曲线是基于绿色曲线上随机采样的25个点进行的M = 24高斯基拟合。右侧的红色曲线是这些拟合值的平均值。
然而,在实践中,我们从未获得过无噪声数据的样本。
相反,如果我们有一组样本需要插值,可以将其中的一部分保存在验证集中,以观察我们计算出的函数是欠拟合还是过拟合。当我们改变某个参数如λ(或使用其他指标来控制平滑度)时,通常会得到如图4.5所示的曲线。在这张图中,蓝色曲线表示拟合误差,在这种情况下称为训练误差,因为在机器学习中,我们通常会将给定的数据分为一个(通常是较大的)训练集和一个(通常是较小的)验证集。
为了更准确地估计理想的正则化量,我们可以多次重复将样本数据分割成训练集和验证集的过程。一种广为人知的技术称为交叉验证(Craven和Wahba 1979;Wahba和Wendelberger 1980;Bishop 2006,第1.3节;Murphy 2012,第1.4.8节;Deisenroth、Faisal和Ong 2020,第8章;Zhang、Lipton等2021,第4.4.2节),将训练数据分成K个部分(大小相等的部分)。然后依次保留每个部分,用剩余的数据进行训练。
数据。然后,你可以通过平均所有K次训练运行的结果来估计最佳正则化参数。虽然这种方法通常效果很好(K=5),但在训练大型神经网络时可能会过于昂贵,因为涉及的训练时间很长。
交叉验证只是模型选择技术的一个例子,这类技术通过在训练算法中估计超参数来实现良好的性能。其他方法包括信息准则,如贝叶斯信息准则(BIC)(Torr2002)和赤池信息准则(AIC)(Kanatani1998),以及贝叶斯建模方法(Szeliski1989;Bishop2006;Murphy2012)。
关于数据拟合,还有一个值得提及的话题,因为它经常出现在统计机器学习技术的讨论中,那就是偏差-方差权衡(Bishop 2006,第3.2节)。如图4.6所示,使用大量正则化(上排)会导致不同随机样本解之间的方差显著降低,但远离真实解的偏差却大幅增加。使用不足的正则化会急剧增加方差,尽管在大量样本上的平均值具有较低的偏差。关键在于确定一个合理的正则化折衷点,使得任何单个解都有接近真实情况(原始干净连续)数据的良好期望。
当我们对(4.9)中的权重添加一个正则化项时,我们注意到它不一定是二次惩罚,也可以是一个低阶单项式,以鼓励权重的稀疏性。
同样的想法可以应用于数据项,如(4.2),其中,我们可以使用一个稳健的损失函数P(),而不是使用二次惩罚,
k = f - dk;
这会降低较
数据拟合误差的权重,而较大的数据拟合误差更可能是异常测量值。(拟合误差项rk称为残差误差。)
图4.7展示了来自(Barron2019)的一些损失函数及其导数。常规的二次惩罚(α = 2)对每个误差给予完全(线性)权重,而α = 1损失则对所有较大的残差赋予相等的权重,即对于大残差表现为L1损失,而对于小残差则表现为L2损失。更大的α值会进一步减少大误差(异常值)的影响,尽管这会导致非凸优化问题,即可能存在多个局部最小值。我们将在第8.1.4节中讨论如何找到这些问题的良好初始猜测方法。
图4.7不同形状参数α值下的通用自适应损失函数(左)及其梯度(右)(Barron2019)©2019 IEEE。多个α值重现了现有的损失函数:L2损失(α = 2)、夏尔邦尼耶损失(α = 1)、柯西损失(α = 0)、盖曼-麦克卢尔损失(α = -2)和韦尔施损失(α = -1)。
在统计学中,最小化非二次损失函数以处理潜在的异常测量值被称为M估计(Huber1981;Hampel、Ronchetti等人1986;Black和Rangarajan1996;Stewart1999)。这类估计问题通常通过迭代重加权最小二乘法来解决,我们将在第8.1.4节和附录B.3中详细讨论。附录还讨论了稳健统计与非高斯概率模型之间的关系。
巴伦(2019)引入的广义损失函数有两个自由参数。第一个参数α控制异常值残差被大幅减权重的程度。第二个(尺度)参数c则控制最小值附近二次井的宽度,即残差值大致对应于内点的范围。传统上,α的选择是基于异常值分布的预期形状和计算考虑(例如是否需要凸损失)而启发式确定的,这与多种已发表的损失函数相对应。尺度参数c可以使用稳健的方差度量来估计,具体讨论见附录B.3。
在他的论文中,Barron(2019)讨论了如何通过最大化给定残差的似然性(或等效地,最小化负对数似然性)在运行时确定这两个参数,使这样的算法能够自我调整到各种噪声水平和
图4.8一个简单的表面插值问题:(a)九个不同高度的数据点散布在一个网格上;(b)二阶、受控连续性、薄板样条插值器,其左侧有一条撕裂线,右侧有一条折痕(Szeliski1989)©1989斯普林格。
4.2 变分法和正则化
我们在前一节介绍的正则化理论最初是由统计学家开发的,他们试图将模型拟合到严重限制解空间的数据(Tikhonov和Arsenin 1977;Engl、Hanke和Neubauer 1996)。例如,考虑找到一个平滑的表面,使其通过(或接近)一组测量数据点(图4.8)。这样的问题被称为不适定问题,因为许多可能的表面都可以拟合这些数据。由于输入的小变化有时会导致拟合结果的大变化(例如,如果我们使用多项式插值),这类问题通常也是病态的。由于我们试图从数据点d(xi,yi)中恢复未知函数f(x,y),这些问题也常被称为逆问题。许多计算机视觉任务可以视为逆问题,因为我们试图从有限的图像集中恢复三维世界的完整描述。
在前一节中,我们使用放置在数据点上的基函数或其他启发式方法,如拉推算法来解决这个问题。虽然这些技术可以提供合理的解决方案,但它们无法直接量化并优化解决方案的平滑度,也无法让我们局部控制解决方案在哪些地方应该不连续(图4.8)。
为了实现这一点,我们使用函数导数的范数(如下所述)来构建问题,然后找到这些范数的最小能量解。这类技术通常被称为基于能量或基于优化的方法。由于我们可以利用变分法来寻找最优解,因此它们也常被称为变分方法。自早期以来,变分方法已在计算机视觉中得到广泛应用。
20世纪80年代,提出并解决了许多基础问题,包括光流(霍恩和舒克1981;布莱克和阿南丹1993;布罗克斯、布鲁恩等人2004;维尔伯格、波克和比肖夫2010),分割(卡斯、威特金和特佐普洛斯1988;芒福德和沙赫1989;陈和维塞2001),去噪(鲁丁、奥舍尔和法特米1992;陈、奥舍尔和沈2001;陈和沈2005),以及多视图立体(福加拉斯和克里文1998;庞斯、克里文和福加拉斯2007;科列夫、克洛德等人2009)。更多相关论文列表可参见本章末尾的附加阅读部分。
为了量化找到一个平滑解的意义,我们可以在解空间上定义一个范数。对于一维函数f (x),我们可以积分该函数的一阶导数的平方,
(4.16)
或者整合平方的二阶导数,
(4.17)
(这里,我们用下标来表示微分。)这种能量度量是泛函的例子,泛函是将函数映射到标量值的算子。它们也常被称为变分法,因为它们测量的是函数的变化(非光滑性)。
在二维空间中(例如,对于图像、流场或表面),相应的平滑度函数为 (4.19)
其中混合的2fy项是需要使测量旋转不变的(Grimson 1983).
一阶导数范数常被称为膜,因为使用这种度量插值一组数据点会产生类似帐篷的结构。(实际上,这个公式是表面面积的小偏转近似,而肥皂泡正是最小化表面面积。)二阶范数称为薄板样条,因为它近似了薄板(例如柔性钢)在小变形下的行为。两者的结合称为张力下薄板样条(Terzopoulos1986b)。
我们刚才描述的正则化函数(平滑函数)迫使解在所有地方都是平滑的和C0和/或C1连续的。然而,在大多数计算机视觉应用中,我们试图建模或恢复的场只是分段连续的,例如,
深度图和光流场在物体不连续处跳跃。彩色图像更加不连续,因为它们在反照率(表面颜色)和阴影不连续处也改变外观。
为了更好地模拟这些函数,Terzopoulos(1986b)引入了受控连续性
样条,其中每个导数项都乘以一个局部加权函数,
+ τ (x, y)[fx (x, y) + 2fy (x, y) + fy (x, y)]} dx dy. (4.20)
在这里,P(x,y)∈[0,1]控制表面的连续性,而τ(x,y)∈[0,1]控制局部张力,即表面希望有多平坦。图4.8展示了一个简单的受控连续性插值器拟合九个散点数据的例子。实际上,更常见的是在图像和流场中使用一阶平滑项(第9.3节),而在表面中则使用二阶平滑项(第13.3.1节)。
除了平滑项之外,变分问题还需要一个数据项(或数据惩罚)。对于散点数据插值(Nielson1993),数据项测量函数f (x,y)与一组数据点di = d(xi,yi)之间的距离,
(4.21)
对于像噪声消除这样的问题,可以使用这种度量的连续版本,
εD = ∫ [f (x, y) - d (x, y)]2 dx dy. (4.22)
ε = εD + λεS , (4.23)
其中εS是平滑惩罚项(ε1、ε2或某种加权混合如εCC),λ是正则化参数,用于控制解的平滑度。正如我们在第4.1.2节中所见,可以通过交叉验证等技术估算出正则化参数的良好值。
为了找到这个连续问题的最小值,通常首先在规则网格上对函数f (x,y)进行离散化。2执行这种离散化的最合理的方法是使用
2使用以数据点为中心的核基函数的替代方案(Boult和Kender1986;Nielson
1993)在第13.3.1节中进行了更详细的讨论。
有限元分析,即用分段连续样条近似函数,然后进行解析积分(Bathe2007)。
幸运的是,对于一阶和二阶平滑函数,明智地选择适当的有限元可以得到特别简单的离散形式(Terzopoulos1983)。相应的离散平滑能量函数变为
(4.24)
+ sy(i,j)[f(i,j + 1)- f(i,j)- gy(i,j)]2
和+ 2cm(i,j)[f(i + 1,j + 1)- f(i + 1,j)- f(i,j + 1)+ f(i,j)]2 (4.25)
+ cy(i,j)[f(i,j + 1)- 2f(i,j)+ f(i,j - 1)]2,
其中h是有限元网格的大小。只有当能量在多种分辨率下被离散化时,如粗到细或多重网格技术中,h因子才重要。
可选的平滑权重sx(i,j)和sy(i,j)控制表面水平和垂直撕裂(或弱点)的位置。对于其他问题,如色彩化(Levin、Lischinski和Weiss 2004)和交互式色调映射(Lischinski、Farbman等2006),它们控制插值色度或曝光场的平滑度,并通常与局部亮度梯度强度成反比设置。对于二阶问题,折痕变量cx(i,j)、cm(i,j)和cy(i,j)控制表面折痕的位置(Terzopoulos 1988;Szeliski 1990a)。
数据值gx (i,j)和gy (i,j)是算法使用的梯度数据项(约束条件),例如光度立体(第13.1.1节)、HDR色调映射(第10.2.1节)(Fattal、Lischinski和Werman 2002)、泊松混合(第8.4.4节)(P rez、Gangnet和Blake 2003)、梯度
混合(第8.4.4节)(Levin、Zomet等人2004)和泊松表面重建(第13.5.1节)(Kazhdan、Bolitho和Hoppe 2006;Kazh- dan和Hoppe 2013)。当仅离散化常规的一阶平滑函数(4.18)时,这些值被设为零。请注意,在x、y和混合方向上可以分别施加平滑度和曲率项,以产生局部撕裂或折痕(Terzopoulos 1988;Szeliski 1990a)。
(4.26)
其中,局部置信权重c(i,j)控制数据约束的强制强度。当没有数据时,这些值被设为零;如果有数据,则可以设置为数据测量值的逆方差(如Szeliski(1989)所讨论及第4.3节所述)。
E = ED + λES = xTAx - 2xTb + c, (4.27)
其中x = [f(0,0)... f(m - 1,n - 1)]称为状态向量。
稀疏对称正定矩阵A被称为海森矩阵,因为它编码了能量函数的二阶导数。对于一维的一阶问题,A是三对角的;对于二维的一阶问题,它是多带状的,每行有五个非零元素。我们称b为加权数据向量。最小化上述二次型等价于求解稀疏线性系统。
Ax = b, (4.28)
这可以通过多种稀疏矩阵技术实现,例如多重网格(Briggs、Henson和McCormick 2000)和层次预处理器(Szeliski 2006b;Krishnan和Szeliski 2011;Krishnan、Fattal和Szeliski 2013),具体方法见附录A.5并在图4.11中展示。使用这些技术对于获得合理的运行时间至关重要,因为适当预处理的稀疏线性系统具有与像素数量呈线性的收敛时间。
虽然正则化最初由Poggio、Torre和Koch(1985)以及Terzopoulos(1986b)引入视觉领域,用于表面插值等问题,但很快被其他视觉研究人员广泛采用,应用于边缘检测(第7.2节)、光流(第9.3节)和阴影形状(第13.1节)等多样问题(Poggio、Torre和Koch 1985;Horn和Brooks1986;Terzopoulos1986b;Bertero,Poggio,Torre 1988;Brox、Bruhn等2004)。Poggio、Torre和Koch(1985)还展示了如何在电阻网格中实现由公式(4.24–4.26)定义的离散能量,如图4.9所示。在计算摄影(第10章)中,正则化及其变体常用于解决高动态范围色调映射(Fattal、Lischinski和Werman 2002;Lischinski、Farbman等2006)、泊松域和梯度域融合(P rez、Gangnet和Blake 2003;Levin、Zomet等2004;Agarwala、Dontcheva等。
3我们使用x代替f,因为这是数值分析文献中更常见的形式(Golub和Van Loan1996)。
在数值分析中,A被称为系数矩阵(Saad2003);在有限元分析中(Bathe2007),它被称为刚度矩阵。
图4.9一阶正则化的图形模型解释。白色圆圈表示未知数f(i,j),而深色圆圈表示输入数据d(i,j)。在电阻网格解释中,d和f值编码输入和输出电压,黑色方块表示电阻器,其导电性分别设为sx(i,j),sy(i,j),以及c(i,j)。在弹簧-质量系统类比中,圆圈表示高度,黑色方块表示弹簧。同样的图形模型也可用于描绘一阶马尔可夫随机场(图4.12)。
2004年),着色(Levin,Lischinski,and Weiss2004),以及自然图像遮罩(Levin,Lischinski,and Weiss2008)。
虽然正则化通常使用二次(L2)范数来表述,即公式(4.16–4.19)中的平方导数和公式(4.24–4.25)中的平方差,但也可以使用非二次鲁棒惩罚函数来表述,这些函数最早由Section4.1.3and提出,并在附录B.3中详细讨论。例如,(4.24)可以推广为
(4.29)
+ sy(i,j)P(f(i,j + 1)- f(i,j)),
其中P(x)是某个单调递增的惩罚函数。例如,范数族P(x) = jxjp被称为p-范数。当p < 2时,所得的平滑项比完全平滑更具有分段连续性,这可以更好地模拟图像、流场和三维表面的不连续特性。
鲁棒正则化的早期例子是Blake和Zisserman(1987)的渐进非凸性(GNC)算法。在这里,数据和导数上的范数是
P(x) = min(x2,V)。 (4.30)
由于所得问题高度非凸(存在多个局部最小值),提出了一种连续化方法,其中逐渐用非凸鲁棒范数(Allgower和Georg 2003)替代二次范数(该范数是凸的)。(大约同一时期,Terzopoulos(1988)也在使用连续化方法推断其表面插值问题中的撕裂和折痕变量。)
今天,许多正则化问题使用L1(p = 1)范数来表述,通常称为全变差(Rudin,Osher和Fatemi 1992;Chan,Osher和Shen 2001;Chambolle 2004;Chan和Shen 2005;Tschumperl和Deriche2005;Tschumperl2006;Cremers 2007;Kaftory,Schechner和Zeevi 2007;Kolev,Klodt等2009;Werlberger,Pock和Bischof 2010)。这种范数的优点在于它能更好地保留不连续性,但仍然产生一个具有全局唯一解的凸问题。其他范数,其影响(导数)更快地衰减至零,由Black和Rangarajan(1996)、Black,Sapiro等(1998)和Barron(2019)提出,并在第4.1.3节和附录B.3中讨论。
最近,当p < 1时的超拉普拉斯范数越来越受欢迎。这一观点基于图像导数的对数似然分布呈现出p≈0.5到0.8的斜率,因此属于超拉普拉斯分布(Simoncelli1999;Levin和Weiss2007;Weiss和Freeman2007;Krishnan和Fergus2009)。这类范数更倾向于偏好大的不连续性而非小的不连续性。详见第4.3节(4.43)。
虽然使用L2范数的最小二乘正则化问题可以通过线性系统求解,但其他p-范数需要不同的迭代技术,例如迭代重加权最小二乘法(IRLS)、Levenberg-Marquardt、局部非线性子问题与全局二次正则化之间的交替(Krishnan和Fergus2009),或原对偶算法(Chambolle和Pock2011)。这些技术在第8.1.3节和附录A.3和B.3中讨论。
在我们对变分方法的讨论中,我们关注的是基于梯度和高阶导数的能量最小化问题,在离散设置中涉及
评估相邻像素之间的加权误差。正如我们在第3.3.2节讨论双边滤波时所见,通过查看更大的空间邻域并结合颜色或灰度值相似的像素,我们通常可以获得更好的结果。为了将这一想法扩展到变分(能量最小化)设置中,Barron和Poole(2016)提出用更广泛的邻域双边加权版本替代常用的最邻近平滑惩罚(4.24)。
(4.31)
在哪里
(4.32)
是双边权重函数(3.37)的双随机化(归一化)版本,可能依赖于输入引导图像,但不依赖于f的估计值。5
为了高效地求解这组方程(比最近邻版本密集得多),作者采用了最初用于加速双边滤波的方法,即在(空间上较粗略的)双边网格上求解相关问题。操作序列类似于双边滤波中使用的,只是在拼接后和切片前,使用了迭代最小二乘法求解器而不是多维高斯模糊。为了进一步加快共轭梯度求解器的速度,Barron和Poole(2016)采用了一种受先前图像自适应预处理器研究启发的多级预处理器(Szeliski2006b;Krishnan、Fattal和Szeliski2013)。
自引入以来,双边求解器已在多种视频处理和三维重建应用中使用,包括双目全景视频的拼接(Anderson,Gallup等,2016)。Valentin、Kowdle等(2018)开发的智能手机增强现实系统扩展了双边求解器,使其具有局部平面模型,并采用硬件友好的实时实现(Mazumdar,Alaghi等,2017),以生成密集的遮挡效果。
边缘感知插值技术在色彩化中的应用非常出色,即手动为“黑白”(灰度)图像添加颜色。在大多数色彩化的应用中,用户会在某些区域画出一些涂鸦,指示所需的颜色(图4.10a),系统则将指定的色度(u,v)值插值到整个图像中,从而实现色彩化效果。
5注意,在他们的论文中,Barron和Poole(2016)对像素颜色差异的亮度和色度分量使用了不同的σr值。
图4.10使用优化进行着色(Levin,Lischinski和Weiss 2004)©2004 ACM:(a)灰度图像上叠加了一些彩色涂鸦;(b)最终的着色图像;(c)原始彩色图像,从中提取了灰度图像和涂鸦的色度值。原始照片由Rotem Weiss拍摄。
然后与输入的亮度通道重新组合,生成最终的彩色图像,如图4.10b所示。在Levin、Lischinski和Weiss(2004)开发的系统中,插值使用局部加权正则化(4.24),其中局部平滑权重与亮度梯度成反比。这种局部加权正则化的方法启发了后来用于高动态范围色调映射的算法(Lischinski、Farbman等,2006)(第10.2.1节,以及其他加权最小二乘法(WLS)公式的应用(Farbman、Fattal等,2008)。这些技术从图像适应的正则化技术中受益匪浅,例如Szeliski(2006b)、Krishnan和Szeliski(2011)、Krishnan、Fattal和Szeliski(2013)以及Barron和Poole(2016)所开发的技术,如图4.11所示。Yatziv和Sapiro(2006)还开发了一种基于测地线(边缘感知)距离函数的稀疏色度插值替代方法。神经网络也可以用于实现图像色彩化的深度先验(Zhang、Zhu等,2017)。
4.3 马尔可夫随机场
正如我们刚刚所见,正则化涉及最小化定义在(分段)连续函数上的能量泛函,可以用于构建和解决各种低级别的计算机视觉问题。另一种技术是构建贝叶斯或生成模型,该模型分别建模噪声图像形成(测量)过程,并假设解空间的统计先验模型(Bishop2006,第1.5.4节)。在本节中,我们将探讨基于马尔可夫随机场的先验,其对数似然可以用局部邻域交互(或惩罚)项来描述(Kin-
图4.11使用局部适应的层次基预处理加速非齐次最小二乘着色求解器(Szeliski2006b)©2006 ACM:(a)输入带有彩色笔触的灰度图像;(b)共轭梯度迭代20次后的解;(c)使用一次层次基函数预处理;(d)使用一次局部适应的层次基函数。
德曼和斯内尔1980;Geman和Geman1984;Marroquin、Mitter和Poggio1987;Li 1995;Szeliski、Zabih等人2008;Blake、Kohli和Rother2011)。
贝叶斯建模相较于正则化有许多潜在优势(详见附录B)。能够对测量过程进行统计建模,使我们能够从每次测量中提取尽可能多的信息,而不仅仅是猜测数据的权重。同样地,通过观察我们所建模类别的样本,通常可以学习先验分布的参数(Roth和Black 2007a;Tappen 2007;Li和Huttenlocher 2008)。此外,由于我们的模型是概率性的,原则上可以估计未知变量的完整概率分布,特别是可以建模解中的不确定性,这在后续处理阶段非常有用。最后,马尔可夫随机场模型可以在离散变量上定义,例如图像标签(其中变量没有适当的顺序),在这种情况下,正则化不适用。
根据贝叶斯规则(附录B.4),给定测量值y,未知数x的后验分布p(xjy)可通过将测量似然p(yjx)乘以先验分布p(x)并进行归一化得到,
其中,p(y) =,xp(yjx)p(x)是一个归一化常数,用于使p(xjy)分布适于(积分为1)。取(4.33)的两边的负对数,我们得到
- log p(xjy)= - log p(yjx)- log p(x) + C; (4.34)是负后验对数似然。
为了找到给定一些测量值y的最可能(最大后验概率或MAP)解x,我们只需最小化这个负对数似然,这也可以被认为是一种能量,
E (x, y) = ED (x, y) + EP (x). (4.35)
(我们省略常数C,因为在能量最小化过程中其值无关紧要。)第一项ED(x,y)是数据能量或数据惩罚;它衡量了给定未知状态x时观察到数据的负对数似然。第二项EP (x)是先验能量;它的作用类似于正则化中的平滑能量。请注意,最大后验概率估计可能并不总是理想的选择,因为它选择了后验分布中的“峰值”,而不是某个更稳定的统计量——参见附录B.2以及Levin、Weiss等人(2009)的讨论。
在本节的剩余部分,我们将重点关注马尔可夫随机场,这是一种定义在二维或三维像素或体素网格上的概率模型。然而,在深入探讨之前,我们应当指出,MRFs只是更广泛的图形模型家族中的一个特例(Bishop2006,第8章;Koller和Friedman2009;Nowozin和Lampert2011;Murphy2012,第10、17、19章),这些模型具有变量之间的稀疏交互关系,可以在因子图中捕捉到(Dellaert和Kaess2017;Dellaert 2021),如图4.12所示。图形模型有多种拓扑结构,包括链式(用于音频和语音处理)、树形(常用于建模跟踪人物时的运动链(例如,Felzenszwalb和Huttenlocher2005))、星型(简化的人物模型;Dalal和Triggs2005;Felzenszwalb、Girshick等人2010)以及星座(Fergus、Perona和Zisserman2007)。这些模型广泛用于基于部件的识别,如第6.2.1节所述。对于无环图,可以使用基于动态规划的有效线性时间推断算法。
对于图像处理应用,未知数x是输出像素的集合
x = [f(0, 0) . . . f (m - 1, n - 1)], (4.36)
数据(在最简单的情况下)是输入像素
y = [d(0, 0) . . . d(m - 1, n - 1)] (4.37)
如图4.12所示。
对于一个马尔可夫随机场,概率p(x)是一个吉布斯或玻尔兹曼分布,其负对数似然(根据哈默斯利-克利福德定理)可以写成成对相互作用势的总和,
图4.12 N4邻域马尔可夫随机场的图形模型。(蓝色边表示N8邻域。)白色圆圈是未知数f(i,j),深色圆圈是输入数据d(i,j)。sx(i,j)和sy(i,j)黑色框表示随机场中相邻节点之间的任意交互势,c(i,j)表示数据惩罚函数。相同的图形模型也可用于描绘一阶正则化问题的离散版本(图4.9)。
其中N(i,j)表示像素(i,j)的邻居。实际上,该定理的一般版本指出,能量可能需要在一个更大的团集集合上进行评估,这取决于马尔可夫随机场的顺序(Kindermann和Snell 1980;Geman和Geman 1984;Bishop 2006;Kohli、Ladick和Torr 2009;Kohli、Kumar和Torr 2009)。
在马尔可夫随机场模型中最常用的邻域是N4邻域,在该邻域中,场f(i,j)中的每个像素仅与其直接相邻的像素相互作用。图4.12所示的模型,我们之前在图4.9中用于说明一阶正则化的离散版本,展示了一个N4 MRF。sx(i,j)和sy(i,j)的黑框表示随机场中相邻节点之间的任意交互势,而c(i,j)表示数据惩罚函数。这些方形节点也可以解释为因子图版本中的因子(无向)图形模型(Bishop 2006;Dellaert和Kaess 2017;Dellaert 2021),这是交互势的另一种名称。(严格来说,这些因子是(不正规的)概率函数,它们的乘积是(未归一化)后验分布。)
正如我们将在(4.41–4.42)中看到的,这些相互作用势与正则化图像恢复问题的离散版本之间存在密切关系。因此,初步来看,当解决正则化问题时进行的能量最小化与在MRF中执行的最大后验推断是等价的。
虽然N4邻域最常用,但在某些应用中,N8(甚至更高阶)邻域在图像分割等任务上表现更好,因为它们可以更好地建模不同方向的不连续性(Boykov和Kolmogorov2003;Rother、Kohli等人2009;Kohli、Ladick和Torr2009;Kohli、Kumar和Torr2009)。
最简单的马尔可夫随机场的例子是二进制场。这种场的例子包括1位(黑白)扫描文档图像以及分割成前景和背景区域的图像。
为了对扫描图像进行去噪,我们将数据惩罚设置为反映扫描图像和最终图像之间的一致性,
ED (i, j) = wδ(f(i, j), d(i, j)) (4.39)
以及平滑惩罚,以反映相邻像素之间的协议
EP(i,j)= sδ(f(i,j),f(i + 1,j))+ sδ(f(i,j),f(i,j + 1))。 (4.40)
一旦我们确定了能量,如何将其最小化?最简单的方法是执行梯度下降,每次只改变一个状态,如果该状态能产生更低的能量。这种方法被称为上下文分类(Kittler和Fo...glein 1984)、迭代条件模式(ICM)(Besag 1986),或者最高置信度优先(HCF)(Chou和Brown 1990),前提是首先选择能量减少最大的像素。
不幸的是,这些下坡方法容易陷入局部最小值。一种替代方法是在过程中加入一些随机性,这被称为随机梯度下降(Metropolis,Rosenbluth等1953;Geman和Geman 1984)。当噪声量随时间减少时,这种技术被称为模拟退火(Kirkpatrick,Gelatt和Vecchi 1983;Carnevali,Coletti和Patarnello 1985;Wolberg和Pavlidis 1985;Swendsen和Wang 1987),最初由Geman和Geman(1984)在计算机视觉领域推广,后来被Barnard(1989)等人应用于立体匹配。
即使这种技术,效果也不尽如人意(Boykov,Veksler,和Zabih 2001)。对于二值图像,Boykov、Veksler和Zabih(2001)向计算机视觉社区介绍了一种更好的方法,即将能量最小化问题重新表述为最大流/最小割图优化问题(Greig,Porteous,和Seheult 1989)。这一技术在计算机视觉界非正式地被称为图割(Boykov和Kolmogorov 2011)。对于简单的能量函数,例如非相同邻近像素的惩罚为常数的情况,该算法可以保证产生
全局最小值。柯尔莫哥洛夫和扎比(2004)正式定义了这些结果成立的二元能量势类(正则条件),而科莫达基斯、齐里塔斯和帕拉吉奥斯(2008)以及罗瑟、柯尔莫哥洛夫等人(2007)的新研究则提供了良好的算法,用于处理这些条件不成立的情况,即能量函数不是正则或次模的情况。
除了上述技术外,还开发了多种优化方法用于MRF能量最小化,例如(循环)信念传播和动态规划(针对一维问题)。这些内容在附录B.5中进行了更详细的讨论,以及Szeliski、Zabih等人(2008年)和Kappes、Andres等人(2015年)的比较综述论文,它们在https: //vision.middlebury.edu/MRF和http://hciweb2.iwr.uni-heidelberg.de/opengm上提供了相关的基准测试和代码。
除了二值图像外,马尔可夫随机场还可以应用于有序值标签,如灰度图像或深度图。“有序”一词表明标签具有隐含的顺序,例如,较高的值表示较亮的像素。在下一节中,我们将探讨无序标签,如用于图像合成的源图像标签。
ED(i,j)= c(i,j)Pd(f(i,j)- d(i,j)) (4.41)
EP(i,j)= sx(i,j)Pp(f(i,j)- f(i + 1,j))+ sy(i,j)Pp(f(i,j)- f(i,j + 1)),(4.42)
这些是二次惩罚项(4.26)和(4.24)的稳健推广,首次引入于(4.29)。与之前一样,c(i,j),sx(i,j),sy(i,j)的权重可用于局部控制数据加权以及水平和垂直平滑度。然而,这里使用的是一个一般的单调递增惩罚函数P(),而不是二次惩罚。(数据项和平滑度项可以使用不同的函数。)例如,Pp可以是一个超拉普拉斯惩罚。
Pp (d) = jdjp , p < 1, (4.43)
与二次或线性(总变差)惩罚相比,它能更好地编码图像中梯度(主要是边缘)的分布。6 Levin和Weiss(2007)使用这样的惩罚
6注意,与二次惩罚不同,水平和垂直导数的p-范数之和不是旋转不变的。更好的方法可能是局部估计梯度方向,并对垂直和平行分量施加不同的范数,Roth和Black(2007b)称之为可转向随机场。
图4.13灰度图像去噪和修复:(a)原始图像;(b)图像
被噪声破坏且数据缺失(黑色条);(c)使用循环信念传播恢复的图像;(d)使用扩展移动图切割恢复的图像。这些图像是来自https: //vision.middlebury.edu/MRF/results (Szeliski,Zabih等人,2008年)。
通过鼓励梯度位于一个或另一个图像中,而不是同时位于两个图像中,来分离传输和反射的图像(图9.16)。Levin等人(2007)使用超拉普拉斯作为图像去卷积(去模糊)的先验,而Krishnan和Fergus(2009)则开发了一种更快的算法来解决此类问题。对于数据惩罚,ρd可以是二次的(用于建模高斯噪声)或受污染高斯的对数(附录B.3)。
当ρp是一个二次函数时,生成的马尔可夫随机场被称为高斯马尔可夫随机场(GMRF),其最小值可以通过稀疏线性系统求解(4.28)找到。当权重函数均匀分布时,GMRF成为维纳滤波的一个特例(第3.4.1节)。允许权重函数依赖于输入图像(一种特殊的条件随机场,我们将在下文描述)可以实现相当复杂的图像处理算法,包括色彩化(Levin、Lischinski和Weiss 2004年)、交互式色调映射(Lischinski、Farbman等2006年)、自然图像抠图(Levin、Lischinski和Weiss 2008年)以及图像修复(Tappen、Liu等2007年)。
当ρd或ρp是非二次函数时,可以使用非线性最小二乘法或迭代重加权最小二乘法等梯度下降技术(附录A.3)。然而,如果搜索空间存在大量局部最小值,如立体匹配的情况(Barnard1989;Boykov,Veksler,和Zabih2001),则需要更复杂的技术。
图割技术扩展到多值问题首先由Boykov、Veksler和Zabih(2001)提出。在他们的论文中,他们开发了两种不同的算法,称为交换移动和扩展移动,它们在一系列二进制标记之间迭代。
图4.14来自Boykov、Veksler和Zabih(2001)的多层图优化©2001 IEEE: (a)初始问题配置;(b)标准移动仅改变一个像素;(c)
α-β交换最优地交换所有α和β标记的像素;(d)α扩展移动在当前像素值和α标签之间进行最优选择。
子问题以找到一个好的解决方案(图4.14)。请注意,由于该问题是证明为NP难的,因此通常无法获得全局解。因为这两种算法在其内部循环中都使用了二进制MRF优化,所以它们受到与二进制标记情况下的能量函数约束相同的影响(Kolmogorov和Zabih 2004)。
另一种MRF推理技术是信念传播(BP)。虽然信念传播最初是在树结构上开发的,且在此类结构中它是精确的(Pearl1988),但最近它已被应用于包含环路的图,如马尔可夫随机场(Freeman,Pasztor和Carmichael2000;Yedidia,Freeman和Weiss2001)。事实上,一些性能较好的立体匹配算法使用环路信念传播(LBP)来进行推理(Sun,Zheng和Shum2003)。关于LBP的详细讨论可以在比较调查论文中找到,这些论文涉及MRF优化(Szeliski,Zabih等2008;Kappes,Andres等2015)。
图4.13展示了一个使用非二次能量函数(非高斯MRF)进行图像去噪和修复(孔洞填充)的例子。原始图像已被噪声破坏,部分数据被移除(黑色条)。在这种情况下,循环信念传播算法计算出的能量略低,且生成的图像更加平滑,优于α扩展图割算法。
当然,上述公式(4.42)中平滑项EP(i;j)仅展示了最简单的情况。在后续研究中,Roth和Black(2009)提出了一种专家领域(FoE)模型,该模型汇总了大量指数化的局部滤波器输出以得出平滑惩罚。Weiss和Freeman(2007)分析了这种方法,并将其与自然图像统计的更简单的超拉普拉斯模型进行了比较。Lyu和Simoncelli(2009)使用
图4.15具有更复杂度量的马尔可夫随机场的图形模型
模型。附加的彩色边表示未知值的组合(比如,在一幅清晰的图像中)产生测量值(一幅嘈杂模糊的图像)。所得的图-
经典MRF模型仍然是一个经典模型,从它中抽取样本同样容易,但可以进行一些推断
算法(例如基于图切割的算法)可能不适用,因为网络复杂性增加,因为在推理期间状态变化变得更加纠缠,后验MRF具有更大的团。
高斯尺度混合物(GSM)用于构建非均匀多尺度MRF,其中一个(正指数)GMRF调制另一个高斯MRF的方差(振幅)。
也可以扩展测量模型,使采样的(受噪声干扰的)输入像素对应于未知(潜在)图像像素的混合,如图4.15所示。这是尝试去模糊图像时常见的情况。虽然这种模型仍然是传统的生成马尔可夫随机场,即原则上可以从先验分布中生成随机样本,但由于团大小变大,找到最优解可能会很困难。在这种情况下,可以使用梯度下降技术,例如迭代重新加权最小二乘法(Joshi,Zitnick等,2009)。练习4.4让你探讨这些问题。
未排序的标签
另一个常应用马尔可夫随机场的多值标签案例是无序标签,即两个标签之间的数值差异没有语义意义的标签。例如,在从航拍图像中分类地形时,森林、田野、水域和人行道所分配标签之间的数值差异是没有意义的。事实上,这些不同类型的地形之间的相邻关系
图4.16无序标签MRF (Agarwala,Dontcheva (et al.2004)©2004 ACM:左侧每个源图像中的笔画被用作MRF优化的约束条件,该优化通过图割法求解。最终的多值标签场以颜色叠加的形式显示在中间图像中,最终合成图则显示在右侧。
每个都有不同的可能性,所以使用这种形式的先验更有意义
EP(i,j)= sx(i,j)V (l(i,j),l(i + 1,j))+ sy(i,j)V (l(i,j),l(i,j + 1)),(4.44)
其中V(l0,l1)是一个通用的兼容性或势函数。(请注意,我们还用l(i,j)替换了f(i,j),以更清楚地表明这些是标签而不是函数样本。)另一种表示这种先验能量的方法(Boykov,Veksler和Zabih 2001;Szeliski,Zabih等2008)是
(4.45)
其中(p,q)是相邻像素,并且为每对相邻像素评估空间变化的势函数Vp,q。
无序MRF标记的一个重要应用是在图像合成中的接缝检测(Davis 1998;Agarwala、Dontcheva等2004)(见图4.16,详见第8.4.2节)。在这里,兼容性Vp,q(lp,lq)衡量了将图像lp中的像素p放置在图像lq中的像素q旁边时,视觉效果的质量。与大多数马尔可夫随机场一样,我们假设Vp,q(l,l)= 0。然而,对于不同的标签,兼容性Vp,q(lp,lq)可能取决于底层像素Ilp (p)和Ilq (q)的值。
例如,考虑一个图像I0是全天蓝色的,即I0 (p) = I0 (q) = B,而另一个图像I1从天蓝色I1 (p) = B过渡到森林绿I1 (q) = G
I0 : p q p q : I1
在这种情况下,Vp,q(1,0)=0(颜色一致),而Vp,q(0,1)>0(颜色不一致)。
在经典贝叶斯模型(4.33–4.35)中,
p (xjy) α p (yjx)p (x), (4.46)
先验分布p(x)与观测值y无关。然而,有时根据感知到的数据调整我们的先验假设是有用的,比如关于我们要估计的场的平滑性。这种做法是否从概率角度合理,我们将在解释新模型后讨论。
考虑一个交互式图像分割系统,如博伊科夫和芬卡-利(2006)所描述的那样。在这个应用中,用户绘制前景和背景轮廓,系统随后解决一个二值MRF标记问题,以估计前景对象的范围。除了最小化数据项,该数据项衡量像素颜色与推断区域分布之间的逐点相似性(第4.3.2节),MRF还被修改,使得图4.12和公式(4.42)中的平滑项sx(x,y)和sy(x,y)依赖于相邻像素之间的梯度大小。7
由于平滑项现在依赖于数据,贝叶斯规则(4.46)不再适用。相反,我们使用后验分布p(xjy)的直接模型,其负对数似然可以表示为
E (xjy) = ED (x, y) + ES (x, y)
(4.47)
使用(4.45)中引入的符号。由此产生的概率分布称为条件随机场(CRF),最初由库马尔和赫伯特(2003)引入计算机视觉领域,基于拉弗蒂、麦考尔姆和佩雷拉(2001)在文本建模方面的早期工作。
图4.17显示了一个图形模型,其中平滑项取决于数据值。在这个特定的模型中,每个平滑项仅取决于其相邻的一对数据值,即,项的形式为Vp,q(xp,xq,yp,yq),如公式(4.47)所示。
根据输入数据修改平滑项的想法并不新鲜。例如,Boykov和Jolly(2001)将这一想法用于交互式分割,现在它被广泛应用于图像分割(第4.3.2节)(Blake、Rother等人,2004;Rother、Kolmogorov和Blake,2004),去噪(Tappen、Liu等人,2007)和物体识别(第6.4节)(Winn和Shotton,2006;Shotton、Winn等人,2009)。
7 Poggio、Gamble和Little(1988)提出了一种替代方案,该方案同样使用检测到的边缘来调节深度或运动场的平滑度,从而整合多个较低层次的视觉模块。
图4.17条件随机场(CRF)的图形模型。附加的绿色
边缘显示了感知数据组合如何影响底层MRF先验模型的平滑性,即公式(4.42)中的sx(i,j)和sy(i,j)依赖于相邻的d(i,j)值。这些额外的链接(因素)使得平滑性能够依赖于输入数据。然而,这使得从这个MRF中采样变得更加复杂。
在立体匹配中,鼓励视差不连续性与强度边缘相吻合的想法可以追溯到优化和基于MRF的算法的早期(Poggio、Gamble和Little1988;Fua1993;Bobick和Intille1999;Boykov、Veksler和Zabih2001),并在(第12.5节)中进行了更详细的讨论。
除了使用适应输入数据的平滑项外,库马尔和赫伯特(2003)还为每个Vp(xp,y)项计算了一个邻域函数,如图4.18所示,而不是使用图4.12.8中所示的经典一元MRF数据项Vp(xp,yp)。因为这样的邻域函数可以被视为判别函数(机器学习中广泛使用的术语(Bishop 2006)),他们将由此产生的图形模型称为判别随机场(DRF)。在他们的论文中,库马尔和赫伯特(2006)表明,在结构检测和二值图像去噪等应用中,DRFs优于类似的CRFs。
在这里,有人可能会认为之前的立体对应算法也考虑了输入数据的邻域,无论是显式地,因为它们计算相关度量(Criminisi,Cross等人2006)作为数据项,还是隐式地,因为即使是像素级视差成本也会查看左图或右图中的多个像素(Barnard 1989;Boykov,Veksler和Zabih 2001)。
那么使用条件或判别有什么优缺点呢
8 Kumar和Hebert(2006)将一元势能Vp(xp;y)称为关联势能,将成对势能Vp;q(xp;y q;y)称为相互作用势能。
图4.18辩别随机场(DRF)的图形模型。额外的绿色边表示感知数据的组合,例如d(i,j + 1),如何影响f(i,j)的数据项。因此,生成模型更为复杂,即我们不能简单地对未知变量应用一个函数并添加噪声。
随机场而不是MRF?
经典贝叶斯推断(MRF)假设数据的先验分布与测量无关。这很有道理:如果你第一次掷骰子时看到一对六,那么假设之后每次都会出现六是不明智的。然而,如果你长时间玩后发现统计上的显著偏差,你可能需要调整你的先验。CRF实质上就是根据观察到的数据选择或修改先验模型。这可以看作是对额外隐藏变量或未知量(如标签、深度或干净图像)与已知量(观察到的图像)之间的相关性进行部分推断。
在某些情况下,CRF方法非常合理,实际上是唯一可行的途径。例如,在灰度图像着色(第4.2.4节)(Levin、Lischinski和Weiss 2004)中,一种常见的方法是通过修改局部平滑约束来将连续性信息从输入的灰度图像传递到未知的颜色图像。同样地,在同时进行分割和识别时(Winn和Shotton 2006;Shotton、Winn等2009),允许强烈的颜色边缘以增加语义图像标签不连续性的可能性是非常合理的。
在其他情况下,如图像去噪,情况更为微妙。使用非二次(鲁棒)平滑项,如公式(4.42)所示,其定性作用类似于基于高斯MRF(GMRF)中的局部梯度信息来设置平滑度(Tappen,Liu等,2007;Tanaka和Okutomi,2008)。当平滑度能够正确推断时,高斯MRF的优势在于可以最小化由此产生的二次能量。
图4.19使用全连接CRF进行像素级分类,来自©Kr......ahenbuhl和Koltun(2011)。每列中的标签描述了正在运行的图像或算法,包括一个强大的Pn CRF (Kohli、Ladick和Torr 2009)和一个非常慢的MCMC优化算法。
在单一步骤中,即通过求解一组稀疏线性方程。然而,在输入数据中不连续性不是显而易见的情况下,例如分段平滑的稀疏数据插值(Blake和Zisserman 1987;Terzopoulos 1988),经典的鲁棒平滑能量最小化可能更为合适。因此,与大多数计算机视觉算法一样,需要仔细分析当前问题以及所需的鲁棒性和计算限制,以选择最佳技术。
或许,正如库马尔和赫伯特(2006)、塔彭、刘等人(2007)以及布莱克、罗瑟等人(2004)所论述的那样,CRF和DRF最大的优势在于学习模型参数更加有原则性,有时也更容易。虽然在MRF及其变体中学习参数不是本书讨论的主题,但感兴趣的读者可以在库马尔和赫伯特(2006)、罗斯和布莱克(2007a)、塔彭、刘等人(2007)、塔彭(2007)以及李和胡滕洛赫(2008)的出版物中找到更多详细信息。
密集条件随机场(CRF)
与常规的马尔可夫随机场一样,条件随机场(CRF)通常定义在小邻域上,例如图4.17所示的N4邻域。然而,图像通常包含较长距离的相互作用,例如,颜色相似的像素可能属于
相关类(图4.19)。为了模拟这种长距离交互,Kra......henbuhl和Koltun(2011)引入了他们称之为全连接CRF的模型,现在许多人称之为密集CRF。
与传统的条件随机场(4.47)一样,它们的能量函数由一元项和成对项组成
(4.48)
其中(p,q)求和现在是对所有像素对进行的,而不仅仅是相邻的像素。9 y表示随机场所依赖的输入(引导)图像。成对相互作用势具有受限形式
(4.49)
这是空间不变的标签兼容函数μ(xp,xq)和M个相同形式(3.37)的高斯核之和的产物,这些高斯核用于双边滤波和双边求解器。在他们的开创性论文中,Kra... ...hl和Koltunhenbu(2011)使用了两个核,第一个是类似于(3.37)的外观核,第二个是仅空间平滑核。
由于长程相互作用势的特殊形式,它将所有空间和颜色相似性项封装成双边形式,可以使用类似于快速双边滤波器和求解器中使用的高维滤波算法(Adams,Baek,和Davis 2010)来高效计算后验条件分布的平均场近似(Kra... ...hl和Koltunhenbu2011)。图4.19显示了他们的结果(最右一列)与先前方法的比较,包括使用简单的单项式,a
稳健的CRF(Kohli,Ladick和Torr2009),以及非常慢的MCMC(马尔可夫链蒙特卡洛
Carlo)推理算法。如您所见,全连接CRF与平均场求解器相结合,在很短的时间内就能产生显著更好的结果。
自本文发表以来,原作者(Kra等人)已经开发出可证明收敛和更有效的推理算法。 ...hl和Koltunhenbu2013)和其他人(Vineet,Warrell,和Torr2014;Desmaison,Bunel等人2016)。密集CRF在图像分割问题中得到了广泛应用,同时也作为深度神经网络的“清理”阶段,如陈、Papandreou等人(2018)广受引用的DeepLab论文所示。
9在实践中,与双边滤波和双边求解器一样,空间范围可能超过一个大但有限的区域。
图像分割算法的目标是将具有相似外观(统计特征)的像素聚类,并使不同区域之间的像素边界长度较短且跨越可见的不连续点。如果我们限制边界测量仅在相邻像素之间进行,并通过累加像素来计算区域隶属度统计,就可以将其表述为经典的基于像素的能量函数,可以使用变分形式(第4.2节)或二值马尔可夫随机场(第4.3节)。
连续方法的例子包括穆姆福德和沙(1989)、陈和维斯(2001)、朱和尤尔(1996)以及塔布和阿胡贾(1997),还有第7.3.2节中讨论的水平集方法。早期的一个离散标记问题的例子是勒克莱尔(1989)的工作,他结合了基于区域和边界的能量项,使用最小描述长度(MDL)编码来推导最小化的能量函数。博伊科夫和芬卡-利(2006)对各种基于能量的技术进行了精彩的综述,用于二值对象分割,其中一些技术我们在下面会讨论。
正如我们在本章前面所看到的,与分割问题相对应的能量可以写成(参见公式(4.24)和(4.35–4.42))
(4.50)
区域项
ER(i,j)= C(I(i,j);R(f(i,j))) (4.51)
是像素强度(或颜色)I(i,j)与区域R(f(i,j))的统计量一致的负对数似然和边界项
EP(i,j)= sx(i,j)δ(f(i,j),f(i + 1,j))+ sy(i,j)δ(f(i,j),f(i,j + 1))(4.52)
测量由局部水平和垂直平滑项sx (i,j)和sy (i,j)调制的N4邻居之间的不一致性。
区域统计可以是简单的平均灰度或颜色(Leclerc 1989),在这种情况下
C(I; μk ) = ⅡI - μk Ⅱ2 . (4.53)
或者,它们可以更复杂,例如区域强度直方图(Boykov和Jolly 2001)或颜色高斯混合模型(Rother、Kolmogorov和Blake 2004)。对于平滑度(边界)项,通常使平滑度强度sx(i,j)与局部边缘强度成反比(Boykov、Veksler和Zabih 2001)。
最初,基于能量的分割问题使用迭代梯度下降技术进行优化,这种方法速度慢,容易陷入局部最小值。
图4.20 GrabCut图像分割(Rother,Kolmogorov和Blake 2004)©2004 ACM:(a)用户用红色绘制边界框;(b)算法猜测物体和背景的颜色分布并进行二值分割;(c)重复此过程,使用更好的区域统计信息。
Jolly(2001)是第一个将Greig、Porteous和Seheult(1989)开发的二进制MRF优化算法应用于二进制对象分割。
在这种方法中,用户首先使用图像画笔在背景和前景区域勾勒出像素。这些像素随后成为连接S-T图节点与源点和汇点标签S和T的种子。种子像素还可以用于估计前景和背景区域的统计特性(如强度或颜色直方图)。
图中其他边的能力源自区域和边界能量项,即与前景或背景区域更兼容的像素会获得更强的连接到相应的源或汇;相邻像素若平滑度更高也会获得更强的链接。一旦使用多项式时间算法(Goldberg和Tarjan 1988;Boykov和Kolmogorov 2004)解决了最小割/最大流问题,计算出的割两侧的像素将根据它们仍连接的源或汇进行标记。尽管图割只是已知用于MRF能量最小化的几种技术之一,但它仍然是解决二进制MRF问题最常用的方法。
博伊科夫和乔利(2001)的基本二值分割算法已在多个方向上得到了扩展。罗瑟、科尔莫戈罗夫和布莱克(2004)的GrabCut系统通过迭代重新估计区域统计信息,这些统计信息在颜色空间中被建模为高斯混合模型。这使得他们的系统能够在最少用户输入的情况下运行,例如单个边界框(图4.20a)——背景颜色模型从框轮廓周围的像素条初始化。(前景颜色模型从内部像素初始化,但很快收敛到更准确的对象估计。)用户还可以放置额外的笔画以在解决方案过程中细化分割。崔、杨等人(2008)利用从类似对象的先前分割中派生的颜色和边缘模型来改进GrabCut中使用的局部模型。图割算法和其他变体的马尔可夫和条件
图4.21使用有向图切割进行分割(Boykov和Funka-Lea 2006)©2006斯普林格:(a)有向图;(b)带有种子点的图像;(c)无向图错误地沿亮物体继续边界;(d)有向图正确地将浅灰色区域与其较暗的背景分离。
随机场已应用于语义分割问题(Shotton,Winn等人,2009年;Kra... ...hl和Koltunhenbu2011),图4.19给出了一个例子,我们将在第6.4节中详细研究。
另一个对原始二值分割公式的主要扩展是增加了有向边,这使得边界区域可以被定向,例如,偏好从亮到暗的过渡或反之(Kolmogorov和Boykov 2005)。图4.21显示了一个例子,其中有向图割正确地将浅灰色肝脏与其深灰色背景分离。同样的方法也可以用于测量从一个区域流出的通量,即垂直于区域边界的带符号梯度投影。结合有向图和更大的邻域,可以在全局最优图割框架中近似解决连续问题,这些问题传统上是通过水平集来解决的(Boykov和Kolmogorov 2003;Kolmogorov和Boykov 2005)。
基于图切割的分割技术的最新发展包括添加连通性先验以强制前景处于一个整体(Vicente、Kol- mogorov和Rother 2008),以及添加形状先验以在分割过程中利用对象形状的知识(Lempitsky和Boykov 2007;Lempitsky、Blake和Rother 2008)。
虽然优化二进制MRF能量(4.50)需要使用组合优化技术,如最大流,但可以通过将二进制能量项转换为定义在连续[0;1]随机场上的二次能量项来获得近似解,这随后成为一个基于经典膜的正则化问题(4.24–4.27)。所得的二次能量函数可以使用标准线性系统求解器(4.27–4.28)求解,但如果速度是关键因素,则应使用多重网格或一种
(附录A.5)的变体。一旦计算出连续解,就可以在0.5处进行阈值处理,从而得到二进制分割。
[0;1]连续优化问题也可以解释为计算每个像素处随机行走者最终到达标记种子像素的概率,这等同于在电阻网格中计算势能,其中电阻等于边权重(Grady2006;Sinop和Grady2007)。K轴分割也可以通过迭代种子标签来计算,使用一个二进制问题,其中一个标签设置为1,其余所有标签设置为0,以计算每个像素的相对隶属概率。后续工作中,Grady和Ali(2008)利用线性系统特征向量的预计算,使得基于一组新颖种子的解决方案更快,这与第10.4.3节中提出的拉普拉斯遮罩问题有关(Levin,Acha,和Lischinski2008)。Couprie、Grady等人(2009)将随机行走者与分水岭和其他分割技术联系起来。Singaraju、Grady和Vidal(2008)增加了有向边约束,以支持通量,从而使能量部分呈分段二次,因此无法作为单个线性系统求解。随机行走者算法还可以用于解决Mumford-Shah分割问题(Grady和Alvino2008),并计算快速多网格解(Grady2008)。Singaraju、Grady等人(2011)对这些技术进行了很好的综述。
一种更快的方法是计算0和1种子区域之间的加权测地距离(Bai和Sapiro 2009),这种方法也可以用于估计软阿尔法遮罩(第10.4.3节)。克里米尼西、夏普和布雷克(2008)提出的一种相关方法可用于快速找到一般二值马尔可夫随机场优化问题的近似解。
4.4 其他阅读材料
散点数据插值和逼近技术是应用数学多个分支的基础。一些优秀的入门书籍和文章包括阿米德罗(2002)、温德兰(2004)和安吉奥、刘易斯和皮金(2014)。这些技术还与计算机图形学中的几何建模技术密切相关,后者仍然是一个非常活跃的研究领域。法林(2002)提供了一篇关于曲线和曲面基本样条技术的精彩介绍,而彼得斯和赖夫(2008)则涵盖了使用细分曲面的更近期方法。
数据插值和近似也是回归技术的核心,它们构成了我们在下一章学习的大多数机器学习技术的数学基础。你可以找到关于这个主题的良好介绍(以及欠拟合、过拟合、
以及经典机器学习(Bishop2006;Hastie,Tibshirani和Friedman2009;Murphy2012;Deisenroth,Faisal和Ong2020)和深度学习(Goodfellow,Bengio和Courville 2016;Glassner 2018;Zhang,Lipton等人2021)中的模型选择)。
稳健的数据拟合也是大多数计算机视觉问题的核心。虽然在本章中有所介绍,但在附录B.3中也有回顾。关于稳健拟合和统计的经典教科书和文章包括Huber(1981)、Hampel、Ronchetti等人(1986)、Black和Rangarajan(1996)、Rousseeuw和Leroy(1987)以及Stewart(1999)。Barron(2019)的最新论文统一了许多常用的稳健势函数,并展示了它们如何在机器学习应用中使用。
计算机视觉问题的正则化方法最初由Poggio、Torre和Koch(1985)以及Terzopoulos(1986a,b,1988)引入视觉领域,至今仍是解决低级视觉问题的流行框架(Ju、Black和Jepson 1996;Nielsen、Florack和Deriche 1997;Nordstrom 1990;Brox、Bruhn等人2004;Levin、Lischinski和Weiss 2008)。更详细的数学处理和更多应用可以在应用数学和统计学文献中找到(Tikhonov和Arsenin 1977;Engl、Hanke和Neubauer 1996)。
变分公式在低级计算机视觉任务中得到了广泛应用,包括光流(Horn和Schunck 1981;Nagle和Enkelmann 1986;Black和Anandan 1993;Alvarez、Weickert和Snchez 2000;Brox、Bruhn等2004;Zach、Pock和Bischof 2007a;Wedel、Cremers等2009;Werpberger、Pock和Bischof 2010)、分割(Kass、Witkin和Terzopoulos 1988;Mumford和Shah 1989;Caselles、Kimmel和Sapiro 1997;Paragios和Deriche 2000;Chan和Vese 2001;Osher和Paragios 2003;Cremers 2007)、去噪(Rudin、Osher和Fatemi 1992)、立体(Pock、Schoenemann等2008)、多视图立体(Faugeras和Keriven 1998;Yezzi和Soatto 2003;Pons、Keriven和Faugeras 2007;Labatut、Pons和Keriven 2007;Kolev、Klodt等2009)和场景流(Wedel、Brox等2011)。
关于马尔可夫随机场的文献浩如烟海,其中许多与优化和控制理论相关的出版物,视觉从业者甚至很少了解。一本很好的技术指南是布莱克、科利和罗瑟(2011)编辑的书。其他包含良好文献综述或实验比较的文章包括博伊科夫和芬卡-莱亚(2006)、泽利斯基、扎比等人(2008)、库马尔、维克斯勒和托尔(2011)以及卡佩斯、安德烈斯等人(2015)。马尔可夫随机场只是图形模型这一更广泛主题的一个版本,该主题在多本教科书和综述中有所涉及,包括毕晓普(2006,第8章)、科勒和弗里德曼(2009)、诺沃津和兰珀特(2011)以及墨菲(2012,第10、17、19章)。
关于马尔可夫随机场的开创性论文是Geman和Geman(1984)的工作,
谁将这一形式主义介绍给计算机视觉研究者,并引入了线过程的概念,即额外的二进制变量用于控制是否施加平滑惩罚。Black和Rangarajan(1996)展示了如何用稳健的成对势函数替代独立的线过程;Boykov、Veksler和Zabih(2001)开发了迭代二进制图割算法以优化多标签马尔可夫随机场;Kolmogorov和Zabih(2004)描述了这些技术所需的一类二进制能量势函数;Freeman、Pasztor和Carmichael(2000)推广了循环信念传播在MRF推理中的应用。更多参考文献可在第4.3节和4.3.2节以及附录B.5中找到。
基于连续能量(变分)的交互式分割方法包括Leclerc(1989)、Mumford和Shah(1989)、Chan和Vese(2001)、Zhu和Yuille(1996)和Tabb
以及Ahuja(1997)。这类问题的离散变体通常使用二进制图割或其他组合能量最小化方法进行优化(Boykov和Jolly 2001;Boykov和Kolmogorov 2003;Rother、Kolmogorov和Blake 2004;Kolmogorov和Boykov 2005;Cui、Yang等人2008;Vicente、Kolmogorov和Rother 2008;Lempitsky和Boykov 2007;Lempitsky、Blake和Rother 2008),尽管也可以使用连续优化技术后接阈值处理(Grady 2006;Grady和Ali 2008;Singaraju、Grady和Vidal 2008;Criminisi、Sharp和Blake 2008;Grady 2008;Bai和Sapiro 2009;Couprie、Grady等人2009)。Boykov和Funka-Lea(2006)对基于能量的各种二值对象分割技术进行了很好的综述。
4.5 练习
例4.1:数据拟合(散点数据插值)。从一个平滑变化的函数中生成一些随机样本,然后实现并评估一种或多种数据插值技术。
1.通过将少量随机振幅和频率或尺度的正弦波或高斯函数相加,生成“随机”一维或二维函数。
2.在几十个随机位置测试此函数。
3.使用第4.1节中描述的一个或多个散点数据插值技术,将函数拟合到这些数据点。
4.在一组设定的位置上测量估计函数和原始函数之间的拟合误差,例如,在规则网格或不同的随机点上。
5.手动调整拟合算法可能需要的任何参数,以最小化输出样本拟合误差,或使用交叉验证等自动化技术。
6.用一组新的随机输入样本和输出样本位置重复此练习。最优参数是否发生变化,如果变化,变化了多少?
7.(可选)使用图像不同部分的不同随机参数生成分段平滑测试函数。数据拟合问题会变得多困难?您能想到缓解这种情况的方法吗?
尝试仅使用数组操作在NumPy(或Matlab)中实现你的算法,以便更熟悉数据并行编程和这些系统内置的线性代数运算符。使用图4.3-4.6中的数据可视化技术来调试你的算法并展示结果。
例4.2:图形模型优化。从OpenGM2库和基准测试网站http://hciweb2.iwr.uni-heidelberg.de/opengm下载并测试软件(Kappes,An-
dres等人(2015))。尝试将这些算法应用到你自己的问题上(分割、去噪等)。哪些算法更适合哪些问题?与我们在下一章研究的基于深度学习的方法相比,质量如何?
例4.3:图像去块——具有挑战性。现在你已经掌握了一些有效的方法来区分信号和噪声,开发一种技术以去除在高压缩设置下JPEG图像中出现的块状伪影(第2.3.3节)。你的方法可以简单到寻找块边界上的意外边缘,或者将量化步骤视为变换系数空间中凸区域到相应量化值的投影。
1.JPEG标头信息中提供的压缩系数知识是否有助于您更好地执行解块?请参阅Ehrlich、Lim等人(2020)关于此主题的最新论文。
2.因为量化发生在DCT变换后的YCbCr空间(2.116),在这种空间中进行分析可能更为合适。另一方面,图像先验在RGB空间中更有意义(或者不是吗?)。决定你将如何处理这一二元性,并讨论你的选择。
3.在进行此操作时,由于YCbCr转换之后是色度子采样阶段(在DCT之前),请查看是否可以使用本章讨论的较好的恢复技术之一来恢复一些丢失的高频色度信号。
4.如果你的相机有RAW + JPEG模式,你能接近无噪点的真实像素值吗?(这个建议可能没有那么有用,因为相机通常会使用相对高质量的设置来处理其RAW + JPEG模型。)
例4.4:去模糊中的推理——具有挑战性。写出图4.15中对应于非盲图像去模糊问题的图形模型,即在该问题中,模糊核事先已知。
你能想到什么样的高效的推理(优化)算法来解决这类问题?
Chapter 5 Deep Learning
5.1监督学习 239
5.1.1最近邻 241
5.1.2贝叶斯分类 243
5.1.3逻辑回归 248
5.1.4支持向量机 250
5.1.5决策树和森林 254
5.2无监督学习 257
5.2.1聚类 257
5.2.2K均值和高斯混合模型 259
5.2.3主成分分析 262
5.2.4流形学习 265
5.2.5半监督学习 266
5.3深度神经网络 268
5.3.1重量和层数 270
5.3.2激活函数 272
5.3.3正则化和归一化 274
5.3.4损失函数 280
5.3.5 Backpropagation 284
5.3.6培训和优化 287
5.4卷积神经网络 291
5.4.1池化和解池化 295
5.4.2应用:数字分类 298
5.4.3网络架构 299
5.4.4模型动物园 304
5.4.5可视化权重和激活 307
5.4.6对抗性示例 311
5.4.7自监督学习 312
5.5更复杂的模型 317
5.5.1三维CNN 317
5.5.2循环神经网络 321
5.5.3变压器 322
5.5.4生成模型 328
5.6其他阅读材料 336
5.7练习 337
图5.1机器学习与深度神经网络:(a)最近邻分类©Glassner(2018);(b)高斯核支持向量机(Bishop 2006)©2006斯普林格;(c)一个简单的三层网络©Glassner(2018);(d)SuperVision深度神经网络,由Matt Deitke提供(Krizhevsky、Sutskever和Hinton 2012);(e)网络准确率与规模及操作次数的关系(Canziani、Culurciello和Paszke 2017)©2017 IEEE;(f)网络特征可视化(Zeiler和Fergus 2014)©2014斯普林格。
机器学习技术在计算机视觉算法的发展中一直扮演着重要且往往是核心的角色。20世纪70年代,计算机视觉起源于人工智能、数字图像处理和模式识别(现称为机器学习)领域,我们领域的顶级期刊之一(《IEEE模式分析与机器智能汇刊》)至今仍保留着这一传统的印记。
图像处理、散点数据插值、变分能量最小化以及图形模型技术,在过去五十年中一直是计算机视觉中的重要工具。尽管机器学习和模式识别的元素也被广泛使用,例如用于微调算法参数,但它们真正崭露头角是在大规模标注图像数据集可用的情况下,如ImageNet (Deng,Dong等,2009;Russakovsky,Deng等,2015)、COCO (Lin,Maire等,2014)和LVIS (Gupta,Doll r,和Girshick,2019)。目前,深度神经网络是计算机视觉中最受欢迎和广泛使用的机器学习模型,不仅用于语义分类和分割,甚至用于低级任务,如图像增强、运动估计和深度恢复(Bengio
,LeCun,和Hinton,2021)。
图5.2展示了传统计算机视觉技术、机器学习算法和深度网络之间的主要区别。传统计算机视觉技术的所有处理阶段都是手工设计的;机器学习算法则将手工设计的特征传递给机器学习阶段;而深度网络则是直接从训练数据中学习所有算法组件,包括中间表示。
我们以经典机器学习方法的概述开始本章,如最近邻、逻辑回归、支持向量机和决策森林。这是一个广泛而深入的主题,我们仅简要总结主要流行的方法。关于这些技术的更多细节可以在相关教科书中找到,包括Bishop(2006)、Hastie、Tibshirani和Friedman(2009)、Murphy(2012)、Criminisi和Shotton(2013)以及Deisenroth、Faisal和Ong(2020)的著作。
本章的机器学习部分主要集中在分类任务中的监督学习上,在这种情况下,我们得到一组输入{xi },这些输入可能是从输入图像中提取的特征,并且与相应的类别标签(或目标){ti}配对,这些标签来自一组类别{Ck }。大多数用于监督分类的技术可以轻松扩展到回归,即将输入{xi }与实数值标量或向量输出{yi }关联起来,这在第4.1节中已经讨论过。我们还探讨了一些无监督学习的例子(第5.2节),在这种情况下没有标签或输出,以及半监督学习,其中仅提供样本子集的标签或目标。
图5.2传统、机器学习和深度学习管道,受古德-福尔德、本吉奥和库维尔(2016,图1.5)启发。在经典的视觉管道中,如结构从运动中提取特征,特征和算法都是传统上手工设计的(尽管可以使用学习技术,例如设计更可重复的特征)。经典机器学习方法采用提取的特征,利用机器学习构建分类器。深度学习管道则从像素开始到输出,通过端到端训练(由向后的虚线箭头表示)微调模型参数,从而学习整个管道。
本章的后半部分重点讨论深度神经网络,这些网络在过去十年中已成为大多数计算机视觉识别和低级视觉任务的首选方法。我们首先介绍构成深度神经网络的基本元素,包括权重和激活函数、正则化项以及使用反向传播和随机梯度下降进行训练的方法。接下来,我们将介绍卷积层,回顾一些经典架构,并讨论如何预训练网络及其性能可视化。最后,我们简要提及更高级的网络,如三维和时空模型,以及递归和生成对抗网络。
因为机器学习和深度学习是如此丰富而深入的主题,本章仅简要总结了一些主要概念和技术。关于经典机器学习的综合著作包括Bishop(2006)、Hastie、Tibshirani和Friedman(2009)、Murphy(2012)以及Deisenroth、Faisal和Ong(2020),而专注于深度学习的教科书则包括Goodfellow、Bengio和Courville(2016)、Glassner(2018)、Glassner(2021),
图5.3在监督学习中,使用配对的训练输入和标签来估计能够最好地预测标签的模型参数。运行时,模型参数(通常)被冻结,然后将模型应用于新输入以生成所需的输出。©张,Lipton et al(2021,图1.3)
以及Zhang、Lipton等人(2021)。
5.1 监督学习
机器学习算法通常被分类为监督型或非监督型,其中监督型是将配对的输入和输出提供给学习算法(图5.3),而非监督型是提供统计样本而没有相应的标记输出(第5.2节)。
如图5.3所示,监督学习涉及将输入对{xi }及其对应的输出值{ti }输入到学习算法中,该算法调整模型参数,以最大化模型预测与目标输出之间的吻合度。输出可以是来自类别集合{Ck }的离散标签,也可以是一组连续的、可能为向量值的数值,我们用yi来区分这两种情况。第一种任务称为分类,因为我们试图预测类别归属;而第二种任务称为回归,因为历史上,根据数据拟合趋势被称为回归(第4.1节)。
经过训练阶段,在此期间所有训练数据(标记的输入-输出对)都已处理完毕(通常通过多次迭代完成),训练好的模型现在可以用于预测以前未见过的输入的新输出值。这一阶段常被称为测试阶段,尽管这有时会误导人们过分关注特定测试集上的表现,而不是构建一个能够稳健应对可能出现的任何合理输入的系统。
在本节中,我们更多地关注分类问题,因为我们已经在前一章讨论了一些更简单的(线性和核)回归方法。计算机视觉中最常见的分类应用之一是语义图像分类,即我们希望为整个图像(或预设部分)标注其最可能的语义类别,例如马、猫或汽车(第6.2节)。这是深度网络(第5.3-5.4节)最初开发的主要应用。然而,近年来,这些网络也被应用于连续像素标注任务,如语义分割、图像去噪以及深度和运动估计。更复杂的任务,如目标检测和实例分割,将在第6章中介绍。
在我们开始回顾传统的监督学习技术之前,应该更正式地定义一下系统试图学习的内容,即“最大化模型预测与目标输出之间的一致性”是什么意思。最终,就像任何其他计算机算法一样,在不确定、嘈杂和/或不完整的数据下偶尔会出错,我们也希望最大化其预期效用,或者相反,最小化其预期损失或风险。这是决策理论的主题,相关内容在机器学习教科书中有所详细解释(Bishop 2006,第1.5节;Hastie、Tibshirani和Friedman 2009,第2.4节;Murphy 2012,第6.5节;Deisenroth、Faisal和Ong 2020,第8.2节)。
我们通常无法获得输入的真实概率分布,更不用说输入与相应输出的联合分布了。因此,我们经常使用训练数据分布作为现实世界分布的代理。这种近似被称为经验风险最小化(参见上述关于决策理论的引用),其中预期风险可以通过以下方式估计:
(5.1)
损失函数L衡量的是在输入xi和模型参数w对应的目标值yi时,预测输出f(xi;w)的“成本”。
这个公式现在应该相当熟悉了,因为它与我们在前一章(4.2;4.15)中介绍的回归公式相同。在那些情况下,成本(惩罚)是目标输出yi和模型f(xi;w)预测输出之间的差异的简单二次或稳健函数。在某些情况下,我们可能希望损失函数能够模拟特定的预测不对称性。例如,在自主导航中,通常高估最近障碍物的距离,可能导致碰撞,其代价比保守地低估要大得多。我们将看到更多关于损失函数的例子。
本章后面部分,包括第5.1.3节关于贝叶斯分类(5.19–5.24)和第5.3.4节关于神经网络损失(5.54–5.56)。
在分类任务中,通常会尽量减少误分类率,即使用一个与类别无关的delta函数来等量惩罚所有类预测错误(Bishop2006,第1.5.1–1.5.2节)。然而,不对称性常常存在。例如,在医学领域,产生假阴性诊断的成本往往高于假阳性诊断的成本,后者可能需要进一步检查。我们将在第7.1.3节中更详细地讨论真阳性和假阳性、阴性以及错误率。
数据预处理
在我们开始回顾广泛使用的机器学习技术之前,应该提到通常最好对输入数据进行中心化、标准化处理,如果可能的话,还要白化(Glassner2018,第10.5节;Bishop2006,第12.1.3节)。特征向量的中心化意味着减去它们的均值,而标准化则意味着重新缩放每个分量,使其方差(与均值的平方距离的平均值)为1。
美白是一个计算成本较高的过程,涉及计算输入的协方差矩阵,取其奇异值分解,然后旋转坐标系,使最终维度不相关且具有单位方差(在高斯模型下)。虽然这可能对低维输入非常实用和有帮助,但对于大量图像集来说,可能会变得极其昂贵。(但请参见第5.2.3节关于主成分分析的讨论,在该部分中,它可能是可行且有用的。)
有了这个背景,我们现在把注意力转向一些广泛使用的监督学习技术,即最近邻、贝叶斯分类、逻辑回归、支持向量机和决策树和森林。
最近邻是一种非常简单的非参数技术,即不涉及底层分布的低参数解析形式。相反,所有训练样本都被保留,在评估时找到“最近”的k个邻居,然后取平均值以生成输出。3
图5.4显示了k的各种值的简单图形示例,即使用
从k = 1最近邻一直到找到k = 25最近邻并选择
图5.4最近邻分类。为了确定星(★)测试样本的类别,我们找到k个最近邻并选择最流行的类别。此图显示了k = 1、9和25个样本的结果。©Glassner(2018)
图5.5对于噪声(混合)数据,选择过小的k值会导致不规则的决策面。选择过大的k值可能导致小区域缩小或消失。©Glassner(2018)
将计数最高的类别作为输出标签。如您所见,改变邻居的数量会影响最终的类别标签,从红色变为蓝色。
图5.5展示了以另一种方式改变邻居数量的效果。图的左半部分显示了初始样本,这些样本分为蓝色或橙色两类。可以看出,训练样本高度混合,即没有明确(合理的)边界能够正确地标记所有样本。图的右侧显示了当k值从1到50变化时,k-NN分类器的决策边界。当k太小时,分类器的行为非常随机,即过度拟合训练数据(第4.1.2节)。随着k值增大,分类器欠拟合(过度平滑)数据,导致两个较小区域的收缩。选择最佳最近邻数量k是该算法的一个超参数。确定合适值的技术包括交叉验证,我们在第4.1.2节中讨论过。
虽然最近邻是一种相当粗暴的机器学习技术(尽管
科弗和哈特(1967)证明,在大样本极限下,这种方法在统计上是最优的),但在许多计算机视觉应用中仍然有用,例如大规模匹配和索引(第7.1.4节)。然而,随着样本数量的增加,必须使用高效技术来找到(精确或近似)最近邻。在通用计算机科学和更专业的计算机视觉领域,已经开发出了寻找最近邻的良好算法。
穆贾和洛(2014)开发了一个快速近邻库(FLANN),该库汇集了多个先前开发的算法,并被纳入OpenCV。该库实现了几种强大的近邻算法,包括随机k-树(西尔帕-阿南和哈特利2008年)、优先搜索k均值树、近邻算法(弗里德曼、本特利和芬克尔1977年)以及局部敏感哈希(LSH)(安多尼和因迪克2006年)。他们的库可以根据数据索引的特性,实证确定使用哪种算法及其参数。
最近,Johnson、Douze和J gou(2021)开发
了支持GPU的Faiss库,用于扩展相似性搜索(第6.2.3节),支持数十亿个向量。该库基于乘积量化(J gou、Douze和Schmid 2010),作者证明其在Faiss库开发的大规模数据集上表现
优于LSH (Gordo、Perronnin等2013)。
对于一些简单的机器学习问题,例如,如果我们有一个特征构建和噪声的解析模型,或者我们可以收集足够的样本,我们就可以确定每个类别的特征向量的概率分布p(xjCk)以及先验类别似然p(Ck)。根据贝叶斯规则(4.33),给定特征向量x(图5.6)时,类别Ck的似然值由下式给出:
图5.6一个例子,展示了两个类条件密度p(儿|Ck)以及相应的后验类别概率p(Ck|儿),这些可以通过贝叶斯规则获得,即通过除以两条曲线的总和(Bishop 2006)©2006斯普林格。垂直的绿色线是用于最小化误分类率的最佳决策边界。
其中,第二种形式(使用exp函数)被称为归一化指数或softmax函数。6该量
lk = log p(xjCk)+ log p(Ck) (5.4)
是样本x属于类别Ck的对数似然。有时,将softmax函数(5.3)表示为一个向量到向量的值函数是方便的,
p = softmax(l)。 (5.5)
软最大值函数可以看作是最大指示函数的软版本,当lk的最大值主导其他值时,它返回1。它在机器学习和统计学中被广泛使用,包括作为深度神经分类网络中的最终非线性函数(图5.27)。
使用公式(5.2)确定给定特征向量x的类Ck的可能性的过程被称为贝叶斯分类,因为它结合了条件特征似然p(xjCk)和类别p(Ck)的先验分布,使用贝叶斯规则来确定
图5.7红色显示的逻辑S型函数σ(l),以及虚线蓝色显示的缩放误差函数(Bishop2006)©2006 Springer。
后验类概率。在特征向量的分量是独立生成的情况下,即,
(5.6)
由此产生的技术被称为nave Bayes分类器。
对于二元(两类)分类任务,我们可以将(5.3)重写为
(5.7)
其中,l = l0 - l1是两个类别的对数似然的差异,被称为对数几率或logit。
σ(l)函数被称为逻辑S型函数(或简称逻辑函数或逻辑曲线),其中S型表示S形曲线(图5.7)。S型函数曾是早期神经网络中常用的激活函数,尽管现在已被其他函数所取代,具体讨论见第5.3.2节。
线性和二次判别分析
虽然基于归一化指数和sigmoid的概率生成分类可以应用于任何一组对数似然,但当分布是多维高斯时,公式变得简单得多。
对于具有相同协方差矩阵Σ的高斯分布,我们有
图5.8两个相同分布的高斯类别的逻辑回归(Bishop 2006)©2006斯普林格出版社:(a)红色和蓝色表示两个高斯分布;(b)后验概率p(C0 jx),以函数的高度和红色墨水的比例表示。
在两类(二分类)的情况下,我们得到(Bishop2006,第4.2.1节)
p (C0 jx) = σ(wTx + b), (5.9)
和
(5.11)
方程(5.9)在非生成性(判别性)分类(5.18)的背景下,我们将在稍后重新讨论,被称为逻辑回归,因为我们传递线性回归公式的输出
l (x) = wTx + b (5.12)
通过逻辑函数获得一个类别概率。图5.8在二维中说明了这一点,右侧显示红色类别的后验似然p(C0 jx)。
在线性回归(5.12)中,w起到权重向量的作用,我们沿着这个向量投影特征向量x,而b则充当偏置,决定了分类边界的设置位置。请注意,权重方向(5.10)与连接分布均值的向量(通过逆协方差Σ-1旋转坐标后)一致,而偏置项则与均值平方矩和对数类别先验比值log(p(C0)/p(C1))成正比。
图5.9二次判别分析(Bishop2006)©2006 Springer。当类协方差Σk不同,高斯分布之间的决策面变为二次面。
对于K > 2类,可以将softmax函数(5.3)应用于线性回归对数似然函数,
lk (x) = wx + bk , (5.13)
和
wk = Σ-1μk,以及 (5.14)
(5.15)
因为分类从一个类别转换到另一个类别的决策边界是线性的,
wk x + bk > wl x + bl , (5.16)
使用此类标准对示例进行分类的技术称为线性判别分析(Bishop2006,第4.1节;Murphy2012,第4.2.2节)。8
到目前为止,我们已经研究了所有类别协方差矩阵Σk都相同的案例。当它们在不同类别之间变化时,决策面不再是线性的,而是变得二次(图5.9)。这些二次决策面的推导被称为二次判别分析(Murphy2012,第4.2.1节)。
在高斯类分布不可用的情况下,我们仍然可以使用Fisher判别分析(Bishop2006,第4.1.4节;Murphy2012,第8.6.3节)找到最佳判别方向,如图5.10所示。这种分析在单独使用时非常有用。
图5.10 Fisher线性判别(Bishop2006)©2006 Springer。为了找到最佳分离两个类别的投影方向,我们计算两个类别协方差的总和,然后使用其逆矩阵来旋转两个类别均值之间的向量。
对不同类别内的变异性进行建模,例如不同人的外观变化(第5.2.3节)。
在上一节中,我们基于应用于多元高斯分布的后验概率推导了分类规则。然而,高斯分布通常不是我们类分布的合适模型,我们必须采用其他技术。
其中最简单的是逻辑回归,它应用了与前一节相同的想法,即线性投影到权重向量上,
li = w · xi + b (5.17)
pi = p(C0 jxi)= σ(li)= σ(wT xi + b) (5.18)
获取(二进制)类别概率。逻辑回归是判别模型的一个简单例子,因为它不构建或假设未知数的先验分布,因此不是生成性的,即我们无法从类别中生成随机样本(Bishop2006,第1.5.4节)。
由于我们不再有类平均值和协方差的分析估计(或者它们是类分布的劣质模型),我们需要其他方法来确定权重w和偏置b。我们通过最大化正确标签的后验对数似然函数来实现这一点。
对于二分类任务,令ti∈{0,1}为每个训练样本xi的类别标签,pi = p(C0 jx)为给定条件下由(5.18)预测的似然估计值。
权重和偏置(w,b)。我们可以通过最小化负对数似然,即交叉熵损失或误差函数,来最大化正确标签被预测的可能性
(Bishop2006,第4.3.2节)。9注意,每当标签ti = 0时,我们希望pi = p(C0 jxi)值较高,反之亦然。
这个公式可以很容易地扩展到多类损失,再次定义后验概率为每个类别的线性回归的归一化指数,如(5.3)和(5.13),
(5.20)
lik = wxi + bk . (5.21)
术语Zi = Σj exp lij可以作为推导中的一个有用的简写,有时也被称为分区函数。经过一些操作(Bishop2006,第4.3.4节),相应的多类交叉熵损失(a.k.a.多项式逻辑回归目标)变为
(5.22)
其中,1-of-K(或otherwise
).10)更常见的是简单地使用整数类值ti作为目标,在这种情况下,我们可以更简洁地重写它为
(5.23)
即,我们只是将每个训练样本的正确类别的对数似然相加。将softmax公式(5.20)代入这个损失函数,我们可以将其重写为
为了确定最佳权重和偏置集{wk;bk },我们可以使用梯度下降法,即使用牛顿-拉夫森二阶优化方案(Bishop 2006,第4.3.3节)更新它们的值,
w ← w - H-1▽E(w); (5.25)
其中,▽E是损失函数E关于权重变量w的梯度,H是E的二阶导数的海森矩阵。由于交叉熵函数在未知权重上不是线性的,我们需要多次迭代求解这个方程以获得一个好的解。因为H中的元素在每次迭代后都会更新,这种方法也被称为迭代重加权最小二乘法,我们将在第8.1.4节中详细讨论。虽然许多非线性优化问题存在多个局部最小值,但本节描述的交叉熵函数没有,因此我们可以保证找到唯一的解。
逻辑回归确实存在一些局限性,因此通常仅用于最简单的分类任务。如果特征空间中的类别不是线性可分的,使用简单的投影到权重向量上可能无法生成足够的决策面。在这种情况下,核方法(第4.1.1节和5.1.4节;Bishop 2006,第6章;Murphy 2012,第14章)可以测量新(测试)特征向量与选择的训练样本之间的距离,通常能提供良好的解决方案。
逻辑回归的另一个问题是,如果类别实际上是可分离的(无论是原始特征空间还是提升核空间),则可能存在多个独特的分离平面,如图5.11a所示。此外,除非进行正则化,否则权重w将继续增大,因为较大的wk值会导致较大的pik值(一旦找到分离平面),从而导致总体损失减小。
出于这个原因,我们讨论了将决策面以最大化其与标记示例的分离的方式放置的技术。
正如我们刚才提到的,在某些逻辑回归的应用中,我们无法确定一个单一的最佳决策面(即权重和偏置向量{wk;bk }在公式(5.21)中的选择),因为特征空间中存在多个平面可以引入。请参见图5.11a,其中两个类别分别用青色和洋红色表示。除了两条虚线和一条实线外,还有无数条其他直线也能干净地分离这两个类别,包括一系列水平线。由于这些直线中的任何一条的分类错误都是零,那么如何选择最佳决策面呢?考虑到我们只有有限数量的训练样本,以及实际运行时的例子
图5.11 (a)支持向量机(SVM)找到最大化与最近训练样本距离的线性决策面(超平面),这些训练样本被称为支持向量©Glassner(2018)。(b)一个二维二分类的例子,高斯核支持向量机(Bishop2006)©2006斯普林格。红色和蓝色的×表示训练样本,绿色圈出的样本是支持向量。黑色线条表示核回归函数的等值线,其中包含蓝色和红色支持向量的等值线表示士1等值线,中间的深色等值线则是决策面。
可能介于两者之间?
这个问题的答案是使用最大间隔分类器(Bishop2006,第7.1节),如图5.11a所示,虚线表示两个具有最大间隔的平行决策面,即它们之间的最大垂直距离。实线代表位于虚线之间等距的超平面,这就是最大间隔分类器。
为什么这是一个好主意?有几个潜在的推导(Bishop2006,第7.1节),但一个相当直观的解释是,可能存在我们尚未见过的青色和品红色类别的实际例子。在某些假设下,最大间隔分类器为我们提供了正确分类尽可能多这些未见过的例子的最佳选择。
为了确定最大间隔分类器,我们需要找到一个权重-偏置对(w;b),使得所有回归值li = w·xi + b(5.17)的绝对值至少为1,并且符号正确。为了更简洁地表示这一点,设
i = 2ti—1;i∈{—1;1} (5.26)
i (w · xi + b) ≥ 1. (5.27)
为了最大化利润,我们只需找到满足(5.27)的最小范数权重向量w,即求解优化问题
arg min ⅡwⅡ2 (5.28)
w;b
受(5.27)约束。这是一个典型的二次规划问题,可以使用拉格朗日乘数法求解,如Bishop (2006,第7.1节)所述。
不等式约束恰好满足,即它们在图5.11a中的两条虚线处变为等式,其中我们有li = wxi +b =士1。触碰虚线的圆圈点称为支持向量。对于一个简单的线性分类器,可以用单个权重和偏置对(w,b)表示,计算支持向量实际上没有实际优势,除了它们有助于我们估计决策面。然而,正如我们将要看到的,当我们应用核回归时,拥有少量的支持向量是一个巨大的优势。
如果两个类无法线性分离,实际上需要一个复杂的曲面才能正确分类样本,如图5.11b所示,该怎么办?在这种情况下,我们可以用核回归(4.3)替代线性回归,这在第4.1.1节中已经介绍过。我们不再将权重向量w与特征向量x相乘,而是将其与以数据点位置xk为中心的K个核函数值相乘,
(5.29)
这就是支持向量机真正发挥作用的地方。
不再需要对所有训练样本xk进行求和,一旦我们解决了最大间隔分类器的问题,只需保留一小部分支持向量,如图5.11b中圈出的十字所示。从图中可以看出,用深黑色线表示的决策边界很好地分离了红色和蓝色类别的样本。请注意,与其他核回归应用一样,径向基函数的宽度仍然是一个自由的超参数,必须合理调整以避免欠拟合和过拟合。
图5.12用于重叠类别分布的支持向量机(Bishop2006)©2006斯普林格。(a)绿色圈出的点位于y = 1决策边界错误一侧,其惩罚值为ξ = 1—y > 0。(b)支持向量机中使用的“铰链”损失以蓝色显示,同时以红色显示的是重新缩放的逻辑回归损失函数,黑色表示误分类误差,绿色表示平方误差。
铰链损失。到目前为止,我们关注的是可分离的分类问题,即存在一个决策边界能够正确分类所有训练样本。支持向量机也可以应用于重叠(混合)类别分布(图5.12a),而之前我们是通过逻辑回归来处理这类问题的。在这种情况下,我们将不等式条件(5.27),即ili≥1,替换为铰链损失惩罚。
EHL(li,i)= [1—ili]+,[1—ili]+, (5.30)
其中[·]+表示正部分,即[x]+ = max(0,x)。图5.12b中以蓝色显示的铰链损失惩罚,在满足(先前)不等式时为0,并且根据不等式的违反程度线性增加。为了找到最优权重值(w,b),我们最小化正则化的铰链损失值之和,
图5.12b将铰链损失与公式(5.19)中的逻辑回归(交叉熵)损失进行了比较。铰链损失不对位于j lij > 1边界正确一侧的训练样本施加惩罚,而交叉熵损失则倾向于较大的绝对值。虽然在本节中我们主要关注了支持向量机的二分类版本,但Bishop (2006,第7章)描述了多类扩展以及高效的优化算法,如顺序最小优化(SMO)(Platt 1989)。此外,还有一个很好的
scikit-learn网站上的在线教程。12 Lampert(2008)对应用于计算机视觉的SVM和其他核方法进行了调查。
与本章迄今为止我们研究的大多数监督学习技术不同,这些技术一次性处理完整的特征向量(通过线性投影或与训练样本的距离),决策树则执行一系列更简单的操作,通常只是查看单个特征元素,然后决定下一步查看哪个元素(Hastie,Tibshirani和Friedman 2009,第17章;Glassner 2018,第14.5节;Criminisi,Shotton和Konukoglu 2012;Criminisi和Shotton 2013)。(请注意,我们在第6.3.1节中讨论的提升方法也使用类似的简单决策树。)尽管决策树在统计机器学习中已使用了几十年(Breiman,Friedman等1984),但其更强大的扩展——决策森林的应用直到十多年前才开始在计算机视觉领域获得关注(Lepetit和Fua 2006;Shotton,Johnson和Cipolla 2008;Shotton,Girshick等2013)。与支持向量机一样,决策树是判别分类器(或回归器),因为它们从未明确形成所分类数据的概率(生成)模型。
图5.13展示了决策树和随机森林的基本概念。在这个例子中,训练样本来自四个不同的类别,每个类别用不同的颜色表示(a).决策树(b)从上到下构建,通过选择每个节点上的决策,将到达该节点的训练样本进一步细分为更具体的(低熵)分布。每条链接的粗细显示了沿此路径分类的样本数量,链接的颜色则是通过该链接流动的类别颜色的混合。颜色直方图显示了几个内部节点处的类别分布。
随机森林(c)是通过构建一系列决策树来创建的,每棵树做出的决策略有不同。在测试(分类)时,新的样本会被随机森林中的每棵树分类,最终在叶子节点处的类别分布会被平均,从而提供比单个树(给定深度)更准确的答案。
随机森林有多个设计参数,可以用来调整其准确性、泛化能力以及运行时间和空间复杂度。这些参数包括:
每棵树的深度D,
图5.13决策树和森林(Criminisi和Shotton 2013)©2013斯普林格。左上角的(a)图显示了一组训练样本标签,用四种不同的颜色表示。右上角的(b)显示了一个单个决策树,在每个节点处都有一个类别的分布(根节点的分布与整个训练集相同)。在测试(c)时,每个新示例(特征向量)都会在根节点处进行测试,根据测试结果(例如,某个元素与阈值的比较),决定是否向下走至其子节点。这一过程会一直持续到达到具有特定类别分布的叶节点。在训练(b)时,选择的决策能够减少节点子节点处的熵(提高类别特异性)。底部的(c)图显示了三棵树的集成。当每个树对特定测试示例进行了分类后,所有组成树的叶节点的类别分布会被平均。
图5.14随机森林决策面(Criminisi和Shotton 2013)©2013斯普林格。图(a)和(b)显示了使用ρ = 500和ρ = 5随机假设在每个分裂节点获得的T = 400树森林之间的“噪声”量较小和较大。在每张图中,两行分别展示了不同深度(D = 5和13)的树,而列则显示了使用轴对齐或线性决策面(“弱学习器”)的效果。
ρ.节点构建时检查的样本数量。
仅通过查看所有训练示例的随机子集ρ,每个树最终在每个节点上都有不同的决策函数,因此可以对树的集合进行平均以产生更软的决策边界。
图5.14展示了这些参数对一个简单的四类二维螺旋数据集的影响。在这个图中,树的数量固定为T = 400。克里米尼西和肖顿(2013年,第4章)提供了更多参数变化效果的额外图表。该图的左半部分(a)和右半部分(b)分别显示了决策节点处随机性减少(ρ = 500)和增加(ρ = 5)的效果。较少的随机性会产生更清晰的决策面,但可能泛化能力较差。在每个2×2的图像网格中,上排显示的是较浅的D = 5树,而下排显示的是更深的D = 13树,这使得决策边界中的细节更加精细。(与所有机器学习一样,训练数据上的更好性能并不一定意味着更好的泛化能力,因为可能会出现过拟合。)最后,右列显示了如果轴向(单元素)决策被特征元素的线性组合所替代会发生什么。
当应用于计算机视觉时,决策树首先在关键点识别(Lepetit和Fua 2006)和图像分割(Shotton、Johnson和Cipolla 2008)领域产生了影响。它们是人类姿态估计从Kinect深度图像中取得突破性成功的关键因素之一(Shotton、Girshick等2013)。此外,决策树还推动了最先进的医学图像分割系统的发展(Criminisi、Robertson等2013),尽管这些系统现在已被深度神经网络所取代(Kamnitsas、Ferrante等2016)。大多数这些应用,以及其他一些应用,在Criminisi和Shotton编辑的书中都有详细回顾(2013)。
5.2 无监督学习
到目前为止,在本章中,我们主要关注了监督学习技术,即给定包含输入和目标示例对的训练数据。然而,在某些应用中,我们只有一组数据,希望对其进行特征描述,例如,观察是否存在任何模式、规律或典型分布。这通常是经典统计学的研究领域。在机器学习界,这种情况通常被称为无监督学习,因为样本数据没有标签。计算机视觉中的应用实例包括图像分割(第7.5节)以及人脸和身体识别与重建(第13.6.2节)。
在本节中,我们将探讨计算机视觉中一些更广泛使用的技术,即聚类和混合模型(例如用于分割)以及主成分分析(用于外观和形状建模)。还有许多其他技术可供选择,这些内容可以在机器学习教科书中找到,如Bishop (2006,第9章)、Hastie、Tibshirani和Friedman (2009,第14章)以及Murphy (2012,第1.3节)。
你可以用样本数据做的最简单的事情之一就是根据相似性(例如向量距离)将其分组。在统计学中,这个问题被称为聚类分析,是一个广泛研究的领域,有数百种不同的算法(Jain和Dubes 1988;Kaufman和Rousseeuw 1990;Jain、Duin和Mao 2000;Jain、Topchy等2004)。Murphy (2012,第25章)对聚类算法进行了很好的阐述,包括亲和传播、谱聚类、图拉普拉斯、层次聚类、凝聚聚类和分裂聚类。Xu和Wunsch(2005)的综述更为全面,涵盖了近300篇不同论文,涉及相似度度量、向量量化、混合模型、核方法、组合和神经网络算法以及可视化等主题。图5.15显示了
图5.15使用简化版https://scikit-learn.org/stable/auto examples/cluster/ plot cluster comparison.html#sphx-glr-auto-examples-cluster-plot-cluster-comparison-py.生成的一些玩具数据集上不同聚类算法的比较
将https://scikit-learn.org聚类分析包中实现的一些算法应用于一些简单的二维例子。
将图像分割成越来越细的区域(分割聚类)是计算机视觉中最古老的技术之一。奥兰德、普赖斯和雷迪(1978)提出了一种这样的技术,首先计算整个图像的直方图,然后找到最佳阈值以分离直方图中的大峰值。这一过程会重复进行,直到区域变得相对均匀或低于某个特定大小。更近期的分割算法通常优化某些区域内相似性和区域间差异性的度量。这些内容将在第7.5.3节和第4.3.2节中讨论。
区域合并技术也可以追溯到计算机视觉的初期。Brice和Fennema(1970)使用双网格来表示像素之间的边界并进行合并
根据相对边界长度和这些边界处可见边缘的强度来划分区域。
在数据聚类中,算法可以根据最接近点之间的距离(单链接聚类)、最远点之间的距离(完全链接聚类)或介于两者之间的距离(贾因、托普奇等人,2004年)将聚类连接起来。卡姆瓦尔、克莱因和曼宁(2002年)提供了这些算法的概率解释,并展示了如何在此框架内引入额外的模型。第7.5节讨论了此类凝聚聚类(区域合并)算法在图像分割中的应用。
均值移位(第7.5.2节)和模式查找技术,例如k均值和高斯混合,将与每个像素相关的特征向量(例如颜色和位置)建模为未知概率密度函数的样本,然后尝试在该分布中寻找聚类(模式)。
考虑图7.53a所示的彩色图像。仅凭颜色,你如何分割这幅图像?图7.53b展示了L*u*v*空间中的像素分布,这相当于忽略空间位置的视觉算法所看到的情况。为了简化可视化,我们只考虑L*u*坐标,如图7.53c所示。你看到了多少明显的(拉长的)聚类?你会如何找到这些聚类?
k-均值和高斯混合技术使用密度函数的参数模型来回答这个问题,即假设密度是由少量较简单的分布(例如高斯分布)叠加而成,这些分布的位置(中心)和形状(协方差)可以被估计。而均值漂移则平滑分布并找到其峰值以及每个峰值对应的特征空间区域。由于建模的是完整的密度,这种方法被称为非参数方法(Bishop2006)。
K-均值算法隐式地将概率密度建模为球对称分布的叠加,无需任何概率推理或建模(Bishop2006)。相反,该算法被赋予要找到的聚类数量k,并通过从输入特征向量中随机抽取k个中心点来初始化。然后,它根据最接近每个中心的样本迭代更新聚类中心的位置(图5.16)。此外,还开发了基于统计特性来分割或合并聚类中心的技术,以及加速寻找最近均值中心的过程(Bishop2006)。
在高斯混合模型中,每个聚类中心都通过一个协方差矩阵进行增强,该矩阵的值是从相应的样本中重新估计的(图5.17)。与使用近邻来关联输入样本和聚类中心不同,马氏距离(Ap-
图5.16 k均值算法从一组样本和所需聚类的数量开始(在这种情况下,k = 2)(Bishop2006)©2006 Springer。它迭代地将样本分配给最近的平均值,然后重新计算平均中心,直到收敛。
图5.17使用期望最大化(EM)的高斯混合模型(GMM)(Bishop2006)©2006 Springer。样本根据其马氏距离(逆协方差加权距离)被软性地分配到聚类中心,然后基于这些加权分配重新计算新的均值和协方差。
d(xi,μk;Σk)= Ⅱxi - μk ⅡΣk-1 =(xi - μk)T Σk-1(xi - μk) (5.32)
其中,xi是输入样本,μk是聚类中心,Σk是它们的协方差估计值。样本可以与最近的聚类中心相关联(一种硬分配成员身份),也可以软地分配给几个附近的聚类。
后一种更常用的方法对应于对高斯混合模型的参数进行迭代重新估计,
(5.33)
其中πk是混合系数,μk和Σk是高斯均值和协方差,以及
(5.34)
为正态(高斯)分布(Bishop2006)。
为了迭代计算未知混合参数{πk,μk,Σk }的(局部)最大似然估计,期望最大化(EM)算法(Shlezinger1968;Dempster,Laird,and Rubin1977)在两个交替阶段进行:
1.期望阶段(E步)估计责任
(5.35)是样本xi从第k个高斯聚类生成的可能性的估计值。
2.最大化阶段(M步)更新参数值
是分配给每个簇的样本点数的估计值。
Bishop(2006)对高斯混合估计和更一般的期望最大化主题进行了精彩的阐述。
在图像分割的背景下,Ma、Derksen等人(2007)对使用高斯混合进行分割进行了很好的回顾,并基于最小描述长度(MDL)编码开发了他们自己的扩展,他们表明这在Berkeley分割数据集上产生了良好的结果。
正如我们在混合分析中所看到的,用多元高斯模型对聚类中的样本进行建模是捕捉其分布的一种强有力的方法。不幸的是,随着我们样本空间的维度增加,估计完整的协方差很快变得不可行。
例如,考虑所有正面人脸的空间(Figure5.18)。对于由P个像素组成的图像,协方差矩阵的大小为P×P。幸运的是,完整的协方差通常不需要建模,因为可以使用主成分分析估计较低秩的近似值,如AppendixA.1.2所述。
PCA最初用于计算机视觉中,用于建模人脸,即特征脸,最初用于灰度图像(Kirby和Sirovich1990;Turk和Pentland1991),然后用于3D模型(Blanz和Vetter1999;Egger、Smith等人2020)(第13.6.2节)和主动外观模型(第6.2.4节),其中还用于建模面部形状变形(Rowland和Perrett1995;Cootes、Edwards和Taylor2001;Matthews、Xiao和Baker 2007)。
特征脸。特征脸依赖于Kirby和Sirovich(1990)首先观察到的,任意人脸图像x可以通过从平均图像m(Figure6.1b)开始,并添加少量缩放的带符号图像ui来压缩和重建,
(5.40)
签名基图像(图5.18b)可以通过主成分分析(也称为特征值分析或Karhunen—Love变换)从一组训练图像中得出。Turk和Pentland(1991)认识到,特征脸展开中的系数ai本身可以用来构建快速图像匹配算法。
图5.18使用特征脸进行面部建模和压缩(Moghaddam和Pentland 1997)©1997 IEEE: (a)输入图像;(b)前八个特征脸;(c)通过投影到该基底并压缩图像至85字节重建的图像;(d)使用JPEG (530字节)重建的图像。
更详细地说,我们从一组训练图像{xj }开始,从中计算平均图像m和一个散射或协方差矩阵
(5.41)
(5.42)
其中λi是C的特征值,ui是特征向量。对于一般图像,Kirby和Sirovich(1990)称这些向量为特征图像;对于人脸,Turk和Pentland(1991)称它们为特征脸(Figure5.18b).13
特征值分解的两个重要性质是,对于任何新的图像x,最优(最佳近似)系数ai可以计算为
ai = (x — m) · ui , (5.43)
并且,假设特征值{λi }按降序排列,在任何点M截断(5.40)给出的近似值,可以得到最佳的近似值(最小 x.图5.18c显示了与图5.18a对应的近似结果,并显示了它在压缩人脸
图像方面比JPEG好多少。
截断人脸图像的特征面分解(5.40)在M个分量之后,相当于将图像投影到一个线性子空间F上,我们可以称之为人脸空间
(Moghaddam和Pentland1997)©1997 IEEE。面部空间距离(DFFS)为
与平面的正交距离,而面空间中的距离(DIFS)是距离
从平均图像出发,沿着平面移动。这两个距离都可以转换成马氏距离,并给出概率解释。
(图5.19)。因为特征向量(特征面)是正交的,并且具有单位范数,所以
其中DIFS代表面部空间中的距离(Moghaddam和Pentland1997)。重新
面部空间距离(DFFS)可以直接在像素空间中计算,表示特定图像的“人脸性”。也可以通过取其特征人脸系数差的范数来测量两个不同面部在面部空间中的距离。
然而,在欧几里得向量空间中计算这些距离并没有充分利用协方差矩阵(5.42)的特征值分解所提供的额外信息。为了根据测量的协方差正确加权距离,我们可以使用马氏距离(5.32)(附录B.1)。类似地,可以对人脸空间(DFFS)(Moghaddam和Pentland 1997)进行合理的差异分析,并将这两个项结合起来,以估计是否为真实人脸的可能性,这在人脸识别中非常有用(第6.3.1节)。关于概率性和贝叶斯主成分分析的更详细解释可以在统计学习教科书中找到(Bishop 2006;Hastie,Tibshirani和Friedman 2009;Murphy 2012),这些书籍还讨论了选择用于建模分布的最佳组件数M的技术。
关于特征脸用于识别的最初研究(Turk和Pentland 1991)在Moghaddam和Pentland(1997)、Heisele、Ho等人(2003)以及Heisele、Serre和Poggio(2007)的工作中得到了扩展,包括模块化特征空间,用于分别建模不同面部组件如眼睛、鼻子和嘴巴的外观,以及基于视角的特征空间,用于分别建模不同视角下的面部。Belhumeur、Hespanha和Kriegman(1997)进一步扩展了这一工作,以处理因光照引起的外观变化,分别建模个人内部和外部的变异性,并使用Fisher线性判别分析(图5.10)进行识别。随后,Moghaddam、Jebara和Pentland(2000)开发了贝叶斯扩展。这些扩展在引用的论文以及本书第一版(Szeliski 2010,第14.2节)中有更详细的描述。
还可以将PCA和SVD方法中隐含的双线性分解推广到多线性(张量)公式,这些公式可以同时建模多个相互作用的因素(Vasilescu和Terzopoulos2007)。这些想法与机器学习中的其他主题有关,如子空间学习(Cai,He等人2007)、局部距离函数(Frome,Singer等人2007;Ramanan和Baker2009)以及度量学习(Kulis2013)。
在许多情况下,我们分析的数据并不位于全局线性子空间中,而是存在于低维流形上。在这种情况下,可以使用非线性降维方法(Lee和Verleysen 2007)。由于这些系统在高维空间中提取低维流形,因此也被称为流形学习技术(Zheng和Xue 2009)。图5.20显示了使用scikit-learn流形学习包从三维S形带状物中提取的一些二维流形示例。14
这些结果只是众多算法中的一小部分,其中包括多维缩放(Kruskal 1964a,b)、Isomap (Tenenbaum、De Silva和Langford 2000)、局部线性嵌入(Roweis和Saul 2000)、Hessian特征映射(Donoho和Grimes 2003)、拉普拉斯特征映射(Belkin和Niyogi 2003)、局部切空间对齐(Zhang和Zha 2004)、通过学习不变映射进行降维(Hadsell、Chopra和LeCun 2006)、改进的LLE(Zhang和Wang 2007)、t分布随机邻域嵌入(t-SNE)(van der Maaten和Hinton 2008;van der Maaten 2014)以及UMAP (McInnes、Healy和Melville 2018)。许多这些算法在Lee和Verleysen(2007)、Zheng和Xue(2009)以及文献中进行了综述。
图5.20曲面学习的例子,即非线性降维,应用于https://scikit-learn.org/stable/modules/ manifold.html中的1,000个点,每个点有10个邻居。八个样本输出由八种不同的嵌入算法生成,具体描述见scikit-learn曲面学习文档页面。
维基百科。15 Bengio,Paiement等人(2004)描述了一种扩展此类算法的方法,用于计算新(“样本外”)数据点的嵌入。McQueen,Meila等人(2016)描述了他们的megaman软件包,该软件包能够高效解决包含数百万数据点的嵌入问题。
除了降维可以用于数据正则化和加速相似性搜索外,流形学习算法还可以用于可视化输入数据分布或神经网络层激活。图5.21展示了将两种此类算法(UMAP和t-SNE)应用于三个不同的计算机视觉数据集的例子。
在许多机器学习场景中,我们拥有一小部分准确标注的数据和大量未标注或标注不准确的数据。例如,像ImageNet这样的图像分类数据集可能只包含一百万张标注图像,但网络上可找到的图像总数却要大几个数量级。我们能否利用这个更大的数据集,尽管它仍然捕捉到了我们预期未来输入的特征,来构建更好的分类器或预测器?
图5.21比较UMAP和t-SNE流形学习算法©McInnes、Healy和Melville(2018)在三个不同的计算机视觉学习识别任务上的表现:COIL (Nene、Nayar和Murase 1996)、MNIST (LeCun、Cortes和Burges 1998)以及Fashion MNIST (Xiao、Rasul和Vollgraf 2017)。
图5.22半监督学习的例子(Zhu和Goldberg2009)©2009 Morgan和Claypool:(a)两个标记样本和一个连接所有样本的图;(b)用谐波函数解决二元标记,解释为电阻电网络;
(c)使用半监督支持向量机(S3VM)。
考虑图5.22中的简单示意图。即使只有少量的例子被正确地标记了类别(在这种情况下,用红色和蓝色的圆圈或点表示),我们仍然可以想象将这些标签(归纳地)扩展到附近的样本,从而不仅标记所有数据,还能为未来的输入构建合适的决策面。
这一研究领域被称为半监督学习(Zhu和Goldberg 2009;Subra- manya和Talukdar 2014)。一般来说,它分为两种类型。在转导学习中,目标是同时对所有未标记的输入和已标记的例子进行分类,即图5.22中显示的所有点和圆圈。在归纳学习中,我们训练一个机器学习系统,该系统能够对未来的输入进行分类,即输入空间中的所有区域。后一种形式更为广泛使用,因为在实际应用中,大多数机器学习系统用于在线应用,如自动驾驶或新内容分类。
半监督学习是弱监督学习问题的一个子集,在这类问题中,训练数据不仅可能缺少标签,还可能存在准确性存疑的标签(Zhou2018)。计算机视觉领域的一些早期例子(Torresani 2014)包括利用互联网上的图像标签构建完整的图像分类器(Fergus,Perona和Zisserman 2004;Fergus,Weiss和Torralba 2009),以及在训练数据中存在缺失或非常粗糙的边界的情况下进行物体检测和/或分割(定位)(Nguyen,Torresani等2009;Deselaers,Alexe和Ferrari 2012)。在深度学习时代,弱监督学习仍然被广泛使用(Pathak,Krahenbuhl和Darrell 2015;Bilen和Vedaldi 2016;Arandjelovic,Gronat等2016;Khoreva,Benenson等2017;Novotny,Larlus和Vedaldi 2017;Zhai,Oliver等2019)。最近一个将弱监督学习应用于数十亿噪声标注图像的例子是在Instagram图片上带有话题标签的情况下预训练深度神经网络(Mahajan,Girshick等2018)。我们将在第5.4.7节中探讨用于预训练神经网络的弱监督和自监督学习技术。
5.3 深度神经网络
正如我们在本章引言中所见(图5.2),深度学习管道采取了端到端的方法来处理机器学习,通过搜索能够最小化训练损失的参数来优化每个处理阶段。为了使这种搜索可行,如果损失是所有这些参数的可微函数会更有帮助。深度神经网络提供了一个统一且可微的计算架构,同时还能自动发现有用的内部表示。
人们对于构建模拟神经(生物)计算的计算系统很感兴趣
自20世纪50年代末以来,这一领域经历了起伏。当时,罗森布拉特(1958)提出了感知器,而威德罗和霍夫(1960)推导出了权重适应增量规则。到了20世纪70年代末,一群自称为连接主义者的研究人员重新激发了这些领域的研究热情,围绕这一主题组织了一系列会议,最终促成了1987年神经信息处理系统(NeurIPS)会议的成立。塞诺夫斯基(2018)最近的一本书对这一领域的发展进行了很好的历史回顾,古德费洛、本吉奥和库尔维尔(2016)以及张、利普顿等人(2021)的引言,拉瓦特和王(2017)的综述论文,以及本吉奥、勒昆和欣顿(2021)的图灵奖演讲,也都对此进行了探讨。尽管大多数深度学习社区已经远离了生物学上的合理模型,但仍有一些研究继续探索生物视觉系统与神经网络模型之间的联系(亚明斯和迪卡洛2016;庄、严等人2020)。
一个很好的论文集可以在麦克莱伦、鲁梅尔哈特和PDP研究小组(1987)中找到,其中包括关于反向传播的开创性论文(鲁梅尔哈特、欣顿和威廉姆斯1986a),该论文为现代前馈神经网络的训练奠定了基础。在那段时间以及随后的几十年里,开发了多种替代的神经网络架构,包括使用随机单元的架构,如玻尔兹曼机(阿克利、欣顿和塞若夫斯基1985)和受限玻尔兹曼机(欣顿和萨拉赫丁诺夫2006;萨拉赫丁诺夫和欣顿2009)。本吉奥(2009)的综述回顾了这些早期深度学习方法的一些情况。许多这些架构都是我们在第4.3节中看到的生成图形模型的例子。
当今最受欢迎的深度神经网络是具有实值激活函数的确定性判别前馈网络,采用梯度下降训练,即反向传播训练规则(Rumelhart,Hinton和Williams 1986b)。当与卷积网络的思想结合时(Fukushima 1980;LeCun,Bottou等1998),深度多层神经网络在语音识别(Hinton,Deng等2012)和视觉识别(Krizhevsky,Sutskever和Hinton 2012;Simonyan和Zisserman 2014b)领域取得了突破,这些成果出现在2010年代初。张、利普顿等人(2021,第7章)对这些突破的组成部分以及自那时以来深度网络的快速演变进行了很好的描述,早期的综述论文(Rawat和Wang 2017)也有类似的内容。
与其他机器学习技术相比,后者通常依赖多个预处理阶段来提取可用于构建分类器的特征,而深度学习方法通常是端到端训练的,直接从原始像素过渡到最终所需输出(无论是分类还是其他图像)。在接下来的几节中,我们将描述基本的
图5.23一个感知器单元(a)明确显示权重与输入相乘,(b)权重写在输入连接上,(c)最常见的形式,省略了权重和偏置。加权求和后跟随一个非线性激活函数。©Glassner(2018)
构建和训练此类神经网络所需的组件。关于每个主题的更详细解释可以在深度学习教科书中找到(Nielsen 2015;Goodfellow,Bengio和Courville 2016;Glassner 2018,2021;Zhang,Lipton等2021),以及Li、Johnson和Yeung(2019)和Johnson(2020)编写的优秀课程笔记中。
深度神经网络(DNN)是由数千个简单互连的“神经元”(单元)组成的前馈计算图,其输入的加权和与逻辑回归(5.18)类似
如果= wxi + bi (5.45)
yi = h(si), (5.46)
如图5.23所示。xi是第i个单元的输入,wi和bi是其可学习的权重和偏置,si是加权线性和的输出,yi是si通过激活函数h后的最终输出。16每个阶段的输出通常称为
图5.24多层网络,显示一个单元的输出如何输入到其他单元中。©Glassner(2018)
激活信号随后被输入到后续阶段的单元中,如图Figure5.24.17所示
最早的此类单元被称为感知器(Rosenblatt1958),其图示如图5.23a所示。请注意,在这个最初的图中,权重在学习阶段(第5.3.5节)优化时被明确显示,并与逐元素乘法一起展示。图5.23b展示了一种形式,其中权重写在连接线(单元之间的箭头,尽管箭头通常被省略)之上。更常见的是将网络图示为图5.23c所示的形式,在这种形式中,权重(以及偏置)完全省略并假定存在。
神经网络通常被组织成连续的层,如图5.25所示,而不是像图5.24那样连接成一个不规则的计算图。现在我们可以将一层中的所有单元视为一个向量,相应的线性组合写为
sl = Wl xl ; (5.47)
其中xl是层l的输入,Wl是权重矩阵,sl是加权和,并且使用一组激活函数对加权和应用元素非线性,
xl+1 = yl = h (sl ). (5.48)
使用全(密集)权重矩阵进行线性组合的层称为全连接(FC)层,因为一个层的所有输入都连接到它的所有输入
请注意,尽管几乎所有前馈神经网络都使用输入的线性加权和,但新认知器(福岛1980)还包含了一个受生物神经元行为启发的除法归一化阶段。一些最新的深度神经网络也支持使用条件批量归一化(Section5.3.3)实现激活之间的乘法交互。
图5.25绘制神经网络的两种不同方法:(a)底部为输入,顶部为输出
顶部,左侧为(b)输入,右侧为输出。©Glassner(2018)
输出。正如我们将在第5.4节中看到的,当处理像素(或其他信号)时,早期处理阶段使用卷积而不是密集连接,以实现空间不变性和更高的效率。18仅由全连接层(不含卷积层)组成的网络现在通常被称为多层感知器(MLP)。
大多数早期神经网络(Rumelhart、Hinton和Williams 1986b;LeCun、Bottou等1998)使用了类似于逻辑回归中使用的S形函数。较新的网络,从Nair和Hinton(2010)以及Krizhevsky、Sutskever和Hinton(2012)开始,使用了修正线性单元(ReLU)或其变体。ReLU激活函数定义为
h (y) = max (0; y) (5.49)
如图5.26左上角所示,以及一些其他流行函数,它们的定义可以在各种出版物中找到(例如,Goodfellow,Bengio和Courville 2016,第6.3节;Clevert,Unterthiner和Hochreiter 2015;He,Zhang等人。
图5.26来自©Glassner(2018)的一些流行的非线性激活函数:从左上到右下:ReLU、leaky ReLU、shifted ReLU、maxout、softplus、ELU、sigmoid、tanh、swish。
不幸的是,ReLU单元在训练过程中可能很脆弱,并且可能会“死亡”。
例如,一个大的梯度流经ReLU神经元可能会导致权重更新,使得该神经元不再激活任何数据点。如果发生这种情况,那么从那时起,通过该单元的梯度将永远为零。也就是说,在训练过程中,ReLU单元可能会不可逆地死亡,因为它们可能被踢出数据流形。. ..通过适当设置学习率,这个问题发生的频率会降低。
图5.27 (a)用于从神经网络激活(“分数”)转换的softmax层
(b)顶部行显示激活,底部行显示通过softmax运行分数以获得适当归一化的似然的结果。©Glassner(2018)。
如果出现这个问题。
对于用于分类的网络的最后一层,通常使用softmax函数(5.3)将实值激活转换为类别概率,如图5.27所示。因此,我们可以认为倒数第二组神经元决定了激活空间中与相应类别的对数似然最接近的方向,同时最小化其他类别的对数似然。由于输入向前传递到最终输出的类别和概率,前馈网络是判别性的,即它们没有输出类别的统计模型,也没有直接从这些类别生成样本的方法(但参见第5.5.4节了解实现这些方法的技术)。
与其他形式的机器学习一样,正则化和其他技术可以用来防止神经网络过拟合,从而更好地泛化到未见过的数据。在本节中,我们将讨论可以应用于大多数机器学习系统的传统方法,如正则化和数据增强,以及特定于神经网络的技术,如丢弃和批量归一化。
正如我们在第4.1.1节中所见,对权重施加二次或p-范数惩罚(4.9)可以改善系统的条件性并减少过拟合。当p = 2时,会产生常规的L2正则化,使较大的权重变小;而使用p = 1则被称为
图5.28来自MNIST数据库的原始“6”位数字和两个弹性变形
版本(Simard、Steinkraus和Platt2003)©2003 IEEE。
拉索(最小绝对收缩和选择算子)可以将某些权重完全降至零。当神经网络内部优化权重时,这些项会使权重变小,因此这种正则化也被称为权重衰减(Bishop 2006,第3.1.4节;Goodfellow、Bengio和Courville 2016,第7.1节;Zhang、Lipton等2021,第4.5节)。需要注意的是,对于更复杂的优化算法如Adam,L2正则化和权重衰减并不等价,但可以通过修改算法恢复权重衰减的优良特性(Loshchilov和Hutter 2019)。
数据集增强
另一种强大的减少过拟合的技术是通过扰动已收集样本的输入和/或输出来增加更多的训练样本。这种技术被称为数据集增强(Zhang,Lipton等,2021年,第13.1节),在图像分类任务中尤为有效,因为获取标记示例的成本很高,而且图像类别在小范围局部扰动下不应发生变化。
早期应用于神经网络分类任务的一个例子是西马德、斯坦克劳斯和普拉特(2003)提出的弹性畸变技术。在他们的方法中,为每个训练样本生成随机的低频位移(扭曲)场,并在训练过程中应用于输入(图5.28)。请注意,这种畸变与简单地向输入添加像素噪声不同。相反,畸变会移动像素,从而在输入向量空间中引入更大的变化,同时仍然保留了示例的语义意义(在这种情况下,MNIST数字(勒昆、科尔特斯和伯吉斯1998))。
图5.29使用dropout时,在训练过程中,网络中的一部分单元p被移除(或者等效地,被限制为零)©Srivastava,Hinton (2014)。对每个小批量随机执行此操作,可将噪声注入到训练过程中(网络的所有级别),并防止网络过度依赖特定单元。
Dropout是由斯里瓦斯塔瓦、欣顿等人(2014)引入的一种正则化技术,在训练过程中,每个小批量中(第5.3.6节),每层的某个百分比p(例如50%)的单元会被固定为零,如图5.29所示。随机将单元设为零可以向训练过程注入噪声,同时防止网络过度针对特定样本或任务进行优化,这两点都有助于减少过拟合并提高泛化能力。
因为丢弃(归零)单位的p会减少该单位对任何总和贡献的期望值,减少比例为(1 - p),所以每一层中的加权总和si(5.45)在训练过程中会被乘以(1-p)^-1。测试时,网络运行时不进行丢弃也不对总和进行补偿。关于丢弃的更详细描述,可参见张、利普顿等人(2021年,第4.6节)和约翰逊(2020年,第10讲)。
优化深度神经网络中的权重是一个棘手的过程,可能收敛速度较慢。我们将在第5.3.6节中详细讨论这一过程。
迭代优化技术的一个经典问题是条件不良,其中梯度的分量在大小上变化很大。虽然有时
在采取步骤之前,可以通过预处理技术对单个元素进行梯度缩放(第5.3.6节和附录A.5.2)来减少这些影响,但通常最好是在问题制定过程中控制系统的条件数。
在深度网络中,条件不良的一种表现形式是连续层中的权重或激活值变得不平衡。假设我们取一个给定的网络,并将某一层数值为100×的所有权重放大,同时将下一层的权重缩小相同的比例。由于ReLU激活函数在其两个域内都是线性的,第二层的输出仍然相同,尽管第一层输出的激活值会大100倍。在梯度下降步骤中,经过这种重新缩放后,关于权重的导数将大不相同,实际上与权重本身大小相反,需要极小的梯度下降步长来防止过冲(见练习5.4)。22
批量归一化(Ioffe和Szegedy 2015)的核心思想是重新缩放(并重新中心化)给定单元的激活值,使其具有单位方差和零均值(对于ReLU激活函数而言,这意味着该单元在一半的时间内处于激活状态)。我们通过考虑给定小批量B中的所有训练样本n(5.71),计算单元i的均值和方差统计量来进行这种归一化。
其中s是训练样本n中单位i的加权和,i(n)是相应的批次
归一化总和,∈(通常为10-5)是一个小常数,用于防止除以零。
在批次归一化之后,i(n)激活现在具有零均值和单位方差。
然而,这种归一化可能与训练过程中最小化损失函数的目的相悖。因此,Ioffe和Szegedy(2015)为每个单元i添加了一个额外的增益γi和偏置βi参数,并定义批归一化阶段的输出为
22这段鼓舞人心的文字是我对为什么批量归一化可能是个好主意的个人解释,与批量归一化减少内部协变量偏移的观点有关,这一观点被(Ioffe和Szegedy 2015)用来为其技术辩护。这一假设现在正受到质疑,替代理论正在被开发(Bjorck、Gomes等2018;Santurkar、Tsipras等2018;Kohler、Daneshmand等2019)。
这些参数的作用就像常规权重一样,即在训练过程中使用梯度下降对其进行修改以减少总体训练损失。
批量归一化的一个细微之处在于,μi和σ的数量是分析性的
对于给定单元在小批量中的所有激活。为了正确定义梯度下降,损失函数关于这些变量的导数,以及量i和yi关于这些变量的导数,必须作为梯度计算步骤的一部分进行计算,使用类似于原始反向传播算法(5.65–5.68)的链式法则计算。这些推导可以在Ioffe和Szegedy(2015)以及多个博客中找到。24
当批量归一化应用于卷积层(第5.4节)时,原则上可以为每个像素分别计算归一化,但这会增加大量额外的可学习偏置和增益参数(βi;√i)。相反,批量归一化通常通过计算所有具有相同卷积核的像素的统计值来实现,然后为每个卷积核添加一个单独的偏置和增益参数(Ioffe和Szegedy 2015;Johnson 2020,第10讲;Zhang、Lipton等2021,第7.5节)。
在描述了批归一化在训练过程中的运作方式后,我们仍需决定测试或推理时如何处理,即当将训练好的网络应用于新数据时。我们不能简单地跳过这一阶段,因为网络是在去除常见均值和方差估计的情况下训练的。因此,通常会在整个训练集中重新计算均值和方差估计,或者使用每批统计量的某种移动平均值。由于公式(5.45)和(5.52–5.53)的线性形式,可以将μi和σi估计值以及学习到的(βi;√i)参数折叠回(5.45)中的原始权重和偏置项中。
自Ioffe和Szegedy(2015)发表开创性论文以来,已经开发出许多变体,其中一些如图5.30所示。我们不必在小批量B中的样本上累积统计量,而是在层的不同激活子集上计算它们。这些子集包括:
一层中的所有激活,称为层归一化(Ba,Kiros,和Hinton 2016);
•给定卷积输出通道中的所有激活(见第5.4节),这被称为实例归一化(Ulyanov,Vedaldi和Lempitsky2017);
图5.30来自Wu和He(2018)©2018 Springer的批次归一化、层归一化、实例归一化和组归一化。(H,W)维度表示像素,C表示通道,N表示小批量中的训练样本。蓝色的像素被相同的均值和方差归一化。
输出通道的不同子组,称为组归一化(Wu和He2018)。
吴和何(2018)的论文详细描述了这些方法,并进行了实验比较。乔、王等人(2019a)和乔、王等人(2019b)的最新研究讨论了这些新变体的一些缺点,并提出了两种新技术,即权重标准化和批量通道归一化,以缓解这些问题。
与其使用层中的激活值的统计特性来修改激活,也可以通过调整层中的权重,明确地将权重范数和权重向量方向作为独立参数,这被称为权重归一化(Salimans和Kingma 2016)。一种相关的技术称为谱归一化(Miyato、Kataoka等2018),它将每层权重矩阵的最大奇异值限制为1。
偏置和增益参数(βi,√i)也可能依赖于网络中其他层的激活,例如来自引导图像的激活。25这类技术被称为条件批量归一化,已被用于选择不同的艺术风格(Dumoulin,Shlens,和Kudlur 2017)以及在图像合成中实现局部语义引导(Park,Liu等2019)。相关内容和技术应用将在第14.6节关于神经渲染的部分详细讨论。
批处理和其他类型的归一化为何能帮助深度网络更快收敛并更好地泛化,这一问题仍在争论中。近期关于此主题的论文包括Bjorck、Gomes等人(2018年)、Hoffer、Banner等人(2018年)、Santurkar、Tsipras等人(2018年)以及Kohler、Daneshmand等人(2019年)。
注意,这使得神经网络能够乘以网络中的两个层,我们之前使用它来执行局部操作(第3.5.5节)。
为了优化神经网络中的权重,我们需要首先定义一个损失函数,然后在训练样本上最小化这个损失函数。我们在本章前面的部分已经看到了机器学习中使用的主损失函数。
对于分类任务,大多数神经网络使用最终的softmax层(5.3),如图5.27所示。由于输出值是类别概率之和为1,因此在训练过程中最小化交叉熵损失(5.19)或(5.23–5.24)作为函数是很自然的选择。在我们对前馈网络的描述中,使用索引i和j来表示神经单元,在本节中,我们将用n来索引特定的训练样本。
E(w) = En (w) = - log pntn, (5.54)
其中w是所有权重、偏置和其他模型参数的向量,pnk是网络当前对样本n属于类别k的概率估计,tn是表示正确类别的整数。将(5.20)中pnk的定义代入,并用snk替换lik(我们用于神经网络的符号),我们得到
在(w) = log Zn - sntn中 (5.55)
Zn = Σj exp snj. G mez(2018)对深度
学习中广泛使用的某些损失进行了很好的讨论。
对于执行回归的网络,即生成一个或多个连续变量,如深度图或去噪图像,通常使用L2损失,
E(w) = En (w) = - Ⅱyn - tn Ⅱ2, (5.56)
其中,yn是样本n的网络输出,tn是相应的训练(目标)值,因为这是连续变量之间误差的自然度量。然而,如果我们认为训练数据中可能存在异常值,或者粗大误差并不严重到需要二次惩罚时,可以使用更稳健的范数,如L1范数(Barron2019;Ranftl,Lasinger等2020)。(也可以在分类中使用稳健范数,例如,在类别标签中加入异常概率。)
由于通常将网络的最终输出解释为概率分布,我们需要考虑使用这些概率作为对特定答案置信度的衡量是否明智。如果网络训练得当且预测准确,这种假设是诱人的。然而,我们迄今为止介绍的训练损失却表明,
仅鼓励网络最大化概率加权的正确答案,实际上并未鼓励网络输出得到适当的置信度校准。郭、普莱斯等人(2017)讨论了这一问题,并提出了一些简单的措施,例如将对数似然乘以一个温度(Platt2000a),以改善分类器概率与真实可靠性的匹配。我们在第6.2.3节中讨论的GrokNet图像识别系统(贝尔、刘等人2020)使用校准来获得更好的属性概率估计。
对于那些产生新图像的网络,例如在引入缺失的高频细节(第10.3节)或执行图像传输任务(第14.6节)时,我们可能希望使用感知损失(Johnson,Alahi和Fei-Fei 2016;Dosovitskiy和Brox 2016;Zhang,Isola等2018),该方法利用中间层神经网络响应作为目标图像与输出图像之间比较的基础。也可以训练一个独立的判别网络来评估合成图像的质量(和合理性),如第5.5.4节所述。关于损失函数在图像合成中的应用的更多细节,请参见第14.6节中关于神经渲染的内容。
虽然损失函数传统上应用于监督学习任务中,每个输入都有正确的标签或目标值tn,但在无监督设置中也可以使用损失函数。一个早期的例子是Hadsell、Chopra和LeCun(2006)提出的对比损失函数,用于将相似的样本聚类在一起,同时将不相似的样本分散开来。更正式地说,我们给定一组输入{x}和成对指示变量{tij },这些变量表示两个输入是否相似。现在的目标是为每个输入xi计算一个嵌入vi,使得相似的输入对具有相似的嵌入(低距离),而不相似的输入则具有较大的嵌入距离。寻找能够创建有用距离的映射或嵌入被称为(距离)度量学习(Ko...stinger,Hirzer等,2012;Kulis2013),这是机器学习中常用的一种工具。用于鼓励创建此类有意义距离的损失函数统称为排序损失(G mez2019),可以用来关联来自不同领域的特征,如文本和图像(Karpathy,Joulin,和Fei-Fei2014)。
(Hadsell、Chopra和LeCun2006)定义的对比损失为
其中,P是所有标记输入对的集合,LS和LD是相似和不相似损失函数,dij = Ⅱvi - vj Ⅱ是配对嵌入之间的成对距离。
26个指示变量通常表示为yij,但为了与第5.1.3节保持一致,我们将坚持使用t ij的符号。
在度量学习中,嵌入通常被归一化为单位长度。
这与公式(5.19)给出的交叉熵损失的形式类似,只是我们测量的是编码vi和vj之间的平方距离。在他们的论文中,Hadsell、Chopra和LeCun(2006)建议使用二次函数来表示LS,并采用二次铰链损失(参见公式(5.30))。
LD = [m — dij
为了使用对比损失进行训练,你可以将两组输入通过神经网络,计算损失,然后反向传播梯度到网络的两个实例(激活)。这也可以被视为构建一个由两个共享权重的副本组成的孪生网络(Bromley,Guyon等1994;Chopra,Hadsell和LeCun 2005)。还可以构建三元组损失,该损失以一对匹配样本和一个非匹配样本作为输入,并确保非匹配样本之间的距离大于匹配样本之间距离加上某个余量(Weinberger和Saul 2009;Weston,Bengio和Usunier 2011;Schroff,Kalenichenko和Philbin 2015;Rawat和Wang 2017)。
成对对比损失和三元组损失都可以用于学习视觉相似性搜索的嵌入(Bell和Bala 2015;Wu、Manmatha等2017;Bell、Liu等2020),具体讨论见第6.2.3节。这些方法最近也被用于神经网络的无监督预训练(Wu、Xiong等2018;He、Fan等2020;Chen、Kornblith等2020),相关内容见第5.4.7节。在这种情况下,更常见的是使用受softmax(5.3)和多类交叉熵(5.20–5.22)启发的不同对比损失函数,后者最初由(Sohn 2016)提出。在计算损失之前,em-
床铺均被归一化为单位范数,Ⅱi Ⅱ2 = 1。然后,对以下损失进行求和
分母也包括了不匹配项。τ变量表示“温度”,控制聚类的紧密程度;有时它被替换为一个参数化超球半径的s乘数(Deng,Guo等,2019)。匹配计算的具体细节因具体实现而异。
这种损失有多个名称,包括InfoNCE (Oord,Li,和Vinyals 2018)和Chen,Kornblith等人(2020)提出的NT-Xent(归一化温度交叉熵损失)。广义版本的这种损失,如SphereFace、CosFace和ArcFace,在ArcFace论文(Deng,Guo等人2019)中进行了讨论和比较,并被Bell,Liu等人(2020)用于他们的视觉相似性搜索系统。Brown,Xie等人(2020)最近提出的平滑平均精度损失有时可以作为本节讨论的度量损失的替代方案。一些最近比较和讨论深度度量学习方法的论文包括(Jacob,Picard等人2019;Musgrave,Belongie和Lim 2020)。
在我们开始优化网络中的权重之前,必须先初始化它们。早期的神经网络使用小的随机权重来打破对称性,即确保所有梯度都不为零。然而,观察到在更深的层中,激活值会逐渐变小。
为了保持各层激活值的方差相当,我们必须考虑每一层的输入量,即激活值被权重乘以的传入连接数。Glorot和Bengio(2010)对此问题进行了初步分析,并建议将随机初始权重的方差设置为输入量的倒数。然而,他们的分析假设了线性的激活函数(至少在原点附近),例如tanh函数。
由于大多数现代深度神经网络使用ReLU激活函数(5.49),He、Zhang等人(2015)更新了这一分析,以考虑这种非对称的非线性。如果我们初始化层l的权重均值为零,方差为Vl,并将原始偏置设为零,则公式(5.45)中的线性求和将具有方差为
Var[sl ] = nl VlE[x], (5.59)
其中nl是传入激活/权重的数量,E[x]是期望值
平方的传入激活。当具有零均值的求和sl通过ReLU时,负数会被截断为零,因此期望值为
输出平方E[y]是sl的方差Var[sl ]的一半。
为了防止深层的平均激活量衰减或增加,我们希望连续层的激活量保持大致相同。由于我们有
(5.60)
我们得出结论,初始权重Vl的方差应该设置为
(5.61)
即,给定单元或层的扇入的一半的倒数。这种权重初始化规则通常被称为He初始化。
神经网络初始化仍然是一个活跃的研究领域,包括Kra... ...hl,Doerschhenbu等人(2016)、Mishkin和Matas(2016)、Frankle和Carbin(2019)以及Zhang、Dauphin和Ma(2019)
一旦我们确定了神经网络的层数、层宽和层深,添加了一些正则化项,定义了损失函数,并初始化了权重,就可以用样本数据训练网络了。为此,我们使用梯度下降或其变体迭代地调整权重,直到网络收敛到一组良好的值,即在训练集和验证集上的性能达到可接受水平。
为了实现这一点,我们使用链式法则计算训练样本n的损失函数En关于权重w的导数(梯度),从输出开始,逐步回溯到输入,如图5.31所示。这一过程被称为反向传播(Rumelhart,Hinton,和Williams 1986b),即错误的逆向传播。你可以在深度学习的教科书和课程笔记中找到该技术的不同描述,包括Bishop (2006,第5.3.1节)、Good- fellow,Bengio和Courville (2016,第6.5节)、Glassner (2018,第18章)、Johnson (2020,第6讲)以及Zhang、Lipton等人(2021)。
回想一下,在神经网络的前向(评估)过程中,激活值(层输出)是逐层计算的,从第一层开始,直到最后一层结束。我们将在下一节看到,许多较新的深度神经网络具有无环图结构,如图5.42–5.43所示,而不仅仅是一个单一的线性管道。在这种情况下,可以使用图的广度优先遍历。这种评估顺序的原因是为了提高计算效率。对于每个输入样本,激活值只需计算一次,并且可以在后续的计算阶段中重复使用。
在反向传播过程中,我们对反向图执行类似的广度优先遍历。
但是,我们计算的不是激活函数,而是损失函数关于权重和输入的导数,我们称之为误差。让我们从损失函数开始详细地看一下。
关于输出概率pnk的交叉熵损失En(5.54)的导数仅仅是—δntn/pnk。更有趣的是,关于进入图5.27中softmax层的分数snk(5.55)的损失的导数,
(如果使用的是one-hot编码或者目标具有非二进制概率,那么最后一种形式是很有用的。)这可以令人满意地直观解释为预测类别概率pnk与真实类别标识tnk之间的差异。
图5.31深度网络中间层反向传播导数(误差)©Glassner(2018)。损失函数对单个训练样本中每个粉色单元输入的导数相加,然后重复这一过程,逆向贯穿整个网络。
对于公式(5.56)中的L2损失,我们得到类似的结果,
在此情况下,表示预测值与目标值之间的实数差。
在本节的其余部分,我们从激活函数xin和yin中去掉样本索引n,因为每个样本n的导数通常可以独立于其他样本进行计算。28
为了计算损失项关于早期权重和激活值的偏导数,我们按照图5.31所示的方法逆向遍历网络。回顾(5.45–5.46),我们首先通过输入激活值xi与单位权重向量wi之间的点积来计算加权和si 然后,我们将这个加权和通过激活函数h,得到yi = h(si)。
计算损失En关于权重、偏置和输入的导数
激活函数,我们使用链式法则,
我们称ei =∂En/∂si为误差,即损失En相对于求和激活si的偏导数,因为它通过网络向后传播。
现在,这些错误来自哪里,即我们如何获得∂En/∂yi?回想图5.24,一个单元或层的输出成为下一层的输入。实际上,对于像图5.24中那样的简单网络,如果我们让xij表示单元i从单元j接收到的激活(而不是仅仅是单元i的第j个输入),我们可以简单地设置xij = yj。
由于yi,即单元i的输出,现在作为其他单元k > i的输入(假设这些单元是按广度优先顺序排列的),我们有
换句话说,为了计算一个单元(反向传播)的误差,我们计算来自该单元输入的误差的加权和,然后将其乘以当前激活函数h的导数(si)。这种错误的反向流动如图5.31所示,在阴影框内的三个单元的误差是通过网络后部的误差加权和计算得出的。
这个反向传播规则有一个非常直观的解释。给定单元的误差(损失的导数)取决于它所连接的单元的误差乘以它们之间的权重。这是链式法则的一个简单应用。激活函数h的斜率(si)调节了这种相互作用。如果单元的输出被限制为零或很小,例如使用负输入的ReLU或Sigmoid响应的“平坦”部分,那么该单元的误差本身也是零或很小。权重的梯度,即为了减少损失而需要调整的权重量,是传入激活和单元误差xijei的有符号乘积。这与赫布更新规则(Hebb1949)密切相关,该规则观察到生物神经元中的突触效率随着前突触处的相关放电而增加。
以及突触后细胞。一个更容易记住这个规则的方法是“如果神经元一起放电,它们就会连接在一起”(Lowel和Singer1992)。
当然,现代神经网络中还有其他计算元素,包括卷积和池化,我们将在下一节中讨论。这些单元的导数和误差传播遵循与这里概述相同的程序,即递归应用链式法则,对所应用函数求解析导数,直到得到损失函数关于所有优化参数的导数,即损失的梯度。
正如你可能已经注意到的,关于权重的梯度计算需要前向传播中计算出的单位激活值。神经网络训练的典型实现会存储给定样本的激活值,并在反向传播(误差反向传播)阶段使用这些激活值来计算权重导数。然而,现代神经网络可能有数百万个单元,因此需要存储大量的激活值(图5.44)。通过仅在某些层存储激活值,然后根据需要重新计算其余部分,可以减少需要存储的激活值数量,这种方法被称为梯度检查点(Griewank和Walther 2000;Chen,Xu等2016;Bulatov2018).29关于低内存训练的更详细综述可以在Sohoni,Aberger等(2019)的技术报告中找到。
到这一步,我们已经具备了训练神经网络所需的所有要素。我们定义了网络的拓扑结构,包括每一层的大小和深度,指定了激活函数,加入了正则化项,设定了损失函数,并初始化了权重。我们甚至描述了如何计算梯度,即正则化损失关于所有权重的导数。此时我们需要的是某种算法,将这些梯度转化为权重更新,以优化损失函数并生成一个能够很好地泛化到新未见过数据的网络。
在大多数计算机视觉算法中,如光流(第9.1.3节)、使用束调整的三维重建(第11.4.2节),甚至在较小规模的机器学习问题中,例如逻辑回归(第5.1.3节),首选的方法是线性最小二乘法(附录A.3)。优化过程采用高斯-牛顿等二阶方法,我们评估损失函数中的所有项,然后根据能量函数的梯度和海森矩阵确定方向,进行最优大小的下坡步。
不幸的是,深度学习问题过于庞大(就参数数量和训练样本而言;见图5.44),使得这种方法难以实际应用。因此,实践者开发了一系列基于随机梯度下降(SGD)扩展的优化算法(张、利普顿等,2021年,第11章)。在SGD中,我们不再像(5.54)或(5.56)那样通过累加所有训练样本来评估损失函数,而是仅评估单个训练样本n,并计算相关损失En (w)的导数。然后,沿着这个梯度的方向迈出一小步。
在实践中,从单个样本获得的方向是很好的下降方向的非常嘈杂的估计值,因此损失和梯度通常是在训练数据的一个小子集上求和,
每个子集B被称为一个迷你批次。在开始训练之前,我们随机将训练样本分配到一组固定的迷你批次中,每个批次的大小通常从低端的32到高端的8k不等(Goyal,Dollr等人,2017)。由此产生的算法称为迷你批次随机梯度下降,尽管在实际应用中,大多数人通常简称为SGD(省略了minibatches).30的引用)。
在对小批量中的样本求和后,评估梯度g=▽wEB之后,是时候更新权重了。最简单的方法是在梯度方向上迈出一小步,
w ← w — Qg or (5.72)
wt+i = wt — Qt gt (5.73)
其中第一个变体看起来更像一个赋值语句(参见,例如,Zhang,Lipton等人2021年,第11章;Loshchilov和Hutter2019),而第二个变体则明确表示时间依赖性,使用t表示梯度下降中的每个连续步骤。
步长参数Q通常被称为学习率,必须谨慎调整以确保良好的进展,同时避免过冲和梯度爆炸。实际上,通常会从较大的(但仍然较小的)学习率Qt开始,并随着时间逐渐减小,从而使优化过程收敛到一个好的最小值(Johnson 2020,第11讲;Zhang、Lipton等2021,第11章)。
在深度学习领域,经典算法中对所有测量值求和的方法被称为批量梯度下降,尽管这一术语在其他地方并不常用,因为人们普遍认为一次性使用所有测量值是更优的选择。在大规模问题如束调整中,使用小批量可能会带来更好的性能,但这一点尚未得到充分探索。
图5.32 http://playground.tensorflow.org的截图,你可以在浏览器中构建和训练自己的小型网络。由于输入空间是二维的,你可以可视化网络中每个单元对所有2D输入的响应。
常规梯度下降在当前解达到搜索空间中的“平坦点”时容易停滞,而随机梯度下降仅关注当前小批量中的误差。因此,SGD算法可能采用动量的概念,即累积并使用梯度的指数衰减(“泄漏”)运行平均值作为更新方向,
wt+i = wt - Qt vt. (5.75)
使用相对较大的P∈[0.9;0.99]值,以使算法具有良好的内存,有效地对更多批次的梯度进行平均。
在过去十年中,一些更复杂的优化技术已被应用于深度网络训练,如Johnson (2020,第11讲)和Zhang、Lipton等人(2021,第11章)所述。这些算法包括:
Nesterov动量,其中梯度(有效)在从速度更新预测的状态处计算;
AdaGrad(自适应梯度),其中梯度中的每个分量除以每个分量的平方梯度之和的平方根(Duchi,Hazan,and Singer2011);
RMSProp,其中梯度平方的运行总和被替换为泄漏(衰减)总和(Hinton2012);
Adadelta,它在RMSProp的基础上增加了参数中每个组件的实际变化的泄漏总和,并在梯度重新缩放方程中使用这些参数(Zeiler 2012);
Adam将所有先前想法的元素整合到一个单一框架中,并且消除了最初泄漏估计的偏差(Kingma和Ba2015);
AdamW,即Adam与解耦权重衰减(Loshchilov和Hutter2019)。
亚当和亚当W目前是最受欢迎的深度网络优化器,尽管它们非常复杂,但为了获得良好的结果,学习率需要谨慎设置(并且可能随时间衰减)。正确设置超参数,如初始学习率、衰减速率、动量项如ρ以及正则化程度,以使网络在合理的训练时间内达到良好的性能,本身就是一个开放的研究领域。约翰逊(2020年,第11讲)的讲义提供了一些指导,但在许多情况下,人们会通过搜索超参数来找到产生最佳性能网络的方法。
一个简单的双输入示例
了解深度网络如何更新权重并在训练过程中构建解空间的一个好方法是使用http://playground.tensorflow.org.33的交互式可视化。如图5.32所示,只需点击“运行”(D)按钮开始,然后将网络重置为新的起点(运行按钮左侧),尝试逐步推进网络,使用不同数量的隐藏层单元和不同的激活函数。特别是使用ReLU时,可以看到网络如何划分输入空间的不同部分,然后将这些子部分组合在一起。第5.4.5discusses节的可视化
图5.33 LeNet- 5的架构,这是一种用于数字识别的卷积神经网络(LeCun,Bottou等,1998)©1998 IEEE。该网络在每一层使用多个通道,并交替进行多通道卷积和下采样操作,随后通过一些全连接层,为每个待分类的10个数字生成一个激活值。
5.4 卷积神经网络
前几节关于深度学习的内容涵盖了构建和训练深度网络的所有关键要素。然而,这些内容忽略了可能是图像处理和计算机视觉中最至关重要的组成部分,即使用可训练的多层卷积。卷积神经网络的概念由LeCun、Bottou等人(1998)推广,他们介绍了用于数字识别的LeNet-5网络,如图5.33.34所示。
不是将所有单元层与前一层的所有单元连接起来,卷积网络将每一层组织成特征图(LeCun,Bottou等1998),可以将其视为平行平面或通道,如图Figure5.33所示。在卷积层中,加权求和仅在一个小的局部窗口内进行,且所有像素的权重相同,这与常规平移不变图像卷积和相关性(3.12–3.15)相同。
与图像卷积不同,后者对每个(颜色)通道应用相同的滤波器,神经网络卷积通常会线性组合前一层中每个C1输入通道的激活值,并为每个C2输出通道使用不同的卷积核,如图5.34–5.35.35所示。这合乎逻辑,因为主要任务在于
图5.34多输入输出通道的二维卷积©Glassner(2018)。每个二维卷积核以前一层的所有C1个通道为输入,窗口化到一个小区域,并在下一个层的C2个通道之一中生成值(经过激活函数非线性处理后)。对于每个输出通道,我们有S2×C1个卷积核权重,因此每层可学习参数的总数为S2×C1×C2。在这个图中,我们有C1 = 6个输入通道和C2 = 4个输出通道,卷积窗口大小为S = 3,总共9×6×4个可学习权重,如图中间列所示。由于卷积应用于给定层中的每个W×H像素,因此在给定层的一个样本的一次前向和反向传播中,计算量(乘加运算)为W HS2 C1 C2。
卷积神经网络层用于构建局部特征(图3.40c),然后以不同的方式组合这些特征,以产生更具区分性和语义意义的特征。第5.4.5节中的图5.47展示了深度网络提取的各种特征的可视化。
有了这些直觉,我们就可以将卷积层中执行的加权线性求和(5.45)写成
其中x(i,j,c1)是前一层的激活值,正如公式(5.45)所示,N是二维空间核中的S2符号偏移量,符号c1∈{C1 }表示c1∈[0,C1 )。需要注意的是,由于偏移量(k,l)被加到(i,j)像素坐标上(而不是从其减去),这一操作实际上是一个相关运算(3.13),但这种区别通常被忽略。
36注意,不同输入和输出通道(在卷积窗口大小内)中的像素是完全连接的,除非使用下面讨论的分组卷积。
图5.35具有多个批次、输入和输出通道的二维卷积,©John-
(2020)。在进行小批量梯度下降时,整个批次的训练图像或
特征被传递到一个卷积层,该层以所有Cin通道作为输入
前一层被窗口化到一个小区域,并产生值(在激活之后
在下一层的Cout通道中,函数非线性)之一。和之前一样,对于每一个
输出通道中,我们有Kw×Kh×Cin内核权重,因此每个卷积层中可学习参数的总数为Kw×Kh×Cin×Cin。在该图中,我们有Cin = 3个输入通道和Cout = 6个输出通道。
在神经网络图中,如图5.33和5.39–5.43所示,通常会标明卷积核大小S和层中的通道数C,有时也会显示图像尺寸,例如图5.33和5.39。请注意,某些神经网络,如GoogLeNet (Szegedy,Liu等,2015)中的Inception模块,如图5.42所示,使用1×1的卷积,这些卷积实际上并不执行卷积操作,而是按像素合并不同的通道,通常目的是降低特征空间的维度。
因为卷积核中的权重对于给定层和通道内的所有像素都是相同的,这些权重实际上是在绘制不同层中不同像素之间所有连接时共享的。这意味着需要学习的权重远少于全连接层。这也意味着在反向传播过程中,核权重更新会在给定层/通道的所有像素上求和。
为了完全确定卷积层的行为,我们仍然需要指定一些
•填充。早期网络如LeNet-5没有对图像进行填充,因此每次卷积后图像都会缩小。现代网络可以选择指定填充宽度和模式,使用传统图像处理中常用的选择之一,如零填充或像素复制,如图3.13所示。
•步长。卷积的默认步长为1像素,但也可以仅在每第n列和行处评估卷积。例如,AlexNet中的第一个卷积层(图5.39)使用了4的步长。传统的图像金字塔(图3.31)在构建较粗层次时使用2的步长。
膨胀。可以在像素之间插入额外的“空间”(跳过行和列)
卷积过程中的样本,也被称为膨胀或孔(在法语中,有孔的意思)
通常只是“无”卷积(Yu和Koltun2016;Chen,Papandreou等人2018)。虽然原则上这可能导致混叠,但它也可以在使用更少的操作和可学习参数的情况下有效地对更大的区域进行池化。
•分组。默认情况下,所有输入通道用于生成每个输出通道,但也可以将输入和输出层分成G个独立的组,每组分别进行卷积(Xie,Girshick等,2017)。G = 1对应常规卷积,而G = C1表示每个对应的输入通道独立于其他通道进行卷积,这被称为深度卷积或通道分离卷积(Howard,Zhu等,2017;Tran,Wang等,2019)。
由Vincent Dumoulin创建的这些不同参数的效果的动画可以在https://github.com/vdumoulin/conv arithmeticas以及Dumoulin和Visin(2016)中找到。
在某些应用中,如图像修复(第10.5.1节),输入图像可能附带一个二值掩模,指示哪些像素是有效的,哪些需要填充。这类似于我们在第3.1.3节中研究的透明度图像概念。在这种情况下,可以使用部分卷积(Liu,Reda等人,2018年),其中输入像素与掩模像素相乘,然后根据非零掩模像素的数量进行归一化。如果任何输入掩模像素为非零,则掩模通道输出设为1。这类似于我们图4.2中展示的Gortler,Grzeszczuk等人(1996年)提出的拉推算法,不同之处在于卷积权重是学习得到的。
更复杂的部分卷积版本是门控卷积(Yu,Lin等人。
2019;Chang,Liu等2019),其中每个像素的掩码通过学习卷积后接sigmoid非线性函数从前一层获得。这使得网络不仅能够更好地学习每个像素的信心度量(权重),还能融入额外的特征,如用户绘制的草图或推导出的语义信息。
正如我们在卷积讨论中所见,步长大于1可以用来降低给定层的分辨率,例如AlexNet的第一个卷积层(图5.39)。当卷积核内的权重相等且总和为1时,这被称为平均池化,通常以通道方式应用。
广泛使用的一种变体是在方形窗口内计算最大响应,这被称为最大池化。最大池化的常见步长和窗口大小包括步长为2和2×2非重叠窗口或3×3重叠窗口。最大池化层可以视为“逻辑或”,因为它们只需要池化区域中的一个单元被激活即可。它们还应该提供输入的某种平移不变性。然而,大多数深度网络并不是完全平移不变的,这会降低其性能。张(2019)的论文对此问题进行了很好的讨论,并提出了一些简单的建议来缓解这一问题。
一个常见的问题是,如何通过最大池化层进行反向传播。
最大池化操作符就像一个“开关”,将输入单元之一连接到输出单元。因此,在反向传播过程中,只要我们记得哪个单元有这种响应,就只需要将误差和导数传递给这个最活跃的单元。
同样的最大池化机制可以用来创建一个“反卷积网络”
在寻找最能激活特定单元的刺激物(图5.47)时(Zeiler和Fergus2014)。
如果我们希望行为更加连续,可以构建一个池化单元,该单元对其输入计算Lp范数,因为Lp→∞实际上是在其组件上计算最大值(Springenberg,Dosovitskiy等,2015)。然而,这样的单元需要更多的计算,因此在实际应用中并不广泛使用,除非有时用于最后一层,在这种情况下被称为广义均值(GeM)池化(Doll r,Tu等,2009;Tolias,Sicre和J gou,2016;Gordo,Almazn等,2017;Radenovi,Tolias
图5.36转置卷积(©Dumoulin和Visin(2016))可用于放大(增加尺寸)图像。在应用卷积算子之前,在输入样本之间插入(s - 1)个额外的零行和零列,其中s是放大步长。
虽然池化可以用来(近似地)逆转最大池化操作的效果,但如果我们想逆转卷积层,可以参考我们在第3.5.1节和第3.5.3节中研究的插值算子的学习变体。最直观的方法是在输入层的像素之间添加额外的零行和零列,然后运行常规卷积(图5.36)。这种操作有时被称为分数步长的反向卷积(Long、Shelhamer和Darrell 2015),尽管更常见的名称是转置卷积(Dumoulin和Visin 2016),因为当卷积以矩阵形式表示时,这个操作相当于与一个转置稀疏权重矩阵相乘。与常规卷积一样,可以指定填充、步幅、膨胀和分组参数。然而,在这种情况下,步幅指定的是图像上采样而不是下采样的倍数。
U-网和特征金字塔网络
在讨论第3.5.3节中的拉普拉斯金字塔时,我们看到了如何结合图像下采样和上采样来实现多种多分辨率图像处理任务(图3.33)。同样的组合方法也可以用于深度卷积网络中,特别是当我们希望输出是一个全分辨率图像时。这类应用的例子包括像素级语义标注(第6.4节)、图像降噪和超分辨率(第10.3节)、单目深度推断(第12.8节)以及神经风格迁移(第14.6节)。降低网络分辨率后再重新扩展的想法有时被称为瓶颈,这与早期使用自编码器进行的自监督网络训练有关(Hinton和Zemel 1994;Goodfellow、Bengio和Courville 2016,第14章)。
这一想法最早的应用之一是开发的全卷积网络
图5.37(a)Noh、Hong和Han(2015)的去卷积网络©2015 IEEE和(b—c)Ronneberger、Fischer和Brox(2015)的U-Net,使用PlotNeural- Net LaTeX包绘制。除了(a)中使用的细到粗再到细的瓶颈外,U-Net在相同分辨率下还具有编码层和解码层之间的跳跃连接。
图5.38来自https://cs.stanford. edu/people/karpathy/convnetjs的Andrej Karpathy网页浏览器演示的截图,在这里你可以运行一些小型神经网络,包括用于数字和微型图像分类的CNN。
由Long、Shelhamer和Darrell(2015)提出。这篇论文启发了众多后续架构,包括Noh、Hong和Han(2015)提出的沙漏形状的“反卷积”网络,Ronneberger、Fischer和Brox(2015)提出的U-Net,Chen、Papandreou等人(2018)提出的具有CRF精炼层的空洞卷积网络,以及Kirillov、Girshick等人(2019)提出的全景特征金字塔网络。图5.37展示了其中两种网络的一般布局,相关内容将在第6.4节关于语义分割中详细讨论。我们将在后续章节中看到这些骨干网络(He、Gkioxari等人,2017)在图像去噪和超分辨率(第10.3节)、单目深度推断(第12.8节)和神经风格迁移(第14.6节)中的其他应用。
卷积神经网络最早的商业应用之一是LeCun、Bottou等人(1998)创建的LeNet-5系统,其架构如图5.33所示。该网络包含了现代卷积神经网络的大部分元素,尽管它使用了sigmoid非线性、平均池化和高斯RBF单元,而不是输出层的softmax。如果你想尝试这个简单的数字识别卷积神经网络,可以访问由Andrej Karpathy在https://cs.stanford.edu/people/karpathy/ convnetjs上创建的交互式JavaScript演示(图5.38)。
该网络最初于1995年左右由AT&T部署,用于自动读取存入NCR ATM机的支票,以验证书面和按键支票金额是否相同。该系统随后被纳入NCR的高速支票读取系统,
图5.39 SuperVision深度神经网络(更常被称为“AlexNet”)的架构,由Matt Deitke提供(改编自Krizhevsky、Sutskever和Hinton 2012)。该网络由多个带有ReLU激活函数的卷积层、最大池化层、一些全连接层以及一个用于生成最终类别概率的softmax层组成。
在某个时候,它处理了美国所有支票的10%到20%。
今天,LeNet-5架构(图5.33)的变体常被用作该主题课程和教程中介绍的第一个卷积神经网络。尽管最初用于训练LeNet-5的MNIST数据集(LeCun、Cortes和Burges 1998)有时仍被使用,但更常见的是使用更具挑战性的CIFAR-10(Krizhevsky 2009)或Fashion MNIST (Xiao、Rasul和Vollgraf 2017)作为训练和测试的数据集。
虽然现代卷积神经网络最早在20世纪90年代末开发并部署,但直到克里谢夫斯基、苏特塞弗和欣顿(2012年)的突破性发表,它们才开始在自然图像分类方面超越传统技术(图5.40)。如图所示,AlexNet系统(他们超级视觉网络的更常用名称)将错误率从25.8%大幅降至16.4%。随后几年里,由于进一步的发展以及使用更深的网络,例如从最初的8层AlexNet到152层ResNet,性能又迅速取得了显著提升。
图5.39显示了SuperVision网络的体系结构,其中包含一系列
具有ReLU(修正线性)非线性、最大池化和一些全连接层的卷积层
图5.40 ImageNet中获胜参赛作品的前5个错误率和网络深度
大规模视觉识别挑战(ILSVRC)©Li、Johnson和Yeung(2019)。
连接层,以及一个最终的softmax层,该层被输入到多类交叉熵损失中。Krizhevsky、Sutskever和Hinton(2012)还使用了dropout(图5.29)、小的平移和颜色操作进行数据增强、动量和权重衰减(L2权重惩罚)。
本文发表后的几年里,图像识别大规模视觉挑战赛(Rus- sakovsky,Deng等,2015)上的分类性能有了显著提升,如图5.40所示。关于这些不同网络的创新之处、其能力和计算成本的详细描述,可以在贾斯汀·约翰逊(2020年,第8讲)的讲座幻灯片中找到。
2013年,Zeiler和Fergus(2014)的获奖作品使用了更大版本的AlexNet,在卷积阶段增加了更多的通道,将错误率降低了约30%。2014年,牛津视觉几何小组(VGG)的获奖作品由Simonyan和Zisserman(2014b)提出,该作品采用了重复的3×3卷积/ReLU块,穿插2×2最大池化和通道加倍(图5.41),随后是一些全连接层,生成了16到19层的网络,进一步将错误率降低了40%。然而,如图5.44所示,这种性能提升是以计算量大幅增加为代价的。
2015年,Szegedy、Liu等人(2015)的GoogLeNet则专注于效率。Goog- LeNet首先采用了一个激进的主干网络,通过一系列步幅卷积和常规卷积以及最大池化层,迅速将图像分辨率从224×224降至282×282。随后,它使用了多个Inception模块(图5.42),每个模块都是一个小分支神经网络,其特征在最后被连接起来。该模块的一个重要特点是使用1×1“瓶颈”卷积来减少数量。
图5.41 Simonyan和Zisserman(2014b)©Glassner(2018)的VGG16网络。
(a)网络由重复的零填充、3×3卷积、ReLU模块组成,其间穿插着2×2最大池化和通道数翻倍。随后是全连接层和丢弃层,最后通过softmax函数映射到1,000个ImagetNet类别。
(b)Glassner(2018)使用的部分示意图神经网络符号。
图5.42来自(Szegedy,Liu的初始模块 (et al.2015)©2015 IEEE,它将降维、多个卷积大小和最大池化作为不同的通道堆叠在一起,形成最终特征图。
图5.43 ResNet残差网络(He,Zhang .etal2016a)©2016 IEEE,展示了绕过一系列卷积层的跳跃连接。右侧图使用瓶颈来减少卷积前的通道数。直接连接可以捷径绕过卷积层,使得梯度在训练过程中更容易反向流经网络。
在执行较大的3×3和5×5卷积之前,先进行通道操作,从而节省了大量计算。这种投影后接额外卷积的方法,在精神上类似于Perona(1995)提出的将滤波器近似为可分离卷积之和的方法。GoogLeNet还去除了末端的全连接(MLP)层,转而采用全局平均池化后接一个线性层再进行softmax操作。其性能与VGG相似,但计算量和模型大小的成本显著降低(图5.44)。
次年,残差网络(He,Zhang等,2016a)问世,显著扩展了可成功训练的层数(图5.40)。主要的技术创新是引入了跳跃连接(最初称为“捷径连接”),这使得信息(和梯度)能够在一组卷积层之间流动,如图5.43所示。这些网络被称为残差网络,因为它们允许网络学习一组输入和输出激活之间的残差(差异)。基本残差块的一个变体是图5.43右侧所示的“瓶颈块”,它在执行3×3卷积层之前减少通道数。进一步的扩展,如(He,Zhang等,2016b)所述,将ReLU非线性移至残差求和之前,从而无需额外成本即可建模真正的恒等映射。
为了构建ResNet,各种残差块与步幅卷积和通道加倍交织在一起,以达到所需的层数。(类似于GoogLeNet中使用的下采样茎和平均池化softmax层,在开头和结尾处使用。)通过组合不同数量的残差块,已经构建并评估了包含18、34、50、101和152层的ResNet。更深的网络具有更高的精度。
但计算成本更高(图5.44)。2015年,ResNet不仅在ILSVRC(ImageNet)分类、检测和定位挑战中排名第一,在更新的COCO数据集和基准测试中的检测和分割挑战中也排名第一(Lin,Maire等人,2014)。
自那时起,各种扩展和变体被构建并进行了评估。谢、吉什克等人(2017)提出的ResNeXt系统使用分组卷积略微提高了准确性。密集连接的CNN(黄、刘等人,2017)在非相邻卷积块和/或池化块之间添加了跳跃连接。最后,胡、沈、孙等人(2018)提出的挤压与激励网络(SENet)通过全局上下文(通过全局池化)加入每一层,显著提升了准确率。关于这些及其他CNN架构的更多信息,可以在原始论文以及本主题的课堂笔记中找到(李、约翰逊和杨2019;约翰逊2020)。
移动网络
随着深度神经网络变得越来越深、越来越大,一种相反的趋势出现了,即构建更小、计算成本更低的网络,这些网络可以用于移动和嵌入式应用。最早为轻量级执行定制的网络之一是MobileNets (Howard,Zhu等,2017),该网络使用了深度卷积,这是分组卷积的一个特例,其中组的数量等于通道数。通过调整两个超参数,即宽度乘数和分辨率乘数,网络架构可以在精度、尺寸和计算效率之间进行权衡。随后的MobileNetV2系统(Sandler,Howard等,2018)增加了一个“倒残差结构”,其中捷径连接位于瓶颈层之间。ShuffleNet(Zhang,Zhou等,2018)在分组卷积之间增加了一个“洗牌”阶段,以使不同组中的通道能够混合。ShuffleNet V2 (Ma,Zhang等,2018)增加了通道分割操作符,并使用端到端性能指标来调整网络架构。另外两个为提高计算效率而设计的网络是ESPNet (Mehta,Rastegari等,2018)和ESPNetv2 (Mehta,Rastegari等,2019),它们使用了(深度-宽)扩张可分离卷积的金字塔结构。
分组、深度和通道分离卷积的概念仍然是管理计算效率和模型大小的广泛使用的工具(Choudhary,Mishra等人,2020),不仅在移动网络中,而且在视频分类中(Tran,Wang等人。
图5.44网络精度与规模及操作次数的关系(Canziani,Culurciello和Paszke2017)©2017 IEEE:在右侧图中,网络精度与操作次数(1—40 G-Ops)的关系被绘制出来,而圆圈的大小表示参数的数量(10—155 M)。BN表示网络的批量归一化版本。
尝试这些不同的CNN架构的一个好方法是从模型库下载预训练模型,例如https://github.com/pytorch/视觉中的TorchVision库。如果你查看torchvision/models文件夹,你会发现AlexNet、VGG、GoogleNet、Inception、ResNet、DenseNet、MobileNet和ShuffleNet等模型的实现,以及其他用于分类、目标检测和图像分割的模型。更近期的一些模型,将在后续章节中讨论,可以在PyTorch图像模型库(timm)中找到,该库还提供了https://github.com/rwightman/pytorch-image-models.类似的预训练模型集合。对于其他语言,也有类似的预训练模型集合,例如https://www.tensorflow.org/lite/models,用于高效的(移动)TensorFlow模型。
虽然人们经常下载并使用预训练的神经网络来实现他们的应用,但更常见的是至少在与应用特性更为相关的数据上微调这些网络(而不是大多数动物园模型所基于的公共基准数据)。同样,也很常见的是替换网络的最后一层,即头部(之所以这样称呼,是因为当各层从下往上堆叠时,它位于图中的顶部),而保留骨干部分不变。骨干和头部(s)这两个术语被广泛使用,并由Mask-RCNN论文(He,Gkioxari等,2017)推广开来。一些较新的论文
将主干和头部称为躯干及其分支(Ding和Tao2018;Kirillov、Girshick等人2019;Bell、Liu等人2020),有时也使用颈部一词(Chen、Wang等人2019)。43
当添加新的头部时,可以使用特定于预期应用的新数据来训练其参数。根据可用的新训练数据的数量和质量,头部可以简单到线性模型,如SVM或逻辑回归/软最大值(Donahue,Jia等,2014;Sharif Razavian,Azizpour等,2014),也可以复杂到全连接网络或卷积网络(Xiao,Liu等,2018)。调整主干中的一些层也是一个选项,但需要足够的数据和较慢的学习率,以确保预训练的好处不会丧失。在一个数据集上预训练机器学习系统,然后将其应用于另一个领域的过程称为迁移学习(Pan和Yang,2009)。我们将在第5.4.7节关于自监督学习的部分更详细地讨论迁移学习。
模型尺寸和效率
正如前文所述,神经网络模型的规模(通常以参数数量,即权重和偏置的数量来衡量)和计算负载(通常以每前向推理一次的浮点运算次数来衡量)种类繁多。C anziani、C ulcerciello和Paszke(2017)的评估总结在图5.44中,展示了2012年至2017年间在ImageNet挑战中表现最佳的网络的性能(准确性和规模+操作)。除了我们已经讨论过的网络外,该研究还包括Inception-v3 (Szegedy、Vanhoucke等2016)和Inception-v4 (Szegedy、Ioffe等2017)。
因为深度神经网络可能非常依赖内存和计算资源,许多研究人员已经研究了减少这两方面的方法,使用较低精度(例如定点)算术和权重压缩(Han,Mao,和Dally 2016;Iandola,Han等2016)。Rastegari,Ordonez等人(2016)在XNOR-Net论文中探讨了使用二进制权重(开关闭合连接)以及可选的二进制激活函数。该论文还对先前的二进制网络和其他压缩技术进行了很好的综述,最近的调查论文也是如此(Sze,Chen等2017;Gu,Wang等2018;Choudhary,Mishra等2020)。
神经网络设计的最新趋势之一是使用神经架构搜索(NAS)算法来尝试不同的网络拓扑和参数化(Zoph
图5.45图像网络准确率与(a)大小(参数数量)和(b)操作次数的关系,针对一些近期高效的网络(Wan,Dai等人,2020)©2020 IEEE。
以及Le2017;Zoph,Vasudevan等人2018;Liu,Zoph等人2018;Pham,Guan等人2018;Liu,Simonyan和Yang2019;Hutter,Kotthoff和Vanschoren2019)。这一过程比早期网络设计中常见的试错方法更高效(就研究人员的时间而言)。Elsken,Metzen和Hutter(2019)综述了这些以及更多关于这一快速发展的主题的论文。最近的出版物包括FBNet (Wu,Dai等人2019)、RandomNets(Xie,Kirillov等人2019)、EfficientNet(Tan和Le2019)、RegNet (Radosavovic,Kosaraju等人2020)、FBNetV2(Wan,Dai等人2020)和EfficientNetV2(Tan和Le2021)。还可以进行无监督神经架构搜索(Liu,Dollr等人2020)。图5.45显示了ImageNet
上的前1%准确率与网络大小(参数数量)及前向推理操作次数的关系,针对多个近期的网络架构(Wan,Dai等人2020)。与图5.44所示的早期网络相比,较新的网络使用了10×(或更多)更少的参数。
深度学习软件
在过去十年中,大量深度学习软件框架和编程语言扩展被开发出来。维基百科上的深度学习软件条目列出了二十多个这样的框架,其中大约一半仍在积极开发中。44尽管Caffe (Jia,Shelhamer等2014)是最早用于计算机视觉应用的框架之一,但它大多已被PyTorch和TensorFlow所取代,至少从现在大多数计算机视觉研究论文附带的开源实现来看是这样。
图5.46由Geoffrey Hinton提供的一个Hinton图,显示了三层神经网络中连接各个单元的权重。每个小方框的大小表示每个权重的大小,颜色(黑色或白色)表示符号。
安德鲁·格拉斯纳(2018)的深度学习入门书籍使用了Keras库,因为其简洁性。《深入浅出的深度学习》(张、利普顿等,2021)及其配套课程(斯莫拉和李,2019)在文中所有示例中均使用了MXNet,但最近他们也发布了PyTorch和TensorFlow代码示例。斯坦福大学的CS231n(李、约翰逊和杨,2019)和约翰逊(2020)包括了一门关于PyTorch和TensorFlow基础原理的讲座。一些课程还使用了简化框架,要求学生实现更多组件,例如麦克阿莱斯特(2020)开发并在盖格(2021)中使用的教育框架(EDF)。
除了软件框架和库之外,深度学习代码开发通常还能受益于优秀的可视化库,如TensorBoard和Visdom。此外,除了本节前面提到的模型动物园,还有更高级别的包,例如Classy Vision,这些包允许你无需或仅需少量编程即可训练或微调自己的分类器。安德烈·卡帕西还在http://karpathy.github.io/2019/04/25/recipe提供了一份有用的神经网络训练指南,这可能有助于避免常见问题。
可视化中间结果和最终结果一直是计算机视觉算法开发的重要组成部分(例如图1.7-1.11),是培养直觉、调试或优化结果的极佳方式。在本章中,我们已经看到了一些简单的工具示例
两输入神经网络可视化,例如图5.32中的TensorFlow Playground和图5.38中的ConvNetJS。在本节中,我们讨论用于可视化网络权重的工具,更重要的是,用于可视化网络中不同单元或层的响应函数的工具。
对于如图5.32所示的简单小网络,我们可以使用线条宽度和颜色来表示连接的强度。那么,对于包含更多单元的网络呢?一种巧妙的方法是用不同大小的黑框或白框来表示输入和输出权重的强度,这种方法以发明者的名字命名为欣顿图,如图5.46所示(Ackley,Hinton,和Sejnowski 1985;Rumelhart,Hinton,和Williams 1986b)。
如果我们希望展示给定层中的激活集,例如MNIST或CIFAR-10中最后10分类层的响应,在某些输入或所有输入上,我们可以使用非线性降维技术,如第5.2.4节和图5.21中讨论的t-SNE和UMap。
我们如何可视化深度网络中各个单元(“神经元”)的响应?对于网络的第一层(图5.47左上角),可以直接从给定通道的输入权重(灰色图像)读取响应。我们还可以找到验证集中产生最大响应的区域,这些区域对应于给定通道中的各个单元(图5.47左上角的彩色区域)。(记住,在卷积神经网络中,特定通道中的不同单元对输入的平移版本有相似的响应,忽略边界和混叠效应。)
对于网络的深层,我们可以在输入图像中再次找到最大激活区域。一旦找到这些区域,Zeiler和Fergus(2014)将一个反卷积网络与原始网络配对,以反向传播特征激活,一直追溯到图像区域,从而在图5.47的第2到第5层生成灰度图像。Springenberg、Dosovitskiy等人(2015)开发的一种相关技术称为引导反向传播,可以产生略高的对比度结果。
另一种探究卷积神经网络特征图的方法是确定输入图像的各个部分在给定通道中激活单元的程度。Zeiler和Fergus(2014)通过用一个灰色方块遮挡输入图像的子区域来实现这一点,这不仅生成了激活图,还能显示每个图像区域最可能的标签(图5.48)。Si- monyan、Vedaldi和Zisserman(2013)描述了一种相关的技术,称为显著性图;Nguyen、Yosinski和Clune(2016)将其称为激活最大化;Selvaraju、Cogswell等人(2017)则将其可视化技术称为梯度加权类激活映射(Grad-CAM)。
图5.47可视化网络权重和特征(Zeiler和Fergus2014)©2014
Springer。每个可视化的卷积层都来自一个从Su-
Krzhevsky、Sutskever和Hinton(2012)提出的perVision。3×3子图像表示
将一个特征图(给定层中的通道)中的前9个响应投影回像素
空间(较高层投影到更大的像素块),右侧显示彩色图像
从验证集中提取响应最灵敏的图像补丁,左边的灰色带符号的图像显示了相应的最大刺激前图像。
图5.48来自Zeiler和Fergus(2014)的热图可视化©2014斯普林格。通过用一个小灰方块覆盖输入图像的部分区域,可以可视化第5层中高度活跃通道的响应(第二列),以及特征图投影(第三列)、正确类别的可能性和每个像素最可能的类别。
图5.49 GoogLeNet (Szegedy,Liu)的特征可视化 Olah、Mordvintsev和Schubert(2017)等人在ImageNet上进行训练,建立了不同层的表示。
图5.50对抗图像示例©Szegedy,Zaremba (2013)。对于左列中的每张原始图像,在中间列中添加一个小的随机扰动(放大10×),以获得右列中的图像,该图像总是被分类为鸵鸟。
许多关于可视化神经网络响应和行为的技术已在各种论文和博客中被描述(Mordvintsev,Olah和Tyka 2015;Zhou,Khosla等2015;Nguyen,Yosinski和Clune 2016;Bau,Zhou等2017;Olah,Mordvintsev和Schubert 2017;Olah,Satyanarayan等2018;Camarata,Carter等2020),以及约翰逊(2020,第14讲)的大量讲座幻灯片。图5.49展示了一个例子,展示了预训练的GoogLeNet中的不同层。OpenAI最近还发布了一个名为Microscope的优秀交互工具,49让人们能够可视化许多常见神经网络中每个神经元的重要性。
虽然诸如引导反向传播等技术可以帮助我们更好地可视化神经网络的响应,但它们也可以通过微妙地扰动输入来“欺骗”深度网络,使其错误分类,如图5.50所示。创建此类图像的关键是取一组最终激活值,然后沿“假”类别方向反向传播梯度,更新输入图像,直到假类别成为主导激活。Szegedy、Zaremba等人(2013)将这种扰动的图像称为对抗样本。
运行这个反向传播需要访问网络及其权重,这意味着这是一个白盒攻击,而不是黑盒攻击,在黑盒攻击中,什么都没有
但令人惊讶的是,作者发现“……对抗性示例相对稳健,并且被具有不同层数、激活或在训练数据的不同子集上训练的神经网络共享。”
最初的对抗性攻击发现引发了一系列额外的研究(Goodfellow,Shlens和Szegedy 2015;Nguyen,Yosinski和Clune 2015;Kurakin,Good-fellow和Bengio 2016;Moosavi-Dezfooli,Fawzi和Frossard 2016;Goodfellow,Paper-not等2017)。Eykholt、Evtimov等人(2018)展示了如何通过向现实世界中的物体(如停车标志)添加简单的贴纸,导致神经网络错误分类这些物体的照片。Hendrycks、Zhao等人(2021)创建了一个自然图像数据库,这些图像能够持续欺骗在ImageNet上训练的流行深度分类网络。尽管对抗样本主要用于展示深度学习模型的弱点,但它们也可以用于提高识别能力(Xie,Tan等人2020)。
伊利亚斯、桑图尔卡尔等人(2019)试图揭开对抗样本的神秘面纱,发现这些样本并非像预期那样产生影响人类标签的大规模扰动,而是执行了一种捷径学习(拉普什金、瓦……德琴等人2019;盖尔霍斯、雅各布森等人2020)。他们发现优化器利用了图像标签中的非鲁棒特征;即数据集中存在的、但不易被人类察觉的图像类别的非随机相关性。这些非鲁棒特征对人类观察者来说只是噪声,使得受其扰动的图像大多相同。他们的观点得到了仅基于非鲁棒特征训练分类器的支持,并且发现这些特征与图像分类性能相关。
是否存在防范对抗性攻击的方法?聪明人软件库(Papernot,Faghri等,2018)提供了对抗样本构建技术和对抗训练的实现。此外,还有一篇关于机器学习中安全与隐私的http://www.cleverhans.ioblog文章。Madry,Makelov等(2018)展示了如何训练一个网络,使其对已知测试图像中的有界加性扰动具有鲁棒性。最近的研究还包括通过迫使扰动后的图像在视觉上与其(虚假)目标类别相似来检测(Qin,Frosst等,2020b)和防御对抗性攻击(Qin,Frosst等,2020a)。这一领域仍在不断发展中,对于基于机器学习的应用程序的鲁棒性和安全性有着深远的影响,数据集偏差问题(Torralba和Efros,2011)也可以通过测试跨数据集迁移性能在一定程度上加以防范(Ranftl,Lasinger等,2020)。
正如我们之前提到的,为一个任务(例如,全图像分类)预先训练一个主干(或躯干)网络是很常见的,然后用一个
新的头部(或一个或多个分支),然后对其进行不同的任务训练,例如,语义图像分割(He,Gkioxari等人,2017)。可选地,原始主干网络的最后几层可以进行微调。
将一个任务的训练结果应用于另一个任务的想法被称为迁移学习,而将最终网络调整到其预期应用和统计特性的过程则称为领域适应。尽管这一理念最初是应用于在标记数据集如ImageNet上训练的骨干网络,即完全监督的方式,但预训练于数量庞大的未标记真实世界图像集的可能性始终是一个诱人的选择。
自监督学习的核心思想是创建一个监督预设任务,其中标签可以从未标记的图像中自动推导出来,例如通过让网络预测其余信息的一部分。预训练完成后,网络可以被修改并微调以适应最终的下游任务。Weng(2019)对此主题有一篇精彩的入门博客文章,而Zisserman(2018)则有一场精彩的讲座,在其中使用了“代理任务”这一术语。此外,Jing和Tian(2020)的综述和Ren(2020)的参考书目中也有很好的介绍。
图5.51显示了一些为预处理而提出的借口任务示例
训练图像分类网络。这些包括:
背景预测(Doersch、Gupta和Efros2015):获取附近的图像块并预测它们的相对位置。
背景编码器(Pathak,Krahenbuhl等人,2016):修复图像中一个或多个缺失区域。
9块拼图(Noroozi和Favaro2016):将拼图重新排列到正确的位置。
彩色化黑白图像(Zhang、Isola和Efros2016)。
通过以90°的倍数旋转图像使其竖直(Gidaris、Singh和Ko- modakis2018)。该论文将自己与11种先前的自监督技术进行了比较。
除了使用单图像预设任务外,许多研究人员还使用了视频片段,因为连续的帧包含语义相关的内容。一种利用这些信息的方法是按时间顺序正确排列视频帧,即使用时间版本的情境预测和拼图(Misra,Zitnick和Hebert 2016;Wei,Lim等2018)。另一种方法是将着色扩展到视频中,首先给定第一帧的颜色(Vondrick,
图5.51自监督学习任务示例:(a)猜测图像块的相对位置——你能猜出Q1和Q2的答案吗?(Doersch、Gupta和Efros 2015)©2015 IEEE;(b)解决九片拼图(Noroozi和Favaro 2016)©2016斯普林格;(c)图像着色(Zhang、Isola和Efros 2016)©2016斯普林格;(d)视频颜色转移用于跟踪(Vondrick、Shrivastava等2018)©2016斯普林格。
Shrivastava等人(2018)提出的方法鼓励网络学习语义类别和对应关系。由于视频通常伴有声音,这些声音可以作为自监督的额外线索,例如通过让网络对齐视觉和音频信号(Chung和Zisserman 2016;Arandjelovic和Zisserman 2018;Owens和Efros 2018),或在无监督(对比)框架中使用(Alwassel、Mahajan等2020;Patrick、Asano等2020)。
由于自监督学习显示出了巨大的前景,一个开放的问题是,这些技术是否能在某个时候超越在较小的全标记数据集上训练的完全监督网络的性能。50一些令人印象深刻的结果已经使用
半监督(弱)学习(第5.2.5节)在非常大的(300M–3.5B)部分或噪声标记数据集上进行,例如JFT-300M (Sun,Shrivastava等人,2017年)和Instagram标签(Mahajan,Girshick等人,2018年)。其他研究者尝试同时使用监督学习处理已标记数据和自监督预设任务学习处理未标记数据(Zhai,Oliver等人,2019年;Sun,Tzeng等人,2019年)。事实证明,要充分利用这些方法,需要仔细关注数据集大小、模型架构和容量,以及预设任务的细节(和难度)(Kolesnikov,Zhai,和Beyer,2019年;Goyal,Mahajan等人,2019年;Misra和Maaten,2020年)。与此同时,还有人致力于研究预训练在下游任务中实际带来的真正益处(He,Girshick,和Doll等人,2019年;Newell和Deng,2020年;Feichtenhofer,Fan等人,2021年)。
半监督训练系统自动为预设任务生成真实标签,以便这些标签可以被用于监督学习(例如,通过最小化分类错误)。另一种方法是使用无监督学习结合对比损失(Section5.3.4)或其他排序损失(G mez2019),以鼓励语义相似的输入产生相似的编码,同时将不相似的输入进一步分离。
这通常现在被称为对比(度量)学习。
吴、熊等人(2018)训练一个网络,为每个实例(训练样本)生成独立的嵌入向量,并将其存储在移动平均内存库中,随着新样本通过正在训练的神经网络输入。然后,他们使用嵌入空间中的最近邻来分类新图像。动量对比(MoCo)用固定长度的编码样本队列替代内存库,这些样本通过时间适应的动量编码器输入,该编码器与实际训练的网络分开(何、范等人2020)。预文本不变表示学习(PIRL)使用预文本任务和“多裁剪”数据增强,但随后使用内存库和对比损失比较它们的输出(米斯拉和马滕2020)。简单对比学习框架(SimCLR)使用固定的迷你批次,并在批次中的每个样本与其他所有样本之间应用对比损失(归一化温度交叉熵,类似于公式(5.58)),同时进行激进的数据增强(陈、科尔布利斯等人2020)。MoCo v2结合了MoCo和SimCLR的思想,以获得更好的结果(陈、范等人2020)。而不是直接比较生成的嵌入向量,首先应用一个全连接网络(MLP)。
对比损失是度量学习中的一个有用工具,因为它鼓励嵌入空间中语义相关的输入之间的距离较小。另一种方法是使用深度聚类来同样鼓励相关输入产生相似的输出(Caron,Bo- janowski等2018;Ji,Henriques和Vedaldi 2019;Asano,Rupprecht和Vedaldi 2020;Gidaris,Bursuc等2020;Yan,Misra等2020)。一些最新的使用聚类进行无监督学习的结果现在可以与对比度量学习相媲美。
并且指出,所使用的数据增强方法比选择的实际损失更为重要(Caron,Misra等,2020;Tian,Chen和Ganguli,2021)。在视觉和语言的背景下(第6.6节),CLIP (Radford,Kim等,2021)通过对比学习和“自然语言监督”在图像分类中实现了显著的泛化能力。他们使用了包含4亿个文本和图像对的数据集,任务是输入一张图像和32,768个随机抽取的文本片段,预测哪个文本片段真正与该图像配对。
有趣的是,最近发现仅在语义相似的输入之间强制相似性的表示学习也能很好地工作。这似乎违反直觉,因为如果没有对比学习中的负样本对,表示很容易通过预测任何输入的常数并最大化相似性而崩溃到平凡解。为了避免这种崩溃,通常会仔细关注网络设计。Bootstrap Your Own Latent(BYOL)(Grill,Strub等2020)表明,通过在线网络侧的动量编码器、额外的预测器MLP和目标网络侧的停止梯度操作,可以成功地从MoCo v2训练中移除负样本。SimSiam (Chen和He 2021)进一步证明,即使不需要动量编码器,仅使用停止梯度操作就足以让网络学习有意义的表示。虽然这两个系统都通过梯度更新联合训练预测器MLP和编码器,但最近的研究表明,可以直接使用输入在预测层之前的统计信息来设置预测器权重(Tian,Chen和Ganguli 2021)。Feicht- enhofer,Fan等人(2021)比较了这些无监督表示学习技术在多种视频理解任务上的表现,发现所学的空间时间表示能够很好地泛化到不同的任务。
对比学习和相关工作依赖于数据增强的组合(例如。
颜色抖动、随机裁剪等)来学习对这些变化不变的表示(陈和何2021)。另一种尝试是使用生成模型(陈、拉德福德等人2020),其中表示通过预测像素进行预训练,可以采用自回归(如GPT或其他语言模型)方式或去噪(如BERT、掩码自编码器)方式。生成模型有潜力弥合从视觉到自然语言处理领域的自监督学习差距,目前可扩展的预训练模型已占据主导地位。
自监督学习的最后一个变体是使用学生-教师模型,其中教师网络用于向学生网络提供训练样本。这类架构最初被称为模型压缩(Bucil、Caruana和Niculescu-Mizil 2006)和知识蒸馏(Hinton、Vinyals和Dean 2015),用于生成更小的模型。然而,当与额外数据和更
大容量网络结合时,它们也可以用来提高性能。Xie、Luong等人(2020)训练
在标注的ImageNet训练集上使用EfficientNet(Tan和Le 2019),然后利用该网络对额外的3亿未标注图像进行标注。随后,使用真实标签和伪标签图像来训练一个更高容量的“学生”模型,通过正则化(如丢弃)和数据增强来提高泛化能力。这一过程不断重复,以实现进一步的改进。
总的来说,自监督学习目前是深度学习中最令人兴奋的子领域之一,许多顶尖研究者认为它可能是实现更优深度学习的关键(LeCun和Bengio 2020)。为了进一步探索这些实现,VISSL提供了本节中描述的许多最先进自监督学习模型(带权重)的开源PyTorch实现。
5.5 更复杂的模型
虽然深度神经网络最初用于二维图像理解和处理应用,但现在它们也被广泛应用于三维数据,如医学图像和视频序列。我们还可以通过将一个时间帧的结果传递给下一个时间帧(甚至前后传递)来串联一系列深度网络。在本节中,我们将首先探讨三维卷积,然后讨论递归模型,这些模型可以向前或双向传播信息。我们还将研究生成模型,这些模型可以从语义或相关输入中合成全新的图像。
正如我们刚才提到的,计算机视觉中的深度神经网络最初用于处理常规的二维图像。然而,随着共享和分析的视频量增加,深度网络也被应用于视频理解,这在第6.5节中详细讨论。我们还看到这些技术在三维体积模型中的应用,例如从测距数据生成的占用地图(第13.5节)和体积医学图像(第6.4.1节)。
乍一看,我们已经研究过的卷积网络,如图5.33,5.34和5.39所示,似乎已经执行了三维卷积,因为它们的输入感受野是(x;y;c)中的三维框,其中c是(特征)通道维度。因此,原则上我们可以将滑动窗口(例如时间或高度上的)适配到二维网络中,然后就完成了。或者,我们可以使用类似分组卷积的方法。然而,
(Karpathy,Toderici等人,2014)©2014 IEEE。
一次性操作一个完整的3D体积,以及在所有内核中共享第三个维度的重量,以及在每一层都有多个输入和输出特征通道,这更加方便。
三维卷积最早的应用之一是在视频数据处理中分类人类动作(Kim、Lee和Yang 2007;Ji、Xu等2013;Baccouche、Mamalet等2011)。Karpathy、Toderici等人(2014)描述了多种融合时间信息的替代架构,如图5.52所示。单帧方法独立地对每一帧进行分类,完全依赖于该帧的内容。后期融合则从每帧生成特征,并进行片段级别的分类。早期融合将相邻的小帧组分入多通道的二维卷积神经网络。正如前面提到的,跨时间的交互不具备卷积方面的权重共享和时间平移不变性。最后,三维卷积神经网络(Ji、Xu等2013)(本图未显示)学习三维空间和时间不变性的核函数,这些核函数在时空窗口上运行并融合成最终得分。
Tran、Bourdev等人(2015)展示了如何通过在深度网络中结合非常简单的3×3×3卷积和池化来获得更好的性能。他们的C3D网络可以被视为“3D CNN的VGG”(Johnson 2020,第18讲)。Carreira和Zisserman(2017)将这种架构与包括通过并行路径分析像素和光流构建的双流模型进行了比较(图6.44b)。第6.5节关于视频理解讨论了这些及其他用于此类问题的架构,这些问题也受到了诸如递归神经网络(RNN)和LSTM等顺序模型的挑战,我们将在第5.5.2节中讨论。Johnson(2020)的第18讲关于视频理解的内容对所有这些视频理解架构进行了很好的综述。
除了视频处理之外,三维卷积神经网络还被应用于体积图像处理。两个从范围数据中建模和识别形状的例子,即3D ShapeNets(Wu,Song et al.2015)和VoxNet(Maturana和Scherer2015)
图5.53三维卷积网络应用于体积数据进行物体检测:
(a) 3D ShapeNets (Wu,Song等人,2015)©2015 IEEE;(b) VoxNet (Maturana和Scherer
2015)©2015 IEEE。
如图5.53所示,它们在医学图像分割中的应用实例
(Kamnitsas、Ferrante等人,2016;Kamnitsas、Ledig等人,2017)在第6.4.1节中进行了讨论。
我们在第13.5.1节中更详细地讨论了神经网络方法在三维建模中的应用
14.6.
与常规的二维卷积神经网络一样,三维卷积神经网络架构可以利用不同的空间和时间分辨率、步长以及通道深度,但它们可能非常耗费计算和内存。为了应对这一问题,Feichtenhofer、Fan等人(2019)开发了一种双流SlowFast架构,其中慢路径以较低的帧率运行,并与快速路径的特征结合,后者具有更高的时间采样率但通道数较少(图6.44c)。视频处理网络还可以通过使用通道分离卷积(Tran、Wang等人,2019)和神经架构搜索(Feichtenhofer,2020)来提高效率。多网格技术(附录A.5.3)也可以用于加速视频识别模型的训练(Wu、Girshick等人,2020)。
图5.54 Mesh R-CNN系统概述(Gkioxari、Malik和Johnson,2019)©
2019 IEEE。Mask R-CNN主干被两个3D形状推理分支增强。
体素分支预测每个检测到的对象的粗略形状,该形状在网格细化分支中通过一系列细化阶段进一步变形。
除了处理诸如体积密度、隐式距离函数和视频序列等三维网格数据外,神经网络还可以用于从单张图像推断出三维模型。一种方法是预测每个像素的深度,我们将在第12.8节中研究这一点。另一种方法是重建使用体积密度表示的完整三维模型(Choy,Xu等,2016),我们将在第13.5.1节和第14.6节中讨论。然而,一些更近期的实验表明,这些三维推理网络(Tatarchenko,Dosovitskiy和Brox,2017;Groueix,Fisher等,2018;Richter和Roth,2018)可能只是识别一般对象类别并进行少量拟合(Tatarchenko,Richter等,2019)。
三维点云的生成和处理也得到了广泛研究(Fan,Su,and Guibas2017;Qi,Su et al.2017;Wang,Sun et al.2019)。Guo,Wang et al.(2020)提供了一个全面的调查,回顾了该领域的200多篇出版物。
最后一种选择是从RGB-D (Wang,Zhang等,2018)或常规RGB (Gkioxari,Malik和Johnson,2019;Wickramasinghe,Fua和Knott,2021)图像中推断出三维三角化网格。图5.54展示了Mesh R-CNN系统的组成部分,该系统首先重建体积模型,然后检测三维物体的图像,并将每个图像转换为三角化网格。所需的基本操作和表示方法包括
图5.55深度循环神经网络(RNN)使用多个阶段处理序列数据,一个阶段的输出作为下一个阶段的输入。©Glassner(2018)。每个阶段都保持自己的状态并反向传播其梯度,尽管权重在所有阶段之间共享。(a)列显示了一个更紧凑的汇总图,而(b)列则显示了相应的展开版本。
虽然二维和三维卷积网络是处理图像和体积的良好选择,但有时我们希望处理一系列图像、音频信号或文本。利用先前已知信息的一个好方法是在某一时间点(例如视频帧)检测到的特征作为下一帧处理的输入。这种架构被称为递归神经网络(RNN),详细描述见古德费洛、本吉奥和库尔维尔(2016年,第10章)以及张、利普顿等人(2021年,第8章)。图5.55展示了此类架构的示意图。深层网络不仅将信息传递给后续层(最终输出),还将其部分信息作为下一层数据处理的输入。各层之间共享权重(类似于三维卷积核),反向传播需要计算所有展开单元(时间实例)的导数,并将这些导数相加以获得权重更新。
因为梯度可以在时间上向后传播很长的距离,因此可能会消失或爆炸(就像在残差网络出现之前的深度网络一样),所以也可以添加额外的门控单元来调节帧间的信息流动。这种架构被称为门控循环单元(GRU)和长短期记忆(LSTM)。
(Hochreiter和Schmidhuber1997;Zhang,Lipton等人2021,第9章)。
循环神经网络和长短期记忆网络常用于视频处理,因为它们能够融合随时间变化的信息并建模时间依赖关系(Baccouche,Mamalet等2011;Donahue,Hendricks等2015;Ng,Hausknecht等2015;Srivastava,Mansimov,和Salakhudinov 2015;Ballas,Yao等2016),以及语言模型、图像描述和视觉问答。我们将在第6.5节和第6.6节中详细讨论这些主题。它们还偶尔被用于在立体视觉中合并多视图信息(Yao,Luo等2019;Riegler和Koltun 2020a),以及以完全可微(因此可训练)的方式模拟迭代流算法(Hur和Roth 2019;Teed和Deng 2020b)。
为了在时间上传播信息,RNN、GRU和LSTM需要在传递的时间步之间隐藏状态中编码所有可能有用的先前信息。在某些情况下,序列建模网络需要回溯(或甚至向前)更远的时间。这种能力通常被称为注意力机制,在张、利普顿等人(2021年,第10章)、约翰逊(2020年,第12讲)以及关于变压器的第5.5.3节中有详细描述。简而言之,具有注意力机制的网络存储键值列表,可以通过查询来探测这些列表,根据查询与每个键之间的对齐情况返回加权混合值。在这个意义上,它们类似于我们在第4.1.1节中研究的核回归(4.12–4.14),不同之处在于查询和键在通过softmax确定混合权重之前会进行乘法运算(并赋予适当的权重)。
注意力机制可以用于回顾先前时间实例中的隐藏状态(这被称为自注意力),也可以用于查看图像的不同部分(视觉注意力,如图6.46所示)。我们将在第6.6节关于视觉和语言的部分中详细讨论这些主题。在识别或生成序列时,例如句子中的单词,注意力模块通常与顺序模型如RNN或LSTM协同工作。然而,最近的研究已经使得可以在一个并行步骤中将注意力应用于整个输入序列成为可能,具体描述见第5.5.3节关于变压器的内容。
本节中的简要描述仅略窥深度序列建模这一广泛主题的皮毛,该主题通常在深度学习课程中通过几讲(例如,John- son2020,第12-13讲)和深度学习教科书中的若干章节(Zhang,Lipton等2021,第8-10章)进行详细阐述。感兴趣的读者可参考这些资料获取更详尽的信息。
变压器是一种新颖的架构,它添加了注意力机制(我们将其去-
(见下文)是Vaswani、Shazeer等人(2017年)首次引入的深度神经网络
在神经机器翻译的背景下,任务是将文本从一种语言翻译成另一种语言(Mikolov,Sutskever等,2013)。与处理输入标记逐个的循环神经网络及其变体(第5.5.2节)不同,变压器可以一次性处理整个输入序列。自首次引入以来,变压器成为自然语言处理(NLP)中许多任务的主要范式,使得BERT (Devlin,Chang等,2018)、RoBERTa (Liu,Ott等,2019)和GPT-3 (Brown,Mann等,2020)等模型取得了令人印象深刻的结果。随后,变压器在处理自然语言组件以及许多视觉和语言任务的后续层时开始取得成功(第6.6节)。最近,它们在纯计算机视觉任务中也获得了关注,在多个流行基准测试中甚至超过了卷积神经网络。
将变压器应用于计算机视觉的动机与应用于自然语言处理不同。RNN由于顺序处理输入而存在问题,而卷积则没有这个问题,因为其操作本身是并行的。相反,卷积的问题在于其归纳偏见,即编码到卷积模型中的默认假设。
卷积操作假设邻近像素比远距离像素更重要。只有当多个卷积层堆叠在一起时,感受野才会足够大以关注整个图像(Araujo,Norris,和Sim 2019),除非网络配备了非局部操作(Wang,Girshick等2018),类似于某些图像去噪算法中使用的操作(Buades,Coll,和Morel 2005a)。正如我们在本章中所见,卷积的空间局部性偏见在计算机视觉的许多方面取得了显著成功。但随着数据集、模型和计算能力呈指数级增长,这些归纳偏见可能成为阻碍进一步发展的因素。54
变压器的基本组件是自注意力机制,它通过在网络中给定层的每个单元激活应用注意力来构建。55注意力通常用编程语言和数据库中的关联映射或字典的概念作比喻。给定一组键值对{(ki;vi)}和查询q,字典会返回与查询完全匹配的键ki对应的值vi。在神经网络中,键和查询值是实数值向量(例如,激活的线性投影),因此相应的操作返回一个加权值之和,其中权重取决于查询与键集之间的两两距离。这基本上与散点数据插值相同,我们曾在研究过。
图5.56自注意力计算图用于计算单个输出向量x,由Matt Deitke提供,改编自Vaswani、Huang
和Manning(2019)。请注意,完整的自注意力操作还为x、x和x4分别计算了输入到查询(此处为x2)在x1、x3和x4之间的输出。对于
matmul V、matmulK和matmulQ,都有一个权重矩阵,在每次调用时都会被重用。
第4.1.1节,如张、利普顿等人(2021年,第10.2节)所指出。然而,神经网络中的注意力机制通常不使用径向距离(4.14),而是采用缩放点积注意力机制(瓦斯瓦尼、沙泽尔等人2017年;张、利普顿等人2021年,第10.3.3节),该机制涉及查询向量和键向量之间的点积,通过这些嵌入向量的维度D的平方根进行缩放,然后应用(5.5)中的softmax函数,即,
(5.77)
其中,K和V分别是由键向量和值向量组成的行堆叠矩阵,y是注意力算子的输出。57
给定一组输入向量{x0;x1;...;xN - 1 },自注意力操作产生一组输出向量{x;x;...;x - 1 }。图5.56显示了N =
4的
情况,其中
自注意力计算图用于获得单个输出向量x。如图所示,自注意力使用三个学习
到的权重矩阵Wq、Wk和Wv,它们决定了
qi = Wqxi;ki = Wkxi;和vi = Wv xi (5.78)
每个注意力块中输入的单位查询、键和值向量。加权和为
然后,值可选地通过多层感知器(MLP)来产生x。
与全连接层或卷积层相比,自注意力机制根据所有输入向量{x0;x1;...;xN - 1 }计算每个输出(例如,xi)。因此,它常被比作全连接层,但权重不是固定不变的,而是根据输入即时调整(Khan,Naseer等,2021)。与卷积相比,自注意力机制能够从一开始就关注输入的每一个部分,而不是局限于输入的局部区域,这可能有助于引入图6.8所示对象所需的上下文信息。
有几个组件与自注意力机制结合,生成一个转换器块,如瓦斯瓦尼、沙泽尔等人(2017)所述。完整的变压器包括编码器和解码器两个部分,尽管两者共享许多相同的组件。在许多应用中,可以使用编码器而不使用解码器(德夫林、张等人,2018;多索维茨基、贝耶等人,2021),反之亦然(拉扎维、范登奥德和文亚尔,2019)。
图5.57右侧显示了变压器编码器模块的一个示例。对于编码器和解码器:
•我们可以不建模集合到集合的操作,而是通过向每个输入向量添加位置编码来建模序列到序列的操作(Gehring,Auli等,2017)。位置编码通常由一组时间偏移的正弦波组成,从中可以解码出位置信息。(这种位置编码最近也被添加到隐式神经形状表示中,我们将在第13.5.1节和第14.6节中研究。)
•代替对输入应用单一的自注意力操作,通常会将多个自注意力操作组合在一起,使用不同的学习权重矩阵来构建不同的键、值和查询,形成多头自注意力(Vaswani,Shazeer等,2017)。每个头的结果随后被连接在一起,然后通过一个MLP。
•然后将层归一化(Ba、Kiros和Hinton2016)应用于MLP的输出。然后,每个向量可以独立地通过另一个具有共享权重的MLP,然后再应用层归一化。
在多头注意力机制和最终MLP之后采用残余连接(He,Zhang等人,2016a)。
训练过程中,解码器最大的不同在于自注意力机制中的一些输入向量可能会被屏蔽,这有助于支持自回归预测任务中的并行训练。关于变压器架构的详细说明和实现,请参见Vaswani、Shazeer等人(2017)以及附加阅读材料(第5.6节)。
将变压器应用于图像领域的一个关键挑战与图像输入的大小有关(Vaswani,Shazeer等,2017)。设N表示输入长度,D表示每个输入条目的维度数,K表示卷积(侧)核的大小。自注意力机制所需的浮点运算次数(FLOPs)约为O(N^2D),而卷积操作的FLOPs则约为O(ND^2K^2)。例如,对于一个缩放至224×224×3的ImageNet图像,如果每个像素独立处理,则N = 224×224 = 50176,D = 3。在这里,卷积比自注意力机制显著更高效。相比之下,像神经机器翻译这样的应用可能只有N表示句子中的单词数,D表示每个词嵌入的维度(Mikolov,Sutskever等,2013),这使得自注意力机制更加高效。
图像变换器(Parmar、Vaswani等,2018)是首次尝试将完整的变压器模型应用于图像领域,许多介绍变压器的作者也参与了这一研究。它使用了编码器和解码器,试图构建一个自回归生成模型,该模型能够根据输入像素序列和所有先前预测的像素来预测下一个像素。(王、Girshick等(2018)关于非局部网络的早期工作也借鉴了变压器的思想,但采用了更简单的注意力块和完全二维的设置。)每个输入向量对应一个像素,这最终限制了它们生成的小图像尺寸(即32×32),因为自注意力机制的二次成本过高。
多沃维茨基、贝耶等人(2021)取得了一项突破,使得变压器能够处理更大的图像。图5.57展示了名为视觉变压器(ViT)的模型图。对于图像识别任务,他们没有将每个像素视为变压器的独立输入向量,而是将一张224×224的图像分割成196个不同的16×16网格图像块。每个块被展平后,通过一个共享嵌入矩阵,这相当于一个步长为16×16的卷积,结果与位置编码向量结合后传递给变压器。早期的工作
在Section5.4on卷积架构中,我们使用C来表示通道数,而不是D来表示嵌入维度。
图5.57来自(Dosovitskiy,Beyer的视觉变换器(ViT)模型 etal2021)将图像分解为一个16×16的补丁网格。每个补丁随后被展平,通过共享嵌入矩阵,并与位置编码向量结合。这些输入随后多次通过变压器编码器(右侧),然后预测图像的类别。
Cordonnier、Loukas和Jaggi(2019)引入了类似的补丁方法,但规模较小,为2×2补丁。
ViT只有在使用超过一亿张来自JFT-300M的训练图像时(Kolesnikov,Beyer等,2020),才能超越其卷积基线BiT(Sun,Shrivastava等,2017)。仅使用ImageNet,或从JPT-300中随机选取一千万或三千万张训练样本时,ViT模型的表现通常远逊于BiT基线。他们的结果表明,在低数据量领域,卷积中固有的归纳偏置通常非常有用。但是,当数据量增加几个数量级时,变压器模型可能会发现更好的表示方法,而这些方法是卷积神经网络无法实现的。
一些研究还尝试将卷积的归纳偏置与变压器结合(Srinivas,Lin等,2021;Wu,Xiao等,2021;Lu,Batra等,2019;Yuan,Guo等,2021)。一个具有影响力的网络示例是DETR (Carion,Massa等,2020),该网络应用于目标检测任务。它首先使用ResNet主干处理图像,输出结果传递给变压器编码器-解码器架构。他们发现加入变压器可以提高检测大物体的能力,这被认为是因为变压器能够全局地推理输入编码向量之间的对应关系。
变压器在计算机视觉领域的应用和实用性仍在广泛研究中。然而,它们已经在计算机视觉领域取得了令人印象深刻的表现。
广泛的任务,新论文迅速发表。59更多值得注意的应用包括图像分类(刘、林等2021;图沃龙、科尔德等2020),物体检测(戴、蔡等2020;刘、林等2021),图像预训练(陈、拉德福德等2020),语义分割(郑、陆等2020),姿态识别(李、王等2021),超分辨率(曾、傅、曹2020),色彩化(库马尔、魏森博恩、卡尔布伦纳2021),生成建模(江、张、王2021;哈德森和齐特尼克2021),以及视频分类(阿纳布、德赫加尼等2021;范、熊等2021;李、张等2021)。近期研究还成功地将ViT的补丁嵌入扩展到纯MLP视觉架构(托尔斯蒂欣、豪尔比等2021;刘、戴等2021;图沃龙、博亚诺夫斯基等2021)。视觉和语言应用详见第6.6节。
在本章中,我提到过诸如逻辑回归、支持向量机、随机树和前馈深度神经网络等机器学习算法都是判别系统的一个例子,这些系统从未形成它们试图估计的数量的显式生成模型(Bishop 2006,第1.5节;Murphy 2012,第8.6节)。除了这两本教科书中讨论的生成模型的潜在优势外,Goodfellow(2016)和Kingma与Welling(2019)还列出了其他一些优势,例如能够可视化我们对未知变量的假设、使用缺失或不完全标记的数据进行训练,以及生成多个替代结果的能力。
在计算机图形学中,有时也称为图像合成(与我们在计算机视觉中进行的图像理解和图像分析相对),能够轻松生成逼真的随机图像和模型一直是必不可少的工具。这类算法的例子包括纹理合成和风格迁移,我们将在第10.5节中详细研究,还有分形地形(Fournier、Fussel和Carpenter 1982)以及树木生成(Prusinkiewicz和Lindenmayer 1996)。图5.60和10.58展示了深度神经网络用于生成这些新颖图像的例子,通常是在用户控制下进行的。相关技术也被应用于新兴的神经渲染领域,我们将在第14.6节中讨论。
我们如何解锁深度神经网络展现的强大能力,以捕捉语义,从而可视化样本图像并生成新的图像?一种方法是使用第5.4.5节介绍的可视化技术。但正如图5.49所示,虽然这些技术可以让我们了解单个单元,却无法创建
非常逼真的图像。
另一种方法可能是构建一个解码器网络,以撤销原始(编码器)网络执行的分类。这种“瓶颈”架构被广泛使用,如图5.37a所示,用于从图像中提取每个像素的语义标签。我们能否利用类似的想法生成逼真的图像?
变分自编码器
一种网络将图像编码成小而紧凑的代码,然后尝试将其解码回相同的图像,这种网络被称为自编码器。这些紧凑的代码通常表示为向量,常称为潜在向量,以强调它是隐藏且未知的。自编码器在神经网络中的应用历史悠久,甚至早于当今的前馈网络(Kingma和Welling 2019)。曾经认为这可能是预训练网络的好方法,但我们在第5.4.7节研究的更具挑战性的代理任务已被证明更为有效。
在高层次上,为了在一个图像数据集上训练自动编码器,我们可以使用一个无监督的目标函数,该函数试图让解码器的输出图像与输入到编码器的训练图像相匹配。为了生成新的图像,我们可以随机抽取一个潜在向量,并希望从这个向量中,解码器能够生成一个新的图像,使其看起来像是来自我们数据集中训练图像分布的一部分。
使用自动编码器时,每个输入到其潜在向量之间存在确定性的、一对一的映射。因此,生成的潜在向量数量与输入数据点的数量完全匹配。如果编码器的目标是生成易于解码的潜在向量,一种可能的解决方案是每个潜在向量都与其他所有潜在向量相距甚远。在这种情况下,解码器可以过度拟合它见过的所有潜在向量,因为这些向量都是独特的,几乎没有重叠。然而,我们的目标是随机生成可以传递给解码器以生成逼真图像的潜在向量,因此我们希望潜在空间既能够充分探索,又能编码一些意义,例如相邻向量在语义上相似。Ghosh、Sajjadi等人(2019)提出了一种潜在解决方案,即向潜在向量中注入噪声,并通过实验证明这种方法效果很好。
自动编码器的另一个扩展是变分自编码器(VAE)(Kingma和Welling 2013;Rezende、Mohamed和Wierstra 2014;Kingma和Welling 2019)。它不是为每个输入生成一个单一的潜在向量,而是生成定义所选潜在向量分布的均值和协方差。然后可以从该分布中采样出一个潜在向量,该向量被传递给解码器。为了避免协方差矩阵变成零矩阵,使得采样过程变得确定性,目标函数通常包含一个正则化项来惩罚分布过于集中。
图5.58 VQ-VAE模型。左侧,ze (x)表示编码器的输出,上方的嵌入空间表示包含K个嵌入向量的码本,q(z j x)表示将编码器输出中的每个空间(即通道)向量替换为其在码本中最接近的向量的过程。右侧,我们看到ze (x)向量(绿色)可能被四舍五入到e2,而编码器网络中的梯度(红色)在反向传播过程中可能会将该向量从e2推离。©van den Oord,Vinyals和Kavukcuoglu(2017)
来自一些选定的(例如高斯)分布。由于其概率性质,VAE可以比自动编码器更好地探索可能的潜在向量空间,使解码器更难过度拟合训练数据。
受到自然语言离散性和图像通常可以用语言描述的启发(第6.6节),范登奥德、维尼亚尔斯和卡武库奥卢(2017)提出的向量量化VAE(VQ-VAE)采用了一种用分类变量建模潜在空间的方法。图5.58展示了VQ-VAE架构的概要。编码器和解码器的工作方式与普通VAE相同,其中编码器从输入中预测某个潜在表示,而解码器则从潜在表示生成图像。然而,与普通VAE不同的是,VQ-VAE用离散向量集(称为代码本)中的最近向量替换了预测潜在表示的每个空间维度。离散化的潜在表示随后传递给解码器。代码本中的向量与VAE的编码器和解码器同时训练。在这里,代码本向量被优化以更接近由编码器输出的空间向量。
尽管VQ-VAE使用了一个离散的向量码本,但它能够表示的图像数量仍然极其庞大。在他们的一些图像实验中,将码本的大小设置为K = 512个向量,并将潜在变量的大小设置为z = 32×32×1。这样,他们可以表示512³·32·1个可能的图像。
与通常假设高斯潜在分布的VAE相比,潜在
VQ-VAE的分布并不那么明确,因此需要训练一个独立的生成模型来采样潜在变量z。该模型是在训练数据中使用已训练的VQ-VAE编码器输出的最终潜在变量进行训练的。对于图像而言,z中的条目通常具有空间依赖性,例如,一个对象可能被编码在许多相邻的条目上。通过从离散向量代码集中选择条目,我们可以使用PixelCNN (van den Oord,Kalchbrenner等,2016)根据先前采样的邻近条目自回归地采样潜在变量的新条目。PixelCNN还可以有条件地训练,这使得能够根据特定的图像类别或特征采样潜在变量。
VQ-VAE模型的后续版本,名为VQ-VAE-2 (Razavi、van den Oord和Vinyals 2019),采用两级解码图像的方法,通过使用小和大的潜在向量,能够获得更高保真的重建和生成图像。第6.6节讨论了Dall·E(Ramesh、Pavlov等2021),该模型将VQ-VAE-2应用于文本到图像的生成,并取得了显著成果。
另一种图像合成的可能性是利用预训练网络计算出的多分辨率特征来匹配给定纹理或风格图像的统计特性,如图10.57所示。虽然这类网络对于匹配特定艺术家的风格和照片的高层次内容(布局)非常有用,但它们不足以生成完全逼真的图像。
为了生成真正逼真的合成图像,我们希望确定一张图像是真实的(逼真)还是假的。如果存在这样的损失函数,我们可以用它来训练网络生成合成图像。但是,由于这种损失函数难以手动编写,为什么不训练一个单独的神经网络来扮演批评者的角色呢?这是由古德费洛、普热-阿巴迪等人(2014)引入的生成对抗网络的主要见解。在他们的系统中,生成器网络G的输出被输入到另一个判别器网络D中,其任务是区分“假”的合成图像和真实图像,如图5.59a所示。生成器的目标是创建能够“欺骗”判别器将其接受为真实的图像,而判别器的目标则是抓住“伪造者”的行为。两个网络同时进行联合训练,使用一系列损失函数来鼓励每个网络完成其任务。联合损失函数可以表示为
EGAN(wG,wD)= log D(xn)+ log(1 - D(G(zn))), (5.79)
其中{xn }是真实世界的训练图像,{zn }是随机向量
图5.59 Pan、Yu的生成对抗网络(GAN)架构 等(2019)©2019 IEEE. (a)在常规的生成对抗网络中,随机的“潜在”噪声向量z被输入到生成器网络G中,该网络生成合成的“假”图像x,= G(z)。判别器D的任务是区分这些假图像与真实样本x。(b)在条件生成对抗网络(cGAN)中,网络会在训练过程中遍历我们希望生成的所有类别。生成器G以类别ID c和随机噪声向量z作为输入,且
判别器D也获得类别ID,并需要确定其输入是否是给定类别的真实成员。(c)InfoGAN中的判别器无法访问类别ID,但必须从给定的样本中推断出来。
通过生成器G产生合成图像xn,{wG,wD }是生成器和判别器中的权重(参数)。
我们不是最小化这一损失,而是调整生成器的权重以最小化第二项(它们不影响第一项),同时调整判别器的权重以最大化这两项,即最小化判别器的误差。这个过程通常被称为极小极大博弈。关于该公式及其优化方法的更多细节,可以在古德费洛、普热-阿巴迪等人(2014)的原始论文中找到,也可以在深度学习教材(张、利普顿等人2021,第17章)、讲座(约翰逊2020,第20讲)、教程(古德费洛、伊索拉等人2018)和综述文章(克雷斯韦尔、怀特等人2018;潘、余等人2019)中找到。
古德费洛、普热-阿巴迪等人(2014)的原始论文使用了一个小型的全连接网络来展示基本思想,因此只能生成32×32的图像,如MNIST数字和低分辨率人脸。拉德福德、梅茨和钦塔拉(2015)引入的深度卷积生成对抗网络(DCGAN)使用图5.37a所示的反卷积网络的后半部分,将随机潜在向量z映射到任意大小的图像,因此可以生成更广泛种类的输出,而LAPGAN则使用
一个对抗网络的拉普拉斯金字塔(Denton,Chintala等人,2015)。在不同的潜在向量之间混合(或在某些方向上扰动它们)生成中间合成图像。
生成对抗网络(GAN)和深度判别生成对抗网络(DCGAN)可以训练生成给定类别的新样本,但使用同一训练网络从不同类别生成样本更为有用。由米尔扎和奥斯因德罗(2014)提出的条件生成对抗网络(cGAN),通过向生成器输入一个类别向量来实现这一点,该向量不仅影响生成器的输出,还影响判别器,如图5.59b所示。此外,还可以通过增加一个互信息项,让判别器预测与类别向量相关的类别,如图5.59c所示(陈、段等人,2016)。这使得生成的信息对抗网络能够学习解耦表示,例如MNIST中的数字形状和书写风格,或姿态和光照。
虽然生成随机图像可以有许多有用的图形应用,例如生成纹理、填充孔洞和美化照片,如第10.5节所述,但当这些操作可以在人的艺术控制下完成时,其价值更加凸显(Lee,Zitnick,和Cohen 2011)。由Zhu和Kra开发的iGAN交互式图像编辑系统... ...henbuhl等人(2016)通过使用生成对抗网络学习一个逼真的图像流形,然后限制用户编辑(甚至草图),以产生位于该流形上的图像。
这种方法被Isola、Zhu等人(2017)推广到所有其他图像到图像的转换任务,如图5.60a所示。在他们的pix2pix系统中,输入可以是草图或语义标签,这些图像被送入一个修改后的U-Net,将其转换为具有不同语义意义或风格的图像(例如照片或道路地图)。当输入是语义标签图,输出是逼真的图像时,这一过程通常被称为语义图像合成。翻译网络通过条件GAN进行训练,该网络在训练时使用来自两个域的配对图像,并让判别器判断合成(翻译)的图像与输入图像是否为真实或虚假对。回到图5.59b,类别c现在是一个完整的图像,它被送入G和判别器D,以及其配对或合成的输出。判别器不再对整个图像做出决定,而是查看重叠的块,并逐块地做出决策,这需要更少的参数,并提供更多的训练数据和更有区分性的反馈。在他们的实现中,没有随机向量z;相反,在训练和“测试”(翻译)时间都使用了dropout,这相当于在网络的不同层级注入噪声。
在许多情况下,配对的图像不可用,例如,当你有来自不同地点的绘画和照片集合,或者动物的两张不同的图片
图5.60图像到图像的转换。(a)给定配对的训练图像,原始的pix2pix系统学会了如何将素描转化为照片、语义地图转化为图像以及其他像素重映射任务(Isola,Zhu等2017)©2017 IEEE。(b) CycleGAN不需要配对的训练图像,只需要来自不同来源的集合,例如绘画和照片或马和斑马(Zhu,Park等2017)©2017 IEEE。
如图5.60b所示,在这种情况下,可以使用循环一致性对抗网络(Cycle- GAN)来要求两个域之间的映射鼓励同一性,同时确保生成的图像在感知上与训练图像相似(Zhu,Park等,2017)。DualGAN(Yi,Zhang等,2017)和DiscoGAN(Kim,Cha等,2017)采用了类似的思想。Zhu,Zhang等(2017)的BicycleGAN系统也使用了类似的转换周期思想,以促进编码的潜在向量对应于输出的不同模式,从而提高可解释性和控制力。
自GAN论文发表以来,扩展、应用和后续论文的数量呈爆炸式增长。GAN动物园网站61列出了2014年至2018年中期发布的500多篇GAN论文,此后该网站停止更新。大量
图5.61语义图像金字塔可用于选择在编辑图像时修改深度网络中的哪个语义级别(Shocher,Gandelsman (et al.2020)©2020 IEEE。
每年都有论文出现在视觉、机器学习和图形会议上。
自2017年以来的一些重要论文包括:Wasserstein GANs(Arjovsky、Chintala和Bottou 2017)、Progressive GANs(Karras、Aila等2018)、UNIT(Liu、Breuel和Kautz 2017)和MUNIT(Huang、Liu等2018)、谱归一化(Miyato、Kataoka等2018)、SAGAN (Zhang、Goodfellow等2019)、BigGAN (Brock、Donahue和Simonyan 2019)、StarGAN(Choi、Choi等2018)和StyleGAN (Karras、Laine和Aila 2019),以及后续论文(Choi、Uh等2020;Karras、Laine等2020;Viazovetsky、Ivashkin和Kashin 2020)、SPADE (Park、Liu等2019)、GANSpace(Ha...o...nen、rk Hertzmann等2020)和VQGAN (Esser、Rombach和Ommer 2020)。您可以在约翰逊的讲座(2020,第20讲)、古德费洛、Isola等人的教程(2018)以及克雷斯韦尔、怀特等人的综述文章(2018)、潘、余等人的综述文章(2019)和特瓦里、弗里德等人的综述文章(2020)中找到更多详细解释和参考文献。
总之,生成对抗网络及其众多扩展仍然是一个极其活跃且有用的研究领域,应用包括图像超分辨率(第10.3节)、逼真图像合成(第10.5.3节)、图像到图像转换以及交互式图像编辑。最近两个此类应用的例子是Shocher、Gandelsman等人(2020年)提出的图像生成语义金字塔,其中语义操作级别可以控制(从小纹理变化到高级布局变化),如图5.61所示,以及Swapping Autoencoder。
Park、Zhu等人(2020)中,结构和纹理可以独立编辑。
5.6 其他阅读材料
机器学习和深度学习是丰富而广泛的主题,它们理应拥有自己的课程来掌握。幸运的是,有大量的优秀的教科书和在线课程可供学习这些内容。
我最喜爱的机器学习书籍是毕晓普(2006)的那本,因为它提供了广泛的贝叶斯风格的处理方法和出色的图表,这些图表我在本书中也重新使用了。格拉斯纳(2018,2021)的书则以更加温和的方式介绍了经典机器学习和深度学习,以及我在本书中引用的额外图表。另外两本广泛使用的机器学习教科书是哈斯蒂、蒂布沙里尼和弗里德曼(2009)和墨菲(2012)。德森罗思、费萨尔和翁(2020)提供了一本关于机器学习数学的精炼处理,包括线性和矩阵代数、概率论、模型拟合、回归、主成分分析和支持向量机,其内容比我在这本书中提供的简要概述更为深入。由胡特、科特霍夫和范肖伦(2019)编辑的《自动化机器学习》一书综述了设计和优化机器学习算法的自动化技术。
对于深度学习,古德费洛、本吉奥和库尔维尔(2016)首次提供了全面的论述,但最近并未修订。格拉斯纳(2018,2021)则以大量图表和无方程的形式,为深度学习提供了精彩的介绍。我甚至推荐给有经验的从业者,因为它有助于培养和巩固关于学习如何工作的直觉。最新的深度学习参考书是张、利普顿等人(2021)编写的《深入浅出的深度学习》在线教材,书中穿插了互动的Python笔记本,以及相关的课程(斯莫拉和李2019)。一些深度学习入门课程使用查尼亚克(2019)的教材。
拉瓦特和王(2017)提供了一篇关于深度学习的精彩综述文章,包括早期和后期神经网络的历史,以及对许多深度学习组件的深入讨论,如池化、激活函数、损失函数、正则化和优化。与深度学习进展相关的其他综述还包括塞兹、陈等人(2017)、埃尔斯肯、梅岑和胡特(2019)、顾、王等人(2018)和乔杜里、米什拉等人(2020)。塞伊诺夫斯基(2018)提供了神经网络早期历史的详细回顾。
约翰逊(2020)的《计算机视觉深度学习》课程幻灯片是极佳的参考材料,也是学习该主题的绝佳途径,不仅因为其信息的深度,还因为演示内容的时效性。这些幻灯片基于斯坦福大学的CS231n课程(李、约翰逊和杨2019),该课程同样是一个非常及时的资源。其他包含幻灯片和/或视频讲座的深度学习课程包括格罗斯和巴(2019)、麦克阿莱斯特(2020)、莱尔-泰克斯和Nießner(2020)、莱尔-泰克斯和Nießner(2021)以及盖格(2021)。
对于变压器,Bloem(2019)提供了一个很好的入门教程,从零开始在PyTorch中实现标准的变压器编码器和解码器块。关于变压器在计算机视觉中的应用,更全面的综述包括Khan、Naseer等人(2021)和Han、Wang等人(2020)。Tay、Dehghani等人(2020)概述了许多尝试减少自注意力机制二次成本的方法。Wightman(2021)提供了一个精彩的PyTorch计算机视觉变压器实现集合,包含预训练权重和详尽的文档。此外,介绍变压器的课程讲座包括Johnson (2020,第13讲)、Vaswani、Huang和Manning (2019,第14讲)以及LeCun和Canziani (2020,第12周)。
对于生成对抗网络(GAN),张、利普顿等人(2021年,第17章)的新深度学习教科书、约翰逊(2020年,第20讲)的讲座、古德费洛、伊索拉等人(2018年)的教程以及克雷斯韦尔、怀特等人(2018年)、潘、余等人(2019年)和特瓦里、弗里德等人(2020年)的综述文章都是很好的资料来源。关于最新视觉识别技术的综述,国际计算机视觉会议(Xie、吉什里克等人2019年)、计算机视觉与模式识别学会(Girshick、基里洛夫等人2020年)和欧洲计算机视觉协会(Xie、吉什里克等人2020年)的教程是极佳的最新资料来源。
5.7 练习
例5.1:反向传播和权重更新。在简单的神经网络中实现前向激活、后向梯度和误差传播以及权重更新步骤。你可以在2020年威斯康星大学计算机科学与工程系576课程的HW3中找到此类代码示例,或者参考McAllester(2020)开发并在Geiger(2021)中使用的教育框架(EDF)。
例5.2:LeNet。下载、训练并测试一个简单的“LeNet”(LeCun,Bottou等,1998)卷积神经网络,数据集可以是CIFAR-10(Krizhevsky,2009)或Fashion MNIST (Xiao,Rasul,和Vollgraf,2017)。你可以在网上找到许多这样的代码,包括2020年华盛顿大学计算机科学与工程576课程的HW4或者PyTorch初学者教程中的神经网络部分。63
修改网络以消除非线性。性能如何变化?通过增加通道数、层数或卷积大小,能否提高原始网络的性能?在修改网络时,训练和测试的准确性是朝着相同的方向还是不同的方向发展?
例5.3:深度学习教科书。Glassner(2018,第15、23和24章)的《深度学习:从基础到实践》和Zhang的《深入深度学习》