前言:
前几日有个读者留言要我写一个计算机视觉入门路线,当时承诺过几天写一下,本想私聊写一份给ta,奈何过了48小时公众号就没有权限给读者回消息了。为了信守承诺,只好以公众号文章的形式发出来了,正好一些有需要的读者也可以看看。这是我个人的一些经验,算不上一篇正式的总结,所以写的会没那么正式和严谨,读者理性阅读就好,别当成是很规范合理的一个指导路线。
我由于是本科就开始自学,没有导师、学长学姐指导,当时比较年轻,有冲劲,属于什么跟视觉相关,我就去学了,所以走了很多弯路,但也正是如此,才学了很多很多东西。除了很多直接相关的内容外,一些跟计算机视觉不是特别相关的内容也都有涉及,例如视觉slam,cuda,数字图像处理,机器学习,统计学习方法,模式识别,数值分析,群智能优化算法等,还有很多。
也有点幸运的是,虽然走了很多弯路,学了很多不怎么用得到的东西,但我从中锻炼的能力促使我现在学任何一个新的东西,速度都比别人要快,理解效果更好,勉强算是祸兮福所依。
回到正题,在这篇文章中会介绍一些入门必学的内容,一些可以不学但学了会更好的内容。每个内容都进行了简要的介绍,并提供了获取途径。

必学的内容

  1. 李飞飞的csn231课程。这个课程我没有完整看过,因为我当时看的时候,我已经有很好的基础了,里面讲的东西我都了解,所以只扫了几眼。但这是很多人都推荐必看的一个入门视频。获取路径:b站搜“李飞飞”就可以获取。
    2. 李宏毅的关于深度学习的课程。这个我选择性的看了一部分,同样是因为看的时候已经有基础。从我看的那些内容来看,李宏毅的视频讲得非常非常好,十分惊叹竟然会有人讲课讲得这么好。获取路径:b站搜索“李宏毅深度学习”。
    3. 《解析卷积神经网络—深度学习手册》,这是我个人十分推荐的pdf,对于神经网络的结构组成介绍得很详细,写的非常简单,我阅读了两遍。获取路径:在文末提供的链接里有。
    4. opencv,一个图像处理的库,这日后会经常用到,我在文末的链接获取方式里放了它的pdf,这个pdf的特点是写的非常简单明了。
    5. tensorflow和Pytorch,建议先学tensorflow,因为对于刚入门的读者来说,tensorflow会更复杂一点点,等学会了tensorflow后,会发现pytorch无师自通。关于学习tensorflow,可以看下面这个链接里的教程,这个教程写得很不错。
    https://lyhue1991.github.io/eat_tensorflow2_in_30_days/
    也可以在B站上搜“tensorflow”,上面有很多很完整的视频教程。我在下面的链接里也提供了一份《tensorflow实战》。关于pytorch,在文末的链接获取方式里也提供了一份《动手学pytorch》。这个教程我全看了,十分推荐。
    6. CNN的一些经典结构,需要对每个经典结构了解得非常清楚,因为它们会经常跟你见面。如果说要自己设计一些网络结构,这些经典网络中所体现的一些设计思想,改进思路,都是十分值得借鉴的。关于这方面,在文末的链接获取方式里有两个pdf,《模型汇总》和《CV技术指南》里几篇文章《CNN结构演变总结》可以看一看。
    7. 无障碍阅读英文文献的能力。在以后的日子里,需要阅读大量的论文,需要用翻译软件的话,理解不准确,阅读速度不够快,阅读效率不够高。关于具备这个能力的方法,在文末的链接获取方式里提供了《CV技术指南》,里面有一篇文章介绍了如何实现高效阅读论文的方法。
    学完上面这些内容,可以勉强算是入门了,可以开始做自己方向上的研究。然而,基础算不上很牢固,一来是因为深度学习这方面是一个很难懂的东西,可能你看某个文档或某个视频的内容看懂了,但若是问你几个问题也许一个都回答不出来;
    二来是因为上面这些内容跟具体方向还没什么关系,它仅仅是个基础,计算机视觉方面,从我个人的角度来看,它最重要的是思路,思想。由于计算机视觉不具备可解释性,很多方向上的创新,改进,都是人的主观理解,但效果确实有提升也是真的,因此这些创新、改进的思路算得上是经验,只有熟悉这些才是真正的入门,自己设计、创新和改进的东西才会产生好的效果,因为创新不是小孩子的天马行空,必须基于合理的情况下。

    可以学一学的内容

  2. 机器学习。机器学习很难理解,里面的东西对计算机视觉的人来说也不常用,但仍然建议看一遍,里面有很多算法,对分析问题能力和理解能力的提升会很有帮助,也会扩展自己的思路,获取路径:B站搜索李宏毅机器学习,文末的获取方式里也提供了西瓜书的pdf。
    2. 统计学习方法,这个就比较简单了,可直接看书,同样是里面的算法对于提升能力扩展思路很有帮助,甚至很多传统算法,计算机视觉现在用到的一些算法,都有这里面的内容,这本来应该是列在上面必学内容里的,想想还是列在这里合适。获取路径:文末的获取方式里提供了pdf。
    3. cuda。这对于计算机视觉的人来说,没必要去学,因为在框架里已经实现好了。但从我个人的角度来看,仍建议稍微了解一下,一是因为不深入的话其实内容不多,二是可以加深对代码的理解。获取路径:文末的获取方式里有一个pdf,我当初学的是一本绿色的书《GPU高性能编程CUDA实战》,但我没它的pdf,提供的这个pdf我稍微扫了一眼,确实比较简单,内容也不多。
    4. 数字图像处理。这个没得说的,看它的题目就知道,最好是学一学,这个也本应该列在必学的内容里,会对理解图像这一方面非常有帮助。推荐冈萨雷斯版的教材,这个网上应该有pdf,我在文末的获取方式里提供了一本《图像处理分析和机器视觉》,非常非常厚,里面的内容我选择性地看过一些,建议读者也挑一些看一看,例如关于什么是噪声,噪声的分类等。
    5. PRML-模式识别。这个也挺重要的,很多导师要求研究生在入学前就要学模式识别,公认的那版对刚入门的读者来说比较难理解,建议还是看一看,在文末的链接里提供了一个简单版的《模式识别与智能计算》,里面虽然有很多内容与公认那版不一样,但那些内容很值得去了解(第五章没必要看),例如模糊控制、模拟退火算法等,这些对于提升能力扩展思路很有帮助。
    6. 自己动手无框架(只用Numpy)实现一个卷积神经网络,而不是一个纯粹的全连接网络,包括卷积层,池化层,激活层,全连接层,实现完后再去看看别人怎么写的。这样做有两个目的,一个是自己真正的深入理解卷积神经网络,在这个过程中你会理解池化是如何回传梯度的,卷积操作在底层是如何优化的;第二个为了以后的结构设计和模块设计更合理。例如MobileNet_v3中提到sigmoid的底层实现太复杂,重新设计了一个简单的,例如很多论文设计出结构后都会分析底层的矩阵优化算法,避免计算太复杂。
    再补充一些个人的看法,目前计算机视觉最近几年发展很快,出现了很多很多重要的论文,模型,结构,算法。对于现在入门的读者来说,其实很难,因为要学的东西太多了,而不学又不行,因为没有广泛的知识面在这个领域是很难有创新的。而我能做的,就是在公众号中将这些内容尽可能地做一些总结,到现在为止,这些总结每篇都概括了十几篇论文的内容,读者看完总结后可节省不少时间去了解这些技术或方法。
    暂时只想到这些,也许还漏掉了一些重要的内容。
    以上的资料获取方式:在公众号《CV技术指南》中回复关键字“入门指南”可获取。