通常预训练的网络如VGG16 / Inception等以低分辨率工作,如< 500px的。
是否可以在预训练 VGG16 / Inception的第一层之前添加一个高分辨率卷积层(或两个),以使网络能够消耗高分辨率图片?
据我所知 - 第一层是最难训练的,需要大量的数据和资源来训练它。
我想知道是否有可能冻结预先训练好的网络并仅训练平均GPU卡上新连接的高分辨率层和大约3000个示例?可以在几个小时内完成吗?
另外,如果您知道如何使用高分辨率图像进行图像分类,请分享链接。
P.S。
通常缩小尺寸方法的问题在于,在我们的情况下,微小裂缝或微小污点等微小细节非常重要,它们会在低分辨率图像上丢失。
答案 0 :(得分:3)
由于初始图层需要三个通道输入并且设计用于识别图像中的特征,因此您不太可能冻结预训练网络,然后在开始时添加额外的图层。
相反,您可以尝试修改网络的体系结构,以便初始层确实接收1024x1024图像,然后使用池化或跨步缩小。
例如,您可以尝试将Inception V3的Slim模型定义中第一个conv层的步幅调整为8而不是2: https://github.com/tensorflow/models/blob/master/slim/nets/inception_v3.py
这将允许您读取4倍大图像,同时保持网络的其余部分相同。不过,我希望你们需要进行全面的再培训。
答案 1 :(得分:1)
要将训练有素的ImageNet模型应用于您的问题,您可以考虑在后端而不是前端放置新图层。 ImageNet CNN模型中的第一层经过训练,可以检测“通用”低级特征(水平/垂直/对角线边缘,颜色斑点等)。这些卷积层不需要固定的图像大小(图像通常调整为普通大小)尺寸,因为图像中物体的预期比例和/或适应完全连接的层的尺寸。)
因此,您可以尝试按原样保留第一个N
卷积图层,然后添加要为您的数据集进行培训的自定义图层。在训练自定义图层后,您可以决定解冻现有的ImageNet图层并更新它们是否有意义。