微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 视频跟踪算法在Davinci SOC上的实现与优化

视频跟踪算法在Davinci SOC上的实现与优化

时间:10-06 来源:作者:杨成 冯巍 潘吉彦 许俊泽 胡波 复旦大学电子工程系DSPT实验室 点击:

图 2 软件结构图

跟踪算法在DSP上的优化

  为了充分发挥出Davinci SOC强大的视频处理能力,满足实时跟踪的需要,我们通过算法优化和编程优化相结合的方法对Codec程序进行了大量的优化。

算法优化

  算法优化是指在不降低算法性能的情况下,采用等效算法来降低计算量,我们的工作主要集中在"归一化互相关系数"的计算例程的简化上。根据均值和方差的性质,我们可以将(1)式化简为:

  上式与式(1)比较,减少了大量的加减法计算,而且将方差和协方差的计算转化为大量的乘加运算,这为我们后面的编程优化也提供了极大的便利。例如M=64, N=64时,加法次数从36864减少到12288。

编程优化

  编程优化是在计算量不变的情况下,根据Davinci处理器DSP核心的特点,通过优化存储器的存取效率和提高程序的并行化程度来缩短程序运行所需要的指令周期数,以使程序运行得更快。我们的编程优化工作主要包含使用dsplib、使用线性汇编、使用内联函数以及循环展开等五个方面,下面将一一加以介绍。

* dsplib的使用

  在优化过程中,我们还采用了CCS中提供的库函数来对代码进行优化。CCS中针对c64x+ DSP提供了高度优化的dsplib库函数供用户使用,这些库函数提供了数字信号处理中常见的处理例程,而且由汇编语言写成,具有极高效的代码效率。特别是用于计算向量内积的DSP_dotprod和DSP_vecsumsq函数正好满足了我们的计算需求。在计算尺寸为32x32的"归一化互相关系数"时,优化后计算部分只需要271个DSP时钟周期,而计算部分只需要267个DSP时钟周期,这大大提高了程序运行的速度。

* 线性汇编

  对于uf和ug的计算,如果使用for循环实现,将会大大拖累整个"归一化互相关系数"计算例程的执行效率。我们用手工编写线性汇编代码的方式实现了dspsum函数,利用C64x + DSP中的8个并行计算单元,在每个DSP时钟周期内同时进行4个16位加16位的加法操作,对于尺寸为32x32的求和计算而言,该函数只需要258个DSP时钟周期。

* 内联函数的使用

  C64x+编译器提供的内联函数可快速优化C代码。内联函数是直接映射为内联的C64x+指令的特殊函数,内联函数用前下滑线(_)来表示,使用时同调用普通函数一样使用它。我们在优化过程中,使用了许多内联函数,如_round()等,大大提高了代码的执行效率。

* 循环展开

  由于for技术循环需要打断C64x+ DSP内部的软件流水线,而频繁的for循环会大大降低DSP的处理效率,所以我们在优化过程中,将部分for循环进行了展开,以代码增加为代价提高了代码的执行效率。通过上述方法,可将代码的处理效率提高3-5倍。

测试结果

  为了获得视频跟踪算法Codec运行所需要的DSP时钟周期数,进而估计出优化后的算法代码是否已经满足实时跟踪的需要,我们使用CCStudio v3.3对同一测试序列,同一起始目标位置,不同大小模板的情况进行了离线仿真。

表 1 视频跟踪算法优化结果


表 2 DSP负载测试


结论

  我们在基于双核DM6446的系统平台上,利用改进后的跟踪算法实现了智能目标跟踪系统。DM6446 ARM核上的Linux操作系统上的多线程程序负责视频采集、视频显示、算法控制、外围设备处理等任务。通过在TI Codec Engine软件架构下扩展目标跟踪算法的接口,我们成功在DM6446的DSP核上运行了跟踪算法。经过算法优化和编程优化,系统可以对采集输入的25fps,720×480分辨率视频中的128×128大小的目标进行实时跟踪。实验结果表明,该算法可以成功跟踪目标,并具有较强的鲁棒性。该技术将会在智能视频监控、智能用户接口、基于对象的视频压缩、巡航导弹末端制导和辅助驾驶等领域有广泛应用前景。

参考文献:

1.Jiyan Pan, Bo Hu, and Jian Q. Zhang, "Robust and Accurate Object Tracking under Various Types of Occlusions," to appear in IEEE Transactions on Circuits and Systems for Video Technology (CSVT).
2.Michael H. Fischer, and Jiyan Pan, "A Novel Visual Tracking Algorithm based on Adaptive Three-Step Search, Hybrid Correlation, and Adaptive Template Renewal," Stanford Undergraduate Research Journal, vol. 5, pp. 54-60, spring 2006.
3.Jiyan Pan, Bo Hu, and Jian Q. Zhang, "Drift-Inhibitive Object Tracking Algorithm," submitted to Chinese Journal of Electronics (in Chinese).
4.Jiyan Pan, and Bo Hu, "Robust Object Tracking against Template Drift," to appear in Proc. IEEE Int. Conf. on Image Processing, San Antonio, Texas, September 2007.
5.Jiyan Pan, and Bo Hu, "Robust Occlusion Handling in Object Tracking," Proc. IEEE Conf. on Computer Vision and Pattern Recognition, pp. 1-8, Minneapolis, Minnesota, June 2007.
6.SPRU187L: TMS320C6000 Optimizing Compiler User’s Guide
7.SPRU198G: TMS320C6000 Programmer’s Guide
8.SPRU862A: TMS320C64x+ DSP Cache User's Guide
9.SPRUED6B: Codec Engine Algorithm Creator User’s Guide
10.SPRUE67: Codec Engine Application Developer’s Guide
11.SPRUED5: Codec Engine Server Integrator's Guide
12.SPRUEC8: xDAIS-DM (Digital Media) User Guide

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top