3

通常像 VGG16 / Inception 等预训练的网络以低于 500px 的低分辨率工作。

是否可以在预训练的VGG16 / Inception的第一层之前添加一个(或两个)高分辨率卷积层,以使网络能够消费高分辨率图片?

据我所知 - 第一层最难训练,需要大量数据和资源来训练它。

我想知道是否可以冻结预训练网络并仅在平均 GPU 卡和大约 3000 个示例上训练新附加的高分辨率层?能在几个小时内完成吗?

此外,如果您知道如何使用高分辨率图像进行图像分类的任何示例,请分享链接。

附言

通常的缩小方法的问题在于,在我们的例子中,微小的裂缝或微小的污垢点等微小的细节非常重要,它们在较低分辨率的图像上会丢失。

4

2 回答 2

6

不幸的是,您不太可能冻结预训练的网络,然后只是在开始时添加额外的层,因为初始层需要三个通道输入,并且旨在发现图像中的特征。

相反,您可以尝试修改网络架构,以便初始层确实接收 1024x1024 图像,然后使用池化或跨步进行缩减。

例如,您可以尝试将 Inception V3 的 Slim 模型定义中的第一个 conv 层的步幅调整为 8 而不是 2: https ://github.com/tensorflow/models/blob/master/slim/nets/inception_v3 .py

这将允许您读取 4 倍大的图像,同时保持网络的其余部分相同。不幸的是,我希望您需要进行全面的再培训。

于 2017-06-26T16:05:19.503 回答
3

要将训练有素的 ImageNet 模型应用于您的问题,您可能会考虑将新层放在后端,而不是前端。ImageNet CNN 模型的第一层经过训练以检测“通用”低级特征(水平/垂直/对角边缘、颜色斑点等)。这些卷积层不需要固定的图像大小(图像通常被调整为常见的尺寸,因为图像中对象的预期比例和/或适应全连接层的尺寸)。

因此,您可以尝试保持第一个N卷积层不变,然后添加自定义层以针对您的数据集进行训练。训练自定义层后,您可以决定解冻现有 ImageNet 层并更新它们是否有意义。

于 2017-07-03T17:55:16.213 回答