text: import torch
  import torch.nn as nn
  import torch.nn.functional as F
  from torch.autograd import Variable
  from layers import *
  import torchvision.transforms as transforms
  import torchvision.models as models
  import torch.backends.cudnn as cudnn
  
  def vgg(cfg, i, batch_norm=False):
      layers = []
      in_channels = i
      for v in cfg:
          if v == 'M':
              layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
          elif v == 'C':
              layers += [nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True)]
          else:
              conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)
              if batch_norm:
                  layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)]
              else:
                  layers += [conv2d, nn.ReLU(inplace=True)]
              in_channels = v
      pool5 = nn.MaxPool2d(kernel_size=3, stride=1, padding=1)
      conv6 = nn.Conv2d(512, 1024, kernel_size=3, padding=6, dilation=6)
      conv7 = nn.Conv2d(1024, 1024, kernel_size=1)
      layers += [pool5, conv6,
                 nn.ReLU(inplace=True), conv7, nn.ReLU(inplace=True)]
      return layers
  
  vgg_base = {
      '300': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'C', 512, 512, 512, 'M',
              512, 512, 512],
      '512': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'C', 512, 512, 512, 'M',
              512, 512, 512],
  }
  class BasicConv(nn.Module):
  
      def __init__(self, in_planes, out_planes, kernel_size, stride=1, padding=0, dilation=1, groups=1, relu=True, bn=True, bias=False):
          super(BasicConv, self).__init__()
          self.out_channels = out_planes
          self.conv = nn.Conv2d(in_planes, out_planes, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, groups=groups, bias=bias)
          self.bn = nn.BatchNorm2d(out_planes,eps=1e-5, momentum=0.01, affine=True) if bn else None
          self.relu = nn.ReLU(inplace=True) if relu else None
  
      def forward(self, x):
          x = self.conv(x)
          if self.bn is not None:
              x = self.bn(x)
          if self.relu is not None:
              x = self.relu(x)
          return x
  class BasicRFB_a(nn.Module):
  
      def __init__(self, in_planes, out_planes, stride=1, scale = 0.1):
          super(BasicRFB_a, self).__init__()
          self.scale = scale
          self.out_channels = out_planes
          inter_planes = in_planes //4
  
  
          self.branch0 = nn.Sequential(
              BasicConv(in_planes, inter_planes, kernel_size=1, stride=1),
              BasicConv(inter_planes, inter_planes, kernel_size=3, stride=1, padding=1,relu=False)
          )
          self.branch1 = nn.Sequential(
              BasicConv(in_planes, inter_planes, kernel_size=1, stride=1),
              BasicConv(inter_planes, inter_planes, kernel_size=(3,1), stride=1, padding=(1,0)),
              BasicConv(inter_planes, inter_planes, kernel_size=3, stride=1, padding=3, dilation=3, relu=False)
          )
          self.branch2 = nn.Sequential(
              BasicConv(in_planes, inter_planes, kernel_size=1, stride=1),
              BasicConv(inter_planes, inter_planes, kernel_size=(1,3), stride=stride, padding=(0,1)),
              BasicConv(inter_planes, inter_planes, kernel_size=3, stride=1, padding=3, dilation=3, relu=False)
          )
          '''
          self.branch3 = nn.Sequential(
                  BasicConv(in_planes, inter_planes, kernel_size=1, stride=1),
                  BasicConv(inter_planes, inter_planes, kernel_size=3, stride=1, padding=1),
                  BasicConv(inter_planes, inter_planes, kernel_size=3, stride=1, padding=3, dilation=3, relu=False)
                  )
          '''
          self.branch3 = nn.Sequential(
              BasicConv(in_planes, inter_planes//2, kernel_size=1, stride=1),
              BasicConv(inter_planes//2, (inter_planes//4)*3, kernel_size=(1,3), stride=1, padding=(0,1)),
              BasicConv((inter_planes//4)*3, inter_planes, kernel_size=(3,1), stride=stride, padding=(1,0)),
              BasicConv(inter_planes, inter_planes, kernel_size=3, stride=1, padding=5, dilation=5, relu=False)
          )
  
          self.ConvLinear = BasicConv(4*inter_planes, out_planes, kernel_size=1, stride=1, relu=False)
          self.shortcut = BasicConv(in_planes, out_planes, kernel_size=1, stride=stride, relu=False)
          self.relu = nn.ReLU(inplace=False)
      def forward(self,x):
          x0 = self.branch0(x)
          x1 = self.branch1(x)
          x2 = self.branch2(x)
          x3 = self.branch3(x)
  
          out = torch.cat((x0,x1,x2,x3),1)
          out = self.ConvLinear(out)
          short = self.shortcut(x)
          out = out*self.scale + short
          out = self.relu(out)
  
          return out
  