TLD(Tracking-Learning-Detection)学习笔记(七)

2015年06月30日

笔者的TLD工程github地址:https://github.com/wangzi6147/OpenTLD

较原C++版本做出的改进

  • 更换了videoinput库,支持release版本
  • 算法运行过程中按空格键可暂停
  • 增加resize参数
  • 开始时先播放视频,按空格键之后再指定目标
  • 优化学习模块中耗时较多的一个排序
  • 利用CUDA优化了检测模块

其中前4项都是工程级别的修改,主要是为了更方便地与用户交互与测试。

后两项是测试时发现有两处明显耗时的部分。这两处比较耗时都是因为每一帧图像都会遍历大量的grid(测试视频中大概每一帧图像要遍历60000-70000个grid)。

  1. 学习模块中的nth_element排序:这里我采取的方式是把其中需要排序的good_boxes选出,存储在一个map中,再进行排序。而不是去所有grid中找good_boxes再排序(原程序方法)。
  2. 检测模块的分类部分:这里原程序有进行标注//FIXME: BottleNeck,说明原作者也知道这里是瓶颈。因为所有grid之间的运算是没有关联的,只是为了筛选出符合标准的grid。所以这里我利用CUDA进行并行运算优化,具体见github。测试视频在debug模式下,原程序检测模块每帧耗时300-400毫秒,优化后耗时30-40毫秒,提升10倍速度。