如何识别放大的图像?

时间:2019-12-05 06:01:50

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

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

我尝试搜索,但主要发现的方法只是使用Billinear,Bicubic,Lanczos,SRCNN和EDSR等不同方法来放大图像。

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

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

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

谢谢您的时间。

编辑:按照@CAFEBABE的建议,我将这些4K图像(从1080p缩放的真实,lanczos和双三次缩放的像素)分成51200个240x135的图像,并将它们放入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是否可以用于此问题,或者我的模型缺少某些东西?

2 个答案:

答案 0 :(得分:1)

您应该尝试。

短消息可能是您可以使用CNN进行的,该CNN接受了关于放大/不放大的两类问题的培训。实际上,我会训练它甚至确定方法,因为这似乎是一个更简单的问题。我想您虽然需要更多图像。其次,在如此高分辨率的图像上训练CNN会让人头疼。

因此,我将采用以下方法:

(第1步)在来自大型图像的较低分辨率色块上构建数据集。因此4096×2160基本上由16个1024x540图像数据集组成,依此类推。为了使其切实可行,可以构建任何来源的分辨率为227x240的图像数据集。

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

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

(第4步)为每张图片计算能很好地解决问题的信息(熵的好坏)

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

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

答案 1 :(得分:0)

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