变形卷积在Ubuntu下的环境配置

一、DCN-V1的配置

  使用变形卷积V1有两种方式:
  1、通过自定义op的方式在自己的python环境里定义deform_conv这一op。定义op的.cpp以及.cu文件可以参考git项目:
[mmdetection](https://github.com/open-mmlab/mmdetection)
  2、包torchvision的 较新版本(大于等于0.6.0)中已经定义好变形卷积。首先通过`pip install torchvision`安装最新版本,之后在pycharm里使用变形卷积的过程为:(我的环境下python版本为3.6)

import torch
from torchvision.ops import DeformConv2d

model = DeformConv2d(in_channels=1, out_channels=1, kernel_size=3, padding=1)
x = torch.rand(1, 1, 256, 256)
offset = torch.rand(1, 2*3*3, 256, 256)
out = model(x, offset)
print(out)

   为了使用更加方便,可以将DeformConv2d进一步封装成一个模块,这样调用时就和常规卷积nn.Conv2d()一样简单,代码如下:


class Deform_Conv_V1(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size=3, stride=1,
                 padding=1, dilation=1, groups=1, offset_group=1):
        super(Deform_Conv_V1, self).__init__()
        offset_channels = 2 * kernel_size * kernel_size
        self.conv_offset = nn.Conv2d(
            in_channels,
            offset_channels * offset_group,
            kernel_size = kernel_size,
            stride = stride,
            padding = padding,
            dilation= dilation,
        )
        self.DCN_V1 = ops.DeformConv2d(
            in_channels,
            out_channels,
            kernel_size= kernel_size,
            stride= stride,
            padding= padding,
            dilation = dilation,
            groups = groups,
            bias = False
        )
    def forward(self, x):
        offset = self.conv_offset(x)
        # print(offset.shape)
        return self.DCN_V1(x, offset)

  封装以后,如果想在我们的模型中使用DCN-V1,只需要添加如下代码:

Deform_Conv_V1(in_channel=1, out_channel=1, kernel_size=3, padding=1)

二 、DCN-V2的配置

  目前,使用V2只能通过自定义op的方式。还是参考第一部分给的链接的源码。在Github上下载下来项目源码,我们只需要其中的一个子文件夹mmdection/mmdet/ops/dcn。
  将需要的文件整理到自己的项目目录下,参考我的是XXX\Models\ops。
  之后,在自己的环境下编写相应的setup.py脚本,该脚本用于编译定义的.cpp和.cu文件。编译时,需要用pip安装pytest、pybind11,若还是编译失败,则需要安装python3-dev和pyyaml。
   直接`pip install python3-dev`会失败,执行以下两条命令:

       sudo  apt-get install aptitude
       sudo aptitude install python3-dev   

  这样就基本安装好了所必须的库。接下来编写脚本setup.py。这一脚本的编写很简单,参考我的,需要改的只有name以及路径。
from setuptools import setup
from torch.utils.cpp_extension import BuildExtension, CUDAExtension
setup(
    name = 'Deform_conv',          # 这里是你自定义的op的名字,自己设置即可
    ext_modules = [
        CUDAExtension('Deform_conv', [
             '/home/XXX/Models/ops/src/deform_conv_cuda.cpp',    # 自定义op的cpp文件的路径
             '/home/XXX/Models/ops/src/deform_conv_cuda_kernel.cu',    # 自定义op的cu文件的路径
        ]),
    ],
    cmdclass={
        'build_ext': BuildExtension
    }
)

  编写好脚本以后,在setup.py目录下,打开命令行,切换到对应的环境(如我想在我的名为DCN的conda环境下安装变形卷积,就切换到DCN这一环境),执行python setup.py install进行编译。编译成功后,import Deform_conv应该就没问题了。

我编译成功的环境的配置为:
python3.6 torchvision0.4.2 cuda10.0 gcc5.4

你可能感兴趣的:(Linux,深度学习,python)