gpt4 book ai didi

python - 如何使用预训练的神经网络处理灰度图像?

转载 作者:太空狗 更新时间:2023-10-29 22:05:20 25 4
gpt4 key购买 nike

我有一个包含灰度图像的数据集,我想在这些图像上训练最先进的 CNN。我非常想微调一个预训练模型(比如那些 here )。

问题是几乎所有我能找到权重的模型都是在包含 RGB 图像的 ImageNet 数据集上训练的。

我不能使用其中一个模型,因为它们的输入层需要一批形状 (batch_size, height, width, 3)(64, 224, 224, 3) 在我的例子中,但我的图像批处理是 (64, 224, 224)

有什么方法可以让我使用其中一个模型?我考虑过在加载权重并添加自己的权重后删除输入层(就像我们对顶层所做的那样)。这种做法是否正确?

最佳答案

模型的架构无法改变,因为权重已经针对特定的输入配置进行了训练。用你自己的替换第一层几乎会使其余的权重变得无用。

-- 编辑:Prune 建议的详细说明--
构建 CNN 的目的是,随着它们的深入,它们可以从前几层提取的低级特征中提取高级特征。通过移除 CNN 的初始层,您正在破坏特征的层次结构,因为后续层将不会接收它们应该作为输入的特征。在您的情况下,第二层已经过训练以期望第一层的特征。通过用随机权重替换第一层,您实际上是在丢弃在后续层上完成的所有训练,因为它们需要重新训练。我怀疑他们能否保留在初始培训中学到的任何知识。
---结束编辑---

不过,有一种简单的方法可以让您的模型处理灰度图像。您只需要使图像看起来 为 RGB。最简单的方法是在新维度上重复图像数组 3 次。因为您将在所有 3 个 channel 上拥有相同的图像,所以模型的性能应该与在 RGB 图像上的性能相同。

numpy 中可以像这样轻松完成:

print(grayscale_batch.shape)  # (64, 224, 224)
rgb_batch = np.repeat(grayscale_batch[..., np.newaxis], 3, -1)
print(rgb_batch.shape) # (64, 224, 224, 3)

它的工作方式是首先创建一个新维度(放置 channel ),然后在这个新维度上将现有数组重复 3 次。

我也很确定 keras 的 ImageDataGenerator可以将灰度图像加载为 RGB。

关于python - 如何使用预训练的神经网络处理灰度图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51995977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com