franktpmvu / NeighborTrack

[CVPR 2023 workshop] NeighborTrack: Single Object Tracking by Bipartite Matching With Neighbor Tracklets and Its Applications to Sports
45 stars 1 forks source link

同一设备结果的不同 #7

Open 2609780105 opened 3 months ago

2609780105 commented 3 months ago

您好,打扰一下,我想问的是,我用OSTrack的源码测试了GOT-10k的数据集,384的是73.8 。但是我用您的代码测试了OSTrack是74.1.这是为什么,我用的是同一个设备,结果却不同,是有什么地方变动了吗

franktpmvu commented 3 months ago

您好 確定一下你是用什麼方法,你是指使用我的code但只有跑純OSTrack嗎? 指令是怎麼下的?

我覺得可能有三個地方要一一排除

1.我拿的ostrack版本大概是2022年的版本,但不幸的是我沒有留下版本號,所以可能他之後有改什麼東西導致結果不一樣

2.為了嵌入neighbortrack到ostrack裡面,我的確有改動一些ostrack的功能,比如輸出鄰居等等function,但我記得沒錯的話沒有改到他的結果,但不排除我改了但是忘了。

3.got-10k的官方ostrack有很多個版本的權重,你是用相同的權重跑兩個code嗎,如果是的話我們可以排除權重方面的影響。 因為ostrack原版有使用額外的dataset訓練,並測試在got-10k,這邊稱為權重(a),他有額外給一個只使用got-10k訓練的權重稱為權重(b),在我的測試上,這兩個權重的分數分別是73.94與74.19 。所以也有可能單純是權重不一樣

[GOT-10K] AO SR0.50 SR0.75 Hz OSTrack384(a) 73.94 83.63 72.16 7.00 fps OSTrack384_gottrainonly(b) 74.19 83.98 71.58 3.88 fps

所以我需要知道你是使用什麼指令,ostrack版本是現在最新的版本嗎 我可以對照看看code裡面的差別。

感謝

2609780105 commented 3 months ago

您好,我想知道以下这两个的区别,用法。您是用的第一个吗,好像第二个得出的结果更低。

got-10K example

python tracking/test.py ostrack vitb_384_mae_ce_32x4_ep300_neighbor --dataset got10k_test --threads 16 --num_gpus 8 --neighbor 1

to use got-10K train_from_got10K_only

python tracking/test.py ostrack vitb_384_mae_ce_32x4_got10k_ep100_neighbor --dataset got10k_test --threads 16 --num_gpus 8 --neighbor 1

franktpmvu commented 3 months ago

差在用的model不同,就如同我上述第三點講的,這兩個model來自OSTrack官方,就我所知他們的差別是 vitb_384_mae_ce_32x4_ep300 有用額外dataset訓練且額外資料包含GOT10k的驗證集 vitb_384_mae_ce_32x4_got10k_ep100 僅使用GOT10k的訓練集訓練 我兩個都有測試 結果如我的readme表單 我把上面的標注為OSTrack384 下面的標注為OSTrack384_gottrainonly

2609780105 commented 3 months ago

您好,我运行您的代码时,刚开始可以运行,之后再次测试时,就出现了以下问题: 这是因为什么原因,希望您能告知。

Tracker: ostrack vitb_384_mae_ce_32x4_got10k_ep100_neighbor None , Sequence: GOT-10k_Test_000136 test config: {'MODEL': {'PRETRAIN_FILE': 'mae_pretrain_vit_base.pth', 'EXTRA_MERGER': False, 'RETURN_INTER': False, 'RETURN_STAGES': [2, 5, 8, 11], 'BACKBONE': {'TYPE': 'vit_base_patch16_224_ce', 'STRIDE': 16, 'MID_PE': False, 'SEP_SEG': False, 'CAT_MODE': 'direct', 'MERGE_LAYER': 0, 'ADD_CLS_TOKEN': False, 'CLS_TOKEN_USE_MODE': 'ignore', 'CE_LOC': [3, 6, 9], 'CE_KEEP_RATIO': [0.7, 0.7, 0.7], 'CE_TEMPLATE_RANGE': 'CTR_POINT'}, 'HEAD': {'TYPE': 'CENTER_NEIGHBOR', 'NUM_CHANNELS': 256}}, 'TRAIN': {'LR': 0.0004, 'WEIGHT_DECAY': 0.0001, 'EPOCH': 100, 'LR_DROP_EPOCH': 80, 'BATCH_SIZE': 32, 'NUM_WORKER': 10, 'OPTIMIZER': 'ADAMW', 'BACKBONE_MULTIPLIER': 0.1, 'GIOU_WEIGHT': 2.0, 'L1_WEIGHT': 5.0, 'FREEZE_LAYERS': [0], 'PRINT_INTERVAL': 50, 'VAL_EPOCH_INTERVAL': 20, 'GRAD_CLIP_NORM': 0.1, 'AMP': False, 'CE_START_EPOCH': 20, 'CE_WARM_EPOCH': 50, 'DROP_PATH_RATE': 0.1, 'SCHEDULER': {'TYPE': 'step', 'DECAY_RATE': 0.1}}, 'DATA': {'SAMPLER_MODE': 'causal', 'MEAN': [0.485, 0.456, 0.406], 'STD': [0.229, 0.224, 0.225], 'MAX_SAMPLE_INTERVAL': 200, 'TRAIN': {'DATASETS_NAME': ['GOT10K_train_full'], 'DATASETS_RATIO': [1], 'SAMPLE_PER_EPOCH': 60000}, 'VAL': {'DATASETS_NAME': ['GOT10K_official_val'], 'DATASETS_RATIO': [1], 'SAMPLE_PER_EPOCH': 10000}, 'SEARCH': {'SIZE': 384, 'FACTOR': 5.0, 'CENTER_JITTER': 4.5, 'SCALE_JITTER': 0.5, 'NUMBER': 1}, 'TEMPLATE': {'NUMBER': 1, 'SIZE': 192, 'FACTOR': 2.0, 'CENTER_JITTER': 0, 'SCALE_JITTER': 0}}, 'TEST': {'TEMPLATE_FACTOR': 2.0, 'TEMPLATE_SIZE': 192, 'SEARCH_FACTOR': 5.0, 'SEARCH_SIZE': 384, 'EPOCH': 100}} FPS: 12.440463573718764 multiprocessing.pool.RemoteTraceback: """ OSError: [Errno 28] 设备上没有空间

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/home/axky/anaconda3/envs/grm/lib/python3.9/multiprocessing/pool.py", line 125, in worker result = (True, func(*args, **kwds)) File "/home/axky/anaconda3/envs/grm/lib/python3.9/multiprocessing/pool.py", line 51, in starmapstar return list(itertools.starmap(args[0], args[1])) File "/media/axky/data/lmz/neight/trackers/ostrack/lib/test/evaluation/running.py", line 154, in run_sequence _save_tracker_output(seq, tracker, output) File "/media/axky/data/lmz/neight/trackers/ostrack/lib/test/evaluation/running.py", line 64, in _save_tracker_output save_bb(bbox_file, data) File "/media/axky/data/lmz/neight/trackers/ostrack/lib/test/evaluation/running.py", line 29, in save_bb np.savetxt(file, tracked_bb, delimiter='\t', fmt='%d') File "<__array_function__ internals>", line 200, in savetxt File "/home/axky/anaconda3/envs/grm/lib/python3.9/site-packages/numpy/lib/npyio.py", line 1620, in savetxt fh.close() OSError: [Errno 28] 设备上没有空间 """

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/media/axky/data/lmz/neight/trackers/ostrack/tracking/test.py", line 87, in main() File "/media/axky/data/lmz/neight/trackers/ostrack/tracking/test.py", line 78, in main run_tracker_neighbor(args.tracker_name, args.tracker_param, args.runid, args.dataset_name, seq_name, args.debug, File "/media/axky/data/lmz/neight/trackers/ostrack/tracking/test.py", line 56, in run_tracker_neighbor run_dataset(dataset, trackers, debug, threads, num_gpus=num_gpus) File "/media/axky/data/lmz/neight/trackers/ostrack/lib/test/evaluation/running.py", line 183, in run_dataset pool.starmap(run_sequence, param_list) File "/home/axky/anaconda3/envs/grm/lib/python3.9/multiprocessing/pool.py", line 372, in starmap return self._map_async(func, iterable, starmapstar, chunksize).get() File "/home/axky/anaconda3/envs/grm/lib/python3.9/multiprocessing/pool.py", line 771, in get raise self._value OSError: [Errno 28] 设备上没有空间

franktpmvu commented 3 months ago

你的錯誤訊息說你的設備沒有空間了 或許是你的硬碟滿了或者其他類似的原因

另外上面那一串並不是錯誤訊息 那只是系統資訊

Tracker: ostrack vitb_384_mae_ce_32x4_got10k_ep100_neighbor None , Sequence: GOT-10k_Test_000136 test config: {'MODEL': {'PRETRAIN_FILE': 'mae_pretrain_vit_base.pth', 'EXTRA_MERGER': False, 'RETURN_INTER': False, 'RETURN_STAGES': [2, 5, 8, 11], 'BACKBONE': {'TYPE': 'vit_base_patch16_224_ce', 'STRIDE': 16, 'MID_PE': False, 'SEP_SEG': False, 'CAT_MODE': 'direct', 'MERGE_LAYER': 0, 'ADD_CLS_TOKEN': False, 'CLS_TOKEN_USE_MODE': 'ignore', 'CE_LOC': [3, 6, 9], 'CE_KEEP_RATIO': [0.7, 0.7, 0.7], 'CE_TEMPLATE_RANGE': 'CTR_POINT'}, 'HEAD': {'TYPE': 'CENTER_NEIGHBOR', 'NUM_CHANNELS': 256}}, 'TRAIN': {'LR': 0.0004, 'WEIGHT_DECAY': 0.0001, 'EPOCH': 100, 'LR_DROP_EPOCH': 80, 'BATCH_SIZE': 32, 'NUM_WORKER': 10, 'OPTIMIZER': 'ADAMW', 'BACKBONE_MULTIPLIER': 0.1, 'GIOU_WEIGHT': 2.0, 'L1_WEIGHT': 5.0, 'FREEZE_LAYERS': [0], 'PRINT_INTERVAL': 50, 'VAL_EPOCH_INTERVAL': 20, 'GRAD_CLIP_NORM': 0.1, 'AMP': False, 'CE_START_EPOCH': 20, 'CE_WARM_EPOCH': 50, 'DROP_PATH_RATE': 0.1, 'SCHEDULER': {'TYPE': 'step', 'DECAY_RATE': 0.1}}, 'DATA': {'SAMPLER_MODE': 'causal', 'MEAN': [0.485, 0.456, 0.406], 'STD': [0.229, 0.224, 0.225], 'MAX_SAMPLE_INTERVAL': 200, 'TRAIN': {'DATASETS_NAME': ['GOT10K_train_full'], 'DATASETS_RATIO': [1], 'SAMPLE_PER_EPOCH': 60000}, 'VAL': {'DATASETS_NAME': ['GOT10K_official_val'], 'DATASETS_RATIO': [1], 'SAMPLE_PER_EPOCH': 10000}, 'SEARCH': {'SIZE': 384, 'FACTOR': 5.0, 'CENTER_JITTER': 4.5, 'SCALE_JITTER': 0.5, 'NUMBER': 1}, 'TEMPLATE': {'NUMBER': 1, 'SIZE': 192, 'FACTOR': 2.0, 'CENTER_JITTER': 0, 'SCALE_JITTER': 0}}, 'TEST': {'TEMPLATE_FACTOR': 2.0, 'TEMPLATE_SIZE': 192, 'SEARCH_FACTOR': 5.0, 'SEARCH_SIZE': 384, 'EPOCH': 100}} FPS: 12.440463573718764

這串是系統資訊

2609780105 commented 3 months ago

您好,有没有去掉卡尔曼滤波器的neighbortracker.py文件,因为FPS太低了,使得我的服务器GPU爆满。或者是有使得FPS帧率高点的方法。

franktpmvu commented 3 months ago

我想kalman filter並不會太影響速度,且FPS跟gpu ram也沒有關聯,但如果你想去除kalman filter的話,請將 https://github.com/franktpmvu/NeighborTrack/blob/d0cbb48c7596fd51488853e3e4ec8a1454c498fe/neighbortrack.py#L357 357到359行註解 https://github.com/franktpmvu/NeighborTrack/blob/d0cbb48c7596fd51488853e3e4ec8a1454c498fe/neighbortrack.py#L501 501行註解

https://github.com/franktpmvu/NeighborTrack/blob/d0cbb48c7596fd51488853e3e4ec8a1454c498fe/neighbortrack.py#L34 並且在設定的位置將kalman_neighbor_mode設為0

2609780105 commented 3 months ago

您好,首先我想输入两个模板图片,然后使用了循环。 def trackneighbor(self, image, info: dict = None): H, W, = image.shape self.frame_id += 1 torch.cuda.empty_cache() x_patch_arr, resize_factor, x_amask_arr = sample_target(image, self.state, self.params.search_factor, output_sz=self.params.search_size) # (x1, y1, w, h) search = self.preprocessor.process(x_patch_arr, x_amask_arr) with torch.no_grad(): x_dict = search if isinstance(self.z_dict_list, (list, tuple)): self.z_dict = [] for i in range(len(self.z_dict_list)): self.z_dict.append(self.z_dict_list[i].tensors) out_dict = self.network.forward(template=self.z_dict1.tensors, search=x_dict.tensors, ce_template_mask=self.box_mask_z)

这个部分,然后运行的时候,我的GPU内存从2553MiB直线飙升到了一万多MiB。

但是我在以下代码里使用循环,却没有这种情况。这是为什么呢? def track(self, image, info: dict = None): H, W, _ = image.shape self.frame_id += 1 torch.cuda.empty_cache() x_patch_arr, resize_factor, x_amask_arr = sample_target(image, self.state, self.params.search_factor, output_sz=self.params.search_size) # (x1, y1, w, h) search = self.preprocessor.process(x_patch_arr, x_amask_arr) with torch.no_grad(): x_dict = search if isinstance(self.z_dict_list, (list, tuple)): self.z_dict = [] for i in range(len(self.z_dict_list)): self.z_dict.append(self.z_dict_list[i].tensors) out_dict = self.network.forward(template=self.z_dict1.tensors, search=x_dict.tensors, ce_template_mask=self.box_mask_z)

franktpmvu commented 3 months ago

您好: 這兩串代碼我不能說很像,只能說除了名子以外其他地方根本一模一樣。我只能猜你引用的方式有誤或者你的輸入資料不同導致這個問題,或許你可以提供更多資訊讓我知道,感恩。

franktpmvu commented 3 months ago

這兩個function的主要區別是track_neighbor並不輸出最高得分的bbox 而是以一個threshold將高於該置信度的所有邊界框都輸出。也就是說track輸出單個邊界框,track_neighbor輸出多個邊界框,這是最大的差別。