在VGG神经网络中放置和获取大图像的策略



我使用的是一种使用VGG(神经网络(的基于transfert风格的深度学习方法。后者适用于小尺寸(512x512像素(的图像,但当输入图像较大(尺寸>1500px(时,它会产生失真的结果。该方法的作者建议将输入的大图像分割成多个部分,然后将样式转移到第1部分,然后再转移到第2部分,最后将这两个部分连接起来,以获得最终的大结果图像,因为VGG是为小图像制作的。。。这种方法的问题在于,所得到的图像将在部分"不一致"的区域的水平上具有一些不一致的区域;"胶合";。如何更正这些区域?这是一种替代这种划分方法的方法吗?

欢迎来到SO,jeanluc。第一个问题很好。

当你说VGG时,我想你指的是VGG-16。这种体系结构最终使用完全连接的层,这意味着你只能将其用于特定大小的图像。我相信ImageNet的默认值是224x224像素。

如果您想在不进行修改的情况下使用VGG-16,则必须使用此大小的图像。然而,许多人最终会删除完全连接的层(尤其是在风格转换的情况下(,以便以他们想要的任何大小进行填充。

有尺码吗?好吧,你可能想确保图像是32的倍数,因为VGG-16附带了5个MaxPooling操作,每次都是一半的维度。

但仅仅因为网络现在可以消化任何大小的图像,并不意味着预测将有意义。VGG-16了解了在224px的尺度上1000个不同对象的外观。使用一只1500px的猫可能不会激活与猫相关的神经元。这是个问题吗?

这取决于您的用例。我不相信VGG-16会在ImageNet的背景下对这些高分辨率图像进行分类,但这不是你想要的。您希望使用经过预训练的VGG-16,因为它应该已经学习了一些在风格转移的情况下可能会派上用场的能力。无论您的输入大小,这通常都是正确的。与从头开始相比,从一个预训练的模型开始几乎总是更可取的。你可能想考虑为你的任务微调这个模型,因为A(风格转移与分类截然不同,B(你使用的是完全不同的图像比例。

我从未发现这种推荐的基于补丁的方法有帮助,因为你正经历着同样的问题。当CNN学习识别图像中的局部模式时,他们也会学习全局分布,这就是为什么这不能很好地工作的原因。你总是可以尝试使用插值技术来合并补丁,但就我个人而言,我不会在这方面浪费时间。

相反,只需像您提到的那样输入完整的图像,这应该在您删除完全连接的层后工作。刻度会偏离,但如果你真的想要高分辨率的输入,你几乎无能为力。对VGG-16进行微调,使其能够学会适应您手头的用例。

如果你不想微调,我认为你没有其他办法。使用网络训练的转换/规模,或者在改变分辨率时接受低于最佳的性能。

最新更新