五千年(敝帚自珍)

主题:【原创】抛砖!模式识别和机器学习、数据挖掘的区别与联系 -- 永远的幻想

共:💬65 🌺337
分页树展主题 · 全看首页 上页
/ 5
下页 末页
    • 家园 (三)模式识别中的工程、技术

      为什么要说说PR没被数学、统计和计算机专业抢去的问题,实际是想分析一下PR里的科学与技术,理论与工程的问题。

      如果去学PR,看任何一种这方面的经典教材来看,基本上全是在讲各种理论、各种分类回归算法、和算法的思路。(关于这方面的经典教材,其实特别想单独来说的。如果是第一本,挑一本对自己胃口的书很重要。原因是经典基本都是700页起的,而且基本满眼望去都是公式。理科生不论,对于看理论经常感觉力不从心,或者没什么耐心的工科生,如果找了一本不对自己胃口的书可能就很难看下去,Amazon上的书评里每本经典都有一堆5星,但是也颇有些1 2星的。)

      虽然可以说“学PR 就等于学各种分类算法”,但是不等于说PR 就等于分类算法。最起码炮制这方面的论文就不等于炮制分类算法,想想也是,不然工科生还有的混吗!

      作为说PR的最后一节,这次工科生要来吹吹牛,看看PR除了统计理论和算法,有什么离不了工程、技术的地方。

      还是先把流程图再画一遍:

      “客观对象”—1—>“数值表示”—2—>“计算机算法”—3—>“识别结果”

      上一篇主要说的是 “计算机算法”—3—>“识别结果”这块,确实最重要,是核心。“数值表示”—2—>“计算机算法”比较简单:算法要求输入的数据通常都是个很规整的矩阵,比如N个训练样本,每个样本p个特征(feature),输入就是一个N*p的矩阵。 此外,有的算法需要对列进行标准化,有的不接受连续型变量和离散值变量的混合,有的干脆不接受连续型变量,要量化变成哑变量。所以根据算法的不同,对数据的形式也要稍微做点加工。这也没啥特别的。

      关键就在于前面,“客观对象”—1—>“数值表示”。

      还是继续以人脸识别为例吧。研究了一个算法,都要在网上的几个标准人脸库中的图像上实验自己的算法。通常库里每个人的照片包括各种姿态(比如稍微左右侧一些,抬头低头),表情变化,各种光照阴影,有的还有饰物比如眼睛,帽子,发型变化。图像尺寸都是统一的,的比如256*256,灰度也是8bit这样。

      好了,你的算法在几个人脸库上跑得不错,实验数据有了,论文有谱了,你很开心。老板也很开心,于是老板接了个小项目,让你参与做个人脸识别的门禁系统。这时候你就会发现,想按照那个完整流程来工作,1这一步的问题一点也不少。

      首先就是传感器的问题。传感器直接决定了图像有没有形变,颜色和灰度有没有改变,是不是清楚,分辨率有多高。通常的问题不是“有还是没有”,而是“有。怎么办?”

      所以从硬件选型到板卡布置这块首先少不了“专门经验”,然后还有成像这块和图像处理的知识。得到内外参数,怎么把畸变调整一下,然后降降噪声,直方图均衡调整一下对比度,尺寸也调整一下。这些图像处理课里的内容,虽然也都是简单的数学公式,但是,场合不同,想要的图像效果不同,参数上也总要微调的——让我想起了PID参数的整定。嗯,很工科。

      插一句,我所理解的工程学就是对实际问题的专门经验的积累。公式理论简单,而经验的获得,只需要多花时间和实际问题打交道,自然熟能生巧。这么看工科很easy,经验也没什么神秘的。但是每个人的时间总是有限的,如果专门在一个领域花了比别人多的时间,那么他的经验就变得宝贵起来了。此外“接触实际”四个字也不是人人都喜欢的。实际中没有书本上的“理想条件”,只有各种层出不穷的想不到的问题。挑战性一点不比在理论上探索低。工科的思维就是事前对可能遇到的实际问题的复杂性的敏感和估计,事中遇到问题时的能想法子解决。可以对性能妥协、将就;可以对参数近似、也可以试验出来;可以把原本充满创新的玩意改得朴实无华或者面目全非——一切只为了这玩意最后能工作起来、能动换(然后再慢慢往好看、好用上改)。

      嗯,跑题了,继续。现在图像清楚得已经堪比人脸库了,识别效果还不错。找客户来验收吧!可是给客户演示完,人家突然问系统能不能集成到一起,做到DSP和嵌入式系统上;还要这样,还要那样……嗯?等等,你忽然想到好像程序是在双核PC上跑的,好像用了好些个MATLAB导出的函数,有个算法还是R里面的……

      你嘴上说是,脸上没反应,但心里浮现的却是《潜伏》里陆桥山审马奎时从牙缝里挤出来的台词:我真想撕烂你的嘴!你当初不是说……

      可老板下了死命令,大家只好大干快上干起来!作为开发算法的你,责无旁贷啊!

      软件彻底用C和C++重写!不能用好使的MATLAB了,API真矬,简单的矩阵运算要费劳资这么大劲。不知不觉1礼拜过去了,终于写好了。

      赶紧到下载到那边已经是改到第N版刚拿回来,还热乎乎的板卡:

      咦,没反应?软件还是硬件问题?那边查电路,这边改程序试试?

      呼,有影了,可是噪声咋这么严重,鼻子不是鼻子脸不是脸的?摄像头还是板子上有干扰?软件上能再改改参数?

      终于运行起来了,怎么好像卡死了?哦,原来是太慢了。硬件条件比PC机差了好几个档次了,怎么办啊,换个简单一点的算法?那性能咋办?那之前那个算法好不容易得到实验结果不是都白做了么?

      ……

      满头黑线了吧?

      这个人脸识别的例子有点夸张了,但不是完全虚构出来的。通过这个例子想说的是,数据来源,软硬件的布置,性能的取舍,参数的实验调整都是论文上看不到也写不出来的实际工程问题。通常需要各种不同的传感器和硬件打交道,也需要各行各业的专业背景知识。涉及图像的少不了摄像头、照相机和图像处理的知识;做水声信号和语音识别,少不了拾音器阵列,频域方面的信号处理知识。这也就是为啥自动化,电子,通信、甚至生物医学专业能掺和其中的原因。

      最后总结一下我对PR的认识:

      PR是因为各个领域有“电脑代替人脑”的实际需求才产生的,所以是一定面向应用的。

      PR不是在标准数据集上验证分类算法的性能就完了,这个是ML的事情。PR是要把ML算法在实际问题中用起来。是理论加实际,科学和技术(虽然理论是核心)。

      前三节主要是围绕PR来说,就说到这吧。下面打算试着说说我认识的机器学习算法概貌和一直没露面的数据挖掘。

      • 家园 关键还是特征(feature)的定义吧?

        特征(feature)要 recognizable。到底人是怎么识别人脸的呢?

      • 家园 【商榷】人脸识别,已经是工程上可以实现的问题

        照上文的意思,人脸识别,已经是工程上可以实现的问题?

        • 家园 人脸识别还不能单干

          人脸探测被Viola Jones一统江湖了,日本人凭着优良的工业直觉很快就做到数字相机上去了。但是现在在自然条件下的探测率也只有60%左右。

          人脸识别的主要思路是把人脸探测出来,对齐,然后提取特征比较。用手工提取人脸(有现成的数据库)然后识别的文章一大把。但是其中的一个关键问题是人脸是否对齐对不同方法的影响不一样:把人脸作为整体提取特征的方法对对齐的要求非常高,而基于patch的方法要robost得多。另一个关键问题是光照的问题。

          几年前机器人脸识别的准确度号称比人类识别的准确度要高。但是第一,一对一单挑,机器比人仍然差得远。第二,在自然环境下的人脸识别,仍然没法用。

          现在的人脸识别思路一定有很大的问题。我觉得第一是分辨率低了,第二是视频信息的使用还没有被好好开发。我的根据是人在仔细识别一张活人的脸的时候,其实是在处理高分辨率的视频图像。而现在的大多数系统是处理的中低分辨率的单幅图像。我觉得这个会是人脸识别的下一步发展方向。

          生物特征识别工业的趋势是把指纹,虹膜和人脸结合起来。

          另外这个生物特征识别跟课本里的模式识别不是太一样:严格来说,这个不是识别,而是比较(match)。

          • 家园 对照(match)不是识别吗?

            我看他们早期做中文识别的都是把输入的中文字和库存的文字去一一对照,然后看 match 的统计结果来决定。

            • 家园 我觉得主要区别是训练集

              生物特征比如指纹和人脸往往没有训练集:给你一张图像,拿到数据库里去match就好了。所以有论文专门强调一张图像的ML方法。

              • 家园 研究算法,这训练集还是要的-_-!

                生物特征比如指纹和人脸往往没有训练集:给你一张图像,拿到数据库里去match就好了。所以有论文专门强调一张图像的ML方法。

                训练集,好像只要是ML类的算法都得有个吧。

                就拿你说的这种一人一张图像的“数据库”来说吧。提取什么样的特征,也就是说在什么空间里定义一种什么度量来表示每一张脸?提取的特征是否有效,肯定是要通过train set、validation set上试验、定参数(图像处理里,各种方法都难免有些参数,说不出该怎么取参数,只有试),最后test set上给出结果。

                表面上看输入的一张图像和数据库里存的是一张张图像依次比较,其实那个比较的方法,是在train data上面训练好的。

                • 家园 我们所说的训练大概不太一样

                  你说的是通过训练集来找到最佳的特征和分类器。我说的训练是指的给每一个类建立一个数据模型。这个数据模型是从一个类的若干样本中学习来的。如果把每一个指纹或者脸算一个类的话,生物特征的训练集算非常小了。相对而言,特征提取然后直接比较更加合适。所以生物特征识别都说“match",而不是"classify"。

          • 家园 继续说Biometric……

            Viola Jones是Harr特征+Adaboost。“一统江湖”应该是说现在相机里实用的算法中吧?因为不管是特征层还是ML算法方面,这几年都有很大发展,只能说classic吧。

            人脸检测这个领域如你所说,其实也可以说是两个大方向:一个是高分辨率静态图像;一个是视频序列,但是姿态、遮挡、光照条件要恶劣点。视频序列中,patch的方法用得更多。

            多生物特征融合,也是个很有意思的领域,碰巧做过一点。再发点谬论:个人认为指纹和虹膜融合意思不大了。

            第一,这俩单独用性能已经很好了,融合了在性能上获得的提高空间也有限了。

            第二为什么要融合?现在的一个趋势是,实际使用中希望使用易于采集的特征。用户不用费劲摆姿势,也不用刷半天指纹刷不上。这样可以在特征采集环节节省大量时间。虹膜没做过,但是指纹要用户能刷出合格图像,其实还是有点折腾的。

            match还是识别看怎么说了,人脸都是1人1个类别的,而多类问题的分类算法难免是输出对每个类别的相似度的,比如MAP这类的,把似然归一化得到[0 1]的相似度。这些“计算似然、排序、最终决定类别”的方法也可以叫匹配了。而这类方法加上原型匹配类的,在机器学习里很多啊。都算分类问题就好了,就不用抠这么细致了吧。其实还是怎么叫都行的,呵呵。

            ——老兄做什么的?蛮内行的啊

            回帖越来越精彩,俺抛砖的目的就达到啦!

            • 家园 在你面前不敢充内行

              永远兄功底深厚,而且谦虚谨慎,娓娓道来,兄弟受益匪浅。

              我做过视觉方向,现在在做其他方向。Viola Jones的经典方法和特征当然已经被改过很多了。但是我看到的觉得比较有效的方法好像都是循着他的思路来的。他的方法可以说是开了一个先河。最近一年忙没有去仔细了解这个方向,不知道有没有像他那样新开一个思路的文章?

              虹膜和指纹的性能好还是不好,看你如何定义了。在大数据库上(比如FBI那样的数据库),哪个方法的精度都不够。不仅各个生物特征要被融合,甚至不同Vendor的产品都要被集成商融合,否则达不到精度要求。

              匹配的问题其实是IR里的Ranking问题。比如指纹,如果按照多类问题的思路,在工业数据库上是百万类的级别。我做这个方向的时候,深感学术界没有能够很好的处理这个问题。一个主要问题是ML学术界很少有工业级的数据库。但是这个问题这两年已经开始引起注意,因为学术界开始面对的数据量和类别也开始向海量发展:匹配现在被归纳为一个Ranking问题,我觉得是合适的。我记得有过关于Ranking的workshop。其实就是一个如何优化ROC的问题。在大数据库上提高还是比较困难的。

              静候永远兄好文。

              • 家园 谬奖了,来西西河发言就是准备收砖盖房的

                弱分类器集成的思想一直很流行,现在有很多类adaboost的算法。

                抛开这类思路的方法不提,其他的检测方法,一时还真举不出文章来,毕竟不是做人脸的。但是好像依稀见过有先检测器官(比如眼睛、嘴),然后根据肤色什么的圈个脸的范围的(随机游动找边界,或者直接估计个椭圆,方块的)

                嗯,你说的这种场合当然是99后面再挂多少个9都不嫌多。但是FBI和条子是有强制力保证采集对象配合进行数据采集的(老实给我按手印),也不在乎采集时间

                是啊,数据集啊数据集,你怎么就这么难做大呢。常见的人脸库,比如我知道的FERET,ORL,Yale,还有中科院那个,都离百万太远了。因为作为研究算法用的数据集,就不是一人一张就万事大吉了。对每个人采集不同时间、姿态、光照、遮挡的图像,这个工作量……

                百万级的数据库估计现在只有企业或者FBI有了吧,作为花费巨大获得的重要资源,我想也不会公开免费给你用吧。

                嗯,理科和工科的区别就来了,理科的数学家根据简单的数据,就能提出复杂的算法来。而工科要把简单的算法用到不太复杂的数据上,就要费很大力气了。

                上百万的数据,我觉得瓶颈主要在计算开销上,还有存储、并行算法设计,可能算法简单,但是每次大矩阵的运算都是并行的,这个就不是ML方面的论文特别感兴趣了。

                即使是区区几千样本的训练集,做ML的也经常要花N多机时来跑一个算法。

        • 家园 人脸还有点问题吧

          照上文的意思,人脸识别,已经是工程上可以实现的问题?

          产品化实现的问题放一起说吧:

          像这种识别人身份的技术,统称Biometrics,翻成生物特征鉴别。包括了用人脸,语音,虹膜,指纹,乃至走路的步态等等等

          指纹和虹膜从算法到产品做得很成熟了,没啥研究的了。(识别率都是99后面好几个9的那种。)

          说话人识别,因为语音主要是频域那块,也很成熟的技术,但是实际测试下来误差还是大,主要是人的语音可能会慢慢改变,生病也会有很大变化,还有模仿的问题,所以一般不单独用来识别身份。

          人脸是特征最丰富的,也是最有前途的。但是问题也最多,各种角度,遮挡,等等等。虽然论文里识别率能很高,也早就有产品了,但是主要是放在门口作为门禁,采集正面图像吧。但是研究的还是很多,以后放在公共场所的监控摄像头上可能就不是正面了,可能就有遮挡了……然后从远走到近还会有变化。

          而且,用什么特征表示人脸,还是各村有各村的高招儿,没有定论。(不像虹膜指纹里的关键点,语音的频域Mel谱特征,这都是公认的,没得研究了。)

          所以随着恐怖分子到处钻,人脸这玩意还有得研究呢

分页树展主题 · 全看首页 上页
/ 5
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河