娃娃们好,我是rumor。
我想入门CV很久了,也不用学的很精,只是寻求一个技多不压身的状态。万一哪天当上AI总监了,总得什么都懂点是不是。
所以今年的六一,我把自己重新放到了初学者的状态,来了解一下深度学习计算机视觉的知识体系,还准备了几本书,在文末一并当作儿童节礼物送给大家。
其实CV所用到的基础知识和NLP差不多,早期都是统计机器学习,不过两者的数据模态不同,预处理方式、特征提取还是有区别的。
幸好有OpenCV,像sklearn一样把各种常用算法都集成好了,只需要知道用什么方法再去调包即可。
后期到了深度学习阶段,CV演化出了不同设计的编码器[1]。
最开始的设计思想是结构堆叠,不断抽取更高维度的特征,在1998年由LeCun经典的LeNet开始,这种结构影响了之后众多CV模型,比如AlexNet、VGG。但毕竟早期的算力有限,深度到一定程度就不好训练了,于是由GoogleLeNet在2014年开启了往宽度走的设计——Inception。这种设计采用不同的卷积核(multi-path)对图像进行操作,在宽度上抽取不同的特征,相当于一种集成方式。随着网络的加深加宽,训练难度也随之提升,持续加深甚至会造成效果下降。于是优化深度模型训练的残差网络在2015年被提出,建立了网络中浅层与深层的信息传递,在ImageNet上将错误率降低了3.6%。
从单纯的堆叠,到后期的往宽、往深优化,这几种设计影响着后续众多CV模型,了解他们的前因后果可以简化后续学习其他模型的成本。
CV的任务可以分为图像理解和生成,图像理解由易到难分别是分类、检测、分割、追踪。分类大家都能理解,检测就是把图像中的物体位置分别框出来并进行分类,知道大概那块儿是什么东西。再进一步就是分割,把物体的具体边界勾勒出来。理解一张图像没问题后就是多张(视频)的理解,对我们识别出的物体进行追踪。
图像分类的模型演变看ImageNet的分类榜单就可以了:
模型基础设计的演变是AlexNet->SPPNet->Inception->ResNet->NASNet->EfficientNet->ViT
。这个领域可算是很卷了,前期是花式设计,之后连神经网络搜索NAS都上了,架构的变化已不能带来太大提升,同时也会被质疑那些改进都是针对ImageNet数据集而言的。因此后续又回到了网络规模的扩展上,Efficient基于NASNet的最佳结构,定义了不同参数对网络的深度、宽度等进行控制,提供8中变体,适用多种场景。
目标检测整个流程下来其实有多步:
定位:找出图像中各个物体的位置,用框框(bounding box)画出来
分类:预测框住的物体是什么类别
识别(分场景):在某些任务中,需要把检测到的物体与数据库中的联系起来,比如人脸识别中要输出具体任务、文字识别中要输出具体的字
前两步是必备步骤,也衍生出了很多不同思路[2]:
传统的方法主要依赖手工构造特征,深度学习方法则可以分为Two-stage和One-stage两种。Two-stage方法是先检测出可能的候选区域(proposal)再进行分类,后续的研究主要是改进检测效率、同时训练检测器和分类器等。One-stage方法则只使用单个网络,将图像分割成多个区域后同时预测边界框和类别,检测速度有了很大提升,不过精度也有下降,后续到RetinaNet才逐渐追上two-stage的精度。
图像分割比图像检测更进了一步,检测只需要输出目标所在的矩形框即可,而分割则是pixel-level的分类,需要把物体的边界都预测出来。
分割由易到难又可以分为三种:
语义分割:区分图像中不同的部分,如天空、大楼、车、人等
实例分割:区分图像中不同的部分,如果是实体的话,要能区分ID,如人A、人B、车A、车B等
全景分割:区分图像中每个部分的ID
因为语义分割的输出是像素级别的,所以会采用Encoder-Decoder结构,例如SegNet、FCN、U-Net。
实例分割则更注重实例,会与目标检测相结合,也同样经历了两步式和一步式的发展。
全景分割则是把上述两种方法结合起来,典型的框架包含语义分割和实例分割两个分支,最后进行合并。
目标追踪的方法分为两种:
生成式:对目标进行建模,在下一帧去找最相似的目标
判别式/搜索:利用当前帧训练模型,再用模型去判别下一帧中目标的位置
生成式方法在早期用的比较多,有很多经典的传统方法,比如卡尔曼滤波、粒子滤波、相关滤波等。但生成式方法需要对目标建模,精度不如用上深度学习的判别式方法。对于目标追踪的经典算法可以参考OTB与VOT这两个benchmark[3]。
图像生成现在是GAN的天下,这个领域已经涌现了太多模型,犯懒就不总结了(突然任性),这里推荐一个综述,最近一次更新是21年5月,作者提供了一个框架和众多对比表格,让大家可以在应用时选择到最适合的GAN模型:
题目:A Novel Framework for Selection of GANs for an Application
地址:https://arxiv.org/pdf/2002.08641.pdf
之前对CV的了解很浅,这次梳理下来,发现这个领域可学的东西真是太多了,把一个分支学透就不容易。
话不多说,小白rumor这次的总结就到这里,开头的脑图里有一些参考资料,可以在公众号后台回复「CV」获取。同时厚脸皮从一位大佬朋友那里要了三本他写的书送给大家~
这位大佬朋友叫余海林,本科毕业于清华数理基础科学实验班,硕士毕业于UCLA。我俩面基的时候,我自报家门说我本科是学应用物理的,本来想秀一下,结果他说完之后我就想把话收回去。。。
Anyway这种尴尬都不重要,重要的是我听说他还写了书,就起了白嫖的心思,顺便拉上大家和我一起白嫖,共度我们美好的六一儿童节。
截止周四(6.3)晚八点,送三本给评论区点赞前三名的同学!
[1]
CV编码器设计范式: https://zhuanlan.zhihu.com/p/34277738
[2]综述:目标检测二十年: https://zhuanlan.zhihu.com/p/240935815
[3]目标追踪综述: https://zhuanlan.zhihu.com/p/148516834
大家好我是rumor
一个热爱技术,有一点点幽默的妹子
欢迎关注我
带你学习带你肝
一起在人工智能时代旋转跳跃眨巴眼