Tensorflow 高误报率和非最大抑制问题

标签 tensorflow object-detection false-positive object-detection-api non-maximum-suppression

我正在培训 Tensorflow 对象检测 在 Windows 10 上使用 fast_rcnn_inception_v2_coco 作为预训练模型。我在 Windows 10 上,在 NVIDIA GeForce GTX 1080、CUDA 9.0 和 CUDNN 7.0 上使用 tensorflow-gpu 1.6。

我的数据集仅包含一个对象“手枪”和 3000 张图像(2700 个训练集,300 个测试集)。图像的大小从 ~100x200 到 ~800x600。

我训练了这个模型 55k 次迭代,其中 mAP是 ~0.8 和 TotalLoss似乎收敛到 0.001。但是,看到评估,在同一个检测到的对象上有很多多个边界框(例如 thisthis ),以及很多误报( house detected as a pistol )。例如,在 this photo由我(后来应用模糊过滤器),该模型将人和汽车检测为手枪,以及正确检测。

数据集上传here ,连同 tfrecords 和标签映射。
我用过 this config file ,其中我唯一更改的是:num_classes 为 1、fine_tune_checkpoint、train 和 eval 的 input_path 和 label_map_path 以及 num_examples。
由于我认为多个框是非最大抑制问题,因此我将 score_threshold(第 73 行)从 0 更改为 0.01,将 iou_threshold(第 74 行)从 1 更改为 0.6。使用标准值,结果比这更糟糕。

我该怎么做才能获得良好的检测结果?我应该改变什么?也许我错过了一些关于参数调整的东西......

谢谢

最佳答案

我认为在深入研究参数调整(即提到的 score_threshold )之前,您必须检查您的数据集。

我没有检查您共享的整个数据集,但从高级角度来看,我发现的主要问题是 大多数的图像非常小并且具有高度可变的纵横比。

在我看来,这与您的配置文件的这一部分发生冲突:

image_resizer {
  keep_aspect_ratio_resizer {
    min_dimension: 600
    max_dimension: 1024
  }
}

如果获取数据集的其中一张图像并手动应用该转换,您将看到小图像的结果非常嘈杂,而具有不同纵横比的许多图像的结果非常变形。

我强烈建议您使用更清晰的图像重新构建数据集,并尝试使用填充、裁剪或其他策略对具有不寻常纵横比的图像进行预处理。

如果您想坚持使用小图像,您至少必须更改 image_resizer 的最小和最大尺寸。但是,根据我的经验,这里最大的问题是数据集,我会花时间尝试解决这个问题。

钯。

如果我们认为它来自数据集的一个完全不同的域,我不认为房子误报是一个大问题。

您可能可以调整最小置信度以将检测视为真阳性并将其删除。

如果你把 COCO 的当前获胜者和像卡通一样的奇怪图像喂给它,你会发现它会产生很多误报。

因此,这更像是当前对象检测方法的一个问题,它对域更改不具有鲁棒性。

关于Tensorflow 高误报率和非最大抑制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687809/

相关文章:

python-2.7 - 如何计算 tensorflow 中的马修斯相关系数

python - Tensorflow中复杂的切片操作

python - 将注释作为基本事实与图像一起提供给模型

vnc - 我的程序从 AVG 得到误报

python - 来自太阳的运动检测照明

c - Helgrind (Valgrind) 和 OpenMP (C) : avoiding false positives?

python - 训练神经网络时损失值为0

python - 如何使用我的分类网络检测多个对象?

opencv - SIFT 匹配和识别?

c++ - 如何改进基于HOG特征的SVM分类器进行行人检测?