Matrix Nets
这是一个「矩阵网络」,它的参数少、效果好、训练快、显存占用低。
目标检测是计算机视觉中最广泛研究的任务之一,具有许多应用到其他视觉任务,如目标跟踪、实例分割和图像字幕。目标检测结构可以分为两类:single-shot检测器和two-stage检测器。Two-stage检测器利用区域候选网络找到固定数量的目标候选,然后使用第二个网络来预测每个候选的分数并改进其边界框。
Single-shot检测器也可以分为两类:基于锚的检测器和基于关键点的检测器。基于锚的检测器包含许多锚边界框,然后预测每个模板的偏移量和类。最著名的基于锚的体系结构是RetinaNet,它提出了focal损失函数,以帮助纠正锚边界框的类不平衡。性能最好的基于锚的探测器是FSAF。FSAF将锚基输出与无锚输出头集成在一起,以进一步提高性能。
下图所示为Matrix nets(xNets),使用分层矩阵建模具有不同大小和丛横比的目标,其中矩阵中的每个条目i、j 表示一个层 li,j,矩阵左上角层 l1,1 中宽度降采样2^(i-1),高度降采样2^(j-1)。对角层是不同大小的方形层,相当于一个 FPN,而非对角层是矩形层(这是xNets所特有的)。 层l1,1是最大的层,每向右一步,层宽度减半,而每向下一步高度减半。
例如,层l3,4是层l3,3宽度的一半。对角层建模宽高比接近方形的目标,而非对角层建模宽高比不接近方形的目标。接近矩阵右上角或左下角的层建模宽高比极高或极低的目标。这类目标非常罕见,所以可以对它们进行剪枝以提升效率。
生成矩阵层是一个关键的步骤,因为它影响模型参数的数量。参数越多,模型表达越强,优化问题越困难,因此研究者选择尽可能少地引入新的参数。对角线层可以从主干的不同阶段获得,也可以使用特征金字塔框架。上三角层是在对角线层上施加一系列具有1x2步长的共享3x3卷积得到的。类似地,左下角层是使用具有2x1步长的共享3x3卷积得到的。参数在所有下采样卷积之间共享,以最小化新参数的数量。
矩阵中的每个层都对具有一定宽度和高度的目标进行建模,因此我们需要定义分配给矩阵中每个层的目标的宽度和高度范围。范围需要反映矩阵层特征向量的感受野。矩阵中向右的每一步都有效地使水平维度中的感受野加倍,而每一步都使垂直维度上的感受场加倍。因此,当我们在矩阵中向右或向下移动时,宽度或高度的范围需要加倍。一旦定义了第一层l1,1的范围,我们就可以使用上述规则为矩阵层的其余部分生成范围。
由于目标大小在其指定的层内几乎是均匀的,因此与其他架构(例如FPN)相比,宽度和高度的动态范围更小。因此,回归目标的高度和宽度将变得更容易优化问题。最后Matrix Nets可用作任何目标检测架构、基于锚或基于关键点、one-shot或two-shots检测器。
Matrix Nets 用于基于关键点的检测
上图是基于关键点的目标检测框架—— KP-xNet,它包含4个步骤。
(a-b):使用了xNet的主干;
(c):使用了共享输出子网络,而针对每个矩阵层,预测了左上角和右下角的热图和偏移量,并在目标层内对它们进行中心点预测;
(d):利用中心点预测匹配同一层中的角,然后将所有层的输出与soft非极大值抑制结合,从而得到最终输出。
如果想加入我们“计算机视觉战队”,请扫二维码加入学习群。计算机视觉战队主要涉及机器学习、深度学习等领域,由来自于各校的硕博研究生组成的团队,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。
我们开创一段时间的“计算机视觉协会”知识星球,也得到很多同学的认可,我们定时会推送实践型内容与大家分享,在星球里的同学可以随时提问,随时提需求,我们都会及时给予回复及给出对应的答复。