增强人造图像看起来像真实图像以进行TF对象检测

时间:2019-02-08 14:07:40

标签: python image opencv dataset object-detection-api

我正在使用来自Tensorflow Object Detection API的Faster R-CNN Inception ResNet v2模型来训练CNN以进行安全标志检测。由于我没有真实的图像数据集,因此我编写了一个代码,该代码创建了一个人工数据集,该数据集由来自公共可用数据集(GTSDB,KITTI等)的计算机绘制的标志图像和真实世界的背景图像组成。虽然训练有素的模型在看不见的人造图像上效果很好,但在我用iPhone 5SE拍摄的真实测试图像上效果不佳。

我已经有了来自imgaug(https://imgaug.readthedocs.io/en/latest/index.html)的各种数据增强技术,并在互联网上寻找解决方案,但对于现实世界的图像却没有成功。

将测试图像调整为接近训练图像的大小并将其转换为.png也没有任何作用。

我用于训练的一幅人工图像(尺寸:640x480,格式:.png): enter image description here

以及其中一张用于测试模型的真实测试图片(尺寸:3024x4032,格式:.JPG): enter image description here

我的想法是我的图像与真实世界的图像距离不够近,因此,对真实世界的图像分类不起作用。另一个想法是,我的数据集没有包含足够的“正常”(不是经过大量增强的图像,没有经过大量的高斯噪声,旋转,缩放等增强)训练图像。 有什么想法可以使我的训练图像更加真实吗?也欢迎任何其他输入。

1 个答案:

答案 0 :(得分:1)

我们在公司做了类似的事情。一般来说,这是一个坏主意,只有在没有其他方法可以获取此类数据时才应使用此方法。确实,花一周时间注释现实世界的数据将为您带来更好的结果。

但是,如果您希望采用这种方法,以下是我们发现有用的提示:

  • 尝试巧妙地放置人造物体,因此请使用接近其亮度,清晰度等的背景,这样看起来会更加自然
  • 将标志放置在适当的位置,例如墙壁上,而不是道路上
  • 冻结特征提取器网络
  • 使用较低的学习率(类似于5e-07)。

这些只是针对过度拟合的建议。

此外,我可以看到火车和测试仪上的分辨率差异很大。在将图像输入模型之前,手动调整测试集的大小。