项目作者: 4uiiurz1

项目描述 :
PyTorch implementation of Deformable ConvNets v2 (Modulated Deformable Convolution)
高级语言: Python
项目地址: git://github.com/4uiiurz1/pytorch-deform-conv-v2.git
创建时间: 2018-12-12T10:15:15Z
项目社区:https://github.com/4uiiurz1/pytorch-deform-conv-v2

开源协议:MIT License

下载


PyTorch implementation of Deformable ConvNets v2

This repository contains code for Deformable ConvNets v2 (Modulated Deformable Convolution) based on Deformable ConvNets v2: More Deformable, Better Results implemented in PyTorch. This implementation of deformable convolution based on ChunhuanLin/deform_conv_pytorch, thanks to ChunhuanLin.

TODO

  • Initialize weight of modulated deformable convolution based on paper
  • Learning rates of offset and modulation are set to different values from other layers
  • Results of ScaledMNIST experiments
  • Support different stride
  • Support deformable group
  • DeepLab + DCNv2
  • Results of VOC segmentation experiments

Requirements

  • Python 3.6
  • PyTorch 1.0

Usage

Replace regular convolution (following model’s conv2) with modulated deformable convolution:

  1. class ConvNet(nn.Module):
  2. def __init__(self):
  3. self.relu = nn.ReLU(inplace=True)
  4. self.pool = nn.MaxPool2d((2, 2))
  5. self.avg_pool = nn.AdaptiveAvgPool2d(1)
  6. self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
  7. self.bn1 = nn.BatchNorm2d(32)
  8. self.conv2 = nn.DeformConv2d(32, 64, 3, padding=1, modulation=True)
  9. self.bn2 = nn.BatchNorm2d(64)
  10. self.fc = nn.Linear(64, 10)
  11. def forward(self, x):
  12. x = self.relu(self.bn1(self.conv1(x)))
  13. x = self.pool(x)
  14. x = self.relu(self.bn2(self.conv2(x)))
  15. x = self.avg_pool(x)
  16. x = x.view(x.shape[0], -1)
  17. x = self.fc(x)
  18. return x

Training

ScaledMNIST

ScaledMNIST is randomly scaled MNIST.

Use modulated deformable convolution at conv3~4:

  1. python train.py --arch ScaledMNISTNet --deform True --modulation True --min-deform-layer 3

Use deformable convolution at conv3~4:

  1. python train.py --arch ScaledMNISTNet --deform True --modulation False --min-deform-layer 3

Use only regular convolution:

  1. python train.py --arch ScaledMNISTNet --deform False --modulation False

Results

ScaledMNIST

Model Accuracy (%) Loss
w/o DCN 97.22 0.113
w/ DCN @conv4 98.60 0.049
w/ DCN @conv3~4 98.95 0.035
w/ DCNv2 @conv4 98.45 0.058
w/ DCNv2 @conv3~4 99.21 0.027