社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

深度学习时代,传统 cv 是否还有用武之地?

焉知智能汽车 • 2 年前 • 199 次点击  

来源 | CV51

知圈 进“滑板底盘群”请加微yanzhi-6,备注底盘


深度学习模型不断朝着小型化,小样本的趋势发展,硬件成本也在不断降低,那么,如果深度学习能够解决训练迭代时长以及硬件成本问题的话,传统cv是不是只能做一些简单的图像预处理工作了?那些很棒的机器学习算法(例如svm这种)是不是也就此被时代所淘汰?传统cv的优势到底在哪?还是说深度学习就是传统CV的未来?


以下回答转自:
https://www.zhihu.com/question/522409323/answer/2424409952
作者谢凌曦。声明:所有内容均只代表作者本人观点,均有可能被推翻,二次转载务必连同声明一起转载。


我希望能够通过这个回答,说明几个概念之间的关系:包括计算机视觉(CV)、传统CV算法、机器学习、深度学习,以及其他可能涉及的概念。
先说最基础的概念,计算机视觉。根据维基百科的定义:
计算机视觉(Computer vision)是一门研究如何使机器“看”的科学,更进一步的说,就是指用摄影机和计算机代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图像处理,用计算机处理成为更适合人眼观察或传送给仪器检测的图像。
其中最后一句话,我想稍微做些扩展:计算机视觉的范畴,不仅是进行“图像处理”,还可以用于图像中的“信息抽取”,甚至是图像内容的“创造和生成”。确实,最初的计算机视觉算法,一大部分都关注于图像处理,比如将光学传感器获取的信号转换为人类容易理解的图像;时至今日,寻常场景中的图像处理算法已经非常成熟,所以计算机视觉界的研究兴趣更多地集中在高级语义理解(如分类、检测、分割等问题)甚至是更加困难的图像生成问题上。
如果题主所说的“传统CV算法”指的是这些已经被well-studied,甚至固化为硬件的算法,那么机器学习甚至深度学习(深度学习是机器学习的一个子集)就没有什么用武之地。但是题主举了个SVM的例子,于是我判断,题主也许并没有搞清楚机器学习和传统方法的分界在什么地方,以及为什么计算机视觉领域(甚至整个人工智能领域)需要引入机器学习方法来解决问题。
所有人工智能(包括计算机视觉)问题,大致都可以描述为这样一个数学问题:给定输入  和输出  ,寻找一个合适的函数  ,使得 能够最好地被满足。有些时候,这个函数很容易找出来。例如一张输入输入和输出  是一些关键点在两个不同观测视角下的坐标,而已知这两个视角之间满足某种仿射变换,那么就可以通过将定义为通用仿射变换,随后以这些采样到的关键点作为条件,求解仿射变换中的参数。在这个简单的理论基础上,发展出了若干图像配准算法,例如著名的张正友标定法[1],至今仍然被广泛应用于实际场景。这就是传统CV算法的典型案例。
那么为什么要引入机器学习呢?因为在许多情况下,这个的形式很难被手工定义出来。此时为了解决问题,人们只能进行各种假设,比如  可以通过某种函数形式 去逼近。举一个例子:我们要把一张RGB图像转化为一张灰度图像,但是没有任何方法能够建立在严格的数学证明上。此时,我们只能根据经验定义一个近似的线性函数:,然后根据经验和少量数据来确定其中的系数值  ——如今常用的一组系数是。注意,没有人证明这个线性函数一定是最优的,但是它能够在绝大部分情况下工作得很好,于是这个线性函数就一直沿用下来,成为CV通用的标准。
再说一个更复杂的例子:如果我们要从一张RGB图像 中识别它的语义标签 ,那么至少在当前的科技水平下,我们甚至连应该长什么样都不知道。于是人们采用了统计方法,从图像中抽取若干特征 ,然后使用来做近似,其中是可以学习的参数。由于特征的维度可能很高,因此最好能有大量的训练样本用于确定参数的值。为了降低这些依赖,人们设计了许多方法,其中题主提到的SVM就是一种基于松弛损失函数的方法,它能够很好地利用有限样本处理高维数据,减少模型的结构风险[2]以及过拟合等副作用。
最后是深度学习。上述机器学习方法,对于特征的设计提出了很高的要求。在计算机视觉领域,本世纪的前10年,见证了大量手工设计的图像特征[3][4],而这些方法在2011年前后遇到了不小的瓶颈。深度学习的思想,是采用更加自由的方式来定义  ,使得它(在数据量充足的情况下)更容易适应不同的问题。倒退10-15年,我们很难想象,一套相同的模型(卷积神经网络或者transformer)能够适应各类不同的视觉问题(如识别类、生成类、恢复类等)。这些都归功于深度学习:它提供了更大的特征空间,并且配套了一系列方法来进行复杂的优化。最后要强调的是,深度学习是机器学习的一个子集,最好不要把两者作为互斥的概念来讨论问题。
如果理解这些内容,我们就能够讨论题面了。传统CV算法和统计学习方法各有特点:前者应用范围受限,但是对数据依赖度低、求解比较稳定;而后者则恰好相反。在实际应用中需要采用什么方法,要看具体场景的特点。当然,不仅是问题本身,容错率、硬件配置、数据的数量和质量等,都会影响算法的选择;而根据场景选择方案,判断什么能做什么不能做,也是AI算法开发人员最需要的技能:这项技能比调参更难,收益也更大得多
最后我要说,CV是永恒的问题,传统方法是固化下来的方法,而统计学习是暂时性的解决方案,是当前技术水平下的无奈之举——我们很难相信,这些方法会是CV或者AI的最终解决方案。归根结底,如果一个问题能够用传统方法来解决,说明人类对它的理解已经足够深入,因而这些传统方法值得被长期沿用下去(除非某些假设被推翻或者出于计算量等考虑需要做近似)。也就是说,传统方法大概率不会被替代,而现行的统计学习方法必须被替代,只是不知道下次革命会发生在什么时候。
参考
[1]Zhang Z. A flexible new technique for camera calibration[J]. IEEE Transactions on pattern analysis and machine intelligence, 2000, 22(11): 1330-1334.
[2]Vapnik V. The nature of statistical learning theory[M]. Springer science & business media, 1999.
[3]Lowe D G. Distinctive image features from scale-invariant keypoints[J]. International journal of computer vision, 2004, 60(2): 91-110.
[4]Dalal N, Triggs B. Histograms of oriented gradients for human detection[C]//2005 IEEE computer society conference on computer vision and pattern recognition (CVPR'05). Ieee, 2005, 1: 886-893.

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/152733
 
199 次点击