首页 > 解决方案 > 如何识别放大的图像?

问题描述

有什么方法可以用来识别“假”4K 图像吗?即已从 720p/1080p 放大到 4K 的图像。

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

然后,我如何从“真正的 4K”图像中识别出这些从较低分辨率放大的图像?

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

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

感谢您的时间。

编辑:按照@CAFEBABE 的建议,我将这些 4K 图像(真实的、从 1080p 放大的 lanczos 和双三次放大)拆分为每个类别的 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 是否可以用于解决这个问题,或者我的模型是否遗漏了什么?

标签: tensorflowmachine-learningkerasdeep-learningcomputer-vision

解决方案


你应该试试。

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

因此我会遵循以下方法:

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

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

(step3) 训练一个 NN 进行识别。

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

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

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


推荐阅读