为什么对象检测方法对每个类都有一个输出值



最近的对象检测方法都依赖于卷积神经网络。它们通过特征提取步骤运行输入数据来创建特征图。然后,他们添加更多的卷积层来输出一组这样的值(这组值来自YOLO,但SSD等其他架构略有不同):

pobj:成为对象的概率

c1,c2。。。cn:指示对象属于的哪个类别

x、 y,w,h:对象的边界框

但是,一个特定的长方体不能是多个对象。就像在中一样,c1的值不是很高吗?这意味着所有其他c2会低吗?那么,为什么要对c1、c2使用不同的值呢。。。cn?它们不能都用一个值来表示吗,比如0-1,其中每个对象在0-1内都有一定的范围,比如0-0.2是c1,0.2-0.4是c2等等…

这将把输出的维度从NxNx(5+C)(概率和边界框为5,每个类为+C)降低到NxNx(5+1)(5与以前相同,类为1)

谢谢

简短回答,否!这几乎肯定不是一个可以接受的解决方案。听起来你的核心问题是:为什么[0,1]范围内的单个值对于对象分类来说不是一个足够紧凑的输出作为澄清,我想说这实际上与单次探测器无关;来自两级检测器和大多数所有分类网络的输出遵循相同的1D嵌入结构。作为第二个澄清,我想说的是,许多单级网络在其原始实现中也不会输出pobj(YOLO是主要的输出,但Retinanet和SSD没有)。

对象的类是一个范畴属性。在标准分类问题中,假设可能的类的集合是平坦的(即没有类是任何其他类的子类)、互斥的(每个例子只属于一个类)和不相关的(这里的术语不太正确,但本质上没有类与任何其他类或多或少相关)。

这个假定的属性结构由与可能的属性集具有相同长度的正交编码向量很好地表示。在这个空间中,向量[1,0,0]与[0,0,0]的相似性并不比与[0,0,1]的相似。

(顺便说一句,ML问题的一个单独分支,称为多标签分类,消除了互斥约束(so[0,1,1,0]和[0,1,1,1]两者都将是有效的标签预测。在这个空间中,类别或标签组合可以被解释为或多或少相关;基向量";在正交分类属性空间中。但题外话够多了。)

类的单个连续变量输出破坏了所有类都不相关的假设。事实上,它假设任何两个类之间的关系是精确和可量化的!真是个假设!考虑尝试将ImageNet分类任务的类沿着一个维度排列。Buscar应该接近,不是吗?假设在[0,1]的1D嵌入范围内分别为0.1和0.2。Zebra一定离它们很远,可能是0.8。但应该接近zebra fish(0.82)吗?striped shirt更接近zebra还是busmoon更类似于bicycle还是trumpetzebrazebra fish的相似性真的是buscar的5倍吗?这种做法立即明显是荒谬的。对象类的1D嵌入空间不足以捕捉对象类之间的差异。

为什么我们不能在连续范围[0,1]中随机放置对象类?从理论意义上讲,没有什么能阻止你,但网络的梯度会变得可怕、难以管理的非凸性,训练网络的传统方法会失败。更不用说,网络架构将不得不对极其非线性的激活函数进行编码,以预测1D空间中相邻类之间极其坚硬的边界,从而导致非常脆弱和不可推广的模型。

从这里,细致入微的读者可能会认为,事实上,一些类别是相互关联的(即,对标准分类问题的不相关假设并不是真正正确的)。Buscar肯定比bustrumpet更相关,不是吗?在不对世界的严格本体论分类的有限有用性进行批判的情况下,我只简单地建议,在许多情况下,存在一种达到中间立场的信息嵌入。大量的工作都致力于寻找紧凑的嵌入空间(相对于"一切都是它自己的1类"的穷举),但仍然有意义。这是深度学习中主成分分析和对象外观嵌入的工作。

根据特定的问题,您可能能够利用更细微的嵌入空间,更适合您希望完成的最终任务。但总的来说,诸如分类/检测之类的规范深度学习任务忽略了这一细微差别,希望设计出"简单"的解决方案;相当不错";在大范围的问题空间上推广。

对于对象分类头,通常使用交叉熵损失函数,该函数对概率分布进行运算,以计算地面实况(一个热门编码向量)和预测类得分之间的差异。

另一方面,你提出了一种不同的编码基本事实类标签的方法,可以进一步与某些自定义损失函数(如L1/l2损失函数)一起使用,这在理论上看起来是正确的,但在模型收敛/优化方面可能不如交叉熵函数。

相关内容

最新更新