TensorFlow用于图像识别,图像大小

时间:2017-07-17 16:15:47

标签: machine-learning tensorflow classification image-recognition

图像效果的大小如何训练模型完成此任务?

我当前的训练集保存的图像为$scope.isActive = (index) => { return $scope.activeRow === index; } ,但我担心这可能太大而无法训练。总的来说,我的样本大小约为200-500张图像。

这是否意味着我在培训模型时需要更多资源(GPU,RAM,分配)?

如果这个太大,我该如何调整大小? - 我想尽可能地模仿真实世界的照片分辨率以获得更好的准确性。

修改

我也会使用2880 X 1800格式的图像文件

4 个答案:

答案 0 :(得分:1)

如果您使用GPU进行训练,这将影响您的训练时间。 Tensorflow执行大部分GPU分配,因此您不必担心这一点。但是对于大照片,尽管您的数据集很小,但您将会遇到很长的训练时间。你应该考虑数据增加。

您可以通过数据扩充来补充调整大小。以相同的尺寸调整大小,然后执行反射和平移(如在几何运动中)

答案 1 :(得分:1)

如果您的图像太大,您的GPU可能会在开始训练之前耗尽内存,因为它必须将卷积输出存储在其内存中。如果发生这种情况,您可以执行以下某些操作来减少内存消耗:

  • 调整图片大小
  • 减少批量大小
  • 降低模型复杂性

为了调整图片大小,有很多脚本只需谷歌搜索一下,但我会补充说,在你的情况下,1440乘900可能是个好地方。

答案 2 :(得分:1)

分辨率越高,训练时间越长,内存消耗越大(主要是GPU内存)。

根据您的具体任务,您可能希望缩小图像大小,以便在GPU上符合合理的批量大小,例如32或64,以便稳定学习。

您的准确度可能会受到训练集大小的影响。因此,您可能希望获得500-1000个样本图像,而不是寻找图像大小。最近的出版物如SSD - Single Shot MultiBox Detector获得了高精度值,例如PascalVOC数据集上的mAP为72% - “仅”使用300x300图像分辨率。

调整大小和增强:例如,SSD只是将每个输入图像缩小到300x300,与纵横比无关 - 似乎没有受到伤害。您还可以通过镜像,翻译等来扩充数据(但我认为Tensorflow中有内置方法)。

答案 3 :(得分:1)

您的内存和处理要求将与图像的像素大小成比例。这是否太大,无法有效处理取决于您的硬件限制和可用时间。

关于调整图片大小没有一个答案,您必须考虑如何最好地保留算法从您的数据中学习所需的信息,同时删除不会有用的信息。减小输入图像的大小不一定对准确性不利。考虑两种情况:

手写数字

这里图像的尺寸可以大大减小,并保持正确识别所需的所有结构信息。看看MNIST data set,这些图像的分辨率为28 x 28,可以99.7%+ accuracy识别。

识别树种

想象一组树木的图像,其中单个树叶可以帮助识别物种。在这里,您可能会发现缩小图像大小可以减少叶子形状上的小尺寸细节,但这种方式会对模型造成不利影响,但您可能会发现使用紧密的作物(保留单个叶子)会得到类似的结果而不是图像调整大小。如果是这种情况,您可能会发现从同一图像创建多个作物会为您提供增强的训练数据集,从而大大提高结果(如果可能的话,考虑到您的训练集非常小,这是需要考虑的事项)

在许多图像分类任务中,深度学习模型正在围绕人类水平取得成果:如果您难以识别自己的图像,那么您将不太可能训练算法。在考虑可能适当的缩放级别时,这通常是一个有用的起点。