识别图像是否包含具有非常小的(五幅图像)训练数据集的对象

人工智能 图像识别 训练
2021-11-01 08:55:28

假设我有 5 张图片,我向您保证它们都是同一个项目,但来自不同的角度,可能还有不同的照明条件。我现在为您提供了一张额外的图片,我想知道这张图片包含前五张图片中描述的物品的可能性有多大。

让我们假设该项目不是太复杂。它不会是一堆上面有图案的织物,掉落了几种不同的方式,也不会是带有不同构造的钥匙的钥匙链。它也将比从不同角度射出的蓝球更复杂。你会如何处理给这张图片打分的问题?

2个回答

我会做以下事情:

  • 将一些不存在该项目的图像添加到您的训练数据中。理想情况下,在类似的背景、照明等背景下拍摄的其他物品。也许只是背景中的一些。

  • 获取预训练的神经网络 CNN 模型,例如 AlexNet、VGG-19 或 Inception v5。

  • 加载神经网络模型,删除最后一层(通常是 1000 路 softmax),并替换为一个全新的层来分类您的对象是否存在。也许对“我的对象”和“未知对象”使用 2-way softmax。

  • 冻结除您自己之外的所有层(大多数 NN 库都有办法做到这一点,或者您可以运行截断的旧网络以从倒数第二层提取特征向量。

  • 使用您的 5 张图像进行训练。这种有限的训练通常被称为“微调”。

  • 在依赖它之前找到一些方法来测试你的分类器。你可能需要做一个留一法测试,你训练你的网络 5 次,每次有 4 个图像,看看它是否正确识别了第 5 个和没有项目的一些图像。即使采用这种方法,在如此小的样本中,您也只能对新分类器的可靠性有最模糊的了解。

如果您可以获得更多用于训练和测试的图像,您会做得更好。如果你得到足够多的图像(正面和负面),你可以考虑在微调之前更换更多的层。否则,您将严重依赖您的对象与 ImageNet 集合中的某些内容足够相似,经过训练的分类器将提取有用的高级特征。

除了@Neil Slater 的回答,您还可以使用数据增强技术“增加”您的数据集。

这对图像的基本含义是将您拥有的图像转换为新图像,而不改变分类的结果。例如,如果您将所有内容向右移动 20 个像素,则您的对象很可能仍然存在,从 5 个示例中现在您有 6 个。

请注意,这通常用于正则化:它防止网络将特定位置/大小/颜色与最终结果相关联。这是大型预训练神经网络已经解决的问题,但是对于您的小型数据集,您很可能也会从中受益。