线性汇编
对于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.