当前位置:   article > 正文

CV小白入门路线(庆六一,送书送脑图)

一个月入门cv

娃娃们好,我是rumor。

我想入门CV很久了,也不用学的很精,只是寻求一个技多不压身的状态。万一哪天当上AI总监了,总得什么都懂点是不是。

efe539cbc5059e5d5479786f9730e538.png

所以今年的六一,我把自己重新放到了初学者的状态,来了解一下深度学习计算机视觉的知识体系,还准备了几本书,在文末一并当作儿童节礼物送给大家

53be34dfcc0ae10b6439ecdc3957415b.png

机器学习基础

其实CV所用到的基础知识和NLP差不多,早期都是统计机器学习,不过两者的数据模态不同,预处理方式、特征提取还是有区别的。

7115cedb58bcb5f973362f253fe2a301.png

幸好有OpenCV,像sklearn一样把各种常用算法都集成好了,只需要知道用什么方法再去调包即可。

后期到了深度学习阶段,CV演化出了不同设计的编码器[1]

3331eb401dee1068efed2f60470709be.png

最开始的设计思想是结构堆叠,不断抽取更高维度的特征,在1998年由LeCun经典的LeNet开始,这种结构影响了之后众多CV模型,比如AlexNet、VGG。但毕竟早期的算力有限,深度到一定程度就不好训练了,于是由GoogleLeNet在2014年开启了往宽度走的设计——Inception。这种设计采用不同的卷积核(multi-path)对图像进行操作,在宽度上抽取不同的特征,相当于一种集成方式。随着网络的加深加宽,训练难度也随之提升,持续加深甚至会造成效果下降。于是优化深度模型训练的残差网络在2015年被提出,建立了网络中浅层与深层的信息传递,在ImageNet上将错误率降低了3.6%。

从单纯的堆叠,到后期的往宽、往深优化,这几种设计影响着后续众多CV模型,了解他们的前因后果可以简化后续学习其他模型的成本。

CV基本任务

CV的任务可以分为图像理解和生成,图像理解由易到难分别是分类、检测、分割、追踪。分类大家都能理解,检测就是把图像中的物体位置分别框出来并进行分类,知道大概那块儿是什么东西。再进一步就是分割,把物体的具体边界勾勒出来。理解一张图像没问题后就是多张(视频)的理解,对我们识别出的物体进行追踪。

Classification

图像分类的模型演变看ImageNet的分类榜单就可以了:

08ab05a63506110d28e53c4e628ad624.png

模型基础设计的演变是AlexNet->SPPNet->Inception->ResNet->NASNet->EfficientNet->ViT。这个领域可算是很卷了,前期是花式设计,之后连神经网络搜索NAS都上了,架构的变化已不能带来太大提升,同时也会被质疑那些改进都是针对ImageNet数据集而言的。因此后续又回到了网络规模的扩展上,Efficient基于NASNet的最佳结构,定义了不同参数对网络的深度、宽度等进行控制,提供8中变体,适用多种场景。

Detection

目标检测整个流程下来其实有多步:

  1. 定位:找出图像中各个物体的位置,用框框(bounding box)画出来

  2. 分类:预测框住的物体是什么类别

  3. 识别(分场景):在某些任务中,需要把检测到的物体与数据库中的联系起来,比如人脸识别中要输出具体任务、文字识别中要输出具体的字

前两步是必备步骤,也衍生出了很多不同思路[2]

33f7e363d67e55634da0e36ac8641e69.png

传统的方法主要依赖手工构造特征,深度学习方法则可以分为Two-stage和One-stage两种。Two-stage方法是先检测出可能的候选区域(proposal)再进行分类,后续的研究主要是改进检测效率、同时训练检测器和分类器等。One-stage方法则只使用单个网络,将图像分割成多个区域后同时预测边界框和类别,检测速度有了很大提升,不过精度也有下降,后续到RetinaNet才逐渐追上two-stage的精度。

Segmentation

图像分割比图像检测更进了一步,检测只需要输出目标所在的矩形框即可,而分割则是pixel-level的分类,需要把物体的边界都预测出来。

分割由易到难又可以分为三种:

  1. 语义分割:区分图像中不同的部分,如天空、大楼、车、人等

  2. 实例分割:区分图像中不同的部分,如果是实体的话,要能区分ID,如人A、人B、车A、车B等

  3. 全景分割:区分图像中每个部分的ID

e8851fae21b13aec571d4a8fd5577134.png

因为语义分割的输出是像素级别的,所以会采用Encoder-Decoder结构,例如SegNet、FCN、U-Net。

db8c5d22d663aee4f3d4314e6333eb6d.png

实例分割则更注重实例,会与目标检测相结合,也同样经历了两步式和一步式的发展。

全景分割则是把上述两种方法结合起来,典型的框架包含语义分割和实例分割两个分支,最后进行合并。

Tracking

目标追踪的方法分为两种:

  1. 生成式:对目标进行建模,在下一帧去找最相似的目标

  2. 判别式/搜索:利用当前帧训练模型,再用模型去判别下一帧中目标的位置

生成式方法在早期用的比较多,有很多经典的传统方法,比如卡尔曼滤波、粒子滤波、相关滤波等。但生成式方法需要对目标建模,精度不如用上深度学习的判别式方法。对于目标追踪的经典算法可以参考OTB与VOT这两个benchmark[3]

fdd4fec9bf434a4a7015137295f11d0a.png

Generation

图像生成现在是GAN的天下,这个领域已经涌现了太多模型,犯懒就不总结了(突然任性),这里推荐一个综述,最近一次更新是21年5月,作者提供了一个框架和众多对比表格,让大家可以在应用时选择到最适合的GAN模型:

  1. 题目:A Novel Framework for Selection of GANs for an Application
  2. 地址:https://arxiv.org/pdf/2002.08641.pdf
b8fef72b8d972767ea5db7a8dbb5836a.png

送送送

之前对CV的了解很浅,这次梳理下来,发现这个领域可学的东西真是太多了,把一个分支学透就不容易。

话不多说,小白rumor这次的总结就到这里,开头的脑图里有一些参考资料,可以在公众号后台回复「CV」获取。同时厚脸皮从一位大佬朋友那里要了三本他写的书送给大家~

这位大佬朋友叫余海林,本科毕业于清华数理基础科学实验班,硕士毕业于UCLA。我俩面基的时候,我自报家门说我本科是学应用物理的,本来想秀一下,结果他说完之后我就想把话收回去。。。

Anyway这种尴尬都不重要,重要的是我听说他还写了书,就起了白嫖的心思,顺便拉上大家和我一起白嫖,共度我们美好的六一儿童节。

f6f8b1adf7585d9c0da5e2c4d323085a.png

截止周四(6.3)晚八点,送三本给评论区点赞前三名的同学!

参考资料

[1]

CV编码器设计范式: https://zhuanlan.zhihu.com/p/34277738

[2]

综述:目标检测二十年: https://zhuanlan.zhihu.com/p/240935815

[3]

目标追踪综述: https://zhuanlan.zhihu.com/p/148516834

1800537272873127b67b89684ef5faa1.png


大家好我是rumor

一个热爱技术,有一点点幽默的妹子

欢迎关注我

带你学习带你肝

一起在人工智能时代旋转跳跃眨巴眼

「一想到白嫖就开心」d15dacd68874b2697bb28be2ca302f04.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/1016553
推荐阅读
相关标签
  

闽ICP备14008679号