AI哲学_吴怀宇(中国科学院)分享 http://blog.sciencenet.cn/u/wuhuaiyu 博士教授。中科院博士、北京大学博士后、中国3D科技创新产业联盟副理事长、三体科技研究院院长,受聘多家机构的高端领军人才/导师//教授/研究员

博文

5.24 【3D智能十八篇之十三】智能视觉跟踪

已有 144 次阅读 2026-7-5 23:13 |系统分类:观点评述

opendai_logo.gif

「AI哲学」让人类“为自身立命”与“为AI立心”。

四轴飞行器已经应用得非常普遍。当你的飞行器升空后,能否让它自动跟踪地面上的目标?比如自动跟踪一辆红色轿车,或者某一位你心仪的女生?

航拍地面目标跟踪是指在低空飞行的无人机(比如四轴飞行器)上安装摄像机,利用视觉跟踪获得地面目标的运动参数,以此控制云台旋转角度调整摄像机的姿态,使目标保持在视野中,并控制无人机跟踪目标飞行,如下图所示。地面目标跟踪是无人机视觉导航的重要内容之一,例如,在对地打击、城市反恐作战中,对车辆和人员的跟踪以及在海上搜救中对随波漂流人员的跟踪等。

图片

图5-1  在捕食者等军事无人机上都安装有云台,以调整摄像机的姿态(图片来源:presstv

在对目标进行跟踪之前,我们首先需要对目标进行表示或者建模。而为了表示目标,则需要确定用什么特征来描述目标(可参考章节“5.17.1  个性特征的描述与检测”)。常用的特征有颜色、边缘、轮廓、纹理、关键点等。然后,利用这些特征来构造目标的表示模型,常见的表示模型有:各种色彩空间的直方图、模板和模型(如骨架模型、AAM)、高斯混合模型、核密度估计、超像素等。

有了目标的表示模型,我们就可以开始目标跟踪了,代表性算法大致分为以下几种。

 基于模板匹配的算法。比如Mean Shift算法是一种基于核密度估计的模式匹配算法,该算法的早期版本只能找到局部最大值,且传统的Mean Shift算法不能很好地处理遮挡问题以及不能自适应跟踪目标的形状、方向等。其后,有研究人员对其做了改进,比如CamShift,就可以自适应物体的大小、方向,具有较好的跟踪效果。该算法最大的特点是跟踪速度快,在实际中应用较多。此外,还有基于子空间的方法,首先学习目标的特征子空间,然后根据当前帧的候选目标在特征空间的表示进行目标定位。基于稀疏表达模型(Sparse Representation)的跟踪方法可以看作是子空间跟踪的一个推广,它用一组目标模板作为字典。

 基于概率预测的方法。依据贝叶斯估计理论,目标跟踪问题可以看作目标状态(包括目标的位置、大小、速度等)的估计问题,并通过递归贝叶斯估计获得状态的最大后验概率(MAP)。例如,Kalman滤波假设物体的运动模型服从高斯概率模型,来对目标状态进行预测,然后与观察模型进行比较,根据两者之间的误差来寻找运动目标的状态。但是该算法的精度往往不高,因为高斯运动模型在现实生活中很多情况下得不到满足。粒子滤波克服了Kalman滤波的不足。它每次通过实验可以重采样粒子的分布,根据该分布对粒子进行扩散,通过扩散的结果来观察目标的状态,最后更新目标的状态。该算法因其能实现稳定跟踪而在实际应用中越来越多。

 基于分类检测的跟踪算法:将跟踪问题视为区分特定目标(正样本)和背景(负样本)的分类检测问题。当训练样本足够多时,我们可利用章节“5.23.1  OpenCVAdaBoost人脸检测”的AdaBoost方法对目标(如人脸)进行分类,此外还有SVM、决策树、随机森林等分类器。基于分类检测的方法分为离线方法和在线方法。前者的检测器一旦初始化就不再变化,而后者利用当前帧的数据对检测器进行更新,从而对目标的变化有一定的自适应能力。

上面对目标跟踪算法的简介,相信普通读者看得云里雾里的吧?OK,没关系,我们这里就拿其中的两种算法进行详细解释,相信你一定能看得明明白白!

5.1.1  基于粒子滤波的目标跟踪算法

我们首先看一下到底什么是基于粒子滤波Particle Filtering的目标跟踪算法。如下图所示,比如我们要让四轴飞行器跟踪一名地面上行走的女孩,该算法分为4个阶段。

(1) 初始化阶段:提取目标特征

所谓初始化,也就是在视频的第1帧,人工地指定跟踪目标,以后的画面帧就靠计算机视觉来自动跟踪了。具体来说,在视频的第1帧画面,人工用鼠标框出一个跟踪目标,这有点像我们给这个女孩拍了一张特写照片。然后算法自动提取出目标的特征,如女孩特写照片的颜色直方图。

图片

图5-2  基于粒子滤波的目标跟踪

提示:除了人工指定目标,你还可以使用目标检测算法来自动发现目标。有简单的也有复杂的方法。最简单的是直接进行背景减除,稍微复杂点的有背景建模(基于像素的高斯混合模型、基于区域LBP纹理模式、基于帧的背景子空间提取等)、光流场估计等。

(2) 搜索阶段

好了,画面到了第2帧,此时就要完全依靠计算机来跟踪了。计算机已经掌握了目标的特征,于是派出很多个“警察”,在这帧画面上检测目标对象,这里的“警察”是粒子(Particle)的形象比喻。怎么个派法呢?可在上一帧得到的目标(即“女孩”)附近按照高斯分布来放,可以理解成,靠近目标的地方多放,远离目标的地方少放。“警察们”派出去后,每个“警察”怎么搜索目标呢?就是根据目标特征(颜色直方图),形象点说就是根据我们提供给每个“警察”一张“女孩”的特写照片。每个“警察”在他所处的位置(某个图像像素坐标)也拍了一张照片,提取出照片的特征(颜色直方图),并计算该照片与“女孩”特写照片的相似度,得到一个数值。每个“警察”各自算完相似度后,将所有值相加得到一个总和,以此对每个相似度做一个归一化,使得所有“警察”得到的相似度加起来等于1。这个相似度就近似表示了“警察”找到这个“女孩”的概率。

(3) 决策阶段

我们派出去的一个个精干的警察向我们发回报告,“一号警察所在处与目标的相似度是0.5,“二号警察所在处与目标的相似度是0.04,“三号警察所在处与目标的相似度是0.0002,“四号警察所在处与目标的相似度是0.013”……那么,目标究竟最可能在哪里呢?我们可以选相似度最大的“警察”所在处的图像像素坐标,比如一号“警察”所在处的像素坐标;也可以对所有地点做加权平均,如设第i号“警察”所在处的图像像素坐标是(),他报告的相似度是,于是目标最可能的像素坐标为:。这里是求和的意思,即对所有的粒子(“警察”)的坐标进行加权求和。

(4) 重采样阶段

既然我们是在做目标跟踪,一般说来,目标(即那个“女孩”)是跑来跑去乱动的。在新的一帧图像里,目标可能在哪里呢(我爱的人已经飞走了)?我们在新画面里接着派“警察”搜索吧!仍然在上一帧得到的目标附近按照高斯分布来放,即靠近目标的地方多放,远离目标的地方少放。举例来说,前一帧打探的结果,一号“警察”处的相似度最高,三号“警察”处的相似度最低,于是我们要重新分布警力,正所谓好钢用在刀刃上,我们在相似度最高的“警察”附近放更多的“警察”,在相似度最低的“警察”附近少放“警察”。这就是重要性重采样SIRSampling Importance Resampling,即根据重要性重新放粒子,而重新采样可克服粒子退化问题。

提示:重要性采样实际上是基于所谓的蒙特卡洛Monte Carlo模拟方法,其利用随机采样对一个目标函数做近似。例如,求一个稀奇古怪的形状S的面积,如果我们没有一个解析的表达方法(如正方形的面积函数可解析表达为边长的平方),那么怎么做呢?蒙特卡洛法告诉我们,你只要均匀地在一个包裹了这个形状S的正方形内随机撒点,并统计点在形状S内的个数,那么当你撒的点足够多的时候,形状S的面积就可近似=(在形状S内的点个数/正方形内的总的点个数)×正方形的面积。

(2)(3)(4)(2)如此反复循环,即通过重采样的方法撒粒子、粒子扩散、状态观察、目标预测,直到完成了目标的动态跟踪。基于粒子滤波的目标跟踪是不是很简单?

扩展:给定线性动态模型,其包含两个方程:

图片

其中时刻的状态向量,时刻的观测向量(来自实测图像),是状态转移矩阵,是观测矩阵,分别是系统噪声和观测噪声。在给定观测值,   ,   ,,    之后,我们要对系统状态,比如,进行某种最佳估计。如果我们能通过某种方式获得后验概率密度,那么估计起来将不怎么困难。实际上,在线性动态模型假设下,是高斯的,因而的估计就可用Kalman(卡尔曼)滤波这种有效的递推算法来实现,实际上Kalman滤波正是线性高斯模型下的最优状态估计算法然而,如果是如下的非线性动态模型,如:图片

其中为某个非线性函数。这时显然不再是高斯的,这将使得后验概率的形状很不规则,估计将很困难,Kalman滤波将不适用粒子滤波是求解后验概率的一种算法,通过非参数化的蒙特卡洛模拟方法来实现递推贝叶斯估计。核心思想是互相独立的样本集合和与样本相对应的重要性权重(Importance Weight来实现对后验概率密度的近似表示,并随着时间的变化对后验概率密度进行递推地更新。

具体地,通常目标状态的后验概率无法直接得到,因此可根据贝叶斯重要性采样定理给出一种近似计算方法:目标状态后验分布用一系列离散的粒子来近似表示。粒子滤波用粒子集来表示概率,通过从后验概率中抽取的随机状态粒子来表达其分布,核心算法是序贯重要性采样(Sequential Importance SamplingSIS。该算法的主要思想是利用一系列随机样本(即粒子)的加权和表示所求的后验概率密度,得到状态的估计值,当样本点数增至无穷大时,结果接近于最优贝叶斯估计。

5.1.2  基于Mean Shift(均值漂移)的目标跟踪算法

怎么样,现在是不是觉得跟踪有点意思?下面就趁热打铁,再介绍一种称为Mean Shift(均值漂移)的目标跟踪算法。与粒子滤波有些不同,这次我们引入搜索区域的概念。

首先,我们也是要告诉计算机需要跟踪哪一个物体,在视频的第1帧我们用小窗口框出需要跟踪的运动目标,如一辆红色小轿车(见5-201左边),然后提取这辆红色小轿车的统计特征(比如颜色直方图)。

从第2帧开始,计算机就开始自动搜索了。它把搜索区域(5-200中的兰色圆框)中每个像素点处与红色小轿车的颜色直方图进行比较,为搜索区域生成了一张概率密度图。概率密度越大的地点表示包含目标的可能性越大,反之越小。

然后我们让搜索区域的中心沿概率密度增加最大的方向移动(也即向着密度中心靠拢),直至移动到目标的真实位置。如5-200左边所示,我们将搜索窗口中心的黄色移动箭头称为均值漂移向量。随着搜索的逼近,向量的大小变得越来越小,也就是黄色箭头越来越短,直到长度为零停止移动,如5-200右边所示,此时就定位到目标了!

图片

图5-3  均值漂移向量的移动过程,直至移动到目标中心点(图片来源:tistory

整个跟踪过程是不是更简单?这里所说的均值,几何意义上可看作是概率密度空间的重心。均值漂移的过程实际上是要在概率密度空间中寻找最密集的重心位置,直到(兰色)搜索窗口的中心与概率密度空间的重心重合。此外,可通过定义核函数,让各个样本对漂移向量的贡献是非均匀的,也即对不同样本点设置不同的权重系数,使它们对漂移向量有不同的影响,比如离得越近则影响越大,这样可保证Mean-Shift获得好的性能和收敛速度。

以上就是Mean Shift算法过程,视频跟踪结果如下图右边所示,这里我们的搜索区域为一个红色的小方框。

图片

图5-4  Mean Shift对一辆红色小车的跟踪结果(框中的数值为算法的某个中间结果,请直接忽略掉它)

提示:Mean Shift是基于核密度估计非参数特征空间分析方法,自适应步长迭代寻找概率密度分布的局部极值点。所谓参数估计就是密度函数的形式可简单地假设出来,例如假定是正态概率密度函数,则只需估计均值和方差这几个参数即可。但在实际应用中,数据的模型几乎都是未知的,这时非参数估计就大有可为。非参数方法无须预先假设密度函数的结构形式,可由落入某一连续点邻域中的若干样本点估计出其密度函数值,可实现对任意分布的密度估计。典型的无参数密度估计方法有最近邻域法、直方图法及核密度估计法。与直方图法相比,核密度估计法是一种平滑的非参数估计方法,它增加了一个平滑数据的核函数

具体地,给定维特征空间中个样本,可以得到空间中任意位置的核概率密度估计

图片

式中为核函数。密度估计的过程可理解为:某采样点概率密度函数的估计值的取值是以每个采样点为中心的局部函数的平均值。为了分析数据集合中密度最大数据的分布位置,可对上式求梯度并从中提取出均值漂移向量:

图片

其中核函数用于对每个采样点进行加权:离中心点越近,则对估计中心点周围的统计特性越重要。在每次迭代过程中,将新的赋给,然后重新计算均值漂移向量,直到Mean Shift算法不断地将位置移向数据均值的地方,同时因为梯度指向密度变化最大的方向,故Mean Shift向量总是指向密度增大的方向。此外,移动的步长也与该点的概率密度有关,在密度大的地方(如包含感兴趣特征的数据区域),Mean Shift算法会使得移动的步长变小、漂移的慢,反之就变大。因此,Mean Shift算法是一个变步长的梯度上升算法,或称自适应梯度上升算法

在将Mean Shift算法用于目标跟踪时,一般利用核函数加权颜色直方图描述目标,并用Bhattacharrya系数度量目标与候选目标之间的相似性,接着将搜寻相似度量的局部极值问题转化为核密度估计问题,然后通过Mean Shift迭代来寻找其局部最大值。

如果采用OpenCV库(请见章节“5.23  3D智能十八篇之十二】OpenCVOpenGL3D智能入门的两大利器”),Mean Shift算法的实现非常简单,调用meanShift()函数即可。此外,你还可以在OpenCV中调用camShift()函数来实现CamShift算法,它是Mean Shift的一个改进,称为连续自适应的MeanShift算法(Continuously Adaptive Mean Shift),其优点在于当目标的大小发生改变的时候,此算法可以自适应调整目标区域继续跟踪。但需要指出的是,目前Mean Shift算法经过学术界的不断改进,也有这种自适应大小的能力了,且成为了最常用的跟踪算法,只不过OpenCV库中的meanShift()函数还没有得到相应升级而已。

【“AI哲学一吴怀宇”(中国科学院博士、北大博士后)作者主页:www.OpenDAI.org;邮件:huaiyuwu@sina.com 视频号/公众号:AI哲学一吴怀宇中国科学院(人工智能哲学)】



https://blog.sciencenet.cn/blog-4099-1542352.html

上一篇:5.23 【3D智能十八篇之十二】OpenCV与OpenGL:3D智能入门的两大利器
下一篇:5.25 【3D智能十八篇之十四】什么是大数据?



    
收藏 IP: 175.7.240.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2026-7-6 16:15

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部