【问题标题】:Different results in image classifier using JPG BMP使用 JPG BMP 的图像分类器的不同结果
【发布时间】:2018-12-06 19:28:13
【问题描述】:

我使用一堆 JPG 图像使用 Tensforflow 训练了一个图像分类器。 假设我有 3 个分类器,ClassifierA、ClassifierB、ClassifierC。

在测试分类器时,我在用作测试的 90% 的图像中完全没有问题。但在某些情况下,由于图像质量,我会出现错误分类。

例如下图是一样的,分别保存为BMP和JPG。由于格式质量,您会发现细微差别。

当我使用 tf.image.decode_bmp 测试 BMP 版本时,我得到了错误分类,比如说 ClassifierA 70%

当我使用 tf.image.decode_jpeg 测试 JPG 版本时,我得到了正确的 ClassifierB 90%

当我使用 tf.image.decode_jpeg 和 dct_method="INTEGER_ACCURATE" 测试 JPG 版本时,我得到了正确的版本,它的结果要好得多,ClassifierB 99%

这可能是什么问题? BMP 和 JPG 这样的区别,如果有解决办法怎么解决?

更新 1:我使用不同的效果重新训练了我的分类器,并随机更改了我保存图像的质量作为数据集。

现在,我得到了正确的输出,但百分比仍然变化很大,例如 BMP 为 44%,JPG 为 +90%

【问题讨论】:

    标签: tensorflow classification


    【解决方案1】:

    这是一个绝妙的问题,更是绝妙的观察。以后我会在自己的工作中用到它!

    我希望您刚刚发现了数据集的一个相当有趣的问题。您的模型似乎过度拟合特定于 JPG 压缩的功能。解决方案是增加数据增强。特别是,在各种格式之间随机转换您的训练样本。

    这个问题也让我觉得锐化和模糊操作会成为很好的数据增强功能。更改图像的颜色、对比度、旋转、缩放、方向和平移以增强训练数据集是很常见的,但我通常看不到使用模糊和锐度。我怀疑这两种数据增强技术将大大有助于自行解决您的问题。

    如果 OP(或其他阅读本文的人)不太熟悉“数据增强”是什么,我将对其进行定义。通常以各种方式扭曲您的训练图像以从您的(否则是有限的)数据集中生成无限独特的图像。例如,向左/向右随机翻转图像非常简单、常见,并且可以有效地将数据集翻倍。更改对比度和亮度设置会进一步改变您的图像。将这些和其他数据增强转换添加到您的管道中会创建一个更丰富的数据集,并训练一个对图像中这些常见变化更加稳健的网络。

    您使用的数据增强技术能够产生真实的变化,这一点很重要。例如,旋转图像是一种非常逼真的增强技术。如果您的训练图像是一只水平站立的猫,那么未来的样本很有可能是一只呈 25 度角的猫。

    【讨论】:

    • 我使用不同的效果重新训练了我的分类器,并随机改变了质量,我将使用的图像保存为数据集。现在,我得到了正确的输出,但百分比仍然变化很大,例如 BMP 为 44%,JPG 为 +90%
    • 当您说“百分比仍然看起来不错”时,我假设您的意思是分类器对特定预测的信心?因此,如果我理解,您通过进行数据增强得到了改进,但并不完美,对吧?我很惊讶数据增强并不能完全解决问题。我实际上不确定如何解决这个问题。
    • 没错,我获得了正确的预测,但在 BMP 和 JPG 之间仍有 +30% 的预测百分比。
    猜你喜欢
    • 2020-08-21
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2012-01-24
    • 2015-12-06
    • 2017-03-15
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多