转载: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. [Selenium3+python3.6]自动化测试2-入门

    参考http://www.cnblogs.com/yoyoketang/p/6123890.html #coding=utf-8 #Import webdriver time module from ...

  2. 关于阿里云OSS上传图片之后会被旋转90度的解决办法

    原文:https://www.cnblogs.com/wuhjbk/p/10133596.html 问题描述:正常的图片前端上传到oss成功之后的资源地址.在html上引用的时候被旋转了90度oss资 ...

  3. less-@arguments变量

    @arguments变量:包含了所有传递进来的参数. 如果你不想单独处理每一个参数的话可以像这样写: /*arguments*/ //之前这么写 .border_arg(@w:30px,@c:red, ...

  4. python3 Pandas

    一.Pandas 1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,主要用于数据处理(数据整理,操作,存储,读取等) 2.http://pa ...

  5. 关于python logging模块读文档的几个心得

    1. logger是分层级的,root是所有logger的祖先. 2. root这个logger在执行logging.warning() 等一系列方法和basicConfig()的时候才会被初始化ha ...

  6. JNI线程、Linux常用命令、权限、防火墙配置

    JNI_OnLoad: 调用System.loadLibrary()函数时, 内部就会去查找so中的 JNI_OnLoad 函数,如果存在此函数则调用. JNI_OnLoad会: 告诉 VM 此 na ...

  7. PHP中将二维数组 转换成字符串

    function arr_to_str($arr) { $t ='' ; foreach ($arr as $v) { $v = join(",",$v); // 可以用implo ...

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

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

  9. Nginx中ngx_http_upstream_module模块

    用于将多个服务器器定义成服务器器组,⽽而由 proxy_pass , fastcgi_pass 等指令进⾏行行引⽤用upstream backend {server backend1.example. ...

  10. linux实操_shell系统函数

    basename函数: 功能:返回完整路径最后/的后面部分,常用于获取文件名. 基本语法: basename 路径 后缀 不加后缀:运行后 加后缀:运行后 dirname函数: 功能:返回完整路径最后 ...