计算机视觉学习路线
计算机视觉学习路线
深度学习算法工程师的基本要求
- 熟练掌握python和c++编程,至少熟悉 Caffe 和 Tensorflow/Pytorch 两种框架。
- 熟练玩转深度学习各类模型架构使用和设计。
- 熟练玩转数据的整理和使用,必须深刻理解数据在深度学习任务中的地位。
01 机器学习及OpenCV学习路线
想快速入门的话,从自己的经验看,可以先不看高等数学和线性代数,因为机器学习和深度学习中涉及的相关知识并不多。
视觉的知识部分建议分成两部分学习, 第一部分传统图像处理,第二部分基于深度学习的图像处理。
计算机视觉的提升不在于搭建模型,而在于不断调优、改进过程中积累的经验。
我们该怎么针对不同领域的图像设置不同的参数?其中包括卷积核大小、网络架构、初始权重等等,不可能拿到一个模型,既适合医学图像,又适合人脸识别,这其中就需要n次从70%的精度调到95%以上中积累出经验。
对于深度学习的学习我并不建议,直接就学习深度学习的相关知识,毕竟深度学习是基于机器学习而来的。
所以在入门CV之前,同学们最好对基础的学术课程都有对应的了解,比如数学方面的微积分,概率学,统计学,线性代数这几门基础课程。
在编程语言方面,Matlab,Python,C++,最好熟悉其中2种,因为计算机视觉离开计算机编程是完全行不通的。
- 机器学习是从数据中学习的核心算法。
- 对于计算机视觉而言,特别是初学者,最开始的时候你不需要学习太多机器学习。你可以像黑箱一样使用他们就够了
- 顺便说一下,这是一个艰难的领域。要成为专家,你需要付出大量时间。你想要在这个领域成长够多,你就要关注更多的细节。最开始,您只需要学习一些基础知识+最近使用的算法。每4-5年,都有一些算法在文献中流行
02 系统的学习以下计算机视觉课程
在这里班主任推荐3本经典教材:
《Computer Vision: A Modern Approach》
《Computer Vision: Algorithms and Applications》
《Computer Vision: Models, Learning, and Inference》
这三本教材班主任认为是计算机视觉最好的入门教材了,内容丰富,难度适中,其中第二本书涉及大量的文献,很适合对计算机视觉没什么概念的同学。这三本教材都不建议读中文版,有些地方的翻译不是很合适。
03 绕不开的数字图像处理
数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
入门的同学推荐冈萨雷斯的《数字图像处理》《数字图像处理(第3版)(英文版)》和对应的Matlab版本。一本讲基础的理论,一本讲怎么用Matlab实现。
04 贯穿始终的模式识别
模式识别(Pattern Recognition),就是通过计算机用数学技术方法来研究模式的自动处理和判读。我们把环境与客体统称为“模式”。
计算机视觉很多东西都是基于图像识别的,图像识别就是模式识别的一种。
模式识别通常是训练一个模型来拟合当前的数据,当我们拿到一堆数据或图片,需要从当中找到它们的关系,最便捷的便是用模式识别算法来训练一个模型。
班主任推荐一本模式识别入门级的教材《模式分类》,相对于《模式识别》这本书来说可能比较难,但书中介绍了很多模式识别经典的分类器,还是很值得一读。
什么是卷积?卷积就是两个函数之间的相互关系,然后得出一个新的值,他是在连续空间做积分计算,然后在离散空间内求和的过程。
同学们可以试着学习下CNN在计算机视觉当中的应用,推荐大家荐斯坦福的CS231n课程:深度学习与计算机视觉。
我建议开始看吴恩达老师的《机器学习》课程,这个课程相信许多人已经快推荐烂了,但是我依然觉得必须推荐,毕竟这是我的第一位入门导师(我是出身机械专业的,都没有编程基础的小辣鸡,狗头)。
B站链接:(
看《机器学习》课程的时候,我觉得有必要练习一下课后习题,利用Python进行编写。
对了,在看《机器学习》的时候,里面会有编程的内容建议略过,因为里面的编程语言不是Python更像是低配版的Matlab。
对于Python的学习我看了很多,让我推荐一个我还真不好推荐,那就建议看看廖雪峰老师的官网的Pyhon教学吧,建议看看前面的基础就行,不用深究,慢慢的就会了。这里想说一下,其实都是直接先动手过一遍,再慢慢去弄明白原理。有些东西上来没办法直接理解,只能慢慢熟悉了再去理解!
链接:(
想看视频的话,我也不知道推荐看谁的好,自己在B站找个比较符合自己口味的就OK!
课后习题推荐看B站一位小姐姐的课程,基础太差感觉自己编写的话很费时间的。参考一下,把代码敲一遍也算是把Pyhton编程语言学了一遍。
B站链接:(
学习完之后我觉得可以看点OpenCV的基础知识
05 深度学习学习路线
深度学习的话,我还是建议先看吴恩达老师的《深度学习:DeepLearing》,比较适合零基础的同学。
B站链接:(
学习完理论知识记得需要强化一下动手能力,推荐比较适合零基础的同学,看这个PyTorch教程,快速入门了解神经网络架构PyTorch,进行网络搭建。(B站up主:小土堆)讲的很不错很详细哦~!
B站链接:(
看完之后再看李宏毅老师的21版最新的《深度学习》,20版也不错哦~!这个视频里面也会讲到PyTorch的知识,相当于巩固了一下。
B站链接:(
另外再学学李沫老师的《动手学习深度学习》
B站链接:(
学习pytorch和tensorflow了,莫烦的还有他们的官方文档都很详细,你可以选择去看。我当时是买的书,pytorch 的我买的博文的:深度学习入门之——pytorch,tensorflow的我买的机械工业出版社的深度学习之tensorflow入门,原理与进阶实战。这两本都很适合入门。
推荐资料:
莫凡教程系列之PyTorch :
TensorFlow中文社区:
总结
好啦,说了这么多,替大家总结了一份简洁的学习路线图。希望能够帮助大家,毕竟在这条道路上没人指导真的很难!当初自己就学的很累!
06 复现论文
尝试阅读和复现如下文章,你将受益匪浅。助前行,希望对大家有所帮助。
网络架构
AlexNet:
ZFNet:
VGG16:
ResNet:
GoogLeNet:
Inception:
Xception:
MobileNet:
语义分割
FCN:
SegNet:
UNet:
PSPNet:
DeepLab:
ICNet:
ENet:
生成对抗网络
GAN:
DCGAN:
WGAN:
Pix2Pix:
CycleGAN:
目标检测
RCNN:
Fast-RCNN:
Faster-RCNN:
SSD:
YOLO:
YOLO9000:
实例分割
Mask-RCNN:
YOLACT:
姿态估计
PoseNet:
DensePose:
原文链接:
欢迎关注磐创AI博客站:
sklearn机器学习中文官方文档:
欢迎关注磐创博客资源汇总站:
07 研究生如何写计算机视觉的论文
如何开始研究
我喜欢把计算机视觉问题分为两种类型
一些研究方向设计到人工智能基于学习的方法。比如图像分类,OCR,视频跟踪等 大多数你所能看到的论文都是这种方向的.
学习意味着我们有很多数据 (e.g. 比如ImageNet,100万图像和他们的标签),然后学习这种模式 (e.g. 比如分类图像中的字符)
对这种类型的方向,你必须学习很多机器学习的知识
其他研究方向涉及到不需要学习的算法,比如3D重建,光流计算,全景拼接(52CV君评论:其实现在3D重建和光流估计已经有很多基于学习的算法了,可在本站搜索关键字获取相关信息)
使用课本和课程
一种直接的方法是从书本开始
不要被困在书本里。请记住,你想开始研究。尝试了解基础知识并进行一些编码。保持你的眼睛定睛在对你来说最近有趣的工作上。
尝试找出不同的研究视觉问题…看哪个更令你兴奋。
然后你要进入下一个阶段: “从论文开始”
从论文开始
从 顶级会议 和期刊的论文开始。其他 低级别的 会议可能会有 虚假 结果并浪费您的时间。
CVPR保留重要会议和许多论文的清单。
使用文件知道什么是可用的轨道… Wiki也会有帮助
使用Google Scholar 查找特定问题的综述 。综述可以节省大部分时间。
考虑 最近过去3年的论文 。假设我们在2014年,考虑2011年,然后是2012年,然后是2013年。不要从2014年开始。
收集文件,使标题看起来相关。搜索他们找到是否 有源代码 。尝试从源代码文件开始。
开始将是艰难的,因为你遇到了许多你不知道的术语和工具。耐心一点。谷歌搜索他们,在论坛上提问,如Quora或Stackoverflow。
尝试找到一个特定研究方向(例如3D重建,点云,场景理解,物体识别,大图像数据,多目标跟踪,图像描述符理论等)。查看wiki或会议论文目录以查找您感兴趣的内容。
使用会议来了解某方向论文或使用Google学术搜索
关注那些研究工作更权威的的研究人员。关注 高引用次数文献 。
首选从有运行软件的研究工作开始,节省你的时间。
为了学习一些工程实现方向,请为您选择一个简单而漂亮的论文然后实现它。复现论文的结果。在这样做的时候,会有很多问题弹出,很多时候你将不得不做一些假设,因为你所看到的论文中通常并不是所有的都提到了。还有许多实现细节,比如如何有效地实现这一点不会被列出。您将了解诸如性能,实验等问题。可选择的论文比如:Viola Jones face detection, Christophe Lampert Efficient Subwindow Search, or Brian Fulkerson superpixel neighborhoods 等。实现具有完整代码的论文是一个非常好的主意,以便您可以检查自己的实现有什么问题。
对于你自己的研究工作,要尝试使用现有开源代码,而不是一切都从头开始,不要重复造轮子!
如果论文没有公开代码,你可以尝试联系作者是否可以得到代码。
如果理解几次尝试理解一篇论文仍然很难,就转到另一片论文。或者换一个方向。(这是你在寻找研究方向的时候)
这也许对你有用,最佳获奖论文集
研究生研讨课程取决于论文。
从代码开始
从代码到纸张,是从一些可用的代码开始理解你所研究的问题
找一个开源库,然后尝试它,比如OpenCV
有很多不错的书关于OpenCV
Youtube 上也有不少视频:
学习Matlab并使用它来编写初始解决方案原型(因为它往往比较快的能够开发出原型)
选择一个有意思的toy项目并实现它
链接:https://pan.baidu.com/s/1fLBQhyMCCrUKjt_2U2XolQ 密码:ne94