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)
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)
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)
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)
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)
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)
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()
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 __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)
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)
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)
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
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
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
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