各位好,本人是电子工程专业硕士,从事机器视觉算法和系统研发有接近10年时间。在这些过程中,大部分是自己独立解决工程应用问题,因此养成了善于思考,善于总结的习惯。这个领域研究论文很多,针对各个项目各个行业均有涉足,但是没有一篇整体把握的文章。结合自己将近10年做过各种项目,看过很多文献,希望对这个领域发表一下自己的看法,让后来者有章可循,有据可依,在项目开展之前,能清楚地知道什么项目能做,什么项目不能做,推动行业的进步。
本文不会像一般论文那样,先把什么是机器视觉,机器视觉发展历史先介绍一遍。虽然那样对于写论文来说是必要的,但是在这里显得啰嗦。直接上核心内容。
必要的叙述还是要的,机器视觉是计算机视觉在工业领域的分支。而计算机视觉是人工智能的重要分支。人工智能的发展水平直接影响计算机视觉和机器视觉的发展水平。人工智能是什么,简单说就是用计算机软硬件去模拟人类的学习、理解、思考、决策能力。目前有几个学派:贝叶斯学派、符号主义学派、联结主义学派。之所以有这些学派是因为目前科学界尚不清楚为什么人类有智能,因此三个大牛分别从不同角度进行研究,创立了三个学派。具体学派的内容大家可以自行网上搜索,在此不再赘述。
现在大家用的语音助手,手写识别、中英文翻译,智能客服,人脸识别,基于视觉的自动驾驶都是人工智能技术的体现。在此不去吹捧这些技术,而是客观评价一下。大家用这些东西的时候有什么感觉,是不是觉得有些东西不那么智能? 例如智能客服,你说了半天他还是自说自话,不会变通。比如基于视觉的自动驾驶,偶尔还是会错误的把行人识别成椅子或者其他东西。语音助手也只能是按照套路来,你如果不按套路讲话,他还是听不懂。
之所以出现以上问题,是因为现在人工智能技术还无法实现人类水平的智能。而是从数学、统计学、或者大量样本中去提取特征建模。所走的路线跟我们人类是完全不同的。你不用去学习什么是贝叶斯,但是你就是能看过几个红富士苹果之后,也能毫不费力的认出黄元帅苹果,苹果烂掉一点哪怕烂掉一半你也能认出这是苹果。我们人类的智能是自发的,不需要刻意去想的。但是机器(人工智能)就达不到这种能力。机器(人工智能)是利用数学的、统计的、工程技术的各种手段去模拟,去逼近。而无法做出跟人类完全一样的智能体。而目前人工智能研究水平还非常有限,只有在某些受控环境下可以做的非常好(例如AlphaGo),一旦环境随机,可靠性稳定性都会大幅下降。
介绍完上述背景之后,我们来看机器视觉目前发展的水平。
机器视觉,行业里的人都知道,是用来代替人眼在生产线上的工作。这些工作有对位(拧螺丝)、外观检查、尺寸测量等。有些工作机器视觉技术做的非常好,有的却做不来,为什么呢?
人眼完成工作是基于人类的理解能力,看到哪里有个螺丝,就去拧,这个过程无需过多描述,是我们人类最基础的能力。但是机器是怎么做的呢? 既然是去拧螺丝,那么什么是螺丝?机器不懂,计算机科学家也无法写一个程序让计算机知道那是螺丝。因为牵扯到人工智能这个学科的发展水平,这个学科无法做出一个具有自主思考理解能力的机器。因此在机器视觉工程应用中也无法使用一个自主思考的机器去完成任务。
工程上用的方法是利用颜色,边缘,角点等信息去描述什么是螺丝,或者简单点,一到白光打下来,背景是亮的,黑的那个就是螺丝。那么如果产品上掉了一个墨点,机械手也会去拧。不要笑,现在技术水平就是这样的。当然实际用的时候,可能会设计很多特征和规则去让机器尽可能降低误识别。
具体的来讲,第一步打光成像,以缺陷检测为例,比如要检测白纸上的墨点,周围用光源将纸面照亮。然后用相机将纸面图像拍下来,用灰度对比的方法将墨点提取出来。用对比度,面积,周长,圆度等指标去界定目标是不是一个墨点。
白纸检测墨点是初级任务,可以很好的完成。当任务复杂一些,情况就不一样了。例如在印有森林图案的彩色挂历上检测墨点,难度陡增。白纸检测墨点,本科毕业生可以胜任,而森林挂历检测墨点研究生不一定能搞定。因为白纸案例的特征提取方法在这里无效了:森林背景图案,树荫的形态与墨点极其接近,对比度,灰度,形状等特征全部失效。就好比指纹识别系统,但是用户手指脱皮严重,而且手上还占了很多灰尘,此时要正确识别指纹,堪比登天。
当前机器视觉技术,概括起来就是打光成像,特征分析。如果有明显特征,任务有希望解决。例如当前的深度学习就是为了解决特征难以刻画的问题。白纸墨点检测容易实现,图案挂历检测墨点难以实现,就是这个道理。
更直观的例子,像物体识别。以前识别猫狗很困难,因为猫狗的特征难以准确刻画。计算机就是这样的工具,如果无法将某个特征转化为程序语言,那么它就是无法执行。即使像猫狗识别这样的人类感觉是零难度的问题,却很难转换为程序语言。计算机只能处理底层数据,无法理解人类的名词概念。我们说长这样的是猫,长成那样的是狗。小孩子都可以理解,但是计算机理解不了,因为计算机只会执行运算指令,它不能思考和学习。这是特征工程的技术瓶颈所致。
特征根据复杂程度分为简单特征与复杂特征,根据显著性分为明显特征和不明显特征。复杂特征可以是显著性特征,简单特征也可以是不明显特征。复杂的明显特征相对好处理,因为如果有难度,难在特征刻画能力不够,一旦找到了合适的刻画手段,问题就解决了。但是如果特征不明显,哪怕是简单特征也很难解决。可以采用一维信号处理的信噪比概念来解释,即简单特征但是不明显,等价于信噪比低。有限的特征信号淹没在大量相似的噪声之中。做过通信工程技术都知道,如果信号干扰和衰减太大,那么数据误码率会很高。只有想办法提高信道的信噪比才能保证数据传输的可靠性。
对于特征不明显的目标,要检测出来只能采用不同成像手段,使特征更加明显,噪声更加微弱。如果不能达到这一点,基本是不具有可行性的。
深度学习主要解决的是复杂特征刻画能力这一个环节,原来手工特征时代,对于猫狗,植物种类识别这种人眼看起来明显但是操作起来却很难保证准确性的项目,深度学习解决的很好,因为特征的刻画能力大幅提升。但是对于森林图案中找墨点这种应用一样力不从心,原因是特征太不明显。
深度学习出来以后,手工特征的研究大大减少。因为深度学习可以很好的解决复杂特征刻画问题,虽然我们还无法保证其100%可靠性,但是通过技术手段已经可以实现相当高的可靠性。以后研究方向可能在于成像系统,对于某些特殊场景的识别。以及深度学习理解能力的加深。
传统机器学习和深度学习的区别在于,传统机器学习还是要求人工设计特征,但是机器学习的分类能力大大超过if else. 不过弊端也很明显,如果输入的特征不典型,没有抓到实质问题,那么机器学习系统也还是无法令人满意。深度学习同时解决了特征刻画和特征分类问题。虽然还无法用理论推出精确的模型结构,但是效果很好。这也是技术进步的必经之路,先把东西搞出来,能用、好用,然后不断完善理论,最后能够解释这种现象。就像电磁学的发展一样,一开始科学家只发现电磁之间能互相转化,但是无法定量计算,直到麦克斯韦创造出麦克斯韦方程组,电磁之间的转化关系才得以彻底量化,建立出完善的理论体系。
另外,既然是工程问题,那么当二维无法解决时,可以尝试三维。例如复杂图案挂历要检测划伤,凹坑。如果采用二维成像,很难识别,因为特征不明显。但是提取表面深度信息之后,原有的复杂图案全部被滤除,只留下凹坑和划痕,就很容易识别了。
简单概括起来,我们虽然不了解人类眼睛识别和理解的机理,但是通过工程技术的手段去模仿了一些人眼的某些功能,成为现在的机器视觉技术。在这项技术中,成像是基础要素,也是关键要素,要把目标物突显出来。特征提取是第二要素,大部分情况下也是衡量一个机器视觉系统是否优秀的关键。
以上是本人对于机器视觉技术路线的总结和讨论。希望给各位有所启示,推动行业进步。有不同意见或建议,欢迎留言参与讨论。
版权所属:常州范视电子科技,马浩洋