用于图像识别的 TensorFlow,图像大小
TensorFlow for image recognition, size of images
图像的大小如何影响为此任务训练模型?
我当前的训练集包含 2880 X 1800
的图像,但我担心这可能太大而无法训练。总的来说,我的样本量约为 200-500 张图像。
这是否意味着我在训练模型时需要更多资源(GPU、RAM、Distribution)?
如果这太大了,我应该如何调整大小? -- 我想尽可能地模仿真实世界的照片分辨率以获得更好的准确性。
编辑:
我也会对图像文件使用 TFRecord
格式
如果您使用 GPU 进行训练,这肯定会影响您的训练时间。 Tensorflow
负责大部分 GPU 分配,因此您不必担心。但是对于大照片,尽管您的数据集很小,但您将经历很长的训练时间。您应该考虑数据增强。
您可以通过数据扩充来补充调整大小。以相等的尺寸调整大小,然后执行反射和平移(如几何运动)
如果您的图像太大,您的 GPU 可能 运行 在开始训练之前内存不足,因为它必须将卷积输出存储在内存中。如果发生这种情况,您可以执行以下一些操作来减少内存消耗:
- 调整图片大小
- 减少批量大小
- 降低模型复杂性
要调整图像大小,只需搜索 Google 即可找到许多脚本,但我要补充一点,在您的情况下,1440 x 900 可能是最佳选择。
更高分辨率的图像将导致更长的训练时间和更高的内存消耗(主要是 GPU 内存)。
根据您的具体任务,您可能希望减小图像大小,以便在 GPU 上适合合理的批量大小,比如 32 或 64 - 以实现稳定的学习。
您的准确性可能更多地受训练集大小的影响。因此,您可能不考虑图像大小,而是选择 500-1000 个样本图像。最近的出版物,如 SSD - Single Shot MultiBox Detector achieve high accuracy values like an mAP of 72% on the PascalVOC 数据集 - "only" 使用 300x300 图像分辨率。
调整大小和增强:例如,SSD 只是将每个输入图像缩小到 300x300,与纵横比无关——似乎没有什么坏处。您还可以通过镜像、翻译等方式来扩充数据(但我假设 Tensorflow 中有内置的方法)。
您的内存和处理要求将与图像的像素大小成正比。这是否太大而无法有效处理将取决于您的硬件限制和您可用的时间。
关于调整图像大小没有唯一的答案,您必须考虑如何最好地保留算法从数据中学习所需的信息,同时删除无用的信息。减小输入图像的大小不一定会对准确性产生负面影响。考虑两种情况:
手写数字
在这里,图像的大小可以大大减小,并保留正确识别所需的所有结构信息。看看 MNIST data set, these images are distributed at 28 x 28 resolution and identifiable to 99.7%+ accuracy.
识别树种
想象一组树木的图像,其中单个叶子可以帮助识别物种。在这里您可能会发现减小图像大小会以对模型有害的方式减少叶子形状的小尺度细节,但您可能会发现使用紧密裁剪(保留单个叶子)而不是图像调整大小会得到类似的结果.如果是这种情况,您可能会发现从同一图像创建多个裁剪为您提供了一个增强的训练数据集,可以显着改善结果(如果可能的话,考虑到您的训练集非常小,这是需要考虑的事情)
深度学习模型在许多图像分类任务中取得了人类水平的结果:如果您难以识别自己的图像,那么您不太可能训练算法来识别。在考虑可能合适的缩放级别时,这通常是一个有用的起点。
图像的大小如何影响为此任务训练模型?
我当前的训练集包含 2880 X 1800
的图像,但我担心这可能太大而无法训练。总的来说,我的样本量约为 200-500 张图像。
这是否意味着我在训练模型时需要更多资源(GPU、RAM、Distribution)?
如果这太大了,我应该如何调整大小? -- 我想尽可能地模仿真实世界的照片分辨率以获得更好的准确性。
编辑:
我也会对图像文件使用 TFRecord
格式
如果您使用 GPU 进行训练,这肯定会影响您的训练时间。 Tensorflow
负责大部分 GPU 分配,因此您不必担心。但是对于大照片,尽管您的数据集很小,但您将经历很长的训练时间。您应该考虑数据增强。
您可以通过数据扩充来补充调整大小。以相等的尺寸调整大小,然后执行反射和平移(如几何运动)
如果您的图像太大,您的 GPU 可能 运行 在开始训练之前内存不足,因为它必须将卷积输出存储在内存中。如果发生这种情况,您可以执行以下一些操作来减少内存消耗:
- 调整图片大小
- 减少批量大小
- 降低模型复杂性
要调整图像大小,只需搜索 Google 即可找到许多脚本,但我要补充一点,在您的情况下,1440 x 900 可能是最佳选择。
更高分辨率的图像将导致更长的训练时间和更高的内存消耗(主要是 GPU 内存)。
根据您的具体任务,您可能希望减小图像大小,以便在 GPU 上适合合理的批量大小,比如 32 或 64 - 以实现稳定的学习。
您的准确性可能更多地受训练集大小的影响。因此,您可能不考虑图像大小,而是选择 500-1000 个样本图像。最近的出版物,如 SSD - Single Shot MultiBox Detector achieve high accuracy values like an mAP of 72% on the PascalVOC 数据集 - "only" 使用 300x300 图像分辨率。
调整大小和增强:例如,SSD 只是将每个输入图像缩小到 300x300,与纵横比无关——似乎没有什么坏处。您还可以通过镜像、翻译等方式来扩充数据(但我假设 Tensorflow 中有内置的方法)。
您的内存和处理要求将与图像的像素大小成正比。这是否太大而无法有效处理将取决于您的硬件限制和您可用的时间。
关于调整图像大小没有唯一的答案,您必须考虑如何最好地保留算法从数据中学习所需的信息,同时删除无用的信息。减小输入图像的大小不一定会对准确性产生负面影响。考虑两种情况:
手写数字
在这里,图像的大小可以大大减小,并保留正确识别所需的所有结构信息。看看 MNIST data set, these images are distributed at 28 x 28 resolution and identifiable to 99.7%+ accuracy.
识别树种
想象一组树木的图像,其中单个叶子可以帮助识别物种。在这里您可能会发现减小图像大小会以对模型有害的方式减少叶子形状的小尺度细节,但您可能会发现使用紧密裁剪(保留单个叶子)而不是图像调整大小会得到类似的结果.如果是这种情况,您可能会发现从同一图像创建多个裁剪为您提供了一个增强的训练数据集,可以显着改善结果(如果可能的话,考虑到您的训练集非常小,这是需要考虑的事情)
深度学习模型在许多图像分类任务中取得了人类水平的结果:如果您难以识别自己的图像,那么您不太可能训练算法来识别。在考虑可能合适的缩放级别时,这通常是一个有用的起点。