说一下我在攻读计算机视觉和机器学习硕士学位时学到了什么

正文字数:5085 阅读时长:10分钟

这篇文章介绍了我的经验和课程内容,但我相信其他大学的课程和我所学习的不会有太大的差别。因此,读者可以把这篇文章作为一个窗口,用来了解机器学习和计算机视觉的硕士学位课程以及内容。

Posted by Richmond Alake

url : https://towardsdatascience.com/what-i-learnt-from-taking-a-masters-in-computer-vision-and-machine-learning-69f0c6dfe9df

我写这篇文章是为了反思和总结我在攻读机器学习硕士学位时学到的东西和收获。我不得不承认,我的研究中有些部分是十分有用的,有些部分则没有。

这篇文章介绍了我的经验和课程内容,但我相信其他大学的课程和我所学习的不会有太大的差别。因此,一些读者可以把这篇文章作为一个窗口,用来了解机器学习和计算机视觉的硕士学位课程以及内容。

除了关于我在学习期间所学知识和信息外,我还将介绍和引用所获得的学术知识与我目前担任计算机视觉工程师的工作之间的相关联的信息。

前提条件

机器学习的高级学位有几个选定的主题,反映了机器学习领域的发展方向。

在机器学习的任何一门课程中都有太多的内容要涉及、涵盖。因此,我所修读的硕士学位需要确保了学生在接受课程之前具备以下先决条件。

  • 很好地理解线性代数和微积分(微分/优化)
  • 基础的统计和概率研究
  • 编程语言背景
  • 计算机科学,数学,物理或电子与机械工程专业的本科学习

现在开始介绍我在攻读机器学习硕士学位时学到的关键信息。

1. 计算机视觉

让我从课程中最强大的模块开始。

机器学习领域中我真正感兴趣的是计算机视觉和深度学习,也许我被吸引到这个领域是因为开发的技术可以产生直接的影响。

媒体对计算机视觉技术几十年来的进步赞不绝口。快速出现的面部识别系统是不容错过的。现在在主要的国际机场,银行和政府组织中都可以找到面部识别系统的应用。

我的硕士课程在计算机视觉方面的研究非常有条理。您不应期待直接进入实现和分析最新技术水平。

事实上,您向后退了几步。您首先要从从获得基本图像处理技术的知识开始,这些技术是在引入我们今天看到和使用的计算机视觉高级技术之前发展起来的。

Photo by Gery Wibowo on Unsplash

在深度学习中,我们了解到卷积神经网络的较低层从输入图像(如线条和边缘)中学习较低层级的模式。

但是,在将卷积神经网络(CNN)引入计算机视觉之前,已有一些基于启发式的技术用于检测感兴趣区域和从图像中提取特征。

我的计算机视觉研究通过获得有关这些基于启发式技术的工作原理以及在实际应用中如何使用的知识,确保了我对该领域基础的理解。

计算机视觉的研究使我获得了传统机器学习技术在处理图像的知识,提取特征并对从图像中获得的描述符进行分类。

以下是我在计算机视觉研究期间介引入的几个关键主题和术语:

可以随意跳过定义。我把这些放在这里是为了给好奇的人提供一些信息。

  • (尺度不变特征变换)SIFT:这是一种用于生成图像关键点描述符(特征向量)的计算机视觉技术。生成的描述符包含有关边缘,拐角和斑点等特征的信息。描述符可用于检测跨不同比例和失真图像的物体。SIFT可用于物体识别,手势识别和跟踪之类的应用程序中。这是介绍该技术的原始研究论文的链接。SIFT的关键在于,其检测到的特征对于仿射变换(例如缩放,平移和旋转)是不变的。
  • (方向梯度直方图)HOG:这是一种用于从图像中提取特征的技术。提取的特征来自通过图像中的边缘和角落提供的信息,更具体地说,是图像中的物体。对这种技术的简单描述是,它可以识别图像中的边缘(梯度),角落和线的位置,并且还可以获取有关边缘方向的信息。HOG描述符生成一个直方图,其中包含有关边缘分布的信息和从图像中检测到的方向信息。该技术可以应用在计算机视觉应用程序以及图像处理中。这个链接中包含更多信息。
  • 主成分分析(PCA):一种减少多特征数据集中特征的算法。通过将数据点从较高的维度投影到较低的平面,但仍保持信息并使信息损失最小化,可以减小维度。

其他值得一提的主题如下

  • 线性插值
  • 无监督聚类(K均值)
  • 视觉单词袋(视觉搜索系统)

在我学习的早期,我就期望开始开发基于计算机视觉的应用程序。物体分类是一个热门且受欢迎的话题,也是一个比较容易获得一些基本知识并加以实现的主题。

在我的研究中,我的任务是在Matlab中开发一个视觉搜索系统。

Matlab是一种为有效的数值计算和矩阵处理而开发的编程语言,并且Matlab库配备了一套算法和可视化工具。

过去在JavaScript、Java和Python方面编程经验帮助我很容易地学会了Matlab编程语法,这样我就可以全身心投入到研究的计算机视觉方面。

更多信息

要实现的视觉系统是相当基础的,它的工作原理是通过系统传递一个查询图像,然后系统生成一组图像结果,并将这些结果传递到系统中的查询图像相似。

我应该提到的是,该系统包含一个存储图像的数据库,用于从中提取结果图像(先查询图像,然后输出结果图像)。

这个视觉系统没有使用任何花哨的深度学习技术,而是使用了前面提到的一些传统的机器学习技术。

你只需传递一个RGB图像,并将该图像转换为灰度图像,然后将特征提取器强加到图像上即可;然后,提取图像描述符并将其表示在N维特征空间上。

在这个特征空间中,可以通过计算两个N维点之间的欧几里德距离来计算出相似的图像。

事情开始变得严肃起来

理解计算机视觉不仅仅局限于处理图像,你还可以在视频处理中运用算法和技术。

请记住,视频只是图像序列,所以在准备和处理输入数据方面,您没有学到任何新的东西。

如果使用的是诸如YOLO,RCNN等物体检测框架,则在一系列图像中进行对象跟踪似乎非常琐碎。但是要认识到,研究计算机视觉并不是要使用预先训练好的网络和微调。它是关于理解这个领域本身是如何在这些年里进步的以及当下的发展状况,而获得坚实的、扎实的理解的最好方法是通过调查随着时间推移而发展起来的各种传统技术。

因此,对于对象跟踪的任务,引入了以下主题:

  • Blob跟踪器
  • 卡尔曼滤波器
  • 粒子过滤器
  • 马尔可夫过程

与计算机视觉工程师的相关性

老实说,我目前尚未使用任何传统的机器学习分类器,而且我不认为我会很快使用它们。

但是,为了让您了解其中提到的某些技术的相关性,值得指出的是,自动驾驶汽车,牌照读取器和车道检测器采用了前面讨论的一种或两种方法。

Photo by Bram Van Oost on Unsplash.

Photo by TrentSzmolnik on Unsplash.

2. 深度学习

深度学习是计算机视觉研究的必然发展。

计算机视觉模块中已经涵盖了一些深度学习主题,而其他深度学习主题则是对传统计算机视觉技术的扩展或改进。

深度学习中的主题教学采取了与我的计算机视觉研究类似的方法,那就是在创建一个扎实理解该领域的基础知识,之后再转到高级主题和应用程序开发。

Imagefrom kisina/Getty Images

深入学习的研究始于对图像的基本构建块像素的理解。

您很快就会知道数字图像是一个包含像素集合的网格。

在理解了图像的原子基础之后,您将继续学习图像是如何存储在系统内存中的。

Framebuffer(帧缓冲区)是在系统内存中存储像素位置的名称(很多mooc都不会教你这个)。

Photoby GeryWibowo on Unsplash

我还了解了相机设备是如何捕捉数字图像的知识。

我必须承认,对于智能手机相机如何拍摄图像有一定的直觉是很棒的事情。

让我们继续探索一些更酷的东西。

如果你是在不了解卷积神经网络(CNN)的情况下,你就无法学习深度学习,因为它们是相辅相成的。

我的研究介绍了近20年来CNNs的引入和发展的时间表(从LeNet-5到RCNNs),以及它们在取代完成类似于物体识别的典型计算机视觉任务的传统方式中扮演的角色。

在我的研究过程中,我介绍了在深度学习早期提出的对于不同CNN结构的探索。AlexNet、LeNet和GoogLeNet 是用于对卷积神经网络的内部知识及其在解决诸如目标检测,识别和分类等任务中的应用的理解的案例。

我学到的一项重要技能是如何阅读研究论文。

阅读研究论文并不是你在这篇文章里直接学到的技能。如果你对深度学习和一般的学习是认真的,那么去寻找信息和研究的来源总是个好主意。利用深度学习框架提供的预训练模型是相当容易的。尽管如此,一项高级研究仍希望你了解所提出的每种体系架构的技术和组件的内在细节,这些信息只在研究论文中呈现。

以下是深度学习模块所涉及主题的摘要:

请随意跳过定义。我把这些放在这里是为了给好奇的人提供一些信息。

  • 多层感知器(MLP):多层感知器(MLP)是一层层感知器堆叠起来的结构。MLP 由一个输入层,一个或多个 TLU 层(称为隐藏层)和一个最后一层(称为输出层)组成。
  • 神经风格传递(NST):一种关于利用深卷积神经网络和算法从一副图像中提取内容信息并且从另一幅参考图像中提取样式信息的技术。在提取样式和内容之后,生成组合图像,其中生成的图像的内容和样式来自不同的图像之中。
  • 递归神经网络(RNN)和LSTM:神经网络体系结构的一种变体,可以接受任意大小的输入作为输入,并生成随机大小的输出数据。RNN神经网络架构用于学习时序关系。
  • 人脸检测:这是用于实现能够自动识别和定位图像和视频中的人脸技术的术语。人脸检测用于面部识别、摄影和情绪捕捉等相关的应用程序中。
  • 姿势推断:从提供的数字资产(如图像、视频或图像序列)中推断出身体的主要关节位置的过程。姿势推断技术存在于诸如动作识别、人类交互、虚拟现实和三维图形游戏创建、机器人技术等应用程序中。
  • 对象识别:识别与目标对象关联的类的过程。对象识别和检测是具有相似的最终结果和实现方法的技术。虽然在各种系统和算法中,识别的过程通常会先于检测步骤。
  • 跟踪:一种在一段时间内识别、检测和跟踪图像序列中关注对象的方法。在许多监控摄像机和交通监控设备中都可以找到系统内跟踪的应用。
  • 对象检测:对象检测与计算机视觉相关联,描述了一种能够识别图像中目标对象或物体的存在和位置的系统。请注意,可能会出现一个或多个要检测对象的出现。

其他值得注意的主题和子主题包括神经网络,反向传播,CNN网络架构,超分辨率,手势识别,语义分割等。

与计算机视觉工程师的相关性

这基本上是我的主要收入来源。

到目前为止,我出于游戏目的已经将人脸检测、手势识别、姿势估计和语义分割模型整合到边缘设备上。

在我目前的岗位上,我实现、培训和评估了许多深度学习模式。 如果您想在先进的公司中使用大量前沿算法,工具,那么深度学习就是一个可以使您站在AI实际商业开发的最前沿的领域。

3. 论文

硕士学位论文的目的是使您能够利用在学习过程中获得的所有技能,知识和直觉,为基于现实生活的问题设计解决方案。

我的论文是基于计算机视觉技术对四足动物进行运动分析。姿态推断是我用来进行运动分析的核心计算机视觉技术。

这是我第一次被引入到深度学习框架领域。我已经决定,我对运动分析的解决方案将是一个利用卷积神经网络的基于深度学习的解决方案。

为了选择框架,我在 Caffe 和Keras 之间徘徊,但是由于PyTorch具有与任务相关的随时可用的预训练模型,因此我选择了PyTorch。Python是我选择的编程语言。

这是我从论文中学到的项目清单:

  • 迁移学习/微调
  • Python程式设计语言
  • C#编程语言
  • 姿态推断的理论知识
  • 有关如何使用Unity3D进行仿真的知识
  • 使用Google Cloud Platform的经验

有关运动分析的更多信息

运动分析是指从清晰的运动图像或表示顺序的运动时序图像的整理中获取运动信息和细节所涉及的过程的术语。

利用运动分析的应用程序和操作的结果以最直接的形式详细介绍了运动检测和关键点定位。复杂的应用程序可以利用顺序相关的图像逐帧跟踪对象。

目前,运动分析及其各种应用形式在处理时态数据时提供了显著的好处和丰富的信息。

不同的行业受益于通过运动分析提供的结果和信息,医疗保健、制造业、机械、金融等行业都有各种各样的使用案例和应用运动分析的方法来为消费者解决问题或创造价值。

运动分析在整个行业中的应用方式的多样性已经间接地引入了运动分析的各种形态的子集,例如姿势推断、对象检测、对象跟踪、关键点检测和其他不同的子集。

有关论文的更多信息

本文提出了一种利用计算机视觉和机器学习技术进行运动分析的方法。该方法以四足动物合成图像为数据集,训练一个预训练的关键点检测网络。

KeypointRCNN是Pytorch库中的一个内置模型,它扩展了原始FastRCNN和Faster RCNN的功能。本文中的方法修改了在COCO2017对象检测和分割数据集上预先训练的Keypoint-RCNN神经网络架构,并用合成的数据集对最后一层进行了再训练。

通过扩展用于人体17个关节的人体关键点检测的基线框架,我提出了一个框架的扩展,该框架可以在多个26个关节四足动物上预测主要关节的位置。

论文结果片段

定性和定量评估策略用于显示改进的 Keypoint-RCNN 体系结构在合成四足动物上预测关键点时的视觉和度量性能。

如果你已经做到了这一点,我为你鼓掌……让这篇文章结束吧

4. 总结

机器学习领域正在迅速地发生变化;我的课程内容是与2018-2019的研究现状相关的。现在到了2020年,我们已经看到了机器学习已经在一些其他领域做出了巨大贡献。所以,如果您上了一门机器学习课程,并且正在学习我在本文中没有提到的主题或课题领域,请不要感到惊讶。

因此不要忘了,在人工智能领域中,作为一个机器学习从业者,你不仅需要学习如何自己创建模型,而且必须要保持不停地学习才能跟上新的研究步伐。

正文完