image - 机器学习: Image classification into 3 classes (Dog or Cat or Neither) using Convolutional NN

标签 image machine-learning classification keras multilabel-classification

如果您能帮助我思考这个问题,我将不胜感激。我有一个分类器,可以准确地将图像成功分类为狗或猫。我有一个很好的数据集来训练分类器。到目前为止没有问题。

我有大约 20,000 张狗和 20,000 张猫图像。

但是,当我尝试呈现其他没有狗或猫的图像(例如汽车、建筑物或老虎)时,我希望分类器的输出为“Niether”。现在显然,分类器试图将所有东西分类为狗或猫,这是不正确的。

问题1:

我怎样才能实现这个目标?我是否需要有 3 组不包含狗或猫的图像,并在这些附加图像上训练分类器以将其他所有图像识别为“两者都不是”?

在较高的水平上,我需要多少张非狗/猫类别的图像才能获得良好的准确性?由于非狗/猫图像域如此之大,大约 50,000 张图像可以吗?或者我需要更多图像吗?

问题2:

我可以使用 Imagenet 训练的 VGG16 Keras 模型作为初始层,并在顶部添加 DOG/CAT/Neither 分类器作为全连接层,而不是使用自己的图像数据训练自己的分类器吗?

See this example to load a pre-traied imagenet model

非常感谢您的帮助。

最佳答案

问题2

我将首先采用“ killer ”启发法。是的,使用现有的训练模型。只需将所有狗分类合并为 1 类,将猫分类为 2 类,将其他所有分类合并为 0 类。这几乎可以解决您的所有问题。

问题1

问题在于,您的初始模型已被训练为世界上的一切(所有 40,000 张图像)要么是狗,要么是猫。是的,你必须训练第三组,除非你的训练方法是自限制算法,例如单类 SVM(每个分类运行一次)。即便如此,我预计你在排除山猫或狼时也会遇到一些麻烦。

考虑到输入空间的高维度,您需要大量“两者都不是”类的示例:这不是图像的数量,而是它们的位置只是“超出边界”来自猫或狗。我对一个项目感兴趣,以确定如何以最少的额外投入来做到这一点。

简而言之,不要简单地从 ImageNet 类型的世界中抓取 50K 图像;选择那些能够为您的模型提供最佳区分度的对象:其他猫科动物和犬科动物示例、您在类似环境中找到的其他物体(茶几、野外啮齿动物等)。

关于image - 机器学习: Image classification into 3 classes (Dog or Cat or Neither) using Convolutional NN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40853349/

相关文章:

ios - iPad 应用程序在加载 30 多张图像后崩溃

css - 如何在一行中对齐 3 张图像?

python - torch 就地操作以节省内存(softmax)

python - 索引错误: too many indices for array

r - 将下采样后的预测概率转换为分类中的实际概率(使用 mlr)

javascript - 如何在不使用 image.src 或 image.onload 的情况下将 png base 64 转换为像素数组?

python - 值错误: X has 231 features per sample; expecting 1228

python - 如何修复 RuntimeError "Expected object of scalar type Float but got scalar type Double for argument"?

matlab - 多标签分类的 libsvm 输出预测概率

c++ - 通过减去具有不同背景的两个图像来获得 alpha