ROLO实验

本文介绍ROLO(Real-time Object LOcation)系统的目标跟踪实验,包括不同实验设置下的训练与测试流程,以及对ROLO系统泛化能力和参数敏感度的讨论。

要求Tensorflow 版本是0.11.0

https://github.com/Guanghan/ROLO/

Getting Started
1. Download Data and Pre-trained Models
2. Run Demo
Reproduce the results with the pre-trained model

python experiments/testing/ROLO_network_test_all.py

Run video Demo:

# 正常运行
python ROLO_demo_test.py

3.Training and Testing
特征表达最好可以被分别训练以提供共享的特征。
Experiment 1:
离线跟踪的局限是离线模块需要用很多数据进行训练,但在benchmark上很难找到。即使是OTB100,那量也不够,因此跟踪器over-fitting。
为了测试ROLO的泛化能力,进行了experiment 1。
对于OTB30,在22个videos上进行训练,并且用余下的8个视频进行test
在3个没有被OTB30所选中的额外视频中进行test,他们的gt是脸,而不是body
因为face并不包含在默认的YOLO模型中,YOLO检测的是body,ROLO也就可以受监督的跟踪body。
To reproduce experiment1 :

# Training:
 python ./experiments/training/ROLO_step6_train_20_exp1.py
# Testing
 python ./experiments/testing/ROLO_network_test_all.py

在进行复现的过程中,出现的问题有:

Experiment 2:
如果模型就是用有限的数据训练得到的,那么可以使用在线模型更新的方法。
用OTB30的前1/3帧的数据,训练了第二个LSTM模型。在其余帧上进行test。

To reproduce experiment 2:

# Training:
 python ./experiments/training/ROLO_step6_train_30_exp2.py
# Testing
 python ./experiments/testing/ROLO_network_test_all.py

本实验观察到的属性:
一旦用类似动力学的方法在辅助帧上进行训练,那么ROLO将会在test序列上表现很好。
Experiment 3:
增加训练的帧数,用全部的帧进行训练,but只用1/3的ground truths。这样做可以带来性能的提升。
To reproduce experiment 3:

# Training:
python ./experiments/training/ROLO_step6_train_30_exp3.py
# Testing:
python ./experiments/testing/ROLO_network_test_all.py

局限性:
实验2和实验3用了1/3的训练帧。在评估时,应该把这些帧给去除掉。注意到从相同的视频序列中使用不同的帧进行训练和测试是有问题的。在线更新的模式显得就很重要了。
Parameter Sensitivity(参数敏感度)
在实验2中,使用不同的 step sizes: [1, 3, 6, 9]:

python ./experiments/testing/ROLO_step1_train_30_exp2.py
python ./experiments/testing/ROLO_step3_train_30_exp2.py
python ./experiments/testing/ROLO_step6_train_30_exp2.py
python ./experiments/testing/ROLO_step9_train_30_exp2.py

step sizes越大,FPS越小。准确性是6>3>9>1。


4.Visualization with Heatmap

# Demo
python ./ROLO_demo_heat.py
# Training:
python ./heatmap/ROLO_heatmap_train.py
# Testing: 
python ./heatmap/ROLO_heatmap_test.py
  1. Performance Evaluation
python ./ROLO_evaluation.py
def find_best_location(self, locations, gt_location):
                # locations (class, x, y, w, h, prob); (x, y) is the middle pt of the rect
                # gt_location (x1, y1, w, h)
                x1 = gt_location[0]
                y1 = gt_location[1]
                w = gt_location[2]
                h = gt_location[3]
                gt_location_revised= [x1 + w/2, y1 + h/2, w, h]

                max_ious= 0
                for location, id in enumerate(locations):
                        location_revised = location[1:5]
                        ious = self.iou(location_revised, gt_location_revised)
                        if ious >= max_ious:
                                max_ious = ious
                                index = id
                return locations[index]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值