[关闭]
@sambodhi 2017-11-23T11:27:20.000000Z 字数 6391 阅读 4783

吴恩达计算机视觉:12堂课学习心得

作者|Ryan Shrott
编译|Sambodhi
编辑|Vincent

AI前线导语:最近,加拿大国家银行首席分析师Ryan Shrott在分享吴恩达在Coursera上发布的深度学习课程[1]的前三门课的学习心得后,[2]日前再次分享了他完成的第四门课的学习心得[3]

更多干货内容请关注微信公众号“AI 前线”(ID:ai-front)

吴恩达的机器学习课程在Coursera平台上已上线5年左右,该门课程是国内,乃至全球许多机器学习爱好者、专家学者的入门课程。整门课程深入浅出、简洁易懂。

8月9日,吴恩达又宣布deeplearning.ai在Coursera平台上开设系列全新深度学习课程,包括神经网络和深度学习概述、神经网络参数调整及优化、如何搭建机器学习项目、卷积神经网络、神经网络序列模型。从课程设置上来看,涵盖了深度学习的基础理论和简单实操。这也是deeplearning.ai三大项目的第一个项目。

截止目前(2017年11月22日),Coursera上可用的课程是:

第四门课的内容是教授如何构建卷积神经网络并用它来处理图像数据。

Ryan Shrott目前完成了第四门课,他表示,吴恩达在解释很多优化计算机视觉任务所需了解的复杂概念上有抽丝剥茧讲得通俗易懂的能力。他很喜欢这门课程中的如何用风格转换器创造艺术图像这一部分内容,比如将Claud Monet(19世纪法国印象派画家)的绘画风格和任何图像结合起来进行艺术创作,如下图所示:

下面是Ryan Shrott学习之后,用 Leonid Afremov(1955-,白俄罗斯现代印象派画家)的作品《雨中的女人》(Rain Princess )的风格创作的艺术作品,你完全可以尝试:

在本文中,Ryan Shott为我们解读了第四门课的12堂重要的课程。AI前线在本文的基础上亦做了一些批注,方便读者理解并掌握一些概念,在深度学习少走弯路。

第1课:为什么计算机视觉迅速崛起?

大数据和算法的发展促使智能系统的测试误差收敛到贝叶斯最优误差,这就使得人工智能在所有领域中表现,超越了人类的水平,包括自然感知任务。开源软件TensorFlow使你能够使用迁移学习(teansfer learning)实现能够快速检测任何物体的目标检测系统。通过迁移学习,你只需100~500个样本就可以让系统运行良好。手动标记100个样本也并非很大的工作量,因此你可以快速得到最简可行产品。

· 最简可行产品:minimum viable product,MVP。是新产品开发中的名词,是指有部分机能,恰好可以让设计者表达其核心设计概念的产品。设计者可以进行验证式学习,根据使用者的回馈,进一步了解使用情形,并且继续开发此产品。

第2课:卷积如何工作?

吴恩达解释了如何实现卷积操作,并展示如何对图像进行边缘检测。还介绍了其他滤波器,如索贝尔(Sobel)滤波器,它将更多的权重赋予边缘的中心像素。吴恩达还提到:滤波器的权重不应手工设计,而应该用爬山算法来习得,如梯度下降(gradient descent)。

· 边缘检测目的是标识数字图像中亮度变化明显的点。边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。

· 梯度下降是一个一阶最优化算法,通常也称为最速下降法。

第3课:为什么要使用卷积网络?

卷积网络在图像识别任务中为何如此有效,吴恩达给出了几个哲学原因。他介绍了两个具体原因。第一个原因是参数共享(parameter sharing)。这是基于图像某一部分有效的特征探测器在图像中另一部分可能也有用的想法。例如,边缘检测器对图像中多个部分可能有用。参数共享所需的参数数量很少,以及稳健的平移不变性( translation invariance)。平移不变性是照片中的猫进行移位、旋转后仍然识别为猫的关键因素。

· 卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

· 可以将这些参数看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

第二个原因是连接的稀疏性。这个概念是指每个输出层只是少量输入的函数(特别是滤波器尺寸的平方)。这就大大减少了网络中的参数数量,从而加快训练速度。

· 稀疏连接,其实就是局部感知,在卷积神经网络中,每个神经元无须对全局图像进行感知,只需对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。稀疏连接的思想是受生物学中的视觉系统结构启发。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。这种特征提取的过程类似自下而上的方法,一层层接收局部的输入,最后不断聚合。

第4课:为什么使用填充?

填充(padding)通常用于卷积过程中,保持输出数据的尺寸与输入数据一致。它也用来使图像边缘附近的帧对输出的贡献同图像中心附近的帧一样多。

· 填充定义如何处理样本图像的边界。

· 填充的方式有两种,“有效填充”和“相同填充”。在相同填充中,超出边界的部分使用补充0的办法,使得输入输出的尺寸相同。而在有效填充中,则不使用补充0的方法,不能超出边界。

第5课:为什么使用最大池化?

实证研究表明,最大池化(max pooling)在CNN中非常有效。通过对图像进行下采样,我们减少了参数的数量,缩放或者方向变化(如平移、旋转)时,能够保持特征不变。

· 池化主要的作用是引入不变性,并且减少了冗余。还可以减轻模型过拟合的程度,提高模型泛化能力。还能获得定长输出。

第6课:经典网络结构

吴恩达展示了三种经典网络架构,包括LeNet-5、AlexNet和VGG-16。他的大意是,高效的网络通常具有这样的层:不断扩大的通道规模和不断下降的宽度、高度。

· LeNet-5诞生于1994年,由Yann LeCun完成,用于识别手写邮政编码,是最早的卷积神经网络,推动了深度学习的发展。

· AlexNet由Hinton的徒弟Alex Krizhevsky在2012年完成,是LeNet-5的一种更深更宽的版本,是现代深度CNN的奠基之作,确立了深度学习CNN在计算机视觉的统治地位,同时也推动深度学习在语音识别、自然语言处理、强化学习等领域的拓展。

· VGG-16诞生于2014年是牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发的深度卷积神经网络。

第7课:残差网络为什么有效?

对普通网络而言,由于梯度下降和爆炸,训练误差并不会随着层数增加而单调递减。这些网络具有前馈跳过连接,使你训练极其庞大的网络而不会出现性能下降的情况。

残差网络(residual network,ResNet),由He KaiMing于2015年提出。深度网络有个问题就是,容易造成梯度在反向传播的过程中消失,导致训练效果很差。而残差网络的提出,在神经网络的结构层面解决了这一问题,即使网络很深,梯度也不会消失。

第8课:使用迁移学习

在GPU上开始训练像inception的大型网络可能需要花上几个礼拜,我们应该需要下载与训练网络的权重,并重新训练最后的softmax层(或最后几层),这将大幅缩短训练时间。原因是靠前的层倾向于所有图像中的概念相关,例如边缘和曲线。

· 迁移学习(transfer learning)就是把已经训练好的模型参数迁移到新的模型来帮助新模型训练数据集。大部分数据或者任务都存在相关性,因此通过迁移学习可以将已经学到的参数分享给新模型,从而加快并优化模型的学习,而不必从零开始。迁移学习的初衷就是节省人工标注样本的时间。吴恩达曾在NIPS 2016表示:“迁移学习将会是继监督学习之后的下一个机器学习商业成功的驱动力。”(Transfer learning will be the next driver of ML success.)

第9课:如何在计算机视觉竞赛获胜

吴恩达说,你应该独立的训练几个网络,平均它们的输出结果来获得更好的性能。数据增强技术(data augmentation),如随机裁剪图像、水平翻转、垂直翻转,也有助于提升性能。最后,你应该使用开源的实现和与训练的模型来启动项目,然后针对你的应用的参数进行微调。

· 数据增强技术常用的方式还有改变图像色差、扭曲图像特征、改变图像尺寸、增强图像噪音(一般使用高斯噪音(gauss noise)、盐椒噪音(salt & pepper noise))等等。

第10课:如何实现目标检测

吴恩达解释了图像中特征点检测(landmark detection)的概念。总的说来,这些特征点是你训练输出样本的一部分。通过一些巧妙的卷积操作,你可以得到一个输出值,告诉你这个目标在某些区域的概率及目标的位置。他还解释了如何使用交除并(intersection over union,IoU)公式评估目标检测算法的有效性。最后,吴恩达将所有这些内容整合在一起,讲解了著名的YOLO算法。

· 特征点检测指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征检测的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。

· 交除并可以理解为系统预测出来的框与原来图片中标记的框的重合程度。计算方法即检测结果Detection Result与Ground Truth 的交集比上它们的并集,即为检测的准确率,如下图所示:

· YOLO算法是Joseph Redmon和Ali Farhadi等人于2015年提出的第一个基于单个神经网络的目标检测算法。

第11课:如何实现人脸识别

人脸识别(face recognition)是一次性的学习问题,因为您可能只有一个样本图像来识别该人。解决的办法是学习一个相似性函数,给出两个图像之间的差异程度。所以如果图像是同一个人的话,函数将输出一个较小的数值,如果是不同的人则输出较大的数值。

· 人脸识别包括图像摄取、人脸定位、图像预处理、以及人脸识别(身份确认或者身份查找)。系统输入一般是一张或者一系列含有未确定身份的人脸图像,以及人脸数据库中的若干已知身份的人脸图象或者相应的编码,而其输出则是一系列相似度得分,表明待识别的人脸的身份。

目前人脸识别的算法可以分类为:
- 基于人脸特征点的识别算法(feature-based recognition algorithms)。
- 基于整幅人脸图像的识别算法(appearance-based recognition algorithms)。
- 基于模板的识别算法(template-based recognition algorithms)。
- 利用神经网络进行识别的算法(recognition algorithms using neural network)。
- 利用支持向量机进行识别的算法(recognition algorithms using SVM)。

吴恩达给出的第一个解决方案,叫暹罗网络(siamese network),该方案是在同一个网络中,分别输入两个人的图像,然后比较它们的输出。如果输出相似,则表明这两个人的图像可能来自同一个人。基于这种想法来训练网络:如果输入图像是同一个人的,那么编码距离相对较小。

· 暹罗网络是一种相似性度量方法,当类别数多,但每个类别的样本数量少的情况下可用于类别的识别、分类等。暹罗网络的思想是从数据中去学习一个相似性度量,用这个学习出来的度量去比较和匹配新的未知类别的样本。这个方法能被应用于那些类别数多或者整个训练样本无法用于之前方法训练的分类问题。

吴恩达给出的第二个解决方案是三重损失法(triplet loss method)。这个想法是,你的图像有三个维度:Anchor(A)、Positive(P)和Negative(N),训练网络之后,A和P的输出距离远小于A和N的输出距离。

· 三重损失法通常是在个体级别的细粒度识别上使用,传统的分类是花鸟狗的大类别的识别,但是有些需求是要精确到个体级别,比如精确到哪个人的人脸识别。因此,三重损失法在图像检索领域有非常广泛的应用,比如人脸识别、行人重识别、商品检索等。

第12课:如何使用神经风格迁移创作艺术作品

吴恩达讲解了如何将内容和风格相结合生成一个图像。示例如下图所示:

· 风格迁移(style transfer),主要是通过神经网络,将一幅艺术风格画(style image)和一张普通的照片(content image)巧妙地融合,形成一张非常有意思的图片。风格迁移是Gatys等人于2015年首次使用深度学习进行艺术画风格学习。把风格图像Xs的绘画风格融入到内容图像Xc,得到一幅新的图像Xn。则新的图像Xn:即要保持内容图像Xc的原始图像内容(内容画是一部汽车,融合后应仍是一部汽车,不能变成摩托车),又要保持风格图像Xs的特有风格(比如纹理、色调、笔触等)。

神经风格迁移的关键是要理解卷积网络中每一层学习的视觉表征。原来就是靠前的层学习简单的特征,如边缘;靠后的层则学习复杂的目标,如面孔、足部和汽车等。

要构建一个神经风格迁移图像,你只需定义一个成本函数(cost function),这是一个内容和风格相似点的凸组合(convex combination)。详细地说,这个成本函数这样表示:

· 凸组合是一类特殊的线性组合,是若干个点的某种特定意义下的非负线性组合。

其中,G是生成的图像,C是内容图像,S是风格图像。这个学习算法简单地使用梯度下降,使与生成图像G相关的成本函数最小化。

步骤如下:

  1. 随机生成G;
  2. 使用梯度下降来使J(G)最小化,即写入G:=G-dG(J(G));
  3. 重复步骤2。

结论

学完这门课程之后,你将会对大量计算机视觉文献有直觉理解。课后作业让你动手将这些方法付诸实践。尽管学完这门课你并不能成为计算机视觉领域的专家,但这门课却有可能会让你在计算机视觉领域中开启潜在的思路或者事业。


[1] Deep Learning Specialization
https://www.coursera.org/specializations/deep-learning
[2] Deep Learning Specialization by Andrew Ng — 21 Lessons Learned
https://towardsdatascience.com/deep-learning-specialization-by-andrew-ng-21-lessons-learned-15ffaaef627c
[3] Computer Vision by Andrew Ng — 11 Lessons Learned
https://towardsdatascience.com/computer-vision-by-andrew-ng-11-lessons-learned-7d05c18a6999
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注