示例#1
0
    def __init__(self):
        super(light_DSFD, self).__init__()

        self.conv1 = CRelu(3, 32, kernel_size=7, stride=4, padding=3)
        self.conv3 = CRelu(64, 64, kernel_size=5, stride=2, padding=2)

        self.inception1 = Inception2d(64)
        self.inception2 = Inception2d(64)
        self.inception3 = Inception2d(128)
        self.inception4 = Inception2d(128)
        self.maxpool1 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.maxpool2 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

        self.conv5_1 = BasicConv2d(128, 128, kernel_size=1, stride=1, padding=0)
        self.conv5_2 = BasicConv2d(128, 256, kernel_size=3, stride=2, padding=1)
        self.conv6_1 = BasicConv2d(256, 128, kernel_size=1, stride=1, padding=0)
        self.conv6_2 = BasicConv2d(128, 256, kernel_size=3, stride=2, padding=1)

        fpn_in = [64, 64, 128, 128, 256, 256]
        cpm_in = [64, 64, 64, 64, 64, 64]
        fpn_channel = 64
        cpm_channels = 64
        output_channels = cpm_in

        # fpn
        self.smooth3 = nn.Conv2d( fpn_channel, fpn_channel, kernel_size=1, stride=1, padding=0)
        self.smooth2 = nn.Conv2d( fpn_channel, fpn_channel, kernel_size=1, stride=1, padding=0)
        self.smooth1 = nn.Conv2d( fpn_channel, fpn_channel, kernel_size=1, stride=1, padding=0)
        self.upsample = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=False)
        self.eltmul = nn.EltMul()

        self.latlayer6 = nn.Conv2d( fpn_in[5], fpn_channel, kernel_size=1, stride=1, padding=0)
        self.latlayer5 = nn.Conv2d( fpn_in[4], fpn_channel, kernel_size=1, stride=1, padding=0)
        self.latlayer4 = nn.Conv2d( fpn_in[3], fpn_channel, kernel_size=1, stride=1, padding=0)
        self.latlayer3 = nn.Conv2d( fpn_in[2], fpn_channel, kernel_size=1, stride=1, padding=0)
        self.latlayer2 = nn.Conv2d( fpn_in[1], fpn_channel, kernel_size=1, stride=1, padding=0)
        self.latlayer1 = nn.Conv2d( fpn_in[0], fpn_channel, kernel_size=1, stride=1, padding=0)

        # cpm
        self.cpm1 = Inception2d(cpm_in[0])
        self.cpm2 = Inception2d(cpm_in[1])
        self.cpm3 = Inception2d(cpm_in[2])
        self.cpm4 = Inception2d(cpm_in[3])
        self.cpm5 = Inception2d(cpm_in[4])
        self.cpm6 = Inception2d(cpm_in[5])

        face_head = face_multibox(output_channels, [1, 1, 1, 1, 1, 1], 2 , cpm_channels)  
        self.loc = nn.ModuleList(face_head[0])
        self.conf = nn.ModuleList(face_head[1])

        self.softmax = nn.Softmax(dim=-1)
示例#2
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 kernel_sizes,
                 strides=None,
                 paddings=None,
                 with_pool=True):
        super(Conv_Block, self).__init__()
        assert len(in_channels) == len(out_channels)
        assert len(out_channels) == len(kernel_sizes)
        if strides is not None:
            assert len(kernel_sizes) == len(strides)

        self.pool = None
        if with_pool:
            self.pool = nn.MaxPool2d(kernel_size=2, stride=2)

        groups = len(in_channels)
        convs = []
        for i in range(groups):
            convs.append(
                nn.Conv2d(in_channels=in_channels[i],
                          out_channels=out_channels[i],
                          kernel_size=kernel_sizes[i],
                          stride=strides[i],
                          padding=paddings[i]))
            convs.append(nn.ReLU(inplace=True))
        self.feature = nn.Sequential(*convs)
示例#3
0
    def __init__(self):
        super(HR, self).__init__()

        self.conv = ConvBlock(3, 64, 7, 2, add_relu=True)
        self.pool = nn.MaxPool2d(3, 2, 1)

        self.res2a = ResidualBlock('res2a', 64, 64, 256, downsample=True)
        self.res2b = ResidualBlock('res2b', 256, 64, 256)
        self.res2c = ResidualBlock('res2c', 256, 64, 256)

        self.res3a = ResidualBlock('res3a', 256, 128, 512, downsample=True)
        self.res3b1 = ResidualBlock('res3b1', 512, 128, 512)
        self.res3b2 = ResidualBlock('res3b2', 512, 128, 512)
        self.res3b3 = ResidualBlock('res3b3', 512, 128, 512)

        self.res4a = ResidualBlock('res4a', 512, 256, 1024, downsample=True)
        self.res4bX = nn.ModuleList()
        for i in range(0, 22):
            self.res4bX.append(ResidualBlock('res4bX', 1024, 256, 1024))

        # Detection Head
        self.score_res4 = ConvBlock(1024, 125, 1, bias=True, add_relu=False, add_bn=False)
        self.score4 = ConvTransLayer(125, 125, 4, 2, 0)

        self.score_res3 = ConvBlock(512, 125, 1, bias=True, add_relu=False, add_bn=False)

        self.eltadd = nn.EltAdd()
示例#4
0
    def build_conv_block(self,
                         in_channels:  int,
                         out_channels: int,
                         kernel_size:  int = 3,
                         stride:       int = 1,
                         padding:      int = 1,
                         n_conv:       int = 2,
                         with_pool:    bool = False):
        layers = []

        if with_pool:
            layers.append(nn.MaxPool2d(kernel_size=2, stride=2))

        # convx_1
        layers += [
            nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, stride=stride, padding=padding),
            nn.ReLU()
        ]
        # convx_2 -> convx_(n_conv)
        for i in range(1, n_conv):
            add_layers = [
                nn.Conv2d(in_channels=out_channels, out_channels=out_channels, kernel_size=kernel_size, stride=stride, padding=padding),
                nn.ReLU()
            ]
            layers += add_layers

        # return as sequential
        return nn.Sequential(*layers)
    def __init__(self):
        super(YuFaceDetectNet, self).__init__()
        self.num_classes = 2

        self.model1 = Conv_2layers(3, 32, 16, 2)
        self.model2 = Conv_2layers(16, 32, 32, 1)
        self.model3 = Conv_3layers(32, 64, 32, 64, 1)
        self.model4 = Conv_3layers(64, 128, 64, 128, 1)
        self.model5 = Conv_3layers(128, 256, 128, 256, 1)
        self.model6 = Conv_3layers(256, 256, 256, 256, 1)

        self.pool1 = nn.MaxPool2d(2, 2)
        self.pool2 = nn.MaxPool2d(2, 2)
        self.pool3 = nn.MaxPool2d(2, 2)
        self.pool4 = nn.MaxPool2d(2, 2)
        self.pool5 = nn.MaxPool2d(2, 2)


        self.loc, self.conf = self.multibox(self.num_classes)
        self.softmax = nn.Softmax(dim=-1)
示例#6
0
    def __init__(self):
        super(SHF, self).__init__()

        self.conv1 = self.build_conv_block(3, 64, with_pool=True)
        self.conv2 = self.build_conv_block(64, 128, with_pool=True)
        self.conv3 = self.build_conv_block(128, 256, n_conv=3, with_pool=True)
        self.conv4 = self.build_conv_block(256, 512, n_conv=3)

        self.pool4 = nn.MaxPool2d(2, 2)
        self.conv5 = self.build_conv_block(512, 512, n_conv=3)
        self.conv5_256 = self.build_conv_block(512,
                                               256,
                                               1,
                                               padding=0,
                                               n_conv=1)
        self.conv5_256_up = nn.ConvTranspose2d(256,
                                               256,
                                               kernel_size=4,
                                               stride=2,
                                               padding=1,
                                               groups=256,
                                               bias=False)

        self.conv4_256 = self.build_conv_block(512,
                                               256,
                                               1,
                                               padding=0,
                                               n_conv=1)

        self.conv4_fuse_final = self.build_conv_block(512, 512, n_conv=1)
        self.conv4_fuse_final_dim_red = self.build_conv_block(512,
                                                              128,
                                                              n_conv=1)

        self.head1 = self.build_conv_block(128,
                                           128,
                                           padding=1,
                                           dilation=1,
                                           n_conv=1)
        self.head2 = self.build_conv_block(128,
                                           128,
                                           padding=2,
                                           dilation=2,
                                           n_conv=1)
        self.head4 = self.build_conv_block(128,
                                           128,
                                           padding=4,
                                           dilation=4,
                                           n_conv=1)

        self.bbox_head, self.cls_head = self.build_det_head()
        self.softmax = nn.Softmax(dim=1)
示例#7
0
    def __init__(self):
        super(FaceBoxes, self).__init__()
        self.num_classes = 2

        self.conv1 = CRelu(3, 24, kernel_size=7, stride=4, padding=3)
        self.maxpool1 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.conv2 = CRelu(48, 64, kernel_size=5, stride=2, padding=2)
        self.maxpool2 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

        self.inception1 = Inception()
        self.inception2 = Inception()
        self.inception3 = Inception()

        self.conv3_1 = BasicConv2d(128,
                                   128,
                                   kernel_size=1,
                                   stride=1,
                                   padding=0)
        self.conv3_2 = BasicConv2d(128,
                                   256,
                                   kernel_size=3,
                                   stride=2,
                                   padding=1)

        self.conv4_1 = BasicConv2d(256,
                                   128,
                                   kernel_size=1,
                                   stride=1,
                                   padding=0)
        self.conv4_2 = BasicConv2d(128,
                                   256,
                                   kernel_size=3,
                                   stride=2,
                                   padding=1)

        self.loc, self.conf = self.multibox(self.num_classes)

        self.softmax = nn.Softmax(dim=-1)
示例#8
0
def make_layers(cfg, batch_norm=False):
    layers = []
    in_channels = 3
    for v in cfg:
        if v == 'M':
            layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
        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
    return layers
示例#9
0
    def __init__(self):
        super(SFA, self).__init__()

        #                        M0,  M1,  M2,  M3
        self.ssh_in_channels  = [128, 128, 512, 512]
        self.ssh_out_channels = [256, 256, 512, 512]

        self.conv1 = self.build_conv_block(in_channels=3,   out_channels=64,  n_conv=2, with_pool=False)
        self.conv2 = self.build_conv_block(in_channels=64,  out_channels=128, n_conv=2, with_pool=True)
        self.conv3 = self.build_conv_block(in_channels=128, out_channels=256, n_conv=3, with_pool=True)
        self.conv4 = self.build_conv_block(in_channels=256, out_channels=512, n_conv=3, with_pool=True)
        self.conv5 = self.build_conv_block(in_channels=512, out_channels=512, n_conv=3, with_pool=True)

        # M3
        self.pool6 = nn.MaxPool2d(2, 2)
        self.m3 = SSH(self.ssh_in_channels[3], self.ssh_out_channels[3], index=3)

        # M2
        self.m2 = SSH(self.ssh_in_channels[2], self.ssh_out_channels[2], index=2)

        # share by M1 and M2
        self.conv4_128 = self.build_conv_block(in_channels=512, out_channels=128, kernel_size=1, padding=0, n_conv=1, with_pool=False)

        # M1
        self.conv5_128 = self.build_conv_block(in_channels=512, out_channels=128, kernel_size=1, padding=0, n_conv=1, with_pool=False)
        self.conv5_128_up = nn.ConvTranspose2d(in_channels=128, out_channels=128, kernel_size=4, stride=2, padding=1, groups=128, bias=False)
        self.conv4_fuse = nn.EltAdd()
        self.conv4_fuse_final = self.build_conv_block(in_channels=128, out_channels=128, kernel_size=3, padding=1, n_conv=1, with_pool=False)
        self.m1 = SSH(self.ssh_in_channels[1], self.ssh_out_channels[1], index=1)

        # M0
        self.conv3_128 = self.build_conv_block(in_channels=256, out_channels=128, kernel_size=1, padding=0, n_conv=1, with_pool=False)
        self.conv4_128_up = nn.ConvTranspose2d(in_channels=128, out_channels=128, kernel_size=4, stride=2, padding=1, groups=128, bias=False)
        self.conv3_fuse = nn.EltAdd()
        self.conv3_fuse_final = self.build_conv_block(in_channels=128, out_channels=128, kernel_size=3, padding=1, n_conv=1, with_pool=False)
        self.m0 = SSH(self.ssh_in_channels[0], self.ssh_out_channels[0], index=0)

        # detection heads
        self.bbox_head, self.cls_head = self.build_detect_head()
        self.softmax = nn.Softmax(dim=-1)
示例#10
0
 def build_conv_block(self,
                      in_channels: int,
                      out_channels: int,
                      kernel_size: int = 3,
                      stride: int = 1,
                      padding: int = 1,
                      dilation: int = 1,
                      n_conv: int = 2,
                      with_pool: bool = False):
     layers = [
         nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding,
                   dilation),
         nn.ReLU()
     ]
     for i in range(1, n_conv):
         layers += [
             nn.Conv2d(out_channels, out_channels, kernel_size, stride,
                       padding),
             nn.ReLU()
         ]
     if with_pool:
         layers += [nn.MaxPool2d(2, 2)]
     return nn.Sequential(*layers)
示例#11
0
 def __init__(self):
     super(CSP, self).__init__()
     #####
     # Backbone
     #####
     # build resnet50
     # base
     self.base_conv = nn.Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3))
     self.base_bn = nn.BatchNorm2d(64)
     self.base_relu = nn.ReLU(inplace=True)
     self.base_maxpooling = nn.MaxPool2d(kernel_size=(3, 3), stride=2, padding=1)
     # layer1
     l1ic = [64, 256, 256]
     l1oc = [256, 256, 256]
     self.layer1_bottleneck0 = ConvBlock(    in_channels=l1ic[0], out_channels=l1oc[0], kernel_size=3, padding=1)
     self.layer1_bottleneck1 = IdentityBlock(in_channels=l1ic[1], out_channels=l1oc[1], kernel_size=3, padding=1)
     self.layer1_bottleneck2 = IdentityBlock(in_channels=l1ic[2], out_channels=l1oc[2], kernel_size=3, padding=1)
     # layer2
     l2ic = [256, 512, 512, 512]
     l2oc = [512, 512, 512, 512]
     self.layer2_bottleneck0 = ConvBlock(    in_channels=l2ic[0], out_channels=l2oc[0], kernel_size=3, stride=2, padding=1)
     self.layer2_bottleneck1 = IdentityBlock(in_channels=l2ic[1], out_channels=l2oc[1], kernel_size=3, padding=1)
     self.layer2_bottleneck2 = IdentityBlock(in_channels=l2ic[2], out_channels=l2oc[2], kernel_size=3, padding=1)
     self.layer2_bottleneck3 = IdentityBlock(in_channels=l2ic[3], out_channels=l2oc[3], kernel_size=3, padding=1)
     # layer3
     l3ic = [512, 1024, 1024, 1024, 1024, 1024]
     l3oc = [1024, 1024, 1024, 1024, 1024, 1024]
     self.layer3_bottleneck0 = ConvBlock(    in_channels=l3ic[0], out_channels=l3oc[0], kernel_size=3, stride=2, padding=1)
     self.layer3_bottleneck1 = IdentityBlock(in_channels=l3ic[1], out_channels=l3oc[1], kernel_size=3, padding=1)
     self.layer3_bottleneck2 = IdentityBlock(in_channels=l3ic[2], out_channels=l3oc[2], kernel_size=3, padding=1)
     self.layer3_bottleneck3 = IdentityBlock(in_channels=l3ic[3], out_channels=l3oc[3], kernel_size=3, padding=1)
     self.layer3_bottleneck4 = IdentityBlock(in_channels=l3ic[4], out_channels=l3oc[4], kernel_size=3, padding=1)
     self.layer3_bottleneck5 = IdentityBlock(in_channels=l3ic[5], out_channels=l3oc[5], kernel_size=3, padding=1)
     # layer4
     l4ic = [1024, 2048, 2048]
     l4oc = [2048, 2048, 2048]
     self.layer4_bottleneck0 = ConvBlock(    in_channels=l4ic[0], out_channels=l4oc[0], kernel_size=3, padding=2, dilation=2)
     self.layer4_bottleneck1 = IdentityBlock(in_channels=l4ic[1], out_channels=l4oc[1], kernel_size=3, padding=2, dilation=2)
     self.layer4_bottleneck2 = IdentityBlock(in_channels=l4ic[2], out_channels=l4oc[2], kernel_size=3, padding=2, dilation=2)
     #####
     # CSP specific layers
     #####
     # p3up
     self.p3up_trconv = nn.ConvTranspose2d(512, 256, kernel_size=4, stride=2, padding=1)
     self.p3up_l2norm = nn.L2Norm2d(256, 10)
     # p4up
     self.p4up_trconv = nn.ConvTranspose2d(1024, 256, kernel_size=4, stride=4, padding=0)
     self.p4up_l2norm = nn.L2Norm2d(256, 10)
     # p5up
     self.p5up_trconv = nn.ConvTranspose2d(2048, 256, kernel_size=4, stride=4, padding=0)
     self.p5up_l2norm = nn.L2Norm2d(256, 10)
     # detection head - feat
     self.feat_conv = nn.Conv2d(768, 256, kernel_size=3, padding=1)
     self.feat_bn = nn.BatchNorm2d(256)
     self.feat_relu = nn.ReLU(inplace=True)
     # detection head - class
     self.class_conv = nn.Conv2d(256, 1, kernel_size=1, bias=True)
     self.class_sigmoid = nn.Sigmoid()
     # detection head - regr
     self.regr_conv = nn.Conv2d(256, 2, kernel_size=1)
     self.regr_relu = nn.ReLU(inplace=True)
     # detection head - offset
     self.offset_conv = nn.Conv2d(256, 2, kernel_size=1)
     self.offset_relu = nn.ReLU(inplace=True)
示例#12
0
from _utils import test_on

import sys
sys.path.append('.')
from flops_counter import nn
from flops_counter.tensorsize import TensorSize

######
# test on MaxPool2d
######
mxpool2d = {
    'layers': [
        nn.MaxPool2d(3, 2, 1) # same shape
    ],
    'ins': [
        TensorSize([1, 64, 112, 112])
    ],
    'out_shape': [
        TensorSize([1, 64, 56, 56])
    ],
    'out_flops': [
        602112
    ]
}

test_on(mxpool2d)
示例#13
0
    def __init__(self):
        super(SRN, self).__init__()

        block = Bottleneck
        layers = [3, 4, 6, 3]
        self.inplanes = 64
        self.conv1 = nn.Conv2d(3,
                               64,
                               kernel_size=7,
                               stride=2,
                               padding=3,
                               bias=False)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        self.layer1 = self._make_layer(block, 64, layers[0])
        self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
        self.layer3 = self._make_layer(block, 256, layers[2], stride=2)
        self.layer4 = self._make_layer(block, 512, layers[3], stride=2)
        self.layer5 = nn.Conv2d(2048, 1024, kernel_size=3, stride=2, padding=1)
        self.layer6 = nn.Conv2d(1024, 256, kernel_size=3, stride=2, padding=1)

        self.c5_lateral = nn.Conv2d(2048,
                                    256,
                                    kernel_size=1,
                                    stride=1,
                                    padding=0)
        self.c4_lateral = nn.Conv2d(1024,
                                    256,
                                    kernel_size=1,
                                    stride=1,
                                    padding=0)
        self.c3_lateral = nn.Conv2d(512,
                                    256,
                                    kernel_size=1,
                                    stride=1,
                                    padding=0)
        self.c2_lateral = nn.Conv2d(256,
                                    256,
                                    kernel_size=1,
                                    stride=1,
                                    padding=0)

        self.eltadd = nn.EltAdd()
        self.upsample = nn.Upsample(scale_factor=2,
                                    mode='bilinear',
                                    align_corners=False)

        self.p7_conv = nn.Conv2d(256, 256, kernel_size=3, stride=2, padding=1)
        self.p6_conv = nn.Conv2d(256, 256, kernel_size=3, stride=2, padding=1)
        self.p5_conv = nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1)
        self.p4_conv = nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1)
        self.p3_conv = nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1)
        self.p2_conv = nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1)

        self.c7_conv = nn.Conv2d(256, 256, kernel_size=1, stride=1, padding=0)
        self.c6_conv = nn.Conv2d(1024, 256, kernel_size=1, stride=1, padding=0)
        self.c5_conv = nn.Conv2d(2048, 256, kernel_size=1, stride=1, padding=0)
        self.c4_conv = nn.Conv2d(1024, 256, kernel_size=1, stride=1, padding=0)
        self.c3_conv = nn.Conv2d(512, 256, kernel_size=1, stride=1, padding=0)
        self.c2_conv = nn.Conv2d(256, 256, kernel_size=1, stride=1, padding=0)

        # subnet_first stage
        num_anchors = 2 * 1
        self.cls_subnet = nn.Sequential(
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            RFE(256, 256),
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
        )
        self.box_subnet = nn.Sequential(
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            RFE(256, 256),
            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
        )
        self.cls_subnet_pred = nn.Conv2d(256,
                                         num_anchors * 1,
                                         kernel_size=1,
                                         stride=1,
                                         padding=0)
        self.box_subnet_pred = nn.Conv2d(256,
                                         num_anchors * 4,
                                         kernel_size=1,
                                         stride=1,
                                         padding=0)

        self.sigmoid = nn.Sigmoid()