tensorflow - 如何识别放大的图像?
问题描述
有什么方法可以用来识别“假”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 是否可以用于解决这个问题,或者我的模型是否遗漏了什么?
解决方案
你应该试试。
短信可能你可以用一个 CNN 来做,训练有素的两类问题升级/未升级。我实际上会训练它甚至识别方法,因为它似乎是一个更容易的问题。我想你需要更多的图像。其次,在如此大的分辨率图像上训练 CNN 是一件令人头疼的事情。
因此我会遵循以下方法:
(步骤 1)在来自大规模图像的低分辨率补丁上构建数据集。因此,一个 4096 × 2160 基本上由 16 个 1024x540 图像数据集组成,依此类推。为了使其实际可训练,从任何来源构建分辨率为 227x240 的图像数据集。
(第 2 步)像处理高分辨率图像一样缩小和放大这些图像。对于这一步,我不会使用补丁本身,而是使用原始的高分辨率图像
(step3) 训练一个 NN 进行识别。
(step4) 计算每幅图像谁能够很好地解决问题(熵好与坏)
(step5) 建立一个分割模型,从图像中选择最佳区域来解决问题。因此,哪些 227x240 的 4k 图像可以帮助您识别缩小比例。分割不需要在全分辨率图像上进行训练。假设您将无法识别均匀彩色图像区域的某些放大方法。
(循环),但在步骤 1 中使用分割模型来识别补丁。
推荐阅读
- excel - 十月的最后一个星期六
- c++ - 为什么我的数组只接受它们中的第一个数字?
- r - R: purrr: 支付 %.%er: walk 是否通过了整个管道向量,而不是元素?
- git - Android Studio 上 Git 的多个 Commit 有什么不同?
- javafx - 将我的文本字段更改为大写/小写未按预期工作
- c# - SendKeys.SendWait() 不能在所有计算机上始终如一地工作
- mapbox - 如何在地图上动态显示标注?
- javascript - 使用电子和 reactjs 时设置 WebRTC 对等连接
- python - 使用图像作为键
- ruby-on-rails - 如果参数值为空/缺失,如何停止创建?