Non-local Network:人类早期在CV驯服Transformer尝试 | CVPR 2018
Non-local操作是早期self-attention在视觉任务上的尝试,核心在于依照相似度加权其它特征对当前特征进行增强,实现方式十分简洁,为后续的很多相关研究提供了参考
来源:晓飞的算法工程笔记 公众号
论文: Non-local Neural Networks

Introduction

卷积操作通常在局部区域进行特征提取,想要获取范围更广的特征信息需要重复进行卷积操作来获得,这样不仅耗时还增加了训练难度。为此,论文提出高效的non-local操作,将特征图上的特征点表示为所有特征点的加权和,用于捕捉覆盖范围更广的特征信息。non-local操作也可以用于含时序的任务中,如图1的视频分类任务,可综合几帧的特征来增强当前帧的特征。
non-local操作主要有以下优点:
- 相对于叠加卷积的操作,non-local可通过特征点间的交互直接捕捉更广的特征信息。
- 从实验结果来看,简单地嵌入几层non-local操作就能高效地提升网络性能。
- non-local操作支持可变输入,可很好地与其它网络算子配合。
Non-local Neural Networks
Formulation
首先定义通用的non-local操作:

\(i\)为特征图上将要计算特征值的位置坐标,\(j\)为特征图上的所有位置坐标,\(x\)为对应位置上的输入特征,\(y\)为增强后的输出,\(f\)计算\(i\)和\(j\)之间的相似性,\(g\)则用于对\(j\)的特征进行转化,\(\mathcal{C}\)用于对输出进行归一化。
简而言之,non-local的核心就是计算当前位置的特征与特征图所有特征间的相似性,然后根据相似性对所有特征加权输出。相对于卷积和全连接等参数固定的操作,non-local更加灵活。
Instantiations
在实现时,函数\(f\)和函数\(g\)的选择很多。为了简便,函数\(g\)选择为线性变换\(g(x_j)=W_gx_j\),\(W_g\)为可学习的权重矩阵,一般为\(1\times 1\)的卷积。而函数\(f\)则可以有以下选择(论文通过实验发现函数\(f\)的具体实现影响不大):
Gaussian

\(x^T_i x_j\)为点积相似度,也可采用欧氏距离,\(\mathcal{C}(x)={\sum}_{\forall j}f(x_i, x_j)\),归一化类似于softmax操作。
Embedded Gaussian

\(\theta(x_i)=W_{\theta}x_i\)和\(\phi(x_j)=W_{\phi}x_j\)为两个线性变换,\(\mathcal{C}(x)={\sum}_{\forall j}f(x_i, x_j)\),这个实现与self-attention十分接近。
Dot product

先线性变换,然后通过点积计算相似度,\(\mathcal{C}(x)=N\),有助于简化梯度计算。
Concatenation

直接将特征conate起来,通过权重向量\(w^T_f\)转化为标量输出,\(\mathcal{C}(x)=N\)。
Non-local Block
将公式1的non-local操作修改成non-local block,可插入到当前的网络架构中,non-local block的定义为:

公式6将non-local操作的输出线性变换后与原特征进行相加,类似于residual block的嵌入方式。

non-local block的一种实现方式如图2所示,首先对\(x\)进行3种不同的线性变换,然后按照公式1得到输出特征,再与原特征进行相加,基本上跟self-attention是一样的。
Experiment

各种对比实验,表2a为函数\(f\)的实现对比,可以看到影响不是很大。

视频分类对比。

COCO上的分割、检测、关键点对比。
Conclusion
Non-local操作是早期self-attention在视觉任务上的尝试,核心在于依照相似度加权其它特征对当前特征进行增强,实现方式十分简洁,为后续的很多相关研究提供了参考。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

Non-local Network:人类早期在CV驯服Transformer尝试 | CVPR 2018的更多相关文章
- OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)
前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性. launch 新的 instance "cirros-vm3",网络选择 second_lo ...
- 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)
上一节部署了 cirros-vm1 到 first_local_net,今天我们将再部署 cirros-vm2 到同一网络,并创建 second_local_net. 连接第二个 instance 到 ...
- 创建 OVS Local Network - 每天5分钟玩转 OpenStack(129)
上一节我们完成了 OVS 的准备工作,本节从最基础的 local network 开始学习.local network 不会与宿主机的任何物理网卡连接,流量只被限制在宿主机内,同时也不关联任何的 VL ...
- 创建第二个 local network - 每天5分钟玩转 OpenStack(84)
GUI 中有两个地方可以创建 network: 1. Project -> Network -> Networks 这是普通用户在自己的 tenant 中创建 network 的地方. 2 ...
- 创建第一个 local network(II)- 每天5分钟玩转 OpenStack(81)
上一节通过 Web GUI 创建了 “first_local_net”,本节我们需要搞清楚底层网络结构有了哪些变化? 点击 “first_local_net” 链接,显示 network 的 subn ...
- 创建第一个 local network(I) - 每天5分钟玩转 OpenStack(80)
在 ML2 配置文件中 enable local network 后,本节将开始创建第一个 local network. 我们将通过 Web GUI 创建第一个 local network. 首先确保 ...
- 在 ML2 中 enable local network - 每天5分钟玩转 OpenStack(79)
前面完成了一系列准备工作,本节开始将创建各种 Neutorn 网络,我们首先讨论 local network. local network 的特点是不会与宿主机的任何物理网卡相连,也不关联任何的 VL ...
- Neutron local network 学习
local network 的特点是不会与宿主机的任何物理网卡相连,也不关联任何的 VLAN ID. 对于每个 local netwrok,ML2 linux-bridge 会创建一个 bridg ...
- 【GitLab】gitlab上配置webhook后,点击测试报错:Requests to the local network are not allowed
gitlab上配置webhook后,点击测试报错: Requests to the local network are not allowed 操作如下: 报错: 错误原因: gitlab 10.6 ...
- 转:Exploiting Windows 10 in a Local Network with WPAD/PAC and JScript
转:https://googleprojectzero.blogspot.com/2017/12/apacolypse-now-exploiting-windows-10-in_18.html aPA ...
随机推荐
- Idea 本人开发常用几款插件
先说 idea装插件 首先,进入插件安装界面: 标注 1:显示 IntelliJ IDEA 的插件分类, All plugins:显示 IntelliJ IDEA 支持的所有插件: Enabled:显 ...
- python调用namp.py进行扫描,调用go编译的so文件
#!/usr/bin/env python # -*- coding: utf-8 -*- import json import os import platform from ctypes impo ...
- CUDA、CUDNN 安装
安装 CUDA.CUDNN 1. CUDA CUDA 是 NVIDIA 发明的一种并行计算平台和编程模型.它通过利用图形处理器 (GPU) 的处理能力,可大幅提升计算性能. 官方地址 https:// ...
- sql判断字符串中含中文方法
基于UTF-8字符集 它是一种多字节字符集,编码为变长编码.那么它的编码范围根据:http://www.iteye.com/topic/977671 作者提供的资料学习,整理出它编码范围如下: u2e ...
- 教程|在矩池云使用 Stable Diffusion web UI v1.5 模型和 ControlNet 插件
今天给大家介绍下如何在矩池云使用 Stable Diffusion web UI v1.5 模型和 Stable Diffusion ControlNet 插件. 租用机器 租用机器需要选择内存大于8 ...
- Kubernetes:Pod 端口映射
本文为作者的 Kubernetes 系列电子书的一部分,电子书已经开源,欢迎关注,电子书浏览地址: https://k8s.whuanle.cn[适合国内访问] https://ek8s.whuanl ...
- 精贴总结 - 万字长文带你入门Istio
原文 - 万字长文带你入门Istio 一.个人看法 背景:以docker+k8s普及,支持快速部署,通过k8s允许统一管理 解决:1)设计分布式系统,导致开发难度提高:2)统一多语言的服务治理方案 目 ...
- Linux管理SpringBoot应用shell脚本实现
Liunx系统如何部署和管理SpringBoot项目应用呢?最简单的方法就是写个shell脚本. Spring Boot是Java的一个流行框架,用于开发企业级应用程序.下面我们将学习如何在Lin ...
- IDEA关联Tomcat(详细教程+安装包)
IDEA关联Tomcat 下载Tomcat安装包并解压到全英文目录 第一步:打开IDEA--Settings 第二步:搜索application--进入Application Services--点击 ...
- VSCode 配置 Spring Boot 项目开发环境
神器IDEA在升级到2023之后越发卡顿, EDU邮箱也不能用了, 照现在这个JDK版本的升级速度, 神器不升级也不行, 需要开始物色替代品. 其它IDE我用得少, VSCode还是比较熟悉的, 可以 ...