首页
登录 | 注册

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

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]:

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
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]


2020 jeepxie.net webmaster#jeepxie.net
10 q. 0.008 s.
京ICP备10005923号