学了吴恩达的计算机视觉课程,我收获了这11个经验教训

来源:KDnuggets

编译:Bot

预告:去年8月,吴恩达在medium上发布文章称自己正在进行3个人工智能相关的创业项目,如今几个月过去了,其中的两个已经陆续发布——人工智能在线课程平台deeplearning.ai、将人工智能用于制造业的Landing.AI。而就在今天下午,吴恩达在twitter上表示,第三个项目将于明天正式和大家见面。至于它又会带来怎样的影响,让我们拭目以待!

编者按:吴恩达的机器学习课和计算机视觉课一直是Coursera上的热门。虽然有不少人诟病它们缺乏数学基础,但作为理论课,这对初学者来说无疑是入门机器学习/CV的一条捷径。那么,我们能从中学到什么呢?不久前,加拿大国家银行的首席分析师Ryan Shrott分享了他的听课心得。

第4周作业:将现代印象派作品Rain Princess的风格迁移到吴恩达脸上

最近,我刚在Coursera上读完了吴恩达的计算机视觉课程,发现老师在讲解一些复杂理论的时候做了很多处理,既生动形象,又浅显直白,我着实获益匪浅。其中我最喜欢的一节课是神经风格迁移(第11课),它围绕一个将任意图像和莫奈画风相结合的例子展开,让我感受到了学习的乐趣。

在这篇文章中,我将会介绍我从这些课中学到的11个重要的经验教训,希望能给其他初学者提供一些参考。

第一课:为什么计算机视觉正在蓬勃发展?

大数据的建立和算法的发展会使智能系统的测试误差收敛到贝叶斯最小误差,从而实现最优决策,使人工智能在一些领域中显示出超越人类的表现,其中包括自然感知任务;

TensorFlow中日益丰富的开源软件允许你用迁移学习(transfer learning )快速构建一个任意对象的目标检测模型;

通过迁移学习,你只需100—500个样本就能使模型运行良好,相比超大数据集,手动为100张图像做标记并不是什么难事,这意味着你能尽快获得一个“够用”的小产品。

第二课:卷积如何工作?

吴恩达在课程中介绍了卷积算子(convolution operator)的实现,以及它是如何检测图像边缘的。他还解释了一些filter,如Sobel filter会给予图像边缘的中心像素更多权重。其中,filter的权重不应该是手动设置的,它们应当基于爬山算法寻找局部最优,例如梯度下降。

此外,吴恩达还介绍了卷积的工作原理。他主要概述了两个具体的理论知识点,一是参数共享,二是连接的稀疏性。

用于计算机视觉任务的卷积神经网络通常包含大量神经元,而每个神经元因为和窗口内数据连接,如果一个一个计算权值和bias,那很可能你要用到上亿个权重。参数共享是基于这个情况提出的一个想法,假设在图像某一部分像素中有用的filter在另一部分也有用,例如,图像边缘的filter也可用于图像中的其他部分,这时我们就只需计算神经元个数×数据窗口维度个权重了。

参数共享支持只有少量参数,也允许平移不变性(robust translation invariance),举个简单的例子,如果把一张小猫图像旋转90°,它本质上还是一张小猫图像。

连接的稀疏性指的是每个输出层都是少量输入经函数变换后的样子(filter数量的平方根),这就大大减少了网络中的参数数量,从而加快了训练速度。

第三课:为什么Padding?

Padding即在图像边缘补充一些数据来使输入图像和输出图像大小相同。Padding也被用来使靠近图像边缘的帧相对靠近图像中心的帧对输出的贡献同样大。

第四课:为什么用最大池化层?

实例证明,最大池化层在CNN中非常有效。通过对图像进行下采样,我们能在尽量保证图像特征不变、尺寸缩小的情况下减少参数数量。

第五课:经典的神经网络框架

吴恩达主要介绍了三种经典神经网络框架:LeNet-5、AlexNet和VGG-16。他认为,高效的神经网络一般具备通道大小不断增加和宽度、高度不断减小的特征。

第六课:为什么ResNets有效?

对于一个普通的神经网络,由于梯度消失或梯度爆炸,它的训练错误并不会随着层数的增加而逐渐减少。ResNets引入了一个能够跳过一层或多层的“shortcut connection”,依靠它,我们可以在不降低性能的前提下训练极其庞大的神经网络。

第七课:使用迁移学习

从头开始训练大型神经网络通常需要几周的时间,一个节约时间的方法是从预训练模型中提取权重,并重新训练最后一个softmax图层(或最后几个图层)。这样做的原因是早期训练的图层可能倾向于和所有图像中的特征相关联,例如边缘和弯曲的线条。

第八课:如何赢得计算机视觉竞赛

吴恩达也在课程中谈到了参加计算机视觉竞赛的一些技巧,比如应该训练几个独立的神经网络,计算它们的平均得分。或者用一些增强数据的手段,如随机裁剪图像、水平/垂直旋转图像来提高网络的性能。最后,不要忘了从一开始就选取靠谱的开源实现和预训练模型,然后根据你的特定要求微调参数。

第九课:如何实现对象检测?

吴恩达首先介绍了特征点检测(landmark detection)的基本概念,一般来说,这些特征点会是你训练所得输出的一部分。通过一些卷积运算,你会得到一个输出,它描述了当前区域存在目标的概率和目标所在坐标。

此外,他还解释了如何用交并比(Intersection-over-Union,IoU),即产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率来评估对象检测算法的性能。最后,吴恩达把这些内容汇总起来,详细介绍了著名算法YOLO。

第十课:如何实现人脸识别?

人脸识别是一个单样本学习(One shot learning)问题,因为它的迁移学习中只有一个标签样本,也就是只靠一个示例图像识别该人。相关方法是学习一个相似的函数,并给出两个图像间的相似程度。所有图像是同一个人,理想中函数应该输出一个较小的值;反之,输出一个较大的值。

吴恩达给出的第一个解决方案是孪生网络(Siamese Network)。这个方案的想法是分别把两个人输入同一网络,然后比较它们的输出。如果输出相似,那么它们可能是同一个人。神经网络的训练目标是如果两个输入图像上是同一个人,那它们的编码相对距离应该较小。

第二个解决方案则是使用了基于度量学习的误差函数Triplet loss。已知函数的输出是一个高维的向量空间,如果我们选取的triplets(三联子)包含两个匹配脸部缩略图和一个非匹配的脸部缩略图(Anchor (A), Positive (P) and Negative (N)),神经网络经过训练后,它会输出A、P、N之间的相对距离,我们的目标是使A和P之间的距离小于A和N之间的距离。

第十一课:如何实现风格迁移?

如下图所示,吴恩达介绍了了如何生成具有组合内容、风格的图像的思路。

神经风格迁移的关键是要理解卷积网络中每一层学到的视觉特征。事实证明,早期的图层倾向于学习边缘这样简单的特征;而后来的图层则更注重学习复杂对象,如人脸、脚和汽车。

要制作这样一个风格迁移图像,我们首先需要定义一个成本函数:

J(G)= alpha × Jcontent(C,G)+ beta × Jstyle(S,G)

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

主要步骤为:

随机生成G;

用梯度下降使J(G)最小化,记作:G := G-dG(J(G));

重复步骤2。

结语

学了这个课程后,我获得了大量关于计算机视觉理论知识的直观理解,课后作业也帮助我利用实践检测了这些理解的正确性。虽然这个课程不会让我一下子变成相应领域的专家,但我确实从中获得了不少创意和启发。

原文地址:www.kdnuggets.com/2017/12/ng-computer-vision-11-lessons-learnied.html

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180130G1ISWF00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区