我正在尝试评估我的视频对象检测模块,为此我正在使用InageNet VID数据集。在某个时候,我正面临着评估包含零个对象的框架的情况。表示此帧中没有地面实况bbox(这很好,因为我们正在谈论视频对象检测)。
因为,我正在使用的模块至少要有1个bbox出现,所以我想知道ImageNet对这些情况的官方处理方式是什么。我发现this description显然并不详尽,可能在ImageNet网站中提供了一些观点,指出:
评估指标与目标检测任务相同, 表示未注释的对象将受到处罚, 重复检测(同一对象实例的两个注释)。
(原文如此,错别字来自原文)
没有提到上述情况。由于这是一个简单的描述,因此我不确定它是否涵盖所有边缘情况。通常,在单个图像对象检测中,这不是问题,因为评估样本始终包含某些对象。但是在这种情况下,这是否意味着我应该完全忽略那些帧?
此外,检查this repository有关对象检测指标(顺便说一句是超级分析)的,没有gt的情况似乎属于关于假阳性(FP)的一般情况。在这种情况下,交集将为0(因为不存在gt bbox),而 Union 将只是一个与FP bbox相等的非零数字,因此,IoU = 0
那么,官方ImageNet如何处理这些案件?我对这里的合理选择不感兴趣,只是对正式版本不感兴趣。
答案 0 :(得分:1)
我刚刚浏览了ImageNet VID 2015评估代码,该代码是从UNC的评估工具包中获得的。
评估涉及精度和召回率,因此需要为每个GT盒/检测对或实例计算TP,FP和FN。 IoU计算纯粹用于确定是否进行了有效的检测。
对于没有GT框且没有检测到的帧:由于我们没有记录真实的负片,因此对计算没有影响。
对于没有GT盒但有一些检测的帧:在eval_vid_detections.m
的第231行中为每个帧捕获了这些误报:
if kmax > 0
tp(j) = 1;
gt_detected(kmax) = 1;
else
fp(j) = 1;
end
对于具有GT盒但没有检测到的帧:当首次在第79行num_pos_per_class(c) = num_pos_per_class(c) + 1;
上加载GT数据时,将对这些GT盒进行计数。稍后在第266行上计算召回率时使用此方法:recall{c}=(tp/num_pos_per_class(c))';
因此,如果您的框架中没有检测到物体且没有GT盒,则可以放心地忽略它。
顺便说一句,请注意每个实例的检测阈值设置如下:
thr = (gt_w.*gt_h)./((gt_w+pixelTolerance).*(gt_h+pixelTolerance));
gt_obj_thr{i} = min(defaultIOUthr,thr);
其中pixelTolerance = 10
。这对小物体有一定的促进作用。
答案 1 :(得分:0)
如果应该具有GT批注的对象缺少批注,该怎么办?
例如ILSVRC2015_val_00000001/000266.JPEG
显然有一个乌龟(实际上直到000265.JPEG
所有帧都具有乌龟的相应注释),但是相应的注释文件ILSVRC2015_val_00000001/000266.xml
没有任何注释
在我的分析中,验证数据集中4046
中有176126
帧缺少GT注释。尽管其中包含一个对象,该对象属于ImageNetVID的30
类别之一,但大多数这些框架都没有GT注释。