我正在培训 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。但是,看到评估,在同一个检测到的对象上有很多多个边界框(例如 this 和 this ),以及很多误报( 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/