一、引言
计算机视觉的黄金时代真的到来了吗?

近年来,随着深度学习技术的革新、计算存储的扩大、可视化数据集的激增,计算机视觉领域的研究开始蓬勃发展,如火如荼。在自动驾驶、智能安防、智慧城市、医疗保健、商业零售、航空能源、虚拟现实等诸多人工智能热门领域,计算机视觉技术落地开花,熠熠生辉。

计算机视觉研究工作在学术界和工业界取得的巨大成功,每年吸引着数以万计的研究人员蜂拥而至,加入炼丹师的序列。甚至连生物医学、机械自动化、土木建筑等诸多专业的学生都开始研究其在各自领域的应用,一个视觉交流群里三分之一以上都不是计算机相关专业的。当然,我也是其中一员。

对于非计算机相关专业的同学而言,学习过程中往往缺少交流机会,不容易把握视觉知识的全貌。这里仅根据个人经验和网络知识,谈一谈对于一名非计算机专业的学生而言,该不该入门计算机视觉?以及该如何学习计算机视觉?

首先,老师给大家准备了一波学习资料包,内含:两大Pytorch、TensorFlow实战框架源码资料;OpenCV、YOLO物体检测实战项目、计算机视觉等视频和资料以及深度学习书籍
加微即可领取

其实,对于一门计算机学科的学习,入门同学无非要做好两门功课:理论知识+编程能力。

二、学习路线
机器学习 -> 数学知识 -> 编程能力 -> 计算机视觉

  1. 理论知识
    (1)视觉知识
    由于计算机视觉研究领域十分宽泛,涉及学科门类知识点众多,因此这里仅针对个人研究及知识体系来谈一谈,欢迎不吝赐教~~

目前,计算机视觉比较热门的研究方向总体上可以分为两个方面:一是深度学习,二是SLAM。那么,它们的研究点区别在哪里呢?

深度学习,侧重于解决识别感知问题,SLAM侧重于解决几何测量问题。以机器人举例,如果你想要它走到你的冰箱面前而不撞到墙壁,那就需要 SLAM;如果你想要它能识别并拿起冰箱中的物品,那就需要深度学习。机器人抓取时怎么定位的?用什么传感器来检测?当然,这两个方面在学术研究上也有互相交叉融合的趋势。

不过在学习这些之前,作为入门的新同学,一般都会首先掌握下传统的计算机视觉知识,也就是图像处理基础。计算机视觉初级部分知识体系的构建,对于计算机视觉基础知识的理解还是非常有必要的,有助于你理解更高层知识的本质,如为什么会出现深度学习等这些新的理论知识,感觉有点像读史了,给你智慧和自由。

初级部分知识学习资料:理论方面:《数字图像处理》(冈萨雷斯)、《数字图像处理:原理与实践》、《计算机视觉算法与应用》,编程方面:《OpenCV3编程入门》。

研究方向:基于深度学习的计算机视觉和SLAM技术。基于深度学习的机器视觉:包括图像分类、目标检测、语义分割三大基础任务,以及目标跟踪、行人再识别等延伸任务等。关于深度学习的学习:可以参考李宏毅老师的一天搞懂深度学习;李飞飞的CS231n课程;Yoshua Bengio的《DEEP LEARNING》,目前已有中译版本 。

(2)机器学习
计算机视觉研究中使用的机器学习方法不是很多,早期会用SVM做分类,现在基本都用深度学习方法。原因在于机器学习虽然方法不少,但是基本都无法应对大的数据量。

不过在学习过程中很容易接触到各种机器学习方法的名字,因为现在大数据分析、机器学习、语音识别、计算机视觉等这些领域研究其实分得不是很开,然后不自觉地就会去了解和学习。不过在学习一些暂时用不到的算法时,个人感觉没必要做的太深:重在理解其基本思想,抓住问题本质,了解其应用方向即可。

下面分别介绍一下传统机器学习算法和深度神经网络。

传统机器学习

传统机器学习算法:决策树、支持向量机、boosting、贝叶斯网、神经网络等。除了有监督学习,还有无监督学习、半监督学习、强化学习,一些降维算法等。

学习资料:吴恩达老师的《Machine Learning》,以及《MACHINE LEARNING YEARNING》。课程风格诙谐,简单易懂。李航老师的《统计学习方法》和周志华老师的《机器学习》,业内称西瓜书,两本在国内机器学习界成为经典的书,非数学作业学起来会有一点上头,因为很多公式数学专业的也推不出来随缘学习即可

深度神经网络
深度学习,风风雨雨数十年,不可解释性科学,但是应用起来效果很棒。发论文都感觉有点心虚,有时候都说服不了自己~~资料上面视觉知识部分已经说过了,听听课程、看看那些知名的模型和框架,基本上也就了解了。

主要的发展有CNN、RNN,不久前的GAN,现在如日中天;强化学习发展也非常快,有许多名校,如CMU都开设了这方面课程。深度学习框架百花齐放,百家争鸣,国内和国际都有,目前主流的是TensorFlow和PyTorch~

(3)数学
一切工程问题归根结底都是数学问题
这里谈一谈计算机视觉和深度学习中所涉及的数学问题。
微积分:例如图像边缘检测,即求微分在数字图像里是做差分,光流算法里用到泰勒级数,空间域转频域的傅立叶变换,还有牛顿法、梯度下降、最小二乘等。CV所涉及的微积分知识相对简单,积分很少,微分也不是特别复杂。

概率论与数理统计:机器学习领域里最重要的数学分支。例如:条件概率、相关系数、最大似然、大数定律、马尔可夫链等

线性代数:数字图像是以像素矩阵的形式呈现的,多个向量组成的样本也是矩阵形式,大多机器学习算法里每个样本都是以向量的形式存在的,多个矩阵叠加则以张量的形式存在。具体应用,如:世界坐标系->相机坐标系->图像坐标系之间的转换,特征值、特征向量,范数等。

凸优化:很多实际问题,尤其机器学习领域,都是优化问题,凸优化是里面最简单的形式,所以大家都在想办法怎么把一般的优化问题转化为凸优化问题。在机器学习里,经常会看到对偶问题、KKT条件等。其实,这些数学知识没必要系统性学习,效率低又耗时。一般用到的时候再学,学完之后总结一下。

  1. 编程能力

(1)编程语言
刚刚接触CV时,大家一般都会不假思索地选择使用C++:装个VS(Visual Studio),配置下opencv,撸起袖子就开始干了。这样做非常合理,几乎所有人都是这么入门的。

不过,当你的知识面扩展开后,你会感觉到很多时候C++都显得有些力不从心。比如:当你要画一些图表或做一些数据分析,还得把数据导入MATLAB里做进一步处理;当你要非常快捷方便地学习或测试一个算法,C++会是你最糟糕的选择;或者当你要学习深度学习时,你绝对不会再选择使用C++….
总之,有太多的理由会促使你再学习一门编程语言,最好的选择没有之一:Python。CVer开发必备:Python~

简单介绍一下C++和Python的各自特点:

C++:偏底层,执行效率高,适合嵌入式等平台上使用;在视觉领域,C++生态好,用的人多,网上找资源很方便。缺点是开发效率太低。

Python:全能语言,干啥都行,并且都相对擅长。图像处理,opencv支持Python接口;科学计算,其功能类似于matlab:机器学习及深度学习,Python是最好用的,没有之一;爬虫等网络应用,豆瓣就是用Python写的;简而言之,方便。当然,Python也有另一面,执行效率不高。

当然,学校里也有同学使用MATLAB等做图像方面的研究,如果你只是偶尔用图像处理辅助一下你的研究,可以这么做,一般情况下不建议使用。

C++和Python学习资源推荐

C++:《C++ primer》或《C++ primer plus》,感觉不如《程序员求职宝典》这类书实用。大书优点在于全面,同时也往往导致了重点不突出。课程推荐北大的《程序设计与算法》,C++程序设计。
Python:基础部分看一下Python教程即可,Python学起来很简单,看别人代码的过程就是学习的过程。对于不熟悉的用法多搜下官方文档,如numpy,pandas, matplotlib, scikit-learn等。Python的开发环境值得一提,选择很多,建议使用Pycharm+Anaconda,简单方便。

(2)编程平台
新手windows,学习过程中发现在windows上搞不定了,先忍几次,然后掉头就去学linux了。一定是这样。哪些在windows上真的搞不定呢?比如:深度学习,最新论文中提出的视觉开源算法等,不过对于我们而言,linux并不需要了解太深。装个ubuntu系统,常用的文件操作、程序编译等知道就OK了,现学现用。

三、学习心得
机器学习 -> 数学知识 -> 编程能力 -> 计算机视觉
前文已经把所要学习的知识基本都介绍完了。不知道你有没有冒出疑问:你怎么知道这些?你平时怎么学习的?

基础第一条:时间,时间的积累。当然,在具体学习方法上也有一些trick,不然怎么解释有的人效率高呢。当然聪明和底子能够解释部分原因。现在简单总结一下学习过程中的小trick:
1.Google搜索:论文检索,项目检索
2.学术交流:博客、公众号、微信群等业内人士交流学习
3.知识学习:论文和书籍阅读
4.理论研究:关注行业前沿,业内最新研究成果
5.项目实战:算法实现、代码开发,GitHub项目,竞赛平台

一句话:学会抓住问题本质。算法太多,学过就忘。这可能是所有人遇到的共同问题。尤其对于那些学的不是特别深入的算法,会有跟人聊起都不知道如何解释的尴尬。一句话解释,就是用简单的几句话把一件事说清楚。比如《统计学习方法》中李航老师就提出统计机器学习的三要素:模型、策略和算法,针对某种机器学习方法根据这三要素梳理一下,你就已经把握到整体了,即使其中有些细节不理解也无伤大雅。

试想一下,如果一位师弟指着你桌上的西瓜书问你:机器学习是什么?你会不会一脸懵?O(∩_∩)O
机器学习就是让机器学会自主学习,对已有信息进行归纳和识别,并自主获得新技能的能力。相比于传统计算机编程里直接告诉计算机“什么时候做什么”,机器学习通过“不显式编程”赋予计算机能力,即提供一些案例,让计算机通过案例自己学习什么时候应该做什么。这就是机器学习的魅力~~
四、工作

其实,学习的根本目的就是为了工作,更好的工作!

目前,大多数同学涉足计算机视觉领域,其根本原因无非有三:高薪、需求大、前景广阔。选择计算机视觉,并且以后想要从事计算机视觉这方面的工作。非科班同学,入门一定要慎重 慎重 慎重,一定要摆正心态,因为找工作时可能就要跟那些计算机专业的学生们竞争了,博主的血泪史~~

如果已经坚定决心,最好从现在起,就把自己当一名程序员看待。当然你也可以有自己的优势,你拥有自己专业的领域知识,这对某些公司来说很重要,你找工作时基本上也都应该重点考虑这些公司。你对视觉的具体应用本身也比较了解;劣势是你缺乏计算机专业的基本素养,具体到笔试或面试中就是编程能力不行。

说到这里,大家应该都听说过“刷题”这回事。程序员应聘的特点之一就是首先面试官会考查一些基础的算法题,借此评估一下你的基本编程能力。其实计算机专业的学生在工作季前也要在力扣等平台上刷题练手,不然他们也过不了第一关—笔试。

不过,对于我们非计算机专业同学而言,刷题前最好系统学习下数据结构和算法这门课程,切忌管中窥豹。程序=数据结构+算法,前面提到的北大《程序设计与算法》专项课程里就有这门课。然后就是苦练刷题技能了,刷题过程中注意多总结吧~~

当然,也不否认有一部分同学误入歧途,深陷泥潭…我相信也有一部分人同学毕业之后就再也不会接触这些“破玩意儿”,挺好的,解脱了,早放弃早快乐~~
~

靠着这套计算机视觉学习路线,大厂视觉算法工程师offer拿到手软 深度学习/计算机视觉/学习路线/图像处理/算法工程师相关推荐

  1. 计算机视觉分析:传统视觉VS深度学习

    近日,来自麻省理工学院.加州大学伯克利分校.伊利诺伊大学香槟分校.华盛顿大学.帝国理工学院的六名顶级人工智能科学家.计算机视觉科学家在 ICCV 大会期间进行了题为「A discussion abou ...

  2. socket技术路线_呐,这不就是你要的C++后台开发学习路线吗?

    校招形势 在去年结束的秋季招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗.不少同学从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而造成后台开发岗位竞争的大爆发. 后 ...

  3. 真·干货!这套深度学习教程整理走红,从理论到实践的带你系统学习 | 资源...

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 寒假/春节小长假给自己充电的真·干货来了. 如果你想要的是一份从理论到实践的深度学习教程清单,如果你想系统了解各类框架.基础网络与各种使用场 ...

  4. Java详细学习路线及路线图(2020最新版) | Java工程师成神之路 | Java最全学习路线

    这篇文章主要是关于小白Java学习路线, 整个学习路线非常的清晰明确,适合各种层次的Java自学者,非常全面的Java学习路线. 整理不易,记得帮忙点个赞哟~ 第一阶段:Java基础 学习任何一门编程 ...

  5. 年薪翻倍的100篇面经:如何转型AI拿到阿里等大厂的40万offer

    前言 熟悉我的朋友可能已经知道,我个人从 2010 年开始在CSDN写博客,写了十年,如今接近1700万PV,创业做「七月在线」则已五年,五年已30多万学员.这五年经历且看过很多的人和事,比如我们的机 ...

  6. 深度学习在机器人视觉中的局限与优势(综述)

    作者丨脱贫钉子户@知乎 来源丨https://zhuanlan.zhihu.com/p/354728113 编辑丨3D视觉工坊 序言 本文来自于<The Limits and Potential ...

  7. 整日碎片化学习“凡不凡”?来看看优秀的Android开发都是如何学习的,破解碎片化学习的骗局!

    前言 人生有好多事情,可以走捷径或者可以找人替代,唯有求知.成长无捷径及无法找人替代. 作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈: 1.技术视野窄:长期在小型软件公司,外包公司工 ...

  8. 时空AI技术:深度强化学习在智能城市领域应时空AI技术:深度强化学习在智能城市领域应用介绍...

    来源:海豚数据科学实验室 作者:京东科技 时空AI团队 深度强化学习是近年来热起来的一项技术.深度强化学习的控制与决策流程必须包含状态,动作,奖励是三要素.在建模过程中,智能体根据环境的当前状态信息输 ...

  9. 清华通信本硕巨佬秋招经验总结,收割互联网大厂后端 SP/SSP offer,太强了!

    作者 | 程序员峰哥 来源 | 程序员峰哥 学习群里的清华学霸,去年这时候只有 Java 基础,后面帮他制定了学习路线开始学习,并参加了春季实习,这次秋招收获颇丰,基本都是顶级大厂的 A+/A++ O ...

最新文章

  1. Linux下的一个图形管理工具webmin
  2. centos7使用sendmail发送邮件
  3. python【蓝桥杯vip练习题库】ADV-309进制转换
  4. c#基类 常用数据验证的封装,数字,字符,邮箱的验证
  5. Deep Learning---caffe模型参数量(weights)计算
  6. 阿里P7架构师谈职业生涯规划,给遇到瓶颈,迷茫期的人群一些建议
  7. 导入工程后编译不过,报错: apply plugin: 'com.github.dcendents.android-maven'
  8. 漫画 | 面试的我 VS 真实的我
  9. loadrunner录制事件为0_利用LoadRunner编写Socket性能测试脚本简述
  10. thrift之TTransport层的堵塞的套接字I/O传输类TSocket
  11. matplotlib 柱状图、饼图;直方图、盒图
  12. 找出数列中个数大于总数一半的元素(编程之美2.3)
  13. 微信僵尸粉源码php,清除微信僵尸粉工具源码
  14. mysql不是内部命令_mysql不是内部命令的错误解决方案
  15. 博客左侧导航栏添加打赏功能(添加微信赞赏码)
  16. 初步观察UE蓝图的“Branch节点”,这个最简单的K2Node的代码
  17. mybatis 父子级树形结构查询
  18. 超强!Figma汉化版下载教程来了!
  19. 三菱FX5U程序,双FX5U80MT主从站控制,普洛菲斯触摸屏程序,搭配三菱伺服,松下变频器控制运动控制数轴运动控制
  20. 开发群发微信图文消息,正文中的图片却不显示问题

热门文章

  1. js判断移动端是否存在app
  2. 基于Java语言的OpenCV使用
  3. C语言基本语法复习(一)
  4. javase_day3
  5. java过滤map去除重复数据,javascript模拟map输出与去除重复项的方法
  6. 求矩阵中所有元素的最大值
  7. ValidateRequest=false 无效
  8. 添加了ValidateRequest=false仍然报错的解决办法
  9. C# FileSystemWatcher用法详解
  10. java file 网络文件_Java 网络文件传输