问题描述

在进行检测算法对比实验时,发现检测算法的mAP不高,Faster R-CNN、Retinanet只有20左右mAP,这与大部分的论文中给出的数据不符。于是开始排查代码、数据集最终发现是在数据可视化时,图像中丢失了大量的GT框。

目标框丢失

诡异的是,我重新实现了一个可视化函数,用同一标注文件进行可视化时,这些框竟然可以被正确标注!

自己实现的可视化

问题排查

排查了数据集、模型、配置文件最后将问题定位到了config/_base_/datasets下的数据集配置中

在数据集配置中有这么一项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dataset=dict(
type='RepeatDataset',
times=3,
dataset=dict(
type='ConcatDataset',
ignore_keys=['dataset_type'],
datasets=[
dict(
type=dataset_type,
data_root=data_root,
ann_file='VOC2007/ImageSets/Main/train.txt',
data_prefix=dict(sub_data_root='VOC2007/'),
filter_cfg=dict(
filter_empty_gt=True, min_size=32, bbox_min_size=32),
pipeline=train_pipeline,
backend_args=backend_args)
])))

就是这个filter_cfg将小于预定的标注框过滤掉,在我的这个任务中,目标尺度与图像尺度比例过大,所以导致被滤除。

改为:

1
filter_cfg=dict(filter_empty_gt=True, min_size=0, bbox_min_size=0)

正确标注

显示正常!