我有一组图像。所有都包含一些共同的对象(让我们假设所有对象都具有相同的大小并且没有其他更改)。我想训练一个 CNN,它将学习常见对象的过滤器,并返回一个布尔标志,表明它是否存在于给定图像中。
(为简单起见,我假设“对象”小于 5x5 像素)
我想到了类似的东西:
- 具有 1 个 5x5 过滤器的 Conv 层
- 具有 pool_size = 输入大小的 MaxPooling 层(意思是 - 返回单个值:过滤器的最大激活)
- 输出最大激活(或其变体)
一些问题:
- 您会输出原始最大激活值并使用阈值来决定吗?乙状结肠吗?或者强制网络输出“object”和“no_object”类并做softmax?
- 相当相关 - 什么损失函数?
- 拥有一个大的 MaxPooling 层(将所有激活减少到一个)是否有问题?反向传播的梯度会发生什么?
似乎它只会随机进入其中一个激活状态,我不确定它是否可以以这种方式“学习”对象..
我想知道如何看待这个问题,因为它不是一个真正的 2 类分类问题。即使我能想出不包含对象的图像,也没有什么可以从这个类中“学习”的,除了它不包含某些东西(这是一个有价值的信息,我必须同意)。
我尝试在模拟的小黑白图像和随机添加的十字“对象”上使用它。尽管在某些尝试中它得到了水平线,但无法让过滤器学习交叉模式。
任何想法都会有所帮助!谢谢!