计算机系统应用教程网站

网站首页 > 技术文章 正文

MSRA视觉组最新研究:可变形卷积网络及其官方实现

btikc 2024-10-03 15:27:23 技术文章 10 ℃ 0 评论

机器之心报道

近日一篇名为《可变形卷积网络(deformable convolutional networks)》的论文在业内引起了极大的关注,这篇文章对此项研究进行了解读并提供实现方法。

摘要

由于构造卷积神经网络 (CNN) 所用的模块中几何结构是固定的,其几何变换建模的能力本质上是有限的。在我们的工作中,我们引入了两种新的模块来提高卷积神经网络 (CNN) 对变换的建模能力,即可变形卷积 (deformable convolution) 和可变形兴趣区域池化 (deformable ROI pooling)。它们都是基于在模块中对空间采样的位置信息作进一步位移调整的想法,该位移可在目标任务中学习得到,并不需要额外的监督信号。新的模块可以很方便在现有的卷积神经网络 (CNN) 中取代它们的一般版本,并能很容易进行标准反向传播端到端的训练,从而得到可变形卷积网络 (deformable convolutional network)。大量的实验验证了我们的方法在目标检测和语义分割这些复杂视觉任务上的有效性。代码将会公布。

Figure 1 展示了卷积核大小为 3x3 的正常卷积和可变形卷积的采样方式,(a) 所示的正常卷积规律的采样 9 个点(绿点),(b)(c)(d) 为可变形卷积,在正常的采样坐标上加上一个位移量(蓝色箭头),其中 (c)(d) 作为 (b) 的特殊情况,展示了可变形卷积可以作为尺度变换,比例变换和旋转变换的特殊情况

Figure 2 展示了可变形卷积框架,首先通过一个小卷积层(绿色)的输出得到可变形卷积所需要的位移量,然后将其作用在卷积核(蓝色)上,达到可变形卷积的效果。

Figure 3 展示了可变形兴趣区域池化框架。首先通过标准的兴趣区域池化(绿色)获得兴趣区域对应的特征,该特征通过一个全连接层得到兴趣区域每个部位的位移量。用该位移作用在可变形兴趣区域池化(蓝色)上,以获得不局限于兴趣区域固定网格的特征

Figure 4 展示了两层结构,拥有标准固定感受野的卷积层 (a) 与拥有自适应感受野的可变性卷积层。最上方是两个在不同大小的物体上的激活单元,中间是该单元所需的采样位置,最下方是中间的采样点分别所需的采样位置

Figure 5 对可变形卷积的效果进行了可视化,其中左中右分别展示了激活单元(绿点)倒推三层可变形卷积层以后在背景/小物体/大物体上的所采样的点

Figure 6 对可变形兴趣区域池化的效果进行可视化,使用了 R-FCN,兴趣区域网格大小为 3x3,可以发现现在池化区域基本覆盖在物体上。

Table 1 在各种方法和各种数据集上,使用不同层数的可变形卷积对结果带来的影响,其中 DeepLab 在 VOC2012 与 Cityscapes 的训练集上进行训练,在验证集上进行测试,class-aware RPN, Faster R-CNN 与 R-FCN 在 VOC2007 与 VOC2012 的训练验证集上进行训练,在 VOC2007 的测试集上进行测试。

Table 2 在使用可变形卷积与可变形兴趣区域池化以后,class-aware RPN,Faster RCNN,R-FCN 在 COCO 数据集上的结果,训练使用 trainval 数据集,测试使用 test-dev 数据集,其中 M 表示多尺度训练,B 表示迭代边界框平均。


该研究团队如其承诺的那样在 GitHub 上公布了相关代码。因此机器之心对该项目的 README.md 内容进行了编译介绍。

  • 项目地址:https://github.com/msracver/Deformable-ConvNets

  • 论文地址:https://arxiv.org/abs/1703.06211

本代码库的主要贡献者包括:熊郁文、齐浩之、张国栋、李益、代季峰、Bin Xiao、危夷晨。

声明

这是可变形卷积网络(Deformable ConvNets)的官方实现,需要注意:

  • 这个原实现基于我们在 Windows 上的内部 Caffe 版本。如果切换平台,由于各种平台有许多不同的具体细节,所以最终结果的准确度和运行时间会稍有不同。

  • 本代码是在官方的 MXNet@(commit 62ecb60) 测试的:https://github.com/dmlc/mxnet/tree/62ecb60,并使用了额外的用于可变形卷积网络的算子。

  • 我们基于在 ImageNet 上预训练的 ResNet-v1-101训练了我们的模型,并且使用了一个模型转换器。被转换后模型的准确度略低一点(在 ImageNet 验证集上的 Top-1 Error:24.0% v.s. 23.6%)。

  • 目前其仅包含使用 R-FCN 的可变形卷积网络。使用 DeepLab 的可变形卷积网络将在不久之后发布。

  • 本代码库使用了来自 MXNet rcnn example 和 mx-rfcn 的代码

介绍

可变形卷积网络最早在这篇 arXiv 技术报告中描述:https://arxiv.org/abs/1703.06211。

R-FCN 最早见于这篇 NIPS 2016 论文:https://arxiv.org/abs/1605.06409。

证书

? Microsoft, 2017. Licensed under an Apache-2.0 license.

引用可变形卷积网络

如果你要在你的研究中使用可变形卷积网络,请考虑引用:

@article{dai17dcn,

Author = {Jifeng Dai, Haozhi Qi, Yuwen Xiong, Yi Li, Guodong Zhang, Han Hu, Yichen Wei},

Title = {Deformable Convolutional Networks},

Journal = {arXiv preprint arXiv:1703.06211},

Year = {2017}

}

@inproceedings{dai16rfcn,

Author = {Jifeng Dai, Yi Li, Kaiming He, Jian Sun},

Title = {{R-FCN}: Object Detection via Region-based Fully Convolutional Networks},

Conference = {NIPS},

Year = {2016}

}

主要结果

注:运行时间是在单个 Maxwell Titan X GPU 上统计得到的(推理阶段的 mini-batch 大小是 1)

软件需求

1.Python 软件包里面可能没有 cython、opencv-python >= 3.2.0 和 easydict。如果你的系统已经设置了 pip,你可以通过以下代码获取和安装这些包:

pip install Cython

pip install opencv-python==3.2.0.6

pip install easydict==1.6

2. 对于 Windows 用户,编译 cython 模块需要 Visual Studio 2015

硬件需求

任何至少有 4GB 内存的英伟达 GPU 应该都可以。

安装

1. 克隆这个可变形卷积网络代码库:

git clone https://github.com/msracver/Deformable-ConvNets.git

2.Windows 用户请运行 cmd .\init.bat;Linux 用户请运行 sh ./init.sh。该脚本会自动编译 cython 模块并创建一些文件夹。

3. 将 ./rfcn/operator_cxx 中的 operator 复制到 $(YOUR_MXNET_FOLDER)/src/operator/contrib 并重新编译 MXNet。

4. 请按照 MXNet 的官方指南安装 MXNet。对于高阶用户,你可以将你的 Python 包放到 ./external/mxnet/$(YOUR_MXNET_PACKAGE),并修改 ./experiments/rfcn/cfgs/*.yaml 中的 MXNET_VERSION 到 $(YOUR_MXNET_PACKAGE)。这样你就可以快速切换不同的 MXNet 版本了。

演示(demo)

1. 要使用有我们训练的模型的 demo(在 COCO trainval 上训练的),请从 OneDrive 手动下载该模型:https://1drv.ms/u/s!AoN7vygOjLIQqmE7XqFVLbeZDfVN,并将其放置在 model/ 文件夹中。确保其看起来像这样:

./model/rfcn_dcn_coco-0000.params

./model/rfcn_coco-0000.params

2. 运行 demo:

python ./rfcn/demo.py

其默认运行可变形 R-FCN(Deformable R-FCN),并会给出一些预测结果,要运行 R-FCN,请使用:

python ./rfcn/demo.py --rfcn_only

我们不久后就将发布能够可视化其变形效果的可视化工具。

为训练和测试的准备

1. 请下载 COCO 和 VOC 2007+2012 数据,并按如下方式放置:

./data/coco/

./data/VOCdevkit/VOC2007/

./data/VOCdevkit/VOC2012/

2. 请从 OneDrive 手动下载在 ImageNet 上预训练的 ResNet-v1-101:https://1drv.ms/u/s!Am-5JzdW2XHzhqMEtxf1Ciym8uZ8sg,并将其放置到 .model/ 文件夹。确保其看起来像这样:

./model/pretrained_model/resnet_v1_101-0000.params

使用

1. 我们所有的实验设置(GPU 型号、数据集等)都保存为 yaml 文件,位于文件夹 ./experiments/rfcn/cfgs

2. 目前已经提供了 4 个配置文件,即用于 COCO/VOC 的 R-FCN 和用于 COCO/VOC 的 Deformable R-FCN。我们分别在 COCO 和 VOC 上使用了 8 个和 4 个 GPU 来训练模型。

3. 为了执行实验,请运行以对应配置文件为输入的 Python 脚本。比如,为了使用 ResNet-v1-101 在 COCO 上训练和测试可变形卷积网络,请使用以下命令:

python experiments\rfcn\rfcn_end2end_train_test.py --cfg

4. 请查看配置文件和我们的代码来了解更多细节。

其它

推荐使用不带 CuDNN 的 MXNet 版本。

代码已经在以下环境中进行了测试:

  • Ubuntu 14.04,一个 Maxwell Titan X GPU 和 Intel Xeon CPU E5-2620 v2 @ 2.10GHz

  • Windows Server 2012 R2,8 个 K40 GPU 和 Intel Xeon CPU E5-2650 v2 @ 2.60GHz

  • Windows Server 2012 R2,4 个 Pascal Titan X GPU 和 Intel Xeon CPU E5-2650 v4 @ 2.30GHz

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表