Files
Grounded-SAM-2/lib/test/evaluation/lasotextensionsubsetdataset.py
2024-11-19 22:12:54 -08:00

211 lines
8.5 KiB
Python

import numpy as np
from lib.test.evaluation.data import Sequence, BaseDataset, SequenceList
from lib.test.utils.load_text import load_text
class LaSOTExtensionSubsetDataset(BaseDataset):
"""
LaSOT test set consisting of 280 videos (see Protocol-II in the LaSOT paper)
Publication:
LaSOT: A High-quality Large-scale Single Object Tracking Benchmark
Heng Fan, Hexin Bai, Liting Lin, Fan Yang, Peng Chu, Ge Deng, Sijia Yu, Harshit, Mingzhen Huang, Juehuan Liu,
Yong Xu, Chunyuan Liao, Lin Yuan, Haibin Ling
IJCV, 2020
https://arxiv.org/pdf/2009.03465.pdf
Download the dataset from http://vision.cs.stonybrook.edu/~lasot/download.html
"""
def __init__(self):
super().__init__()
self.base_path = self.env_settings.lasot_extension_subset_path
self.sequence_list = self._get_sequence_list()
self.clean_list = self.clean_seq_list()
def clean_seq_list(self):
clean_lst = []
for i in range(len(self.sequence_list)):
cls, _ = self.sequence_list[i].split('-')
clean_lst.append(cls)
return clean_lst
def get_sequence_list(self):
return SequenceList([self._construct_sequence(s) for s in self.sequence_list])
def _construct_sequence(self, sequence_name):
class_name = sequence_name.split('-')[0]
anno_path = '{}/{}/{}/groundtruth.txt'.format(self.base_path, class_name, sequence_name)
ground_truth_rect = load_text(str(anno_path), delimiter=',', dtype=np.float64)
occlusion_label_path = '{}/{}/{}/full_occlusion.txt'.format(self.base_path, class_name, sequence_name)
# NOTE: pandas backed seems super super slow for loading occlusion/oov masks
full_occlusion = load_text(str(occlusion_label_path), delimiter=',', dtype=np.float64, backend='numpy')
out_of_view_label_path = '{}/{}/{}/out_of_view.txt'.format(self.base_path, class_name, sequence_name)
out_of_view = load_text(str(out_of_view_label_path), delimiter=',', dtype=np.float64, backend='numpy')
target_visible = np.logical_and(full_occlusion == 0, out_of_view == 0)
frames_path = '{}/{}/{}/img'.format(self.base_path, class_name, sequence_name)
frames_list = ['{}/{:08d}.jpg'.format(frames_path, frame_number) for frame_number in range(1, ground_truth_rect.shape[0] + 1)]
target_class = class_name
return Sequence(sequence_name, frames_list, 'lasot_extension_subset', ground_truth_rect.reshape(-1, 4),
object_class=target_class, target_visible=target_visible)
def __len__(self):
return len(self.sequence_list)
def _get_sequence_list(self):
sequence_list = ['atv-1',
'atv-2',
'atv-3',
'atv-4',
'atv-5',
'atv-6',
'atv-7',
'atv-8',
'atv-9',
'atv-10',
'badminton-1',
'badminton-2',
'badminton-3',
'badminton-4',
'badminton-5',
'badminton-6',
'badminton-7',
'badminton-8',
'badminton-9',
'badminton-10',
'cosplay-1',
'cosplay-10',
'cosplay-2',
'cosplay-3',
'cosplay-4',
'cosplay-5',
'cosplay-6',
'cosplay-7',
'cosplay-8',
'cosplay-9',
'dancingshoe-1',
'dancingshoe-2',
'dancingshoe-3',
'dancingshoe-4',
'dancingshoe-5',
'dancingshoe-6',
'dancingshoe-7',
'dancingshoe-8',
'dancingshoe-9',
'dancingshoe-10',
'footbag-1',
'footbag-2',
'footbag-3',
'footbag-4',
'footbag-5',
'footbag-6',
'footbag-7',
'footbag-8',
'footbag-9',
'footbag-10',
'frisbee-1',
'frisbee-2',
'frisbee-3',
'frisbee-4',
'frisbee-5',
'frisbee-6',
'frisbee-7',
'frisbee-8',
'frisbee-9',
'frisbee-10',
'jianzi-1',
'jianzi-2',
'jianzi-3',
'jianzi-4',
'jianzi-5',
'jianzi-6',
'jianzi-7',
'jianzi-8',
'jianzi-9',
'jianzi-10',
'lantern-1',
'lantern-2',
'lantern-3',
'lantern-4',
'lantern-5',
'lantern-6',
'lantern-7',
'lantern-8',
'lantern-9',
'lantern-10',
'misc-1',
'misc-2',
'misc-3',
'misc-4',
'misc-5',
'misc-6',
'misc-7',
'misc-8',
'misc-9',
'misc-10',
'opossum-1',
'opossum-2',
'opossum-3',
'opossum-4',
'opossum-5',
'opossum-6',
'opossum-7',
'opossum-8',
'opossum-9',
'opossum-10',
'paddle-1',
'paddle-2',
'paddle-3',
'paddle-4',
'paddle-5',
'paddle-6',
'paddle-7',
'paddle-8',
'paddle-9',
'paddle-10',
'raccoon-1',
'raccoon-2',
'raccoon-3',
'raccoon-4',
'raccoon-5',
'raccoon-6',
'raccoon-7',
'raccoon-8',
'raccoon-9',
'raccoon-10',
'rhino-1',
'rhino-2',
'rhino-3',
'rhino-4',
'rhino-5',
'rhino-6',
'rhino-7',
'rhino-8',
'rhino-9',
'rhino-10',
'skatingshoe-1',
'skatingshoe-2',
'skatingshoe-3',
'skatingshoe-4',
'skatingshoe-5',
'skatingshoe-6',
'skatingshoe-7',
'skatingshoe-8',
'skatingshoe-9',
'skatingshoe-10',
'wingsuit-1',
'wingsuit-2',
'wingsuit-3',
'wingsuit-4',
'wingsuit-5',
'wingsuit-6',
'wingsuit-7',
'wingsuit-8',
'wingsuit-9',
'wingsuit-10']
return sequence_list