文章目录
1.官方给出的测试方法
2.代码阅读
-
需要加载的内容(以测试Siam RPN为例):
- 网络结构:将Siam RPN的网络结构加载进去
--config
- 网络权重:将Siam RPN的网络权重加载进去
--snapshot
- 测试数据集:将想要测试的数据集加载进去
--dataset
- 网络结构:将Siam RPN的网络结构加载进去
-
torch.set_num_threads(int)
:设定用于并行化CPU操作的Open MP线程数 -
加载网络配置和数据集路径
-
加载数据集路径
-
import os print(os.path.realpath(__file__)) #显示绝对路径 print(os.path.dirname(os.path.realpath(__file__))) #只显示文件夹名称 /home/hello/pysot/shiyan.py /home/hello/pysot
-
os.path.join
:将几个路径拼接在一起
-
-
-
创建模型;加载权重;创建跟踪器;(默认前人已经做好的工作)
-
创建项目所需的数据集
VOTDataset(**kwargs)
:创建VOT数据集- 读取VOT2018.json文件数据
- 生成VOT Video:将json文件的内容复制到该函数下,即将VOT2018.json转换为VOT Video
-
读取数据集
- 读取第一个序列信息
- 利用迭代规则,对第一序列信息进行迭代:获得第一帧图片和其真实轨迹(8个数据:左上、左下,右下、右上)
def __iter__(self): for i in range(len(self.img_names)): if self.imgs is not None: yield self.imgs[i], self.gt_traj[i] else: yield cv2.imread(self.img_names[i]), self.gt_traj[i]
-
获得的真实轨迹并不是矩形,而一般是平行四边形,所以需要转换为矩形的形式。(重点!!!!)
-
中心点获取:所有的
x
坐标相加取平均获得中心点cx
,所有的y
坐标相加取平均获得中心点cy
-
w
、h
获取:
-
计算出平行四边形的面积 S 四 边 形 S_{四边形} S四边形(两个相邻边的乘积)和矩形的面积 S 矩 形 S_{矩形} S矩形
-
计算出前后的面积变化,对矩形的长宽进行限制
-
s = s 四 边 形 s 矩 形 s=\sqrt\frac{{s_{四边形}}}{{s_{矩形}}} s=s矩形s四边形
-
w = s ∗ ( x 2 − x 1 ) + 1 h = s ∗ ( y 2 − y 1 ) + 1 w=s*(x_2-x_1)+1 \\ h=s*(y_2-y_1)+1 w=s∗(x2−x1)+1h=s∗(y2−y1)+1
-
-
左上角坐标获取:
x 1 = c x − ( w − 1 ) / 2 y 1 = c y − ( h − 1 ) / 2 x_1=cx-(w-1)/2\\ y_1=cy-(h-1)/2 x1=cx−(w−1)/2y1=cy−(h−1)/2
-
-
跟踪器初始化:
tracker.init(img,gt_bbox)
-
执行跟踪,记录跟踪结果
-
将图片输入跟踪器得到预测框
pred_bbox
-
计算预测框与真实框的重叠分数
overlap
-
如果重叠分数
overlap
>0,则认为跟踪没有丢失;并将预测框pred_bbox
记录在列表pred_bboxes
中 -
如果重叠分数
overlap
=0,则跟踪丢失;这时跳过5帧图片,再重新跟踪器初始化(真实框已知),再跟踪;列表pred_bboxes
的形式为:2,0,0,0,0,1
-
可以发现列表
pred_bboxes
中存储的内容的形式为:[1,pred_bbox1,pred_bbox2,2,0,0,0,0,1,pred_bbox3] #第四帧丢失目标,第九帧重新初始 化跟踪器
-
6.保存跟踪结果(以ants1为例)
- 保存路径为:results/VOT2018/model/baseline/ants1/ants1_001.txt;并将预测结果写入。
- 输出:(1) video:ants1 Time:? s speed:? fps Lost:?
-
-
输出该数据集总共跟丢的帧数:model total lost: ?