转载:https://zhuanlan.zhihu.com/p/76063768

前言

这篇论文被 ICCV 2019 接收为 oral presentation。之前我们主要研究物体检测(例如 Hybrid Task CascadeGuided AnchoringLibra R-CNN 和 Prime Sample Attention),这次尝试跳出单纯的物体检测框架,解决一些通用模块和算子的问题。上采样操作是各种网络结构里广泛使用的运算之一,我们提出了一个轻量级的通用上采样算子 CARAFE(音[kə'ræf]),相对最近邻和双线性等上采样算子,在不同任务中都取得了显著的提升,同时只引入很少的参数量和计算代价。

【一分钟批阅版】

上采样操作可以表示为每个位置的上采样核和输入特征图中对应邻域的像素做点积,我们称之为特征重组。我们提出的上采样操作 CARAFE 在重组时可以有较大的感受野,会根据输入特征来指导重组过程,同时整个算子比较轻量级。具体来说,我们首先利用输入特征图来预测上采样核,每个位置的上采样核是不同的,然后基于预测的上采样核来进行特征重组。在不同的任务中,CARAFE 都取得了明显的提升,同时仅带来很小的额外参数和计算量。

【十分钟催眠版】

上采样的表示

我们将特征图的上采样运算看做是特征重组的过程。对于输出特征图中的每个像素点 L',我们都可以找到它在输入特征图中的对应位置 L,L' 这个点的值可以表示成以输入特征图中以 L 为中心的一个邻域内的像素和一个上采样核的点积(加权和)。以双线性上采样为例,输出特征图中每个像素可以看作是一个 2x2 的上采样核和输入特征图中一个 2x2 的邻域的点积。在下图中,上采样核的 4 个数值均为 0.5。

Motivation

最近邻或者双线性上采样仅通过像素点的空间位置来决定上采样核,并没有利用到特征图的语义信息,可以看作是一种“均匀”的上采样,而且感知域通常都很小(最近邻 1x1,双线性 2x2)。Deconvolution 算子的上采样核并不是通过像素间的距离计算,而是通过网络学出来的,但对于特征图每个位置都是应用相同的上采样核,不能捕捉到特征图内容的信息,另外引入了大量参数和计算量,尤其是当上采样核尺寸较大的时候。Dynamic filter 对于特征图每个位置都会预测一组不同的上采样核,但是参数量和计算量更加爆炸,而且公认比较难学习。

那么我们所希望的上采样算子应该具备以下几个特性。

  1. Large receptive field:需要具有较大的感受野,这样才能更好地利用周围的信息。
  2. Content-aware:上采样核应该和特征图的语义信息相关,基于输入内容进行上采样。
  3. Lightweight:不能引入过多的参数和计算量,需要保持轻量化。

从全称 Content-Aware ReAssembly of FEatures 可以看出,CARAFE 正是具备这几个特性的上采样算子。

方法概述

CARAFE 分为两个主要模块,分别是上采样核预测模块和特征重组模块。假设上采样倍率为  ,给定一个形状为  的输入特征图,我们首先利用上采样核预测模块预测上采样核,然后利用特征重组模块完成上采样,得到形状为  的输出特征图。

上采样核预测模块

1. 特征图通道压缩

对于形状为  的输入特征图,我们首先用一个  卷积将它的通道数压缩到  ,这一步的主要目的是减小后续步骤的计算量。

2. 内容编码及上采样核预测

假设上采样核尺寸为  (越大的上采样核意味着更大的感受野和更大的计算量),如果我们希望对输出特征图的每个位置使用不同的上采样核,那么我们需要预测的上采样核形状为  。

对于第一步中压缩后的输入特征图,我们利用一个  的卷积层来预测上采样核,输入通道数为  ,输出通道数为  ,然后我们将通道维在空间维展开,得到形状为  的上采样核。

3. 上采样核归一化

我们对第二步中得到的上采样核每个通道利用 softmax 进行归一化,使得卷积核权重和为 1。

特征重组模块

对于输出特征图中的每个位置,我们将其映射回输入特征图,取出以之为中心的  的区域,和预测出的该点的上采样核作点积,得到输出值。相同位置的不同通道共享同一个上采样核。

实验结果

我们将 FPN 中的上采样操作替换成 CARAFE,并可视化上采样的区域和权重。对于高层特征图中不同的点,我们展示在 CARAFE 多次上采样后的采样核权重较大的点,可以看到采样点会集中在物体区域而忽略背景区域,达到 content-aware 的效果。

以 Faster R-CNN w/ FPN 为例,我们对比了 CARAFE 和其他上采样算子的性能以及参数量和计算量。在性能明显优于其他算子的情况下,CARAFE 保持了轻量级的特性,参数量和计算量都较小。

我们将 CARAFE 应用于不同的任务中,例如物体检测,语义分割,image inpainting ,都取得了不错的效果。

物体检测

在物体检测任务上,对于 Faster R-CNN 和 Mask R-CNN,CARAFE 都取得了一个点以上的提升。

语义分割

在语义分割任务中,我们将 UperNet(为啥用 UperNet,因为有好用的开源 code 啊)作为 baseline,用 CARAFE 替换其中的上采样操作,取得了显著的提升。

Image inpainting

我们也尝试把 CARAFE 应用在 low-level 任务比如 image inpainting 中,同样取得了较大的提升,刷新了 SOTA。

总结

轻量级通用上采样算子

  • Large receptive field
  • Content-aware
  • Lightweight

Arxiv

CARAFE: Content-Aware ReAssembly of FEatures​arxiv.org

Code

照例将开源在 mmdetection 中,人长得好看说话还好听的一作小哥哥正在努力优化中,预计 ICCV 开会之前 release。

轻量级通用上采样算子-CARAFE的更多相关文章

  1. 图像的下采样Subsampling 与 上采样 Upsampling

     I.目的 缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的: 1.使得图像符合显示区域的大小: 2.生成对应图像的缩略图. 放大图像(或称为上采样(ups ...

  2. 【转】图像的上采样(upsampling)与下采样(subsampled)

    转自:https://blog.csdn.net/stf1065716904/article/details/78450997 参考: http://blog.csdn.net/majinlei121 ...

  3. 机器学习入门-数据过采样(上采样)1. SMOTE

    from imblearn.over_sampling import SMOTE  # 导入 overstamp = SMOTE(random_state=0) # 对训练集的数据进行上采样,测试集的 ...

  4. 图像的上采样(upsampling)与下采样(subsampled)

    缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略图. 放大图像(或称为上采样(upsampli ...

  5. 上采样和PixelShuffle(转)

    有些地方还没看懂, mark一下 文章来源: https://blog.csdn.net/g11d111/article/details/82855946 去年曾经使用过FCN(全卷积神经网络)及其派 ...

  6. upsampling(上采样)& downsampled(降采样)

    缩小图像 缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的是两个: 使得图像符合显示区域的大小: 生成对应图像的缩略图: 下采样的原理: 对于一幅图像尺寸为 ...

  7. 图像上采样(图像插值)增取样(Upsampling)或内插(Interpolating)下采样(降采样),

    缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略图.放大图像(或称为上采样(upsamplin ...

  8. opencv::图像上采样和降采样

    图像金字塔概念 . 我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔 . 一个图像金字 ...

  9. 卷积和池化的区别、图像的上采样(upsampling)与下采样(subsampled)

    1.卷积 当从一个大尺寸图像中随机选取一小块,比如说 8x8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8x8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去. ...

随机推荐

  1. ubuntu安装supervisor

    1. Ubuntu14中supervisor的安装及配置 2. Ubuntu 14.04下进程管理工具supervisor安装 3. Supervisor使用教程 4. supervisor在deep ...

  2. idou老师教你学Istio 28:istio-proxy check 的缓存

    功能概述 istio-proxy主要的功能是连接istio的控制面组件和envoy之间的交互,其中check的功能是将envoy收集的attributes信息上报给mixer,在istio中有几十种a ...

  3. 使用pyinstaller打包使用cx_Oracle模块的程序出现The specified module could not be found的问题

    pyinstaller看起来并不会将动态链接库自动打包,所以我们需要告诉pyinstaller要打包哪些动态链接库,步骤如下(假设python文件名为 oracletest.py): 1. 使用pyi ...

  4. 【ZZNU-oj-2116:人间不值得】(1亿以内的货币拼音转数值求折扣价原价)--hash+String大法好+字符串处理+超大暴力模拟题

    B : 人间不值得 概览问题列表状态排名编辑 Progress Bar 时间限制:1 Sec 内存限制:256 MiB提交:146 答案正确:12 提交 编辑 题目描述 家缠万贯来几时,我今停杯一问之 ...

  5. [唐胡璐]Selenium技巧 - 处理Windows程序(进程)

    Selenium WebDriver java 提供了一个专门的WindowsUtils类去和Windows操作系统交互。 就像我们之前说过有时候跑完脚本后,IEDriverServer.exe进程没 ...

  6. vue.js 常用指令用法

    v-if v-if指令可以完全根据表达式的值在DOM中生成或移除一个元素. 如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除: 否则,对应元素的一个克隆将被重新插入DOM中,代码如 ...

  7. python自动华 (一)

    Python自动化 [第一篇]:Python简介和入门 Python简介: 一.什么是python Python是一门动态解释性的强类型定义语言. pythonde 特点:“优雅”.“明确”.“简单” ...

  8. 怎么学好js

    Js给人那种感觉的原因多半是因为它如下的特点: A:本身知识很抽象.晦涩难懂,如:闭包.内置对象.DOM. B:本身内容很多,如函数库.对象库就一大堆. C:混合多种编程思想.它里面不但牵涉面向过程编 ...

  9. C++基础--if/else和switch/case的区别

    if和switch的区别: 一.语句的格式: if/else的写法格式如下: int nA, nB; scanf_s("%d", &nA); //输入整数并赋值给变量a s ...

  10. 解决MySQL5.7在MAC下登录ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)问题

    问题描述 今天在MAC上安装完MYSQL后,MYSQL默认给分配了一个默认密码,但当自己在终端上使用默认密码登录的时候,总会提示一个授权失败的错误:ERROR 1045 (28000): Access ...