分布式多视角目标跟踪算法在OMAP3平台上的实现与优化
。
本系统针对多个静止摄像头Ci (i=1,2,3?N)观测待跟踪目标O,在t时刻任意一台摄像机采集到的图像数据表示为)...3,2,1( Niit=z,跟踪目标在该图像中的真实位置横纵坐标表示为],[′=ititityxx。整个跟踪系统的任务是利用该时刻采集到的图像数据集合{}NttttzzzZ...,21=,估计出运动目标在每台摄像机视野中所处的位置)...2,1(],[Niyxititit=′=x。根据最大似然准则,可将本文的目标跟踪任务以如下形式进行建模:
经过推导[1]可以得到系统模型似然可分解为如下形式:
式(2)所表示的物理意义为:本地似然函数)|(ititpxz是第i台摄像机利用本地数据对运动目标位置itx进行估计,可理解为一般的单摄像机跟踪过程;而远程似然函数)|(itjtpxz则可以理解为本地摄像机节点Ci通过一个数据融合的过程,融合其它摄像机节点的观测数据来提高对运动目标的位置itx估计的精度。
本系统采用粒子滤波的形式来实现似然函数的传递,经过推导可以得到粒子滤波的权重中包括了远程信息及本地信息两个部分,与公式(2)保持一致,可以很好地实现数据融合。
3.3 跟踪精度优化
尽管3.1.到3.2.两小节提出的算法已经具有相对较高的鲁棒性,由于单个视角内的匹配误差会在视角间被传递甚至随着时间递推而被放大,因而提高视角内的跟踪精度也是关键。现实世界的视频的复杂性,使得视角内跟踪经常会遇到模板漂移的问题。针对上述问题,我们又实现了下面改进算法:抑制漂移的卡尔曼外观滤波(DIMKAF)[3-4]。DIMKAF(Drift-Inhibitive Masked Kalman Appearance Filter )算法通过计算模板像素真实值的概率分布定量地在线估计观测噪声的功率。状态转移噪声的功率也可以通过新息在线计算得到。这样,本算法的卡尔曼增益系数始终能够在更新模板与减少漂移之间寻求最优平衡点,十分有效地抑制了模板漂移现象,提高了有限搜索精度下的跟踪精确度。
4.算法在DSP上的实现难点与优化方案
视频跟踪算法具有运算量大的特点,这增加了算法在DSP上的实现难度。为了让算法能够实时地在DSP上运行,我们必须对算法中最耗时的部分进行优化。经过分析,算法中最耗时的部分为粒子滤波和模板匹配中的SSIM计算函数和插值函数。对于每一帧视频,算法要调用将近两百次的相似度计算函数和插值函数。粒子数越多,模板匹配的范围越大,则所需要的计算量越大。
优化过程分为算法优化和软件优化两个阶段。算法优化只在算法的层面上对计算公式进行优化,减少公式的运算量。软件优化主要是对程序代码进行优化,以提高程序的运行速度。
4.1 算法优化
本节针对粒子滤波和模板匹配中的SSIM计算函数进行了算法上的优化。
● 结构相似度指标第一步简化:分解简化
2.1节中介绍的粒子滤波和模板匹配中的SSIM指标[6]的计算方式,可以将其简化为如下形式:
根据均值性质,上述式子可以化简为:
(3)式的运算量大约为10MN个加法和乘法运算,而(4)式的运算量仅为6MN个加法和乘法运算,运算量大约减少为原来的60%。
● 结构相似度指标第二步简化:模板均值方差复用
由跟踪算法可知, 在对同一帧视频数据进行处理时,模板是不变的,上式中的mf 以及ΣΣ==MmNnnmf112)),((是不变的,因此模板的均值和ΣΣ==MmNnnmf112)),((项只要计算一次,那么在其它SSIM的计算中可以重复利用,达到进一步降低计算量的目的。
4.2 软件优化
软件优化就是对程序代码进行优化。只在C语言的层面上进行优化有利于保持程序良好的移植性。不管是ARM上的C程序,还是DSP上的C程序,其优化的一般方法都具有相似性。
A.dsplib的使用:TI公司为程序员提供了一个高效的函数库dsplib,这个函数库实现了很多常用运算,如相关、乘加、FFT等。通过使用dsplib,一方面减少了算法优化的时间和工作量,另一方面又能到达与汇编优化相近的效果。
B.循环内部优化及循环展开:内循环往往是程序运行效率低下的瓶颈,通过优化内循环代码,可以大大提高代码的运行效率。一方面,应尽量精简内循环的代码,合理安排内循环存储器的操作;另一方面,通过循环展开的方法提高代码运行的并行程度,充分发挥C64+DSP单周期多指令的性能。
C.提高存储器操作的并行性:通过在函数声明中使用关键字const和restrict等,并合理安排存储器的操作,可以消除存储器的关联性,使串行的存取操作变成并行的存取操作,从而提高程序运行速度。
D.浮点运算转定点运算:C64+DSP核是一款定点DSP处理器,不支持硬件的浮点运算,只支持软件的浮点运算。为了提高运算速度,需要尽可能把浮点运算转化为定点
SoC 分布式多视角跟踪算法 201105 相关文章:
- IP核在SoC设计中的接口技术 (08-06)
- 视频跟踪算法在Davinci SOC上的实现与优化(10-06)
- 基于赛灵思Spartan-3A DSP的安全视频分析(02-17)
- Linux下Sniffer程序的实现(06-12)
- linux操作系统下的进程通信设计(01-24)
- 基于S3C44B0X和uClinux的Socket通信实现(02-28)