我在攻克机器学习硕士学位的那些年
编者按:人工智能发展日趋成熟,也成为众多开发者职业生涯的首选方向。然而相较于其他领域,人工智能中的深度学习、机器学习、计算视觉、神经网络等技术更为错综复杂,进修难度也更胜一筹。对此,对于入门和想要进阶的学生及开发者群体,该如何攻克?在本文中,来自英国萨里大学机器学习与计算机视觉专业硕士Richmond Alake将从自身学业历程出发,分享一下其在读机器学习硕士的收获,以及相关的经验与课程,希望能帮助大家有所收获。
作者 | Richmond Alake,已获作者翻译授权
译者 | 鹿未来,编辑 | 屠敏
题图 | 东方 IC
来源 | CSDN(ID:CSDNnews)
其实,每所大学的课程不会有太大差异。所以,大家可以从本文了解机器学习和计算机视觉理学硕士的一些内容。除了在学习期间获得的东西之外,我还会分享更多学术知识,以及作为一名计算机视觉工程师职位相关的其他信息。
攻读机器学习硕士需要具备哪些必备技能?
研究生期间都会做一些选题,这些课题主要是反映机器学习领域的未来一些发展方向。而且机器学习的每个课程里都涵盖了很多内容。因此,我在修读MSc(Master of Science)学位需要确保在学习这些课程之前,还需要具备以下前提条件:
理解线性代数和微积分(微分/优化)
了解统计和概率研究
具有编程语言背景
拥有计算机科学、数学、物理或电子与机械工程专业学士学位
接下来介绍一下,我在读机器学习硕士时学到的关键内容:
计算机视觉
从我比较强项的课程模块说起,计算机视觉和深度学习研究是我真正非常感兴趣的机器学习领域,或者说是开发技术能直接产生实际影响,这点着实吸引了我。
近几十年来,媒体极大赞赏了计算机视觉取得的进步。如,面部识别系统的出现就非常重要,因为在国际机场、银行和政府组织等重要场景中,面部识别系统几乎无处不在。
我在硕士学业生涯中,对计算机视觉的学习研究比较有条理,我认为一开始不能直接进入实践和分析最新技术阶段,而是应该从了解基本图像处理技术开始,这样才能真正使用计算机视觉这一高级技术。
在深度学习中,想要了解卷积神经网络的底层,要从输入图像(例如线条和边缘)学习。不过,在卷积神经网络(CNN)引入计算机视觉之前就有基于启发式的技术可用于检测特征图上的目标并从图像中提取特征。我的计算机视觉研究就是通过这一系列基于启发式技术的工作原理,学以致用,才让我对该该领域基础有了理解。
计算机视觉研究为我提供了传统机器学习技术的知识,还有处理图像的技能,比如提取特征并对从图像中获得的描述符进行分类等。
接下来,分享一下我在研究生期间用到的一些议题和术语,好奇的小伙伴可以看一下:
SIFT(Scale Invariant Feature Transform):这是一种计算机视觉技术,用于生成图像关键点描述符(特征向量)。生成的描述符包含有关特征的信息,例如边缘、拐角和斑点。描述符可用于检测跨越不同比例和失真的图像的对象。SIFT用于诸如对象识别、手势识别和跟踪之类的应用程序中。SIFT的关键在于,其检测到的特征对于仿射变换(例如缩放,平移和旋转)是不变的。
HOG(Histogram of Orientated Gradients):这是一种用于从图像中提取特征的技术。提取的特征是通过图像中的边缘和拐角提供的信息中得出的,更具体地说,是图像中的对象提供的。简而言之,该技术可以识别图像中的边缘(渐变)、角和线的位置,并且还可以获取有关边缘方向的信息。HOG描述符生成一个直方图,其中包含有关边缘分布的信息和从图像中检测到的方向信息。该技术可以在计算机视觉应用程序以及图像处理中找到。
PCA(Principal Component Analysis):一种降维的算法。通过将数据点从较高的维度投影到较低的平面,但仍保持信息并最大程度地减少信息丢失,可以减小维度。
其他的还有:线性插值、无监督聚类(K均值)、视觉搜索等等。
一开始学习我就希望自己能开发出基于计算机视觉的App,对象分类又比较受欢迎,这样相对来说就更容易实现既学知识又能实际应用。另外我的研究过程中是在Matlab上开发视觉搜索系统的。
Matlab是为高效的数值计算和矩阵处理而开发的一种编程语言,并且Matlab库配备了一套算法和可视化工具。
之前JavaScript、Java和Python的编程经验帮我很快搞定了Matlab编程语法,所以我就可以全神贯注的研究计算机视觉。
更多视觉搜索系统的信息
要实现的视觉系统很简单,它就是通过查询图像传递给系统,之后系统将生成一组图像结果,这些结果与传递到系统中的匹配相似图像。要补充一点,该系统有一个存储图像的数据库,是用于从中提取结果图像(先查询图像,然后输出结果图像)。
视觉系统没有使用任何花哨的深度学习技术,就是用了前面提到的一些传统机器学习技术。只需传递转换为灰度的RGB图像,然后在图像上添加特征提取器即可,之后,提取图像描述符并将其表示在N维特征空间上。在此特征空间内,就可以通过计算两个N维点之间的欧式距离来得出相似的图像。
更深层次的应用
计算机视觉的理解不仅局限于图像上,还会涉及到视频中使用的算法和技术。要明白,视频可以理解为图像序列,所以收集和处理输入数据上就不需要学习新的内容。
如果使用诸如YOLO、RCNN等对象检测框架,那在一系列图像中进行对象跟踪似乎就变得非常琐碎。但要认识到,研究计算机视觉不仅是使用预训练的网络和微调。基于我个人在该领域的发展角度来看,扎实学习的最佳方法是随着时间推移,在研究中慢慢积累这些传统技术。
那么,对于对象跟踪任务,引入了以下内容:
Blob追踪器
卡尔曼滤波器
粒子过滤器
马尔可夫过程
与计算机视觉的相关性
老实说,我目前没有使用任何传统机器学习中的分类器,而且我觉得我不会很快使用它。但是值得注意的是,自动驾驶汽车、车牌读取器、车道检测器均采用了上述所提及到了一到两种方法。
深度学习
深度学习是计算机视觉研究的自然发展成果。计算机视觉与我的计算机视觉研究类似的方法,即在转向高级主题和应用程序开发之前,对领域的基础有了深入的了解。
深度学习研究始于对图像、像素的基本构建块的理解。数字图像是包含像素集合并以网格的形式呈现。了解了图像的基础之后,就要继续学习如何将图像存储在系统内存中。帧缓冲区是在系统内存中存储像素的位置的名称(很少有MOOC课程会教你这一点)。
另外,在还不了解卷积神经网络(CNN)的情况下,你是无法学习深度学习的,因为它们是紧密相连的。
我的研究介绍了过去20年(从LeNet-5到RCNN)引入和开发CNN的时间表,以及它们在替代传统管道中完成诸如对象识别之类的典型计算机视觉任务的作用。
在我的研究期间,介绍了深度学习早期提出的不同CNN架构的探索。AlexNet、LeNet和GoogLeNet是案例研究,用于对卷积神经网络的内部知识及其在解决诸如目标检测,识别和分类等任务中的应用的理解。
另外,我学会的一项重要技能是如何阅读研究论文。阅读研究论文并不是直接学习的技能。如果真的想要研究一下深度学习,那么就要选择好信息和研究的来源。
利用深度学习框架提供的预训练模型相当容易。尽管如此,一项高级研究仍希望了解所提出的每种体系结构的技术和组件的内在细节,当然这些信息仅在研究论文中会提出。
在这总结了一些深度学习模块的议题(还是跳过了定义,感兴趣的同学可以看一下):
MLP:多层感知器(MLP)是几层感知器,一个接一个地连续堆叠。MLP由一个输入层,一个或多个TLU层(称为隐藏层)和一个最后一层(称为输出层)组成。
NST:一种涉及利用深度卷积神经网络和算法从一幅图像中提取内容信息并从另一幅参考图像中提取样式信息的技术。在提取样式和内容之后,将生成一个组合图像,其中生成的图像的内容和样式来自不同的图像。
RNN和LSTM:神经网络体系结构的一种变体,可以接受任意大小的输入作为输入,并生成随机大小的输出数据。RNN神经网络架构学习时间关系。人脸检测:这是实施系统任务的一个术语,该系统可以自动识别和定位图像和视频中的人脸。在与面部识别,摄影和运动捕捉相关的应用程序中存在面部检测。
姿势估计:从提供的数字资产(例如图像,视频或图像序列)中推断出人体主要关节位置的过程。姿势估计的形式存在于诸如动作识别,人类交互,为虚拟现实和3D图形游戏创建资产,机器人技术等应用程序中。
对象识别:识别与目标对象关联的类的过程。对象识别和检测是具有相似最终结果和实现方法的技术。尽管识别过程先于各种系统和算法中的检测步骤。
跟踪:一种在一段时间内识别,检测和跟踪图像序列中的关注对象的方法。在许多监控摄像机和交通监控设备中都可以找到系统内跟踪的应用。
对象检测:对象检测与Computer Vision相关联,描述了一种可以识别图像中所需对象或物体的存在和位置的系统。请注意,要检测的对象可能有单个或多个出现。
其他的还包括像神经网络,反向传播,CNN网络架构,超分辨率,手势识别,语义分割等......
出于兴趣,我已经在边缘设备上合并了面部检测,手势识别,姿势估计和语义分割模型。在目前的职位上,我实践,训练和评估了许多深度学习模型。如果你想在先进的公司中使用大量前沿算法,工具,那么深度学习就是一个可以使您站在AI实用商业开发的最前沿的领域。
论文
硕士学位论文的目的就是要利用在学习过程中获得的所有技能、知识和经验,为基于现实生活的问题设计解决方案。
我写的是基于计算机视觉技术对四足动物进行运动分析,运动分析用到的是计算机视觉技术里面的姿势估计。
这是我第一次被引入深度学习框架领域。我对运动分析的解决方案是基于卷积神经网络与深度学习的解决方案。在选择框架时,我曾在Caffe和Keras之间犹豫过,但由于PyTorch具有与任务相关的随时可用的预训练模型,所以我选择了PyTorch。Python是我选择的编程语言。
这是我写完论文后学习到的内容:
转移学习/微调
Python程式设计语言
C#编程语言
姿势估计的理论
有关如何使用Unity3D进行仿真
使用Google Cloud Platform
在这里扩展说一下运动分析:
运动分析是指从清晰的运动图像中获取运动信息和细节,或代表序列到运动序列描述的图像排序。利用运动分析的应用程序和操作的结果以最直接的形式详细介绍了运动检测和关键点定位。复杂的应用程序允许利用顺序相关的图像逐帧跟踪对象。
目前,运动分析及其各种应用形式在时间数据上使用时,可提供更多的信息。不同行业例如医疗保健、制造、机械、金融等行业,都在使用应用运动分析的方法来解决问题或为消费者创造价值。
整个行业对于利用运动分析的多样性,已经间接引入了运动分析的各种子集,例如姿势估计、对象检测、对象跟踪、关键点检测以及其他不同子集。
再说说论文中的其他内容:
论文提出了一种利用计算机视觉和机器学习技术进行运动分析的方法。该方法是使用合成的四足动物图像数据集来训练预训练的关键点检测网络。
Keypoint-RCNN是Pytorch库中的内置模型,它扩展了原始Fast-RCNN和Faster-RCNN的功能。
论文中的方法修改了在COCO 2017对象检测和分割数据集上预训练的Keypoint-RCNN神经网络架构,并使用合成生成的数据集对最后一层进行了训练。
通过扩展用于人体的17个关节的人体关键点检测的基准框架,我提出了该框架的扩展,该框架可以预测几个26个关节产生的四足动物的主要位置。
论文的结果节选
定性和定量评估策略可以很明显的改进Keypoint-RCNN体系结构在人工四足动物上预测关键点时的视觉和度量性能。
如果你在研究中已经实现了这些,我就有点班门弄斧。
结论
计算机领域变化太快了,我的课程是从2018年-2019年的,现在已经2020年了,我们会看到大量更多的机器学习领域的贡献,所以,如果没有在我的论文中看到,你在做机器学习过程中看到的或学到的一些议题,也不要惊讶。
不要忘了,在AI领域,你要做的不光是学习一些模型,还要不断地研究,不断地学习。
最后,我希望我的这篇文章对大家有用,欢迎大家留言,说说你在学习ML和CV的时候学到了哪些知识并应用了实际场景中拉~
原文:https://towardsdatascience.com/what-i-learnt-from-taking-a-masters-in-computer-vision-and-machine-learning-69f0c6dfe9df
本文为 CSDN 翻译,转载请注明来源出处。
推荐阅读
一键实现图像、视频卡通化,GAN又进化了
PyTorch 1.6、TensorFlow 2.3、Pandas 1.1同日发布!都有哪些新特性?
Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来! | 附代码
程序员必备基础:Git 命令全方位学习
微软直播马上开始,近百岗位等你来,快戳进直播间
相关文章:
POJ 3174 暴力枚举
思路: 暴力枚举三个点 判一判 搞定 (x1*y1x2*y2) x1、y1、x2、y2为他们两两的差 //By SiriusRen #include <cstdio> using namespace std; int n,cnt; struct Point{int x,y;}point[888]; struct ans{int x,y,z;}ans[888]; int main…
TensorFlow、PyTorch夹缝之下:后浪的进击和野望
作者 | Just出品 | AI科技大本营(rgznai100)“我发现,软件研发总会延期。”一流科技CEO袁进辉说。按照他的预期,深度学习框架OneFlow做两年就能开源给开发者检验,但时间向后延长了近一年半,“确实预计的不准…

在Win 2003中配置ASP.net环境
作者:未知大家知道,Microsoft为了更好地预防恶意用户和攻击者的攻击,在默认情况下,没有将 IIS6.0 安装到 Windows Server 2003 家族的成员上。而且,当我们最初安装 IIS6.0 时,该服务在高度安全和"锁定…

网页中的数学公式
无意中发现一个在网页中显示数学公式的解决方案,MathJax,太崇拜这些人了!他们才是真正地IT人,哪像国内我们这些民工? 代码如下: <!DOCTYPE html><html><head><title>MathJax AsciiMath Test P…

php删除目录下的所有文件和目录
<?php /*** 递归实现删除目录下的所有的文件和文件夹* param $dir 要删除的目录* param bool $deleteRootToo 是否删除根目录 默认不删除http://www.manongjc.com/article/1333.html*/ function unlinkRecursive($dir, $deleteRootToo false) {if(!$dh opendir($dir)){re…

DZX2无法读取会员短消息
我们在升级Discuz论坛时,如果没升级好,可能会出现各种各样的问题。比如登陆会员,但点“短消息”会出现错误,如下:提示:UCenter info: MySQL Query ErrorSQL:SELECT COUNT(*) FROM [Table]pm_members m WHER…

ASP.NET 如何操作文件
本文由chenyangasp版权所有,可以转载,复制,粘贴,并请注明出处,但不得修改! 在asp.net操作文件的所有concept都在system.io namespace中,这个namespace包含读写操作文件所必需的类。 本文将详细…
摊牌了:我就靠这几点,搞定了算法面试官
很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试!为什么?1. 你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂。2. 你在面试的时候,卡壳了…

Spoooooky CSS 选择器
2019独角兽企业重金招聘Python工程师标准>>> 让我们今年有一些万圣节主题的帖子精神!我会从超过 GRAVE.eR.CSS选择器中挑选一些将冻结你骨头的选择器。也许不可能,但他们至少有点怪异。 迟钝的猫头鹰选择器(the lobotomized owl s…

关于无法创建aps.web项目的解决办法
出处:CSDN 作者:ahking <script languageJavaScript src"/ad/ad.js"></script> 1、当站点主目录没有创建应用程序: 通过FP扩展虚拟目录的方式来建立WEBAPP,步骤如下: (1)、右击站…

国内ntp时间服务器ip地址
NTP(Network Time Protocol)是由美国德拉瓦大学的David L. Mills教授于1985年提出,除了可以估算封包在网络上的往返延迟外,还可独立地估算计算机时钟偏差,从而实现在网络上的高精准度计算机校时,它是设计用…
谷歌顶级量子科学家详述他为何从谷歌辞职
加州大学圣塔芭芭拉分校(UCSB)的教授John Martinis作者 | Paul Smith-Goodson译者 | 天道酬勤,责编 | Carol 约翰马丁尼斯(John Martinis)教授从Google辞职的消息在整个量子学界引起了轩然大波。消息宣布几天后&#x…

论文笔记之:Generative Adversarial Text to Image Synthesis
Generative Adversarial Text to Image Synthesis ICML 2016 摘要:本文将文本和图像练习起来,根据文本生成图像,结合 CNN 和 GAN 来有效的进行无监督学习。 Attribute Representation: 是一个非常具有意思的方向。由图像到文本,可…

ADO.NET 2.0 中的架构
Bob BeaucheminDevelopMentor 适用于:Microsoft ADO.NET 2.0Microsoft Visual Studio 2005C# 编程语言 摘要:了解在 ADO.NET 中对于从您的数据源访问元数据的增强支持。下载相关的 SchemasSample.exe 示例代码。 本页内容 深入了解新的公共元数据 API究…

Android实现程序前后台切换效果
本文演示如何在Android中实现程序前后台切换效果。 在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识。 我们都知道,一个Activity 可以启动另一个Activity,即使这个Activity是定义在别一个应用程序里的,比如说,…
如果特斯拉制造相机的梦想像激光雷达一样真正实现,它可能会帮助到更多同行...
这张来自伪激光雷达论文的图片显示了旧的黄色实点云作者 | Brad Templeton译者 | 天道酬勤,责编 | Carol特斯拉 CEO 埃隆马斯克(Elon Musk)对自动驾驶激光雷达(3D图像技术)的看法是众所周知的。他不打算在特斯拉里使用…

java分享第五天(数组)
1 声明数组变量: double[] mylist; or double mylist[]; 2 创建数组: 可以通过使用new运算符使用以下语法创建一个数组: arrayRefVarnew dataType[arraySize]; 上面的语句做了两件事: 它创建一个数据使用new dataType[…

效率!效率!效率!
原著:Mark Davis 翻译:onefi 2004年4月21日 摘要: 此篇文章包括了一些在网页设计中时常用到的脚本。我们可以清晰的体会到其中的执行速度。这将有助于提高您的动态网页的速度。 导言: 自从有了IE4.0以后,我们所看到的…

Android UI Button 和GridView 的设计--优化(2)
Android 按钮的UI设计,ListView 以及GridView的UI设计 一.按钮的状态 我们一般搞UI设计,按钮通常有三个状态:normal(正常状态);focus(焦点状态),pressed(按下状态)。如下图所示: 我们会在res/drawable目录下定义一个资源文件,比如我们本例中要…
玩转社区开源贡献,看这篇就够了!
来源 | TensorFlow本文来自社区投稿与征集。作者唐源,现任蚂蚁集团技术专家,目前专注于建立 AI 基础架构和自动机器学习平台。本文转自:https://zhuanlan.zhihu.com/p/165098355作为最早一批非谷歌的 TensorFlow 社区贡献者,同时也…

grub2 命令行进入系统
有时候grub引导可能出问题,因此我们需要在grub界面利用命令行进入系统。下边就做一个简单的介绍。1、在grub界面,按c进入命令行界面2、命令行输入“ grub>set root(hd ”之后按tab键,查看你的硬盘,hd0表示第一块硬盘…
梯度中心化,一行代码加速训练并提升泛化能力
来源 | 晓飞的算法工程笔记优化器(Optimizer)对于深度神经网络在大型数据集上的训练是十分重要的,如SGD和SGDM,优化器的目标有两个:加速训练过程和提高模型的泛化能力。目前,很多工作研究如何提高如SGD等优化器的性能,…

Microsoft程序员测试题
原创:onefi http://www.frontfree.net/2003年6月1日 最近大家在网站上看到不少Microsoft的测试题,引来不少的眼光。我在这里把所有的测试题加以整理,再附上自己的答案。(个别题目答案有多种,文本仅代表作者的思路&a…

裸centos安装PCRE时报错解决
2019独角兽企业重金招聘Python工程师标准>>> no acceptable C compiler found in $PATH由于没有gcc的编译环境引起的,yum install gcc就ok unrecognized option -DHAVE_CONFIG_H由于没有gcc-c的编译环境引起的,yum -y install gcc-c 转载于:…

mysql删除开放用户权限
来访用户ODBC 1,在本地的cmd中用root用户进入mysql2,创建一个ODBC的用户create user ODBClocalhost;查看用户是否创建成功select user,host from mysql.user;3,将所有的权限开放给ODBC用户grant all on *.* to ODBClocalhost;查看ODBC用户的权限show grants for ODBC localhost…
AI不止能美颜,美妆迁移这样做 | 赠书
本文内容节选自《深度学习之人脸图像处理:核心算法与案例实践》,作者言有三。美颜和美妆是人脸中很常见的技术,在网络直播以及平常的社交生活中都有很多应用场景。本文重点介绍的是人脸妆造迁移的核心技术及其相关资源。想要了解关于深度学习…

ASP.Net中自定义Http处理及应用之HttpModule篇
HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。而HttpModule实现了类似于ISAPI Filter的功能。 HttpModule的实现HttpModules实现了类似于ISAPI Filter的功…

未处理的异常导致基于 ASP.NET 的应用程序意外退出
问题具体见:http://q.cnblogs.com/q/34874/ 相应站点的w3wp.exe 会意外终止 EventLog中的信息: An unhandled exception occurred and the process was terminated. Application ID: DefaultDomain Process ID: 43644 Exception: System.Runtime.Seri…

Git 执行更改
Jerry 克隆库,他决定实现基本字符串操作。于是,他创建文件string.c,在添加内容到 string.c 会这个样子。 #include <stdio.h> int my_strlen(char *s) { char *p s; while (*p) p; return (p - s); } int main(void) { int i; char *s…

静态属性和静态方法2 - C++快速入门22
静态属性和静态方法2 让编程改变世界 Change the world by program 静态方法 嗯,还是静态方法?!这阵子有鱼油表示对该方法的特色还是有点云里雾里还有那个神神兮兮的this指针。。。 所以小甲鱼保持务必让你彻底领悟的精神继续和大家探讨&…