Tensorflow 对象检测 API 的数据增强是不是会产生比原始样本更多的样本?

Posted

技术标签:

【中文标题】Tensorflow 对象检测 API 的数据增强是不是会产生比原始样本更多的样本?【英文标题】:Do data augmentations by Tensorflow Object Detection API result in more samples than original?Tensorflow 对象检测 API 的数据增强是否会产生比原始样本更多的样本? 【发布时间】:2019-05-14 03:27:53 【问题描述】:

假设我的原始原始数据集有 100 张图像。我应用了random_horizontal_flip 数据增强,默认情况下水平翻转的概率为 50%。所以只是为了举例,假设它翻转了 100 张图像中的 50 张。所以,

    这是否意味着我的算法现在将使用 150 个图像(100 个原始版本和 50 个翻转版本)进行训练,还是意味着它仍将使用 100 个图像进行训练,但其中 50 个将是原始图像的翻转版本? 问题 #1 的答案是否可以推广到 Tensorflow 对象检测 API 提供的所有数据增强选项?

我阅读了尽可能多的官方文档,并查看了preprocessor code,但找不到我的答案。

【问题讨论】:

如果是随机翻转,有 50% 的机会,这意味着你的数据集最终会翻倍,因为每张图像在多次迭代后至少会翻转一次。 @Richard_wth 有道理,非常感谢。 【参考方案1】:

默认的增强概率为 50%,独立应用于每个图像。训练模型/算法的图像数量取决于 epoch 的数量。

假设您的批量大小为 1,并且 epoch 总数为 100: 您的算法将在 100 张图像上进行训练,其中 50 张将是原始图像的翻转版本。在这种情况下,模型将看不到原始的 50 张图像,因为您的 epoch 太低了。

假设您的批量大小为 1,并且 epoch 总数为 200: 您的算法将在 200 张图像上进行训练,其中 100 张将是原始图像的翻转版本。

因此,只要您的 epoch 大小不限制您的数据集,以 50% 的概率,您将看到一种效果,就好像您通过翻转每个项目使数据集翻倍一样。

除了水平翻转之外,如果您还添加垂直翻转 (random_vertical_flip),您的数据集将增加三倍。

【讨论】:

以上是关于Tensorflow 对象检测 API 的数据增强是不是会产生比原始样本更多的样本?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 对象检测 api:如何使用 imgaug 进行增强?

Tensorflow 对象检测 API:TensorBoard 中损坏的训练图像

可视化增强的火车图像 [tensorflow object detection api]

具有奇怪检测结果的 TensorFlow 对象检测 api

Tensorflow 对象检测 API 中的过拟合

Tensorflow 对象检测 API - 验证丢失行为