笔者的TLD工程github地址:https://github.com/wangzi6147/OpenTLD
较原C++版本做出的改进
- 更换了videoinput库,支持release版本
- 算法运行过程中按空格键可暂停
- 增加resize参数
- 开始时先播放视频,按空格键之后再指定目标
- 优化学习模块中耗时较多的一个排序
- 利用CUDA优化了检测模块
其中前4项都是工程级别的修改,主要是为了更方便地与用户交互与测试。
后两项是测试时发现有两处明显耗时的部分。这两处比较耗时都是因为每一帧图像都会遍历大量的grid(测试视频中大概每一帧图像要遍历60000-70000个grid)。
- 学习模块中的nth_element排序:这里我采取的方式是把其中需要排序的good_boxes选出,存储在一个map中,再进行排序。而不是去所有grid中找good_boxes再排序(原程序方法)。
- 检测模块的分类部分:这里原程序有进行标注//FIXME: BottleNeck,说明原作者也知道这里是瓶颈。因为所有grid之间的运算是没有关联的,只是为了筛选出符合标准的grid。所以这里我利用CUDA进行并行运算优化,具体见github。测试视频在debug模式下,原程序检测模块每帧耗时300-400毫秒,优化后耗时30-40毫秒,提升10倍速度。