我可以使用任何方法来识别“假” 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是否可以用于此问题,或者我的模型缺少某些东西?
答案 0 :(得分:1)
您应该尝试。
短消息可能是您可以使用CNN进行的,该CNN接受了关于放大/不放大的两类问题的培训。实际上,我会训练它甚至确定方法,因为这似乎是一个更简单的问题。我想您虽然需要更多图像。其次,在如此高分辨率的图像上训练CNN会让人头疼。
因此,我将采用以下方法:
(第1步)在来自大型图像的较低分辨率色块上构建数据集。因此4096×2160基本上由16个1024x540图像数据集组成,依此类推。为了使其切实可行,可以构建任何来源的分辨率为227x240的图像数据集。
(步骤2)将这些图像缩小和放大,就像处理高分辨率图像一样。对于这一步,我将不使用补丁本身,而是使用原始的高分辨率图像
(第3步)训练NN进行识别。
(第4步)为每张图片计算能很好地解决问题的信息(熵的好坏)
(第5步)建立一个分割模型,该模型从图像中选择最佳区域来解决问题。因此,哪幅227x240可以修补4k图像,从而帮助您确定缩小比例。分割不需要在全分辨率图像上训练。假设您将无法在均匀彩色图像区域上识别某些放大方法。
(循环),但在步骤1中使用分割模型来识别补丁。
答案 1 :(得分:0)
为此尝试GAN。它将帮助您解决此问题