在之前的课程中,我们完整地实现了多个深度神经网络的训练流程,并通过丰富的实验讲解了众多神经网络训练过程相关的优化方法,到这里你应该已经对深层神经网络(DNN)及其常用的优化方法十分熟悉了。在深度学习相关的任意领域,我们都依赖全连接层及其优化方法来建立更强大的模型。从本节开始,我们将进入深度学习热门的应用领域——计算机视觉(Computer Vision,CV,相信这也是许多小伙伴期待已久的领域)。在入门阶段,我将辨析深度视觉、计算机视觉、人工智能等学科之间的关系、尽全力描绘计算机视觉这个领域的全貌、以赋予大家正确的认知和理解。我们将深入介绍在过去三十年中非常活跃的卷积层、池化层等技术手段,同时带大家认识并实现在学术与工业界被广泛使用的各类经典视觉模型。
在课程开始之前,我们需要安装专门用于处理图像的OpenCV库。OpenCV专注于图像处理,包含的深度学习内容极少,鉴于我们的课程是围绕深度学习展开的深度视觉课程,我们不会使用过多的篇幅去讲解OpenCV库的应用。在cmd或terminal中,使用pip安装OpenCV完整版的代码如下,在这里我们使用的是中科大源。请注意执行此代码时,VPN必须为关闭状态。
pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple/
如果你被提示pip版本不够高,你可以使用以下代码升级pip版本,执行此代码时,VPN也必须为关闭状态:
python -m pip install -U pip
如我们之前在pytorch安装中提到的,近期pip在进行官方升级,因此会出现使用pip进行安装就花式报错、报警告的情况。如果你在安装过程中出现了大量警告,注意观察pip是否有升级成功,如果升级成功则可以无视警告和报错照常进行OpenCV的安装,如果没有更新成功,则可能需要卸载pip进行重装。
安装成功后,在cmd或terminal中输入python来进入以下模式:
紧接着,输入以下代码:
import cv2
如果不报任何错误,得到这样的结果,就说明安装成功了:
—————————————————————————————————————————
一、劝退还是坚守?计算机视觉行业综述
1 从炙手可热到充满争议
2 门槛低,上限高,学习曲线陡峭
3 计算机视觉 ≠ 卷积神经网络
4 深度视觉需要“开拓者”
5 行业红利在哪里?
6 这门课程的CV部分将如何规划?
二、从卷积到卷积神经网络
1 图像的基本表示
2 OpenCV令像素变化来改变图像
3 卷积操作
4 卷积遇见深度学习
4.1 通过学习寻找卷积核
4.2 参数共享:卷积带来参数量骤减
4.3 稀疏交互:获取更深入的特征
三、在PyTorch中构筑卷积神经网络
1 二维卷积层nn.Conv2d
1.1 卷积核尺寸kernel_size
1.2 卷积的输入与输出:in_channels,out_channels,bias
1.3 特征图的尺寸:stride,padding,padding_mode
2 池化层nn.MaxPool & nn.AvgPool
3 Dropout2d与BatchNorm2d
4 复现经典网络:LeNet5与AlexNet
4.1 现代CNN的奠基者:LeNet5
4.2 从浅层到深度:AlexNet
—————————————————————————————————————————
计算机视觉(Computer Vision,简写为CV)是一门研究如何让计算机从图像或图像序列中获取信息并理解其信息的学科,其主要目的在于从图像或图像序列中提取对世界的描述。从工程学的角度来看,它研究如何使用算法模拟人类的视觉系统,从而完成人类的通过视觉可以完成的一系列工作,其中最广为人知的应用就是“人脸识别”。
作为深度学习相关的、近二十年内落地发展最快的领域之一,计算机视觉让无数技术人魂牵梦绕又魂飞魄散。人们追逐计算机视觉主要有两个原因:第一,这个领域非常有趣并且具有改变世界的潜力。人脑所获取的信息有80%都依赖视觉形成,成功模拟人类视觉系统所带来的经济与社会效益是不可估量的。从科学精神上来说,计算机视觉值得科研人员付出一生去研究,进入这个领域,你将有机会拥有自己的事业(career),而不只是一份工作(job)。第二,在21世纪初,计算机视觉领域取得了飞速的发展、并拥有了巨量实际落地场景,这意味着这个领域有产业需求、有学术潜力,并且最重要的是,有很高的经济价值。这些因素让计算机视觉成为资本市场上的香饽饽,行业人才价格也水涨船高,计算机视觉成为了许多人梦寐以求的事业发展方向。
但很快的,人们就对计算机视觉敬而远之了。且不说深度学习本身就是一门有一定门槛的学科,在2019年秋季,算法岗招聘还出现了“诸神黄昏”之景,无数手握顶会论文的大佬们神仙打架,争夺有限的CV岗位,几乎形成了完全的卖方市场。从那之后,人们相信计算机视觉领域内卷严重、学术研究停滞,工业落地场景虽多但成本巨大,看似光明灿烂,其实性价比不高。一时之间,竟形成了从计算机视觉“大逃亡”的景象,众多怀抱AI梦想的毕业生都转向开发岗,放弃了计算机视觉、甚至完全放弃了AI这条路。从炙手可热到充满争议,计算机视觉只经历了短短几年的时间,这与全球AI风潮的兴衰、以及人们高度看好计算机视觉领域有很大的关系,但更多还是视觉领域门槛低、上限高、学习曲线陡峭的学术特点导致的。
深度学习是一门有门槛的技术,只要稍有了解“算法”、“人工智能”这些概念的人,都不敢轻易说深度学习、尤其是计算机视觉门槛低。但在视觉这个行业中,比起达到“熟悉”或“精通”的水平,视觉入门的确是太容易了——首先,人人都知道计算机视觉的核心是卷积神经网络CNN,于是先学CNN就对了,通常一个优秀的老师只需要30分钟的时间就能够让人们对卷积神经网络的工作流程产生个大概的印象,剩下的就是在github甚至CSDN上找一段代码,百度一下、修补几天、把代码跑通,就算是完成了人生第一个“视觉系神经网络”。对于更困难的模型,采用调包的方式,也能轻易获得结果。少数人会找几个图像识别的例子来完成自己的学习,但大部分人都只停留在跑通(别人的)代码,就转向了下一个领域,不可谓不容易。
但这样学习,距离成为“计算机视觉人才”还有天渊之隔。许多人在完成经典模型的学习之后,就傻了眼,会发现“无从下手、不知该从哪里继续深入”,因为这个领域里的经典模型就那几个,似乎已经没有需要学习的内容了(学算法,除了学模型,还能学什么呢?)。但望着招聘条件中赤裸裸的“顶会paper”的要求,根本想象不出论文应该从哪里出来,只能从“哪个领域好发paper”这个角度去入手。此时,你就是到了计算机视觉进阶的瓶颈处,大神在大气层,你在地下十八层,你却看不出你们之间的差异从何而来。即便你千辛万苦找到了你们之间的差异,你会发现你根本无法直接从简单的CNN架构跨入“读文献、写文献、看公式就能复现”的神之领域。90%以上的学习者都无法跨越这条陡峭的学习曲线继续向前,说计算机视觉要求太高、内卷严重,也就不奇怪了。
为什么视觉领域会有这样的状况呢?有两个根本原因:
其一、计算机视觉所覆盖的领域远远超出CNN本身,卷积只是冰山一角,而大部分人是在不了解这个事实的前提下投机到计算机视觉的方向
其二、以卷积神经网络为核心的“深度视觉”是一个过于年轻的领域,这个领域最稀缺的是开拓者,投机的人成不了开拓者
在过去十年,人们常常认为计算机视觉是以深度学习和卷积神经网络(Convolutional Neural
Networks, CNN)为核心研究领域。事实上,早在深度学习兴起之前,计算机视觉就是一个理论成熟、内容繁多的跨学科领域。
计算机视觉有完备的知识体系,它的内容包括了摄像设备性能、成像原理等图像获取和生成技术、也包括视频特效、3D、图像复原等早就被广泛应用的视频/图像处理技术,同时还包括图像分割、图像识别等让计算机分析、理解图像的技术。其中,图像处理也叫做“图像特征提取”,这项技术高度依赖数学、几何、光学等基础学科,与信号处理等学科有较多交叉,是计算机视觉中非常关键的领域。21世纪初,从事计算几何、计算机图形学、图像处理、普通成像、机器人等工作的研究人员或技术人员都需要学习计算机视觉丰富的经典理论,直到今天,许多视觉项目也是从“硬件自动采集图像”开始。
在人工智能兴起之后,人们发现传统计算机视觉中图像处理、图像分析领域的许多工作都可以由神经网络来完成,并且当数据量和计算资源足够时,神经网络往往能比传统方法取得更好的效果(As always)。于是人工智能与计算机视觉的交叉学科深度视觉诞生了,它是使用深度学习相关的技术、让计算机从图像或图像序列中获取信息并理解其信息的学科。而其中最令人瞩目的研究成果就是以卷积神经网络为核心的一系列模型架构。因此,包括我们的课程在内的众多计算机视觉课程,应该被称之为“深度视觉”课程才对。
但令人惊讶的是,在卷积神经网络压倒性的效果和性能下,行业并没有放弃传统计算机视觉,整个行业的人才标准也偏向于视觉人才与人工智能人才的融合,而不是传统视觉人才被“替代”。如今,计算机视觉工程师都必须掌握神经网络,但同时,也还是需要学习传统视觉相关的内容,而只使用深度学习方法、不使用传统计算机视觉方法的企业和研究机构并不太多。
深度视觉没有能够实现彻底地颠覆传统计算机视觉,主要有以下两个原因:
1、深度视觉训练成本太高,而传统视觉方法成本低廉。不是每个企业都能够满足深度学习算法对数据、算力的要求。数据量越大、网络层数越深,模型的效果也就越好,但同时所需要的训练和研发成本也会越高。世界上大部分的企业都无法支持这样的投入(也因此算法岗在全球的数量都远远不及开发岗多)。但视觉需求无处不在,人们总要解决问题,当数据不足时,一个懂相机、懂各种成像原理的视觉工程师会比数据本身更便宜,当算力不足时,一个懂得优化、懂得各种数据结构的视觉工程师会比大型服务器更便宜。即便企业能够支持深度学习需要的高投入,也需要考虑训练和时间成本——杀鸡焉用宰牛刀,深度视觉适合大项目大问题,传统视觉支撑小项目小问题。
2、深度视觉算法的进步和提升,需要传统视觉理论的支持。深度学习算法本身是黑箱,深度视觉领域又因为“过于年轻”所以理论基础不足,因此当网络层数非常深时,我们只能依靠孜孜不倦、日以继夜地“尝 试”来优化网络,但这又需要很高的训练成本和很长的训练时间。当成本不足、理论不清晰、又必须优化网络时,我们常常从传统计算机视觉的理论中获得启发。实际上,深度学习领域许多非常关键的创新都来源于学者对于其他研究领域的借鉴,比如,卷积神经网络中的卷积操作,就是传统视觉中常用的图像处理技术。
因此,即便深度视觉是计算机视觉领域最前沿的技术,大部分视觉系统的实现还是要依赖于长久的知识储备,因此行业人才标准也对传统计算机视觉有要求。根据经典计算机视觉算法库OpenCV的推荐,在掌握了python语言的基础上(OpenCV官方推荐的第一语言是C++),至少需要自学9个月才能够熟练掌握传统视觉基础并达到现代计算机视觉研发者的要求(顺便一提,只懂得卷积神经网络的人们被戏称为“视觉爱好者”),在名师授课、密集学习的情况下,你大约也需要至少4个月的时间来完成自己的计算机视觉理论搭建。无论是9个月自学还是4个月全职学习,这些时间都足以覆盖一门硕士课程一整年的学时,学习成本至少有数万元人民币,若是在海外大学就读,一门计算机视觉课程至少需要20万人民币。这与各类免费的计算机视觉课程差异巨大,天下没有免费的午餐。
你是否听说过一种说法?如果世界上所有的知识是一个圆,那你在人生的各个教育阶段所能触及到的知识可如下图所示:
深度视觉是一个非常非常年轻的领域——卷积神经网络首次在图像识别任务中引发轰动是2012年,并且绝大多数现在广为使用的深度视觉模型都诞生在2014之后,因此这个领域理论基础薄弱、缺乏权威性、缺乏积累、高度依赖于个人经验。在这个领域里,许多有用的做法没有坚实的理论基础(比如batch normalization),而一些理论在实际中又毫无用处,虽然被证明有用的东西也很多,但它们之间又缺乏联系。同时,由于之前提到的“深度学习算法是黑箱,只能靠不断尝试来探索未来方向”的研究特性,使得深度视觉领域有非常强的“学术”属性——这是说,这个领域最需要的向未知的方向突破,不断地推动人类知识的边界的能力,计算机视觉人才必须有较好的研究素养,有较强的英文、数学、文献阅读以及工程能力,才能够理解各种探索的原理甚至提出探索的方案。同时,大家还要有大厂、大学或大研究院的资金支持,才能够实现“花式尝试”的研究方法,才可能解决现实问题、落地研究成果,并逐渐在这个领域立足。而只有能够产出研究成果,才有可能推进技术的实际落地,为企业创造价值。读万篇文献、码万行代码,之后才有可能独当一面、成为能够统领视觉项目的技术领袖。在其他领域,我们称做这些
事情的人为“博士生”或者“科学家”。
可见,计算机视觉的校招岗位月薪2W,也不单单是“行业红利、人工智能很火热”这么简单。许多公司在招聘时会卡学历,不只是因为竞争激烈,而是因为(最终)你需要达到对论文信手拈来地程度,否则你就无法解决这个领域的问题。当然了,大部分人的CV工作者其实并没有那么高的学术或精神追求、大家也并不想为人类事业做出什么贡献,只想找到一个热爱的领域好好工作好好生活。但我们也得保证自己在一个新兴领域中是站得稳、吃得开的,否则杀入新兴领域就毫无意义。而要站得稳,你还是必须具备一定的研究能力、学术眼光和诚意。不难发现,计算机视觉领域需要真实的技术积累与研究能力,“速 成”是很困难的,更别提跑通几个网络架构之后,就能一步登天成为CV工程师这种梦幻之路了。
可惜的是,大部分新人在学习计算机视觉时,不太可能对行业状况未卜先知,而许多教材和视频课程并不会说明计算机视觉领域“要求跨学科技能”、做视觉很接近“做学术”等等这些现实情况,上来就从卷积神经网络开始讲解,导致许多新人被带入了“计算机视觉就是CNN”的大坑,这之中许多人甚至在过去的全部人生中都没有接触过如此“学术”的领域、没有写过一篇或多或少,不说推进人类知识边界,而是推进自我边界的论文。李菲菲、吴恩达等大佬开设的经典课程虽然也只涉及到深度学习的领域,但他们的学生在大学中,除了上他们的课程,还会上其他图像相关的课程,所以能够保证知识的完整和全面性。但许多高校、教材或者培训机构的课程却不是如此(甚至部分书籍的作者自己也不清楚行业状况,只是蹭热度跟风出书),导致许多不明真相的小伙伴,在浅浅的学完深度视觉后就试图发表相关论文、或者向计算机视觉的岗位求职,最终被身赋学术战甲、一堆顶会论文在手的大佬们揍得体无完肤,也是真的太难了。
那行业红利是完全不存在的吗?当然不是。随着计算机视觉算法的进步,实际落地场景是越来越多的,可研究的课题也十分丰富,只要你具备一定的研究能力,并且有心在这个领域深耕下去,机会是越来越多的。视觉问题无处不在,其应用的广泛程度远远超出人们的想象,并且各个领域都有了一些独特的理论基础与实践方法,如YOLO库等。以下是一些耳熟能详的应用方向,其中一些应用方向甚至早已经深入我们的生活很久了(高清大图见课件附件)——
你能从这些方向的描述中想象到这些技术的应用场景吗?在任何一本介绍计算机视觉的书里都会存在大量应用场景的介绍,在知乎上你也能够找到大量的资料。同时,在之前的课程中,正式介绍神经网络之前(Lesson 7),我为大家编写了《深度学习前沿研究成果及酷炫应用展示》模块,其中80%都是视觉相关的例子。因此,在这里我就不再去赘述视觉应用的具体场景了,希望拓展视野的小伙伴可以阅读这篇发表于2021年3月9日的文章:https://viso.ai/applications/computer-vision-applications/。这篇文章总结了2021年的56种计算机视觉应用场景,覆盖体育、医疗、农业、交通运输、零售和制造业。英文不擅长的小伙伴可以善用谷歌翻译插件,一键阅读中文(顺便说一句,谷歌翻译使用的也是深度学习技
术)。
随着人工智能热潮的兴起,视觉领域有众多混乱的现象和声音,但值得欣慰的是,这个领域经受住了资本之风的考验,在诸神黄昏之后,计算机视觉仍然以其独特的魅力和学术力量吸引着众多技术人——在2020年6月的IEEE计算机视觉和模式识别会议(CVPR)上,有效提交的论文有5,865篇(比2019年上升29%),而被接受的论文有1,467篇(比2019年上升26%),且在新冠疫情下,参会者达到了突破记录的7000+人(数据来源CVPR 2020 Opening & Awards:https://youtu.be/aHUYXtbwl_8)。根据预测,2021年论文数量依然会继续提升。也许是视觉领域更容易水论文了,也许是学术界确实十分繁荣,但无论如何,对于想要进入计算机视觉领域并成就一番事业的研究人员和技术人员而言,这都是一件好事。
现在,计算机视觉领域的泡沫已经退去,人才竞争趋于正常,学术界与工业界依然存在大量尚未解决的问题,学术潜力巨大。若有心在计算机视觉领域深耕发展,此时正是入行的好时机。但相对的,行业门槛已逐渐回升,行业红利已余不多,低垂之果还有少数等待摘取,计算机视觉领域的“投机者”所剩机会不多了。
在规划课程时,我一直极力避免课程走入“罗列经典模型”的套路之中,但课程研发时间与课时限制都非常严格。同时,作为一门深度学习课程,经典模型是入门必备,不可不学。因此,在这部分CV课程中,我将首先带大家熟悉经典模型,我将尽力从传统视觉、数学等不同的角度为大家提供对经典模型的解释,并带有论文解读、论文复现的基本流程。在学完经典模型之后,我们需要理解这些模型是如何被发明出来,而不是停留在“写出架构”的程度。在后半段,我将会尽量多地涉及到CV各个落地领域的具体知识,可能包括常见库的源码讲解等等。如果你本人是希望在计算机视觉领域深耕并有所建树的,我希望你在学完课程之后能够很清楚自己需要继续学习什么内容,需要向着什么方向继续研究。如果你本人只是想作为一个爱好者了解一下深度学习的各个应用领域,那你至少也能够轻松写出各个经典模型的架构,并对CV领域的一些基本思路有较好的理解。