了解机器学习中的局部关系网络
简介
您是否曾经想过,人类如何能够通过有限的感官输入来感知和理解视觉世界?这是一种非凡的能力,使我们能够从基本元素中组合出复杂的视觉概念。在计算机视觉领域,科学家一直在尝试使用卷积神经网络 (CNN) 来模仿这种组合行为。CNN 使用卷积层从图像中提取特征,但在对具有不同空间分布的视觉元素进行建模时,它们存在局限性。
卷积的问题
CNN 中的卷积层的工作方式类似于模式匹配过程。它们应用固定的过滤器来空间聚合输入特征,这在处理具有显着空间变化的视觉元素时效率低下。例如,想象一下尝试识别具有几何变形的物体。卷积层难以捕捉这些元素组成的不同有效方式,导致性能受限。
介绍局部关系层
在最近的一篇学术出版物中,一组研究人员介绍了一种新颖的图像特征提取器。局部关系层通过动态计算依赖于相邻像素对之间组合连接的权重总和来克服卷积方法的限制。局部关系层不使用固定过滤器,而是学习以更有意义和更有效的方式聚合输入特征。
它是如何工作的?
局部关系层使用关系方法来确定局部区域中的像素应如何组成。通过结合几何先验,局部关系层评估经过训练的嵌入空间内两个像素的特征投影的相似性。通过学习动态组合像素的过程,局部关系层构建了一个既高效又有效的视觉元素层次结构。
该公式用于计算局部关系层中的聚合权重。让我们进一步分解一下 -
ω(p0, p) = softmax(Φ(fθq(xp0), fθk(xp)) + fθg(p - p0))
以下是每个组件的分步说明 -
fθq(xp0) 和 fθk(xp) 分别表示像素 p0 和 p 的特征投影。这些投影是通过将嵌入函数(fθq 和 fθk)应用于像素特征 xp0 和 xp 获得的。嵌入函数捕获两个像素特征之间的相似性或不相似性。
使用 Φ 计算 p0 和 p 的嵌入特征之间的相似性或兼容性分数。此函数 Φ 捕获区域中的像素对。它将嵌入特征 fθq(xp0) 和 fθk(xp) 作为输入,并产生一个分数,该分数表示特征可以组合在一起的程度。
项 (p - p0) 表示像素 p 和 p0 之间的几何关系。它表示两个像素之间的空间位移矢量。函数 fθg 将此几何信息合并到聚合权重中。
计算兼容性分数 (Φ(fθq(xp0), fθk(xp))) 和几何项 (fθg(p - p0)) 的总和。
将 softmax 函数应用于总和。 softmax 函数对值进行归一化,并生成局部区域像素的概率分布。它确保权重加起来为 1,从而实现正确的聚合。
总之,该公式结合了像素特征的学习相似性、像素之间的几何关系和softmax规范化来计算局部关系层中的聚合权重。这些自适应权重使该层能够有效地聚合局部信息并捕获视觉数据中有意义的组合结构。
优点和应用
研究人员开发的网络架构LR-Net中使用了局部关系层,而不是传统的卷积层。与典型的CNN相比,LR-Net在ImageNet分类等大规模识别应用中表现出更好的性能。它提供了更大的建模能力并实现了更高的准确性。此外,LR-Net在利用大核邻域方面更有效,并表现出对对抗性攻击的鲁棒性。
与现有方法的比较
局部关系层使用自下而上的方法来确定特征累积权重,而深度神经网络则采用分层方法。这种独特的方法被证明是实用和有效的。现有的方法不能完全取代卷积,因为它的适用性受到限制,或者只是对卷积的补充。局部关系层通过强调局部性和几何先验的重要性而与其他方法区分开来。
深度神经网络,尤其是 ResNet 设计,使用空间卷积层,这些层在 (LR-Net) 中被局部关系层取代。
在 ResNet 设计中,瓶颈/基本残差块中的初始 7*7 卷积层和 3*3 卷积层被替换为局部关系层。替换过程通过调整被替换层的扩展率 (α) 来确保浮点运算 (FLOP) 的数量保持不变。
使用通道变换层,将 3*H*W 的输入大小更改为第一个 7*7 卷积层的 64*Height*Weight 的特征图。接下来是一个7*7的局部关系层,用同等的FLOPs来替代7*7的卷积层,并以相近的准确率完成ImageNet识别任务。
将ResNet架构中的所有卷积层全部替换,就得到了LR-Net。例如LR-Net-50就是将ResNet-50架构中的所有卷积层都替换为局部关系层。论文中的表2对ResNet-50和LR-Net-50进行了比较,由于聚合过程中通道共享,LR-Net-50的FLOPs相当,但模型尺寸略小。
以下是局部关系层的代码片段−
import torch import tensorflow as tf class LocalRelationalNetwork(tf.keras.Model): def __init__(self, num_relations, num_objects, embedding_dim): super(LocalRelationalNetwork, self).__init__() self.num_relations = num_relations self.num_objects = num_objects self.embedding_dim = embedding_dim self.object_embeddings = tf.keras.layers.Embedding(num_objects, embedding_dim) self.relation_embeddings = tf.keras.layers.Embedding(num_relations, embedding_dim) self.hidden_layer = tf.keras.layers.Dense(embedding_dim, activation='relu') self.output_layer = tf.keras.layers.Dense(1, activation='sigmoid') def call(self, inputs): objects, relations = inputs object_embedded = self.object_embeddings(objects) relation_embedded = self.relation_embeddings(relations) concatenated = tf.concat([object_embedded, relation_embedded], axis=1) hidden = self.hidden_layer(concatenated) output = self.output_layer(hidden) return output
在此代码中,`CustomLayer` 类的定义与上一层的功能类似。`m` 参数未设置为默认值 8,您可以根据需要指定它。您可以修改 `channels`、`k`、`stride` 等参数,并在创建 `CustomLayer` 实例时为 `m` 提供特定值。
结论
局部关系层的引入代表了图像特征提取的重大突破。通过基于局部像素对的组成关系自适应地确定聚合权重,它克服了卷积层的局限性,并提供了一种更高效、更有效的方法来捕捉视觉世界中的空间组成。借助局部关系网络 (LR-Net),研究人员在大规模识别任务中取得了令人瞩目的成果,展示了这种新方法的强大功能。局部关系层为推进计算机视觉和提高我们对视觉数据的理解开辟了新的可能性。