示例#1
0
    def _pyramidbox(self):
        self.ssh_conv3_l2norm = nn.L2Norm2d(512, 10)
        self.ssh_conv4_l2norm = nn.L2Norm2d(512, 8)
        self.ssh_conv5_l2norm = nn.L2Norm2d(512, 5)

        self.SSHchannels = [512, 512, 512, 512, 512, 512]
        loc = []
        conf = []
        for i in range(6):
            loc.append(
                nn.Conv2d(self.SSHchannels[i],
                          8,
                          kernel_size=3,
                          stride=1,
                          padding=1))
            if i == 0:
                conf.append(
                    nn.Conv2d(self.SSHchannels[i],
                              8,
                              kernel_size=3,
                              stride=1,
                              padding=1))
            else:
                conf.append(
                    nn.Conv2d(self.SSHchannels[i],
                              6,
                              kernel_size=3,
                              stride=1,
                              padding=1))
        self.mbox_loc = nn.ModuleList(loc)
        self.mbox_conf = nn.ModuleList(conf)

        self.softmax = nn.Softmax(dim=-1)
示例#2
0
    def build_detect_head(self):
        bbox_pred = []
        cls_score = []
        for oc in self.ssh_out_channels:
            bbox_pred += [ nn.Conv2d(in_channels=oc, out_channels=8, kernel_size=1, stride=1, padding=0) ]
            cls_score += [ nn.Conv2d(in_channels=oc, out_channels=4, kernel_size=1, stride=1, padding=0) ]

        return nn.ModuleList(bbox_pred), nn.ModuleList(cls_score)
示例#3
0
 def build_det_head(self):
     bbox_head = []
     cls_head = []
     for i in range(3):
         bbox_head += [
             nn.Conv2d(128, 4, kernel_size=1, stride=1, padding=0)
         ]
         cls_head += [nn.Conv2d(128, 2, kernel_size=1, stride=1, padding=0)]
     return nn.ModuleList(bbox_head), nn.ModuleList(cls_head)
示例#4
0
    def __init__(self, model_type='32'):
        super(EXTD, self).__init__()
        self.model_type = int(model_type)

        self.mobilenet = MobileNetV2(model_type=self.model_type)
        if self.model_type == 32:
            self.base = nn.ModuleList(self.mobilenet.features)[:8]
        elif self.model_type == 48 or self.model_type == 64:
            self.base = nn.ModuleList(self.mobilenet.features)[:6]
        else:
            raise NotImplementedError

        self.upsample = nn.Upsample(scale_factor=2,
                                    mode='bilinear',
                                    align_corners=False)
        self.eltadd = nn.EltAdd()
        self.upfeat = []
        for it in range(5):
            self.upfeat.append(
                upsample(in_channels=self.model_type,
                         out_channels=self.model_type))
        self.upfeat = nn.ModuleList(self.upfeat)

        self.loc = []
        self.conf = []
        self.net_source = [4, 4, 4, 4]
        self.feature_dim = []
        if self.model_type == 32:
            self.feature_dim += [self.base[4].conv[-3].out_channels]
            for idx in self.net_source:
                self.feature_dim += [self.base[idx].conv[-3].out_channels]
        else:
            self.feature_dim += [self.base[4].conv[-2].out_channels]
            for idx in self.net_source:
                self.feature_dim += [self.base[idx].conv[-2].out_channels]

        self.loc += [
            nn.Conv2d(self.feature_dim[0], 4, kernel_size=3, padding=1)
        ]
        self.conf += [
            nn.Conv2d(self.feature_dim[0], 4, kernel_size=3, padding=1)
        ]
        for k, v in enumerate(self.net_source, 1):
            self.loc += [
                nn.Conv2d(self.feature_dim[k], 4, kernel_size=3, padding=1)
            ]
            self.conf += [
                nn.Conv2d(self.feature_dim[k], 2, kernel_size=3, padding=1)
            ]
        self.loc += [nn.Conv2d(self.model_type, 4, kernel_size=3, padding=1)]
        self.conf += [nn.Conv2d(self.model_type, 2, kernel_size=3, padding=1)]
        self.loc = nn.ModuleList(self.loc)
        self.conf = nn.ModuleList(self.conf)

        self.softmax = nn.Softmax(dim=-1)
示例#5
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)
示例#6
0
    def __init__(self):
        super(SSH, self).__init__()

        # backbone
        self.vgg16 = nn.ModuleList(make_layers(vgg_cfgs['D']))

        # SSH - M3
        self.M3 = M_Module(512, 256, 128)
        self.M3_bbox_pred = nn.Conv2d(512, 8, 1, 1, 0)
        self.M3_cls_score = nn.Conv2d(512, 4, 1, 1, 0)
        self.M3_cls_score_softmax = nn.Softmax(dim=1)
        # SSH - M2
        self.M2 = M_Module(512, 256, 128)
        self.M2_bbox_pred = nn.Conv2d(512, 8, 1, 1, 0)
        self.M2_cls_score = nn.Conv2d(512, 4, 1, 1, 0)
        self.M2_cls_score_softmax = nn.Softmax(dim=1)
        # SSH - M1
        self.conv4_128 = nn.Conv2d(512, 128, 1, 1, 0)
        self.conv4_128_relu = nn.ReLU(inplace=True)
        self.conv5_128 = nn.Conv2d(512, 128, 1, 1, 0)
        self.conv5_128_relu = nn.ReLU(inplace=True)
        self.conv5_128_up = nn.ConvTranspose2d(128, 128, 4, 2, 1, groups=128, bias=False)
        self.eltadd = nn.EltAdd()
        self.conv4_fuse_final = nn.Conv2d(128, 128, 3, 1, 1)
        self.conv4_fuse_final_relu = nn.ReLU(inplace=True)
        self.M1 = M_Module(128, 128, 64)
        self.M1_bbox_pred = nn.Conv2d(256, 8, 1, 1, 0)
        self.M1_cls_score = nn.Conv2d(256, 4, 1, 1, 0)
        self.M1_cls_score_softmax = nn.Softmax(dim=1)
示例#7
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()
示例#8
0
    def __init__(self):
        super(NN, self).__init__()

        self.conv = nn.Conv2d(3, 64, 3, 1, 1)
        self.headers = nn.ModuleList(
            [nn.Conv2d(64, 4, 3, 1, 1),
             nn.Conv2d(64, 2, 3, 1, 1)])
示例#9
0
    def __init__(self, mode='slim'):
        super(ULFG, self).__init__()
        self.mode = mode

        self.base_channel = 8 * 2
        self.backbone = nn.Sequential(
            _conv_bn(3, self.base_channel, 2),  # 160*120
            _conv_dw(self.base_channel, self.base_channel * 2, 1),
            _conv_dw(self.base_channel * 2, self.base_channel * 2, 2),  # 80*60
            _conv_dw(self.base_channel * 2, self.base_channel * 2, 1),
            _conv_dw(self.base_channel * 2, self.base_channel * 4, 2),  # 40*30
            _conv_dw(self.base_channel * 4, self.base_channel * 4, 1),
            _conv_dw(self.base_channel * 4, self.base_channel * 4, 1),
            _conv_dw(self.base_channel * 4, self.base_channel * 4, 1),
            _conv_dw(self.base_channel * 4, self.base_channel * 8, 2),  # 20*15
            _conv_dw(self.base_channel * 8, self.base_channel * 8, 1),
            _conv_dw(self.base_channel * 8, self.base_channel * 8, 1),
            _conv_dw(self.base_channel * 8, self.base_channel * 16, 2),  # 10*8
            _conv_dw(self.base_channel * 16, self.base_channel * 16, 1)
        )
        if self.mode == 'rfb':
            self.backbone[7] = BasicRFB(self.base_channel * 4, self.base_channel * 4, stride=1, scale=1.0)

        self.source_layer_indexes = [8, 11, 13]
        self.extras = nn.Sequential(
            nn.Conv2d(in_channels=self.base_channel * 16, out_channels=self.base_channel * 4, kernel_size=1),
            nn.ReLU(),
            _seperable_conv2d(in_channels=self.base_channel * 4, out_channels=self.base_channel * 16, kernel_size=3, stride=2, padding=1),
            nn.ReLU()
        )
        self.regression_headers = nn.ModuleList([
            _seperable_conv2d(in_channels=self.base_channel * 4, out_channels=3 * 4, kernel_size=3, padding=1),
            _seperable_conv2d(in_channels=self.base_channel * 8, out_channels=2 * 4, kernel_size=3, padding=1),
            _seperable_conv2d(in_channels=self.base_channel * 16, out_channels=2 * 4, kernel_size=3, padding=1),
            nn.Conv2d(in_channels=self.base_channel * 16, out_channels=3 * 4, kernel_size=3, padding=1)
        ])
        self.classification_headers = nn.ModuleList([
            _seperable_conv2d(in_channels=self.base_channel * 4, out_channels=3 * 2, kernel_size=3, padding=1),
            _seperable_conv2d(in_channels=self.base_channel * 8, out_channels=2 * 2, kernel_size=3, padding=1),
            _seperable_conv2d(in_channels=self.base_channel * 16, out_channels=2 * 2, kernel_size=3, padding=1),
            nn.Conv2d(in_channels=self.base_channel * 16, out_channels=3 * 2, kernel_size=3, padding=1)
        ])
        self.softmax = nn.Softmax(dim=2)
示例#10
0
    def __init__(self):
        super(S3FD, self).__init__()

        # backbone
        self.vgg16 = nn.ModuleList(make_layers(vgg_cfgs['D']))

        # s3fd specific
        self.conv_fc6 = nn.Conv2d(512, 1024, 3, 1, 1)
        self.relu_fc6 = nn.ReLU()
        self.conv_fc7 = nn.Conv2d(1024, 1024, 1, 1, 0)
        self.relu_fc7 = nn.ReLU()

        self.conv6_1 = nn.Conv2d(1024, 256, 1, 1, 0)
        self.relu_conv6_1 = nn.ReLU()
        self.conv6_2 = nn.Conv2d(256, 512, 3, 2, 1)
        self.relu_conv6_2 = nn.ReLU()

        self.conv7_1 = nn.Conv2d(512, 128, 1, 1, 0)
        self.relu_conv7_1 = nn.ReLU()
        self.conv7_2 = nn.Conv2d(128, 256, 3, 2, 1)
        self.relu_conv7_2 = nn.ReLU()

        self.l2norm_conv3_3 = nn.L2Norm2d(256, 10)
        self.l2norm_conv4_3 = nn.L2Norm2d(512, 8)
        self.l2norm_conv5_3 = nn.L2Norm2d(512, 5)

        # Detection Head - mbox_loc
        self.mbox_loc_conv3_3_norm = nn.Conv2d(256, 4, 3, 1, 1)
        self.mbox_loc_conv4_3_norm = nn.Conv2d(512, 4, 3, 1, 1)
        self.mbox_loc_conv5_3_norm = nn.Conv2d(512, 4, 3, 1, 1)
        self.mbox_loc_conv_fc7 = nn.Conv2d(1024, 4, 3, 1, 1)
        self.mbox_loc_conv6_2 = nn.Conv2d(512, 4, 3, 1, 1)
        self.mbox_loc_conv7_2 = nn.Conv2d(256, 4, 3, 1, 1)
        # Detection Head - mbox_conf
        self.mbox_conf_conv3_3_norm = nn.Conv2d(
            256, 4, 3, 1, 1)  # 4->2 through maxout at channels 0~2
        self.mbox_conf_conv4_3_norm = nn.Conv2d(512, 2, 3, 1, 1)
        self.mbox_conf_conv5_3_norm = nn.Conv2d(512, 2, 3, 1, 1)
        self.mbox_conf_conv_fc7 = nn.Conv2d(1024, 2, 3, 1, 1)
        self.mbox_conf_conv6_2 = nn.Conv2d(512, 2, 3, 1, 1)
        self.mbox_conf_conv7_2 = nn.Conv2d(256, 2, 3, 1, 1)
        # Detection Head - mbox_conf - softmax
        self.softmax = nn.Softmax(dim=-1)
示例#11
0
    def __init__(self):
        super(DSFD, self).__init__()
        self.size = 640
        self.num_classes = 2

        ######
        # build backbone
        ######
        resnet152 = vision.models.resnet152()
        self.layer1 = nn.Sequential(resnet152.conv1, resnet152.bn1,
                                    resnet152.relu, resnet152.maxpool,
                                    resnet152.layer1)
        self.layer2 = nn.Sequential(resnet152.layer2)
        self.layer3 = nn.Sequential(resnet152.layer3)
        self.layer4 = nn.Sequential(resnet152.layer4)
        self.layer5 = nn.Sequential(*[
            nn.Conv2d(2048, 512, kernel_size=1),
            nn.BatchNorm2d(512),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, kernel_size=3, padding=1, stride=2),
            nn.BatchNorm2d(512),
            nn.ReLU(inplace=True)
        ])
        self.layer6 = nn.Sequential(*[
            nn.Conv2d(
                512,
                128,
                kernel_size=1,
            ),
            nn.BatchNorm2d(128),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 256, kernel_size=3, padding=1, stride=2),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True)
        ])

        ######
        # dsfd specific layers
        ######
        output_channels = [256, 512, 1024, 2048, 512, 256]
        # fpn
        fpn_in = output_channels

        self.latlayer3 = nn.Conv2d(fpn_in[3],
                                   fpn_in[2],
                                   kernel_size=1,
                                   stride=1,
                                   padding=0)
        self.latlayer2 = nn.Conv2d(fpn_in[2],
                                   fpn_in[1],
                                   kernel_size=1,
                                   stride=1,
                                   padding=0)
        self.latlayer1 = nn.Conv2d(fpn_in[1],
                                   fpn_in[0],
                                   kernel_size=1,
                                   stride=1,
                                   padding=0)

        self.smooth3 = nn.Conv2d(fpn_in[2],
                                 fpn_in[2],
                                 kernel_size=1,
                                 stride=1,
                                 padding=0)
        self.smooth2 = nn.Conv2d(fpn_in[1],
                                 fpn_in[1],
                                 kernel_size=1,
                                 stride=1,
                                 padding=0)
        self.smooth1 = nn.Conv2d(fpn_in[0],
                                 fpn_in[0],
                                 kernel_size=1,
                                 stride=1,
                                 padding=0)

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

        self.eltmul = nn.EltMul()

        # fem
        cpm_in = output_channels
        self.cpm3_3 = FEM(cpm_in[0])
        self.cpm4_3 = FEM(cpm_in[1])
        self.cpm5_3 = FEM(cpm_in[2])
        self.cpm7 = FEM(cpm_in[3])
        self.cpm6_2 = FEM(cpm_in[4])
        self.cpm7_2 = FEM(cpm_in[5])

        # pa
        cfg_mbox = [1, 1, 1, 1, 1, 1]
        head = pa_multibox(output_channels, cfg_mbox, self.num_classes)

        # detection head
        self.loc = nn.ModuleList(head[0])
        self.conf = nn.ModuleList(head[1])
        self.softmax = nn.Softmax(dim=-1)
示例#12
0
import sys
sys.path.append('.')
from flops_counter import nn
from flops_counter.tensorsize import TensorSize

mlist = nn.ModuleList([nn.Conv2d(3, 64, 3, 1, 1)])

ts = TensorSize([1, 3, 224, 224])

# print(mlist[0](ts))
# print(mlist[0].flops)
# print(mlist.flops)


class NN(nn.Module):
    def __init__(self):
        super(NN, self).__init__()

        self.conv = nn.Conv2d(3, 64, 3, 1, 1)
        self.headers = nn.ModuleList(
            [nn.Conv2d(64, 4, 3, 1, 1),
             nn.Conv2d(64, 2, 3, 1, 1)])

    def forward(self, x):
        x = self.conv(x)
        y1 = self.headers[0](x)
        y2 = self.headers[1](x)
        # self.headers.settle(x, y1)
        return y1, y2

示例#13
0
 def _make_landmark_head(self, fpn_num=3, inchannels=64, anchor_num=2):
     landmarkhead = nn.ModuleList()
     for i in range(fpn_num):
         landmarkhead.append(LandmarkHead(inchannels, anchor_num))
     return landmarkhead
示例#14
0
 def _make_bbox_head(self, fpn_num=3, inchannels=64, anchor_num=2):
     bboxhead = nn.ModuleList()
     for i in range(fpn_num):
         bboxhead.append(BboxHead(inchannels, anchor_num))
     return bboxhead
示例#15
0
 def _make_class_head(self, fpn_num=3, inchannels=64, anchor_num=2):
     classhead = nn.ModuleList()
     for i in range(fpn_num):
         classhead.append(ClassHead(inchannels, anchor_num))
     return classhead