什么是对象检测、识别与追踪
发布时间:2017-12-26 10:26 来源: 映维网
得益于英特尔的分享,今天的文章中,我们可以与大家一同探索对象检测,对象识别和对象追踪这三个术语,了解三者的定义和彼此之间的区别。
1. 综述
下面我们将参考字典,从而恰当地定义和判断“对象检测”,“对象识别”和“对象追踪”这三个术语。然后,我们将探索与每个流程有关的算法来支持我们的定义。
2. “三位一体”
“对象检测”和“对象识别”通常可以互换使用,应用的命名主要取决于编写程序的人员。“对象追踪”则常见于检测与识别算法公司。三者结合在一起能够实现更可靠的应用,但我们可能不清楚彼此的区别以及彼此的关联(对象追踪实际上只是对象识别的延伸吗?)。然而,我们可以首先参考一本标准的字典,查看与每个流程有关的算法,然后对这三者进行明确的区分。
一个可能有用的做法是,我们可以用对象发现来替换对象检测,用对象理解来替换对象识别。显然,我们知道理解一个事物和发现这个事物有所不同。除了语义之外,我们希望知道每个流程所涉及的算法(理清算法的基本作用)。当我们理解应用特定模型或算法类型的结果时,区分术语之间的含义不仅只是词语的问题,而是一个过程和结果的问题。但词语的意义仍然十分重要,因为它们首先影响了大脑描述现实的方式。下面我们首先看看检测的标准定义。
3. 检测
检测算法会提出这个问题:这里“有”什么吗?
3.1 一种发现的行为
字典总是有助于我们理清任何一个词语的定义,尤其是程序员和工程师不常以一致方式使用的词语。《韦氏词典》将检测定义为:发现,发觉或注意到某事的行为或过程。“某事”可以是任何东西(鸟,飞机或气球)。检测的主要意义是:注意到某事存在于这里。
对象检测的目标是注意或发现对象的存在(图像或视频帧内),为了能够判定除静态背景(更大一组的像素,大部分在帧与帧之间都保持不变)之外的一个对象(像素的一个不同子集)。但是,我们如何能从背景中辨别出一个对象呢?对于这一点,图像和视频的处理方式有所不同。
3.2 视频与图像检测
3.2.1 视频:这一帧中的像素有点不一样
当某帧出现了前一帧中所没有的像素时,我们可以设计一个算法来发现这个差异,并将其登记为一个检测。注意到“以前没有但现在有了”就是检测。根据我们的上述定义,视频检测技术的例子可以包括诸如MOG(高斯混合)和absdiff(绝对差分)等背景减法(一种创建前景掩模的流行方法)。
3.2.2 图像:对象边界
由于照片是静态图像,因此我们不能使用动作来检测照片中的对象,我们必须依靠其他方法来解析场景。当呈现真实情景的照片时(如繁华的街道包含多个不同的和重叠的对象和表面),场景的复杂性使得我们很难对其进行解释(判定对象的边界)。边缘检测方法(例如,Canny边缘检测)可以帮助我们判定这种场景中的对象。边缘定义了对象边界,我们可以通过查看图像中颜色的变化(灰度级突变)来寻找边缘。知道边缘的位置不仅有助于检测明显的物体(如靠在灰白色墙壁上的蓝色自行车),还能正确地解释对象可能存在重叠这样稍微复杂的情况(坐在椅子上的人可以看作是两个不同的对象,而非一个大型混合对象)。
3.3 背景减法
与静态图像不同,视频涉及多个帧的处理,并且允许我们采用背景减法。背景减法的基本思路是:生成一个前景蒙板(图3)。我们从另一帧中减去一帧以寻找差异,亦即从当前帧(图2)减去前一帧(图1)。然后我们对差值应用阈值,从而创建包含场景中任何运动或新对象的二值图像。在下面的例子中,这个“差异”是无人机。
图1:前一帧(背景模型)
图2:当前帧
图3:蒙板
3.3.1 MOG,背景减法算法
我们不能混淆高斯混合(MOG)与流行的方向梯度直方图(HOG,Histogram of Oriented Gradients)特征描述符。方向梯度直方图这种技术(通常与支持向量机搭配在一起)可判断对象属于“人”或“非人”。与执行分类任务的HOG不同,MOG使用高斯混合模型来减去帧之间的背景。对于检测技术,“这里”(帧之间)存在差异是关键。但是,我们主要关心的是:这个差异是“什么”(这个对象是人,还是说是机器人?)。当我们的目标是识别或分类一个对象时,这就是识别技术发挥作用的地方。
3.4 如何获取一个检测的通知
为了通知我们(提供某种形式的视觉提示)系统正在检测对象,所述对象周围通常会出现一个矩形或方框(颜色通常十分鲜艳)。当帧与帧之间出现变化时,算法就会大声喊:“嘿,刚刚出现(或移动)的那组像素是什么?快,在它周围画出一个绿色方框,好让人类知道我们已经发现了什么。”
图4显示了应用程序正通过背景减法来识别对象。应用程序对这个对象一无所知,它只是单纯寻找与不同于前一帧的像素区域,寻找其中的“差异”。
图4:应用程序利用背景剑法来检测一个兔子套装
3.5 从一般到具体
气体检测器是检测或感知气体存在的设备。根据设备的精度,甲烷,酒精蒸汽,丙烷和更多的化合物都有可能触发警报。金属探测器是用来发现金属的仪器。对象检测器会发现对象存在的设备,亦即一帧中像素的区域。当我们开始从一般到具体时,如从气体到甲烷,从金属到金,从对象到人,其中的含义是指:我们事先已经知道这具体的事物。这就是检测与识别的区别:检测是判断这里存在一个对象,识别则是知道这个对象是什么。我们可以将检测到的气体识别为甲烷;我们可以将检测到的金属识别为黄金;而且我们可以将一个检测到的对象识别为一个人。对象识别技术使得我们能够创建更精确的计算机视觉应用程序,可以处理对象的细节(人或灵长类动物,男性或女性,鸟类或飞机)。对于检测,这就像是说我们知道远处出现了一个(模糊)对象,而识别就像是为我们戴上了一副眼镜,我们现在可以知道这个对象实际上是一只猫,而不是一块石头。
4. 识别
对于识别,算法将变得更加好奇,它会问:那里有“什么”吗?
4.1 事先已经知道某物
韦氏词典将“识别”定义为:由于先验知识或经验而知道某人或某物是什么的行为。基于这一点,我们可以将对象识别理解为一种识别或了解(图像或视频帧中的)对象性质的过程。识别可以基于匹配,学习或模式识别算法,其目标是标注(分类)一个对象,并提出如下问题:这个对象是什么?
下图是一个应用程序(采用了英特尔Movidius Neural Compute Sticks)正在识别和标记鸟类物种。你可以在GitHub(点击前往)上了解更多关于示例应用程序的信息。注意标签“bold eagle(白头鹰)”之后的“1.00”。这是指识别的置信度,1.00表示应用程序100%地知道图中对象实际上是一个白头鹰。然而,对象识别的可靠度并不总是这么高。
图5:100%置信度的白头鹰识别
图6是相同的应用程序正在识别海岸线上空的飞行对象,0.54/0.56的置信度表示应用程序不是100%确定所述对象为何物。尽管应用程序不能将最左侧对象识别为任何特定的对象,但它正确地将其与更为普遍的“bird(鸟)”类别进行了关联(虽然不是100%确定)。对于其他对象,应用程序正在犹豫:它不确定对象到底是信天翁还是仓鴞。
图6:受训识别鸟类的对象识别应用不确定图中的对象是什么
同样,由于人们并不总是以一致方式来使用所述术语,有人可能会认为它们(检测和识别)是相同意义的词语。但根据上文的定义,检测一个对象显然不能等同于识别一个对象。
识别的行为(我“知道”这个对象是一只白头鹰)不同于检测行为(我注意到那里“有”一个对象)。但算法在看到这个对象后究竟如何“知道”这就是白头鹰呢?我们是否可以“训练”算法来区分白头鹰与其他鸟类呢?也就是说编写一个可以详细说明白头鹰与其他鸟类性质的计算机程序?事实证明,我们无法有效对计算机进行如此训练(亦即提供指令),所以我们必须设计出可以自我学习的算法。
4.2 从经验中学习的算法
我们可以通过识别技术(足够聪明,可以判断商业客机与海鸥的区别)来进一步探测对象的性质。这种算法可以精确地对对象进行分类,因为它们已经接受了这样的训练,而我们将其称之为机器学习算法。算法获取关于某物(例如鸟类)知识的方式是通过训练数据:通过接触成千上万张不同鸟类的图像,算法可以“自我学习”,从而识别不同种类的鸟禽。机器学习算法是可行的,因为它们可以从图像中提取视觉特征。在提取视觉特征后,算法可以根据特征将一个图像(第一次出现的未知图像)与另一个图像(在训练期间“看到”的图像)相关联。如果上面的识别应用程序(图5)从未接受过任何标有“白头鹰”的图像的训练,在向其展示一只白头鹰时,应用程序将无法将对象标记为白头鹰。但应用程序可能仍然足够聪明,可以知道这个对象是一只鸟(正如图6所示,应用将最左边的对象标记为“bird(鸟)”)。
5. 追踪
追踪算法希望知道某物到底要去哪里。
5.1 牢牢盯着某物
追踪算法喜欢“死缠烂打”。这种顽强的算法会一直跟着你(假设你是目标对象),无论你走到哪里都一直跟着你。至少,这是我们所设想的理想追踪器。韦氏词典将“追踪”的动词用法定义为:跟随或观察某物或某人的路径。
对象追踪的目标是一直观察某物(连续视频帧中对象的路径)。追踪算法通常建立在对象检测和对象识别的基础上,或者与对象检测和对象识别共同协作,然后在视频流中定位(并稳定地观察)运动对象(或一系列的运动对象)。
系统存在对象的位置历史记录(追踪总是在处理帧与帧之间的关系),这使得我们知道对象位置会如何随着时间的推移而发生变化。这意味着我们拥有了一个对象运动的模型(提示:模型可以用于预测)。卡尔曼滤波器(一组数学方程)可用于确定对象的未来位置。通过采用一系列随时间进行的测量,这种算法提供了预测过去,现在和未来状态的方法。
当然,预测状态有助于对象追踪。对于移动对象,我们希望可以预测其未来的状态,亦即对象的下一步行动。但是,为什么我们要这样做呢?因为对象可能会被遮挡,而且如果我们的最终目标是在帧与帧之间保持对一个对象的识别,预测对象的未来位置有助于帮助我们处理遮挡的情况。
5.2 遮挡问题
当你试图牢牢盯紧关注某物或某人时,遮挡可能会成为一个问题。假设我们在一条繁忙的城市街道上跟踪一个特定的行人,然后公共汽车突然之间挡住了他的身影。这时,一个强大的追踪算法就可以处理暂时的遮挡,并保持对目标人物的锁定。确保算法能够一直锁定于同一个对象,从而确保不会丢失追踪,这实际上是十分困难的挑战。即使图像中的行人不再存在(公交车的像素遮挡了行人),这个算法还是有可能预测行人的未来路径。因此,尽管有无数的障碍物可能会遮挡住我们的视线,但我们可以继续有效地跟踪这个行人。
5.3 彼此区分但可以彼此协作的过程
对象检测的过程可以发现这里“有”什么东西(我们称之为“对象”一个像素子集);对象识别技术可以判断这是“什么”(将对象标记为特定对象,比如说白头鹰);对象追踪则可以确保我们跟随特定对象的路径。
准确的定义有助于我们了解这一系列的过程。结合定义和我们对所述算法的理解,我们可以进一步了解术语之间的不可替换性,亦即检测不是识别的同义词,追踪不仅只是检测的延伸。如果我们知道检测的结果(基于这个词的真正含义),我们就会知道检测算法的目标不是分类或识别一个对象,其目标只是发现这个对象的存在;我们也知道,诸如卡尔曼滤波器(可以确定对象的未来状态)这样的追踪算法不仅只是背景减法之类的扩展;识别意味着我们(总是)事先已经知道某物,而检测则恰恰相反。
我们现在知道,区分这些术语不仅只是字词的问题,而是一个过程和结果的问题(根据所涉及算法的目标和结果)。尽管彼此不尽相同,但三者不存在哪一个优于哪一个的说法,对象检测,对象识别和对象追踪的结合通常可以创建出更先进或更强大的应用程序。每个过程(对象检测,对象识别和对象追踪)都存在自己的目标,而它们可以相互补充。但如果我们希望最终结合这三者(思索出尤为智能的算法组合),以创建出有用和可靠的计算机视觉应用程序,我们首先需要知道怎样区分它们,而这也是映维网今天向大家分享本文的主要原因。
6. 代码示例
为了进一步探索本文中提及的算法和技巧,请访问托管至GitHub的Intel IoT Developer Kit存储库。Face Access Control代码示例使用了来自OpenCV库的FaceDetector和FaceRecognizer类别,而Motion Heatmap则基于背景减法。
推荐阅读