文章目录
简介
paper:TAO: A Large-Scale Benchmark for Tracking Any Object
code:TAO-Dataset/tao
这篇论文关注到了跟踪数据集普遍存在的一个问题就是:现有的跟踪数据集中的跟踪对象普遍是person
和vehicle
(如下图所示,作者统计了主流的跟踪数据集中样本种类的占比情况)。
这篇论文提出了一种样本种类更加丰富的可用于多目标跟踪任务和单目标跟踪任务的数据集TAO
和与之匹配的评测工具。
主要内容
TAO数据集特征
这篇论文提出的数据集TAO
包含833
个类别,其中488
个类别是LVIS
这个数据集中已有的标签,而另外345
个类别是LVIS
这个数据集之外的标签。
数据集TAO
中的数据来源于六个其他数据集:ArgoVerse
,BDD
,Charades
,LaSOT
,YFCC100M
,HACS
.
TAO
数据集中的标签类别大部分(95%
)属于LVIS
这个数据集的类别(关于LVIS
数据集:LVIS: A Dataset for Large Vocabulary Instance Segmentation)
TAO数据集标签制作流程
TAO
数据集标签制作的流程不同于传统的标签制作:
如上图所示,TAO
标签的标注分为三步:
- 对象挖掘和跟踪(
Object mininig and tracking
): 对于每个视频帧序列的标注,要求打标签的人将视频帧中所有运动的对象都标注出来 - 对象分类(
Object categrorization
): 标注程序给出LVIS
数据集已有的类别,让打标签的人给标注的对象分配类别,标注程序允许打标签的人给对象分配LVIS
数据集中不存在的类别 - 联合标签(
Federated "exhaustive" labeling
): 标注完一组视频帧序列后,标注程序列出没有标注完整的帧,并提示该帧中哪些标签没有标注
TAO数据集标签格式
TAO
数据集标签格式如下(摘自源码),大部分标签的格式与MS COCO类似。
Annotation file format:
{
"info" : info,
"images" : [image], #图像相关属性
"videos": [video], #视频帧相关属性
"tracks": [track], # {'category_id': 805, 'id': 72, 'video_id': 11}
"annotations" : [annotation],
"categories": [category], # { 'id': 1, 'name': 'acorn', 'synset': 'acorn.n.01',....}
"licenses" : [license],
}
info: As in MS COCO
image: {
"id" : int,
"video_id": int,
"file_name" : str,
"license" : int,
# Redundant fields for COCO-compatibility
"width": int,
"height": int,
"frame_index": int
}
video: {
"id": int,
"name": str, #记录视频的相对位置 比如 'train/YFCC100M/v_f69ebe5b731d3e87c1a3992ee39c3b7e'
"width" : int, #视频中的图像width
"height" : int, #视频中的图像height
"neg_category_ids": [int],
"not_exhaustive_category_ids": [int],
"metadata": dict, # Metadata about the video
}
track: {
"id": int, #跟踪任务ID
"category_id": int, #类别ID
"video_id": int #video ID
}
annotation: {
"image_id": int,
"track_id": int,
"bbox": [x,y,width,height], #[左上角x,左上角y,width,height]
"area": float,
# Redundant field for compatibility with COCO scripts
"category_id": int
}
category: {
#...
}
license: {
#...
}
评测细节
Oracles
的设置
为了分析单目标跟踪算法与多目标跟踪算法在TAO
数据集上的表现,这篇论文提出了两种Oracles
- first oracle
The first, a class oracle, computes the best matching between predicted and groundtruth tracks in each video. Predicted tracks that match to a groundtruth track with 3D IoU > 0.5 are assigned the category of their matched groundtruth track.
- second oracle
The second oracle computes the best possible assignment of per-frame detections to tracks, by comparing them with groundtruth. When doing so, class predictions for each detection are held constant.
Init first
和Init biggest
两种初始方式
Init first
和Init biggest
两种方式不同之处体现在两点:
- 跟踪器的初始化不同: 对于
Init first
,输入第一帧图像的bbox
对跟踪器进行初始化;对于Init biggest
,输入视频帧序列中最大的bbox
对跟踪器进行初始化; - 跟踪器的执行过程不同:对于
Init first
,跟踪器正常执行,即从第一帧依次跟踪到最后一帧;对于Init biggest
,跟踪器分两段跟踪,假设视频帧序列中最大的bbox
出现在第k
帧,对于前k
帧是从后往前逆序输入跟踪(Track backward
),对于第k
帧至最后一帧是从前往后顺序输入跟踪(Track forward
).
# Track forward
try:
if show_progress:
logging.info('Tracking forward')
#对于后半段,从前往后跟踪(Track forward)
boxes = do_track(frames[sot_init_frame:], output_forward_video)
except (ValueError, subprocess.CalledProcessError):
continue
# Track backward
if do_track_backward: #当使用biggest的时候为true
if show_progress:
logging.info('Tracking backward')
#对于前半段,从后往前跟踪(track backward)
track_frames = frames[first_annotated_frame:sot_init_frame+1][::-1]
try:
backward_boxes = do_track(track_frames, output_backward_video)
except ValueError:
continue
backward_boxes = backward_boxes[::-1]
assert np.all(backward_boxes[-1] == boxes[0])
boxes = np.vstack((backward_boxes[:-1], boxes))
TAO
评测流程
TAO
评测程序的执行流程可以分为两步:
- 在跟踪器上跑
TAO
测试集:首先读取TAO
的数据集,读取图片路径、bbox等数据,之后借助pysot
定义跟踪器并根据Init
的两种方式对跟踪器进行初始化,之后通过pysot
跑完所有数据,并将跟踪器的预测结果保存到文件results.json
。 - 对预测结果进行评测:首先读取预测结果
results.json
,并根据预先设置的oracle
、threshold
等对预测结果进行适当处理,最后计算相关的评测指标(AP
、mAP
等)
TAO
实验结果
这里,我对SiamRPN++
的结果进行了复现,采用pysot中提供的SiamRPN++
的siamrpn_r50_l234_dwxcorr
在val
数据集上进行了测试(使用THRESHOLD 0.7
),结果如下:
AP | AR | |
---|---|---|
Init first | 30.15 | 33.49 |
Init biggest | 36.08 | 37.67 |
论文中采用THRESHOLD 0.7 Init first
的AP
值是29.7
,复现结果是30.15
结果比较接近。