我正在尝试训练我的模型对图像进行分类.我遇到的问题是,它们有不同的尺寸.是否有可能在没有调整大小的情况下训练这些图像.
sun*_*ide 138
你没有说你在谈论什么样的架构.既然你说你想要对图像进行分类,我假设它是一个部分卷积的,部分完全连接的网络,如AlexNet,GoogLeNet等.一般来说,你的问题的答案取决于你正在使用的网络类型.
例如,如果您的网络仅包含卷积单位 - 也就是说,不包含完全连接的图层 - 则它可以对输入图像的大小不变.这样的网络可以处理输入图像,然后返回另一个图像("一直卷积"); 您必须确保输出符合您的预期,因为您必须以某种方式确定损失.
如果您使用完全连接的设备,那么您就会遇到麻烦:在这里,您的网络必须使用固定数量的学习权重,因此不同的输入需要不同数量的权重 - 这是不可能的.
如果这是你的问题,这里有一些你可以做的事情:
N
正确大小的不同图像.填充选项可能会为网络的预测引入额外的错误源,因为网络可能(读取:可能会)偏向包含此类填充边框的图像.如果您需要一些想法,请查看TensorFlow文档的Images部分,这些部分resize_image_with_crop_or_pad
可以带走更大的工作.
至于不关心挤压,这里是着名的Inception网络的预处理管道的一部分:
# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.
# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
distorted_image,
lambda x, method: tf.image.resize_images(x, [height, width], method=method),
num_cases=num_resize_cases)
Run Code Online (Sandbox Code Playgroud)
无论如何,他们完全了解它并做到了.
根据您想要或需要走多远,实际上是一纸在这里被称为空间金字塔池深卷积网络从视觉上识别,通过在一个非常特殊的方式处理它们处理任意大小的输入.
小智 10
尝试制作一个空间金字塔池化层。然后将其放在最后一个卷积层之后,以使FC层始终获得恒定的维向量作为输入。在训练期间,使用特定图像大小训练一个时期的整个数据集的图像。然后在下一个时代,切换到其他图像尺寸并继续训练。