高分辨率图像分类

时间:2017-06-22 18:04:52

标签: machine-learning tensorflow pre-trained-model

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

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

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

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

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

P.S。

通常缩小尺寸方法的问题在于,在我们的情况下,微小裂缝或微小污点等微小细节非常重要,它们会在低分辨率图像上丢失。

2 个答案:

答案 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图层并更新它们是否有意义。