gpt4 book ai didi

machine-learning - 如何准备图像来使用 Python/Keras 训练 ConvNet?

转载 作者:行者123 更新时间:2023-11-30 09:31:10 25 4
gpt4 key购买 nike

尝试使用 Python + Keras 训练 cnn(卷积神经网络)。但即使是最简单的问题似乎也很难回答,而且那里的教程也没有我寻求的答案。

我可以访问我想要识别的少数类别的数千张图像。但我该如何准备图像呢?例如:

  1. 是否应该将图像裁剪为完全我想要识别的对象?本例中的对象是完美的矩形,因此如果这有助于训练,我可以将它们裁剪为完美。
  2. 图像的尺寸应该是多少?我是否将它们保持在高分辨率,或者将它们调整得较小?有很多像 MNIST 这样的例子,它使用 18x18 像素的图像,但在这种尺寸下,这些类别的对象是毫无意义的模糊,所有这些都彼此相似。
  3. 在训练期间,我是否应该只包含包含我想要识别的类别的图像?或者我应该在混合中插入一些我不关心的其他事物的图像?
  4. 在训练期间,单个图像中可以有多个对象实例吗?或者我应该将训练图像限制为单个类中只有 1 个对象的图像?
<小时/>

编辑:被问及我是否需要知道该对象所在的位置。答案是我需要进行对象检测:

classification vs semantic segmentation vs object detection vs instance segmentation

(该图像取自关于 Mask-RCNN 的 blog post,但我的问题比这更新手,它并不是特定于 Mask-RCNN。)

最佳答案

我的建议是从小而简单的开始:从使用通用配置/参数/方法开始,并根据您将执行的实验结果根据需要更改它们。

  1. Should the images be cropped to exactly the object I want to recognize? The objects in this case are perfectly rectangular, so I could crop them to be perfect if that helps training.

不,不一定。实际上,最好不要这样做,因为当您想在现实世界中使用模型时,图像不会被完美裁剪。例如,假设您在房间里拍摄了以下照片:

image of a chair in the room

您希望模型预测“椅子”作为输出,尽管后台还有其他内容。因此,您的模型对于现实世界中背景可能困惑的各种图像将更加适用/稳健。此外,我们并不总是拥有对象周围框的坐标来将其裁剪掉。

  1. What size should the images be? Do I keep them at high-resolution, or do I resize them to be small? Lots of examples with things like MNIST which uses images of 18x18 pixels, but at that size objects of these classes are a meaningless blur, all resembling each other.

坚持使用图像的常用尺寸。例如,大多数在 ImageNet 上训练的模型都将大小为 224x224 的图像作为输入。请记住,图像越大,模型的训练将涉及更多的计算,因此需要更多的时间进行训练。一般来说,只要调整大小后不会丢失太多图像信息/质量,越小越好。

  1. During training, should I only have images with the classes I want to identify? Or should I insert into the mix some images of other things I don't care about?

通常,我们只有来自要分类的已知类别的图像,而不考虑“其他”类别。但是,如果您对模型能够将未知图像分类为一类感兴趣(请注意,仅对狗和猫的图像进行训练的模型,即使您给它一张椅子的图像,也会将所有内容视为狗和猫)或一棵树或一个 toastr ),您可以添加另一个“未知”/“其他”类,并将所有没有与其关联的类的图像分配给该类。但是,训练完成后,您不应期望您的模型能够完美识别任何未知对象并将其预测为“未知”类(即主要是因为属于“未知”类的图像太多变化,你不能仅用数百或数千个未知图像的例子来表示它们)。

  1. During training, is it OK to have multiple instances of the object in a single image? Or should I limit the training images to ones where there is only 1 object of a single class?

我认为图像中同一对象的多个实例不会产生任何问题,主要是因为 CNN 具有平移不变性,因此如果在图像区域中检测到某个特征,则可以检测到该特征图像中的其他位置(可能属于该对象的另一个实例)。如果您的训练数据中混合有单实例和多实例图像,它甚至可能会提高模型的准确性。

最后一点,我建议您不要从头开始训练 CNN 分类模型。 ImageNet 上已经训练有非常好的模型,因此您可以使用这些模型中已经提取和积累的知识(即这种方法称为“迁移学习”,即将知识从一个领域/模型转换到另一个领域/模型) 。例如,您可以使用 VGG16 作为模型的基础,只更改顶层(或仅更改分类器层)。这样,训练不仅会更快(因为基础已经训练完毕,至少边缘或纹理等低级特征大部分在我们看到的所有图像之间共享),而且会更加准确(因为该基地已经接受了数千张图像的训练)。我建议你读一下这篇official tutorial from Keras blog它说明了如何使用这种训练。

关于machine-learning - 如何准备图像来使用 Python/Keras 训练 ConvNet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57455143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com