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

做者 | Ryan Shrott
编译 | Sambodhi
编辑 | Vincent
AI前线出品| ID:ai-front

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


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

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

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

  • 第一门课:神经网络与深度学习(Neural Networks and Deep Learning)
  • 第二门课:改善深度神经网络:调整超参数、正则化和优化(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization)
  • 第三门课:结构化机器学习项目(Structuring Machine Learning Projects)
  • 第四门课:卷积神经网络(Convolutional neural network)

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

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

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


在本文中,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-五、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

towardsdatascience.com/computer-vi…

引导语:更多的干货内容请关注微信AI前线:ID:ai-front

相关文章
相关标签/搜索