研究生入学已经半个多月,看到课题组师兄们这段时间纷纷忙着秋招找工作,想到自己一年后也要面对,倍感焦虑,真的巨后悔读了个两年制的专硕(年少无知啊!以为两年学制就是两年后找工作),但是后悔是没有用的哈哈,只能抓紧这一年时间打好基础,等找工作了爱咋咋地吧。。之所以开始写博客,既是希望记录自己学习过程当中的收获,感受不同时间对某一些问题的理解的深入,当然也希望鞭策自己,让自己有一种紧迫感。 本人研究生的方向是机器视觉,当时也是蹭热度想借此转cv,现在发现自己简直幼稚可笑失了智!大厂的cv岗如今真的只招神仙,岂是我这样的凡人能够觊觎的。其实想想也知道计算机视觉这种岗位要这么多只会跑模型瞎调参的人有啥用啊。
我的人生座右铭就是:菜没关系,关键要知道自己菜! 说了这么多,总不能就放弃视觉这条路吧,也当然不是,作为机械的本科生也还是有些自己的长处的,做不了飘在天上的计算机视觉,做下地上的工业视觉也不错嘛!所以自己也有了个大致的发展方向,机器视觉算法工程师!这些天也好好理了下这一年时间需要点的知识技能。
-
数字图像处理。这应该是所有做视觉图像相关的必修课了,其实之前大致看了冈萨雷斯的《数字图像处理》的前几章,主要是关于空间域的图像处理,之后的学习还是继续掌握关于频域图像处理的知识(实在是看到二维傅里叶变换就害怕)。
-
算法与数据结构。这一块应该是所有想做算法岗的人的重中之重了,在面试当中也占有极大的比重,学习思路主要通过学习清华大学邓俊辉教授的《数据结构(C++语言版)》,这本书可以说是相当适合自学了,对C++中常用的C++数据结构及其相关的函数接口和算法都有生动形象的讲解,目前的计划是年底前刷完这一本书,为刷算法题打好基础。
关于如何面对面试的话主要就是刷LeetCode以及剑指offer的算法题了,之前有稍微看过一些LeetCode上的medium的题目,总是习惯看到题干就开始琢磨,有时候一琢磨就是一两个小时(太菜),其实这种方法还是比较低效的,没必要这么较真,刷题的时候直接看别人的思路,理解了别人的思路就自己的了嘛。。毕竟这东西我感觉也没啥用,只是为了面试而已,有几个人不是见过某种题型才能当场ac出来嘿嘿。 -
其他计算机基础知识
1)C++语言,最近在看《C++ primer plus》,感觉真的写的不错啊,,看起来也完全不费劲,觉得系统的了解C++的语法和用法对以后看opencv pcl等库的源码也更有好处啊,而且面试也会考察C++的一些基础知识,例如类的继承派生、指针和引用、动态内存等等,C++ Primer Plus有所有我需要的
2)操作系统、计算机组成原理。这两门课我都不打算系统的学习,太费时费力,而且其实不做软件开发的话其实作用并不是很大,主要了解一些入门的基础知识就好。 -
Opencv。作为使用最为广泛的开源计算机视觉库,对他的熟悉当然是必备的啦,但是我想说opencv毕竟只是个工具,真正要深入学习还是要懂每种图像处理算法背后的理论支撑及其源码的算法实现(虽然我知道理论是学不完的),然后结合项目去练手,之前在公司实习用的是C#和封装了opencv的emgucv,使用起来其实类似,但还是希望能更多的熟悉opencv,能在面试官给出你一个简单场景应用时你得有怎么去利用opencv解决该问题的大致思路。opencv的使用学习其实看官方的例程是最有效率的,然后是《学习opencv3》,这本书也写的非常好,但是真的好贵。。计算机视觉的理论可以结合这本书去看,里面对常见的图像处理算法的理论有系统介绍,如果看不懂的话也要不择手段弄懂!毕竟函数谁都会调用,懂理论多高级哈哈!
-
PCL。相信做三维视觉的同学对PCl肯定非常熟悉,其全称为Point Cloud Library,是如今最流行的处理点云数据的开源库。在工业视觉当中其实普遍还是使用三维相机,因为其除了提供彩色图像信息之外还会提供视场内的深度信息,这为我们后续的图像处理提供了更好基础。其实在学习机器学习的时候就认识到一个道理,就是无论你模型怎么厉害,最终决定你准确率上限的还是数据集的质量,图像处理也同理,既然可以多一维靠谱的特征,当然得用起来啊 !而且相对来讲二维图像处理还是很不靠谱,现如今基于深度学习的目标检测准确率已经非常高了,但是还是离其能广泛实际应用有差距,而且人们好像还是没有把握内部的运行机制,emm这东西玄妙得很,就像个黑盒,所以有时候往往还是传统的图像处理简单粗暴更能解决问题。如今随着硬件设备性能的发展,基于rgbd点云的目标分割、目标感知在工业场景中运用的十分广泛,可靠性也得到了验证。学习PCL的书本视频资料几乎没有,所以主要通过官方文档和别人写的博客来学习,其实也就是个工具嘛,所涉及的东西和二维图像处理类似,无非就是点云滤波、点云分割、点云特征描述提取以及配准等知识,学会使用pcl解决这些问题的同时了解背后的理论以及算法原理也是有必要的。
-
ROS。ROS全称为Robot Operating System,顾名思义就是机器人操作系统,这个对我而言主要是了解其大概的开发流程及架构,因为工业当中通常视觉会基于机器人和机械臂解决实际生产的问题,所以了解机器视觉在ROS上的开发流程也是有必要的,其封装了opencv和pcl,使用起来应该也是非常方便。主要学习就是古月大神的博客以及视频课啦,师兄的姿势水平没的说,讲的非常清楚也易于理解。
-
linux操作,因为项目实际开发基本都在Linux系统,所以了解Linux终端的基本操作也是有必要的,电脑中已经装了ubuntu系统,所以也可以边学习边练习,加深对各种指令的熟悉。
-
机器学习与深度学习。这一块之前有学习过,主要是看李航的《统计学习方法》(西瓜书看不太懂/(ㄒoㄒ)/~~)和一些视频比如李宏毅教授的视频以及吴恩达教授的视频,对一些常用的机器学习方法有了大致的了解,之后会写两篇博文总结下,其实这应该不算我的学习重点了,但是犹记当初推svm,推bp算法的痛苦,感觉学了还是不能丢,哈哈说不定找不到视觉算法岗可以找个机器学习岗嘛。。。当然除了理论知识之外还是得学学python编程实现这些算法(毕竟人生苦短,C++写机器学习算法太难受)。也当锻炼自己coding能力了咯。其实这些经典的机器学习算法已经在skilearn当中封装的很好了,但还是想用numpy去力所能及的从底层实现某些诸如KNN,决策树、bp神经网络、逻辑回归等算法。
深度学习的话其实主要熟悉TensorFlow吧,刚好课题组有师兄做过相关项目,把项目大概看懂就行,不想深究。这里提一下keras,好像是google的一个员工基于TensorFlow和Theano开发的一个高层的神经网络API,为快速实现深度学习模型而生,实现个卷积神经网络只要几行代码哦。kaggle上和深度学习相关的比赛,比赛者们通常都是用keras去实现自己的深度学习模型,操作非常简单。 -
其他工具。CUDA,英伟达开发的一个软件工具,是使用gpu加速图像处理算法的一个软件,好像蛮有用的,值得学习一波!CMake,好像是用于辅助编译的工具,在蛮多地方都见过,也需要去熟悉下。
好啦。上述就是我这一年的一个整体的学习规划,其中有一些部分是接触并学习了一段时间的,有些的希望一年后在简历上有资格写熟悉,有些的希望有资格写了解,任重道远啊!一定要加油变得不那么菜!!!
.