【问题标题】:How can I identify upscaled images?如何识别放大的图像?
【发布时间】:2019-12-05 06:01:50
【问题描述】:

我是否可以使用任何方法来识别“虚假”4K 图像?即从 720p/1080p 放大到 4K 的图像。

我尝试过搜索,但我主要只找到了使用不同方法(如 Billinear、Bicubic、Lanczos、SRCNN 和 EDSR)来放大图像的方法。

我怎样才能从“真正的 4K”图像中识别出这些从较低分辨率放大的图像?

我目前有一个包含 200 个“真实”4K 图像的数据集,我将使用上述方法之一再次缩小和放大这些图像。有没有一种方法可以训练模型来区分给定图像数据集中的这些图像?这应该给我至少 400 张图片,有 2 个类别。真 4K 和升级 4K。

是否有我应该使用的机器学习模型?到目前为止,我是计算机视觉、数字图像处理、机器学习领域的新手,并且只有卷积神经网络图像分类器的经验。可以使用 CNN 来训练模型以识别此类图像吗?还是机器学习方法不适合这种情况?

感谢您的宝贵时间。

编辑:按照@CAFEBABE 的建议,我将这些 4K 图像(真实的、lanczos 放大的和从 1080p 放大的双三次图像)拆分为每个类别的 240x135 的 51200 张图像,并将它们放入 CNN 中,如下所示。

model = Sequential() 

model.add(Conv2D(32, (3,3), input_shape = (135, 240, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

# 2 hidden layers
model.add(Flatten())
model.add(Dense(64))
model.add(Activation("relu"))

model.add(Dense(64))
model.add(Activation("relu"))

# The output layer with 3 neurons, for 3 classes
model.add(Dense(3))
model.add(Activation("softmax"))

# Compiling the model using some basic parameters
model.compile(loss="sparse_categorical_crossentropy"
              ,optimizer="adam"
              ,metrics=["accuracy"])

但是,我的模型似乎不是基于放大学习,而是尝试根据图像是什么进行分类;我得到了 33% 的准确率(纯随机)

CNN 是否可以用于解决这个问题,或者我的模型是否遗漏了什么?

【问题讨论】:

    标签: tensorflow machine-learning keras deep-learning computer-vision


    【解决方案1】:

    你应该试试。

    短消息可能您可以使用 CNN 来完成,并针对升级/未升级的两类问题进行了训练。我实际上会训练它甚至识别方法,因为它似乎是一个更容易的问题。我想你需要更多的图像。其次,在如此大的分辨率图像上训练 CNN 是一件令人头疼的事情。

    因此我将遵循以下方法:

    (第 1 步)在来自大规模图像的低分辨率补丁上构建数据集。所以一个 4096 × 2160 基本上由 16 个 1024x540 的图像数据集组成,依此类推。为了使其可实际训练,请构建来自任何来源的分辨率为 227x240 的图像数据集。

    (步骤 2)缩小和放大这些图像,就像处理高分辨率图像一样。对于这一步,我不会使用补丁本身,而是使用原始的高分辨率图像

    (步骤 3)训练 NN 进行识别。

    (step4) 计算每张图像谁能够很好地解决问题(熵好与坏)

    (step5) 建立一个分割模型,从图像中选择最佳区域来解决问题。因此,哪些 227x240 的 4k 图像可以帮助您识别缩小比例。分割不需要在全分辨率图像上进行训练。假设您将无法识别均匀彩色图像区域的某些放大方法。

    (循环),但在步骤 1 中使用分割模型来识别补丁。

    【讨论】:

    • 在第 2 步中,在我缩小并放大原始高分辨率图像后,我还应该将这些放大图像拆分为 16 个 1024x520 图像,以便我从第 1 步和第 2 步获得相似的图像?
    • 我会选择更多/甚至更小的补丁。训练 1024x520 的 NN 需要非常长的时间。在非常小的图像区域上可以看到缩放的伪影。棘手的部分是找到正确的区域。这取决于算法。大多数算法产生“平滑的结果”。即使在例如锐化之后,这种平滑度也会保持不变。然而,为了避免这种平滑度,可能会在技巧检测中添加人工细节(噪声)。我期待 GAN 做某事。沿着这条线。
    • 所以我刚刚测试了这一点:从我的 200 个 4K 图像数据集中,我将其拆分为 51200 个 240x135 图像,以及我用 lanczos 和 bicubic 缩小和放大的相同图像3 个不同的类别。放到 CNN 模型中,模型好像没有在学习,给了我 33%(纯随机) 机器学习有没有别的办法呢?
    • 没有击败零假设是非常令人惊讶的。要检查管道,我建议进一步缩小规模。也使用双线性插值作为基线。在某些时候它应该是可能的。在双三次插值中,4x4 网格应该有一定的关系。这个恕我直言还暗示了卷积核大小
    • 延伸:你是在训练集还是在测试集上实现的?
    【解决方案2】:

    为此尝试 GAN。它将帮助您解决这个问题

    【讨论】:

    • 过去一个小时一直在阅读有关 GAN 的信息,看来这正是我正在寻找的。干杯
    • 是的,正是我所说的
    • GAN 应该如何帮助解决这个问题? GAN 将帮助您构建一种 UpScale 图像的方法,使其无法使用 CNN 或任何其他 NN 进行识别
    • 看来我错了——我认为鉴别器(用 GAN 中的生成器训练)可以单独使用,以识别放大后的图像是否是“真正的 4K 图像”。
    • GAN 特征描述符可以用来做这个预测
    猜你喜欢
    • 2017-12-22
    • 2020-03-17
    • 2021-05-03
    • 2017-03-11
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多