仅包含不匹配的车辆预测的视图。如果你正在使用本演示中的notebook版本,则将看到做出不匹配预测的最常见原因是标签不匹配。这并不奇怪,因为所有这三个类都在超类vehicle中。卡车和汽车在人工注释和模型预测中常常混淆。但是,除了容易混淆之外,让我们来看一下我们的预测视图中的前两个示例。
图片右侧的截断汽车的边框太小。预测要准确得多,但没有达到IoU阈值。来自COCO 2017检测数据集的原始图像。COCO 2017检测数据集:https://cocodataset.org/#detection-2017上面的图片中发现的第一个样本有一个注解错误。图像右侧的截断汽车的真实值边界框(粉红色)太小。预测(黄色)更为准确,但未达到IoU阈值。
树木阴影下的汽车预测箱是正确的,但没有在真实情况中标出。在我们不匹配的预测视图中找到的第二个样本包含另一种注释错误。实际上,这是一个更为严重的问题。图像中正确预测的边界框(黄色)没有相应的真实性。在树荫下的汽车根本没有标注。手动解决这些错误超出了本示例的范围,因为它需要很大的反馈回路。FiftyOne致力于使反馈回路成为可能(且高效),但现在让我们集中讨论如何回答有关模型性能的问题,并确认我们的模型确实经常混淆公共汽车、小汽车和卡车。我们将通过重新评估合并到单个vehicle标签中的公共汽车,小汽车和卡车的预测来做到这一点。下面的代码创建了这样一个视图,将视图克隆到一个单独的数据集中,这样我们将获得单独的评估结果,并评估合并的标签。vehicle_labels = {
label: "vehicle" for label in ["bus","car", "truck"]
}
merged_vehicles_dataset = (
vehicles
.map_labels("ground_truth", vehicle_labels)
.map_labels("predictions", vehicle_labels)
.exclude_fields(["tp_iou_0_75", "fp_iou_0_75", "fn_iou_0_75"])
.clone("merged_vehicles_dataset")
)
evaluate_detections(
merged_vehicles_dataset, "predictions", gt_field="ground_truth", iou=0.75)
session.dataset = merged_vehicles_dataset
仅包含从车辆视图克隆的合并车辆的数据集。现在,我们获得了原始分割的公交车,汽车和卡车检测以及合并检测的评估结果。现在,我们可以简单地比较原始评估中的真阳性数与合并评估中的真阳性数。original_tp_count = vehicles.sum("tp_iou_0_75")
merged_tp_count = merged_vehicles_dataset.sum("tp_iou_0_75")
print("Original Vehicles True Positives: %d" % original_tp_count)
print("Merged Vehicles True Positives: %d" % merged_tp_count)
我们可以看到,在合并公共汽车、汽车和卡车标签之前,有1431个真阳性。将三种标签合并在一起产生了1515个真阳性结果。Original Vehicles True Positives: 1431
Merged Vehicles True Positives: 1515
我们能够证实我们的假设!尽管很明显。但是,我们现在有了以数据为基础的理解,可以了解此模型的常见故障模式。现在,整个实验可以与其他人共享。在notebook中,以下内容将截屏最后一个活动的App窗口,因此其他人可以静态查看所有输出。session.freeze() # Screenshot the active App window for sharing
总结
notebook电脑已成为执行和共享数据科学的流行媒体,尤其是在计算机视觉领域。但是,从历史上看,使用视觉数据集一直是一个挑战,我们希望通过像FiftyOne这样的开放工具来应对这一挑战。notebook革命在很大程度上仍处于起步阶段,并将继续发展并成为在社区中执行和交流ML项目的更有说服力的工具,这在一定程度上归功于FiftyOne!感谢你的关注!该FiftyOne项目上可以在GitHub上找到。