转载: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. 共用dll如何扩展

    今天需要对一个多个项目共用的dll进行扩展.发现很难搞,然后老大告诉我共享的dll有一个属性指向各个平台自己的类型,这个类型是暴露在各个平台自己项目中的. 然后直接对这个属性进行扩展就行了,这个属性是 ...

  2. Reverse链表

    之前学习了关于reverse数组相关的东东(http://www.cnblogs.com/webor2006/p/6727419.html),这次再来对链表进行reverse一下,在面试中也很容易被问 ...

  3. go语言的defer语句

    转: https://www.jianshu.com/p/5b0b36f398a2 ---------------------------------------------------------- ...

  4. 开发神技能 | Python Mock 的入门

    Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代 ...

  5. 大数据之路week04--day03(网络编程)

    哎,怎么感觉自己变得懒了起来,更新博客的频率变得慢了起来,可能是因为最近得知识开始变得杂变得难了起来,之前在上课的时候,也没有好好听这一方面的知识,所以,现在可以说是在学的新的知识,要先去把新的知识思 ...

  6. JavaScript005,语法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. v-solt插槽

    https://www.jb51.net/article/157565.htm https://juejin.im/post/5c64e11151882562e4726d98

  8. nginx中ngx_http_access_module模块

    实现基于IP的访问控制功能指令:4.1 allow允许访问指定的⽹网络或地址Syntax: allow address | CIDR | unix:| all;Default: —Context: h ...

  9. Python+request+ smtplib 测试结果html报告邮件发送(下)《六》

    目录结构如下: 1.cfg.ini的配置信息写法如下: [email] ;--------------------------使用腾讯企业邮箱作为发件人的操作如下------------------- ...

  10. 一个ball例程带你进入 Halcon 世界

    * 此例程来自halcon自带例程,请打开 halcon->ctrl+E 打开例程->搜索框中输入ball added by xiejl* ball.hdev: Inspection of ...