Da-SiamRPN的復現(非vot toolkit環境)
剛開始看到這演算法很新奇,決定好好看看,所以有了這篇部落格。Da SiameseRPN接面果視覺化看到了視覺化的結果真的震撼到了,所以就千方百計的想要跑一下看看,結果不論是Windows的還是Ubantu的vot toolkit都沒有通過測試,真是很苦惱了。後來想著繞過vot toolkit,直接跑,結果在windows下的權重檔案都讀不進去,可能是因為別的原因,後來直接在ubantu上配環境。
CUDA 9.1
PyTorch 0.3.1
顯示卡有個GTX 1050湊合用著,主要目標就是繞過vot toolkit,直接執行指標什麼的先不考慮。
接下來就是如何改。
首先要知道,執行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 進行下一張。