刚开始看到这算法很新奇,决定好好看看,所以有了这篇博客。Da SiameseRPN结果可视化看到了可视化的结果真的震撼到了,所以就千方百计的想要跑一下看看,结果不论是Windows的还是Ubantu的vot toolkit都没有通过测试,真是很苦恼了。后来想着绕过vot toolkit,直接跑,结果在windows下的权重文件都读不进去,可能是因为别的原因,后来直接在ubantu上配环境。
CUDA 9.1
PyTorch 0.3.1
显卡有个GTX 1050凑合用着,主要目标就是绕过vot toolkit,直接运行指标什么的先不考虑。
下载过vot-2018-short term测试集就不用再下了。这个我在VOT2018——研究指南已经放出来了。
接下来就是如何改。
首先要知道,运行Da-SiamRPN的接口在vot_SiamRPN.py中,在ubantu上运行的时候会在vot.py(line 104)报错
self._files = [x.strip('\n') for x in open('images.txt', 'r').readlines()]
在vot_SiamRPN.py中的line 32中调用了它,是用来给第一帧的图像初始化坐标用的,在第一帧以后的后续帧,用来更新坐标信息
handle = vot.VOT("polygon")
Polygon = handle.region()
cx, cy, w, h = get_axis_aligned_bbox(Polygon)
这个四个值分别表示
cx----中心点横坐标
cy----中心点纵坐标
w-----宽度
h-----高度
后来实验的时候证明是对的,我还没有仔细看vot里调用这个具体的做法是怎样的,但是我认为比较合理的计算应该是这样的:
cx = (x1+x2+x3+x4)/4
cy = (y1+y2+y3+y4)/4
w = ((x2-x1)+(x3-x4))/2
h = ((y3-y2)+(y4-y1))/2
看过vot-2018-short term数据集的应该知道里面的groundtruth是这样的
137.21,458.36,156.83,460.78,148.35,529.41,128.72,526.99
130.04,468.35,151.58,467.72,153.64,537.86,132.1,538.5
133.08,508.05,150.79,503.65,167.71,571.7,149.99,576.1
.
.
.
.
.
.
分别是四个点的横纵坐标——(x1,y1) (x2,y2) (x3,y3) (x4,y4)。
(cx,cy) 就是(x1,y1) (x2,y2) (x3,y3) (x4,y4)的中心点的坐标。关于w和h,我是简单的认为是两个对应横纵坐标差的均值,草图说明:
还有就是一些平常的操作,注意几个路径的位置:
target_path--是测试集所在位置,里面有很多的文件夹:ants1、ants3......
sequences_name:就是具体的,里面有color文件夹,还有groundtruth.txt
image_path:里面就是很多图像文件了。“000001.jpg..........”
主体的代码:
for ii in range(1,len(img_name)):
cx = int(res[0]-res[2]/2)
cy = int(res[1]+res[3]/2)
w = int(res[2])
h = int(res[3])
target_pos, target_sz = np.array([cx, cy]), np.array([w, h])
im_temp = cv2.imread(image_path+img_name[ii])
state = SiamRPN_track(state, im_temp) # track
res = cxy_wh_2_rect(state['target_pos'], state['target_sz'])
# print(ii)
# print(img_name[ii])
# print(res)
xx = int(res[0])
yy = int(res[1])
ww = int(res[2])
hh = int(res[3])
cv2.rectangle(im_temp,(xx,yy),(xx+ww,yy+hh),(0,0,255))
cv2.imshow("prediction",im_temp)
cv2.waitKey(0)
第一版的全部代码——Da-SiamRPN_No_vot-toolkit
可以得到。
运行:
按Enter 进行下一张。