def create_block_list(self): self.clear_list() block1 = InputDownSample() self.add_block_list(block1.get_name(), block1, self.data_channel) conv1 = ConvBNActivationBlock(in_channels=self.data_channel, out_channels=32, kernel_size=3, padding=1, stride=2, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, 32) conv2 = ConvBNActivationBlock(in_channels=32, out_channels=32, kernel_size=3, padding=1, stride=2, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv2.get_name(), conv2, 32) conv3 = ConvBNActivationBlock(in_channels=32, out_channels=64, kernel_size=3, padding=1, stride=2, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv3.get_name(), conv3, 64) backbone1 = self.factory.get_base_model(BackboneName.ResNet50, data_channel=self.data_channel) base_out_channels1 = backbone1.get_outchannel_list() self.add_block_list(BlockType.BaseNet, backbone1, base_out_channels1[-1]) layer1 = RouteLayer('8') output_channel = sum([base_out_channels1[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers]) self.add_block_list(layer1.get_name(), layer1, output_channel) backbone2 = self.factory.get_base_model(BackboneName.ResNet50, data_channel=self.data_channel) base_out_channels2 = backbone2.get_outchannel_list() self.add_block_list(BlockType.BaseNet, backbone2, base_out_channels2[-1]) layer2 = RouteLayer('17') output_channel = sum([base_out_channels2[i] if i >= 0 else self.block_out_channels[i] for i in layer2.layers]) self.add_block_list(layer2.get_name(), layer2, output_channel) self.create_head() self.create_loss()
def create_block_list(self): self.block_out_channels = [] self.index = 0 c1_channels = 24 c4_channels = 320 backbone = self.factory.get_base_model(BackboneName.MobileNetV2_1_0) base_out_channels = backbone.get_outchannel_list() self.add_block_list(BlockType.BaseNet, backbone, base_out_channels[-1]) aspp = ASPP(c4_channels, 256, bn_name=self.bn_name, activation_name=self.activation_name) out_channel = 256 self.add_block_list(aspp.get_name(), aspp, out_channel) up1 = Upsample(scale_factor=8, mode='bilinear') self.add_block_list(up1.get_name(), up1, self.block_out_channels[-1]) layer1 = RouteLayer('3') output_channel = sum([base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers]) self.add_block_list(layer1.get_name(), layer1, output_channel) conv1 = ConvBNActivationBlock(in_channels=c1_channels, out_channels=48, kernel_size=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, 48) layer2 = RouteLayer('-3, -1') output_channel = sum([base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer2.layers]) self.add_block_list(layer2.get_name(), layer2, output_channel) block1 = SeparableConv2dBNActivation(output_channel, 256, 3, relu_first=False, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(block1.get_name(), block1, 256) block2 = SeparableConv2dBNActivation(256, 256, 3, relu_first=False, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(block2.get_name(), block2, 256) conv2 = nn.Conv2d(256, self.class_number, 1) self.add_block_list(LayerType.Convolutional, conv2, self.class_number) layer3 = Upsample(scale_factor=4, mode='bilinear') self.add_block_list(layer3.get_name(), layer3, self.block_out_channels[-1]) self.create_loss()
def create_block_list(self): self.block_out_channels = [] self.index = 0 basic_model = self.factory.get_base_model("./cfg/det3d/complex-darknet19.cfg") base_out_channels = basic_model.get_outchannel_list() self.add_block_list(BlockType.BaseNet, basic_model, base_out_channels[-1]) input_channel = self.block_out_channels[-1] output_channel = 1024 conv1 = ConvBNActivationBlock(input_channel, output_channel, kernel_size=3, stride=1, padding=1, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, output_channel) input_channel = self.block_out_channels[-1] output_channel = 1024 conv2 = ConvBNActivationBlock(input_channel, output_channel, kernel_size=3, stride=1, padding=1, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv2.get_name(), conv2, output_channel) layer1 = RouteLayer('12') output_channel = sum([base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers]) self.add_block_list(layer1.get_name(), layer1, output_channel) reorg = ReorgBlock() output_channel = reorg.stride * reorg.stride * self.out_channels[-1] self.add_block_list(reorg.get_name(), reorg, output_channel) layer2 = RouteLayer('-3,-1') output_channel = sum([base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer2.layers]) self.add_block_list(layer2.get_name(), layer2, output_channel) input_channel = self.block_out_channels[-1] output_channel = 1024 conv3 = ConvBNActivationBlock(input_channel, output_channel, kernel_size=3, stride=1, padding=1, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv3.get_name(), conv3, output_channel) input_channel = self.block_out_channels[-1] output_channel = 75 conv4 = nn.Conv2d(in_channels=input_channel, out_channels=output_channel, kernel_size=1, stride=1, padding=0, bias=True) self.add_block_list(LayerType.Convolutional, conv4, output_channel)
def create_block_list(self): self.clear_list() backbone = self.factory.get_base_model(BackboneName.ResNet50) base_out_channels = backbone.get_outchannel_list() self.add_block_list(BlockType.BaseNet, backbone, base_out_channels[-1]) if self.is_jpu: jup = JPUBlock(layers='4,8,14,17', in_planes=(512, 1024, 2048), width=512, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(jup.get_name(), jup, 512 + 512 + 512 + 512) self.enc_head(2048, base_out_channels) self.create_loss() if self.is_aux: route = RouteLayer('14') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in route.layers ]) self.add_block_list(route.get_name(), route, output_channel) fcn_head = FCNHeadBlock(1024, self.class_number, 16, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(fcn_head.get_name(), fcn_head, self.class_number)
def dsn_head(self, base_out_channels): route = RouteLayer('14') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in route.layers ]) self.add_block_list(route.get_name(), route, output_channel) conv1 = ConvBNActivationBlock(in_channels=output_channel, out_channels=512, kernel_size=3, stride=1, padding=1, bias=True, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, 512) dropout = nn.Dropout2d(0.1) self.add_block_list(LayerType.Dropout, dropout, self.block_out_channels[-1]) out_conv = nn.Conv2d(512, self.class_number, kernel_size=1, stride=1, padding=0, bias=True) self.add_block_list(LayerType.Convolutional, out_conv, self.class_number) up1 = Upsample(scale_factor=16, mode='bilinear') self.add_block_list(up1.get_name(), up1, self.block_out_channels[-1])
def make_layer(self, base_out_channels, conv_output_channel, scale_factor, route_layer_indexs): layer1 = Upsample(scale_factor=scale_factor, mode='bilinear') self.add_block_list(layer1.get_name(), layer1, self.block_out_channels[-1]) layer2 = RouteLayer(route_layer_indexs) output_channel = sum([base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer2.layers]) self.add_block_list(layer2.get_name(), layer2, output_channel) conv1 = ConvBNActivationBlock(self.block_out_channels[-1], conv_output_channel, kernel_size=1, stride=1, padding=0, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, conv_output_channel) layer3 = RouteLayer('-1,-3') output_channel = sum([base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer3.layers]) self.add_block_list(layer3.get_name(), layer3, output_channel)
def createOrderedDict(self, modelDefine, inputChannels): self.index = 0 self.blockDict.clear() self.outChannelList.clear() self.filters = 0 self.input_channels = 0 for module_def in modelDefine: if module_def['type'] == BlockType.InputData: data_channel = int(module_def['data_channel']) self.input_channels = data_channel elif module_def['type'] == LayerType.RouteLayer: block = RouteLayer(module_def['layers']) self.filters = sum([inputChannels[i] if i >= 0 else self.outChannelList[i] for i in block.layers]) self.addBlockList(LayerType.RouteLayer, block, self.filters) self.input_channels = self.filters elif module_def['type'] == LayerType.ShortRouteLayer: block = ShortRouteLayer(module_def['from'], module_def['activation']) self.filters = self.outChannelList[block.layer_from] + \ self.outChannelList[-1] self.addBlockList(LayerType.ShortRouteLayer, block, self.filters) self.input_channels = self.filters elif module_def['type'] == LayerType.ShortcutLayer: block = ShortcutLayer(module_def['from'], module_def['activation']) self.filters = self.outChannelList[block.layer_from] self.addBlockList(LayerType.ShortcutLayer, block, self.filters) self.input_channels = self.filters elif module_def['type'] == DarknetBlockName.ReorgBlock: stride = int(module_def['stride']) block = ReorgBlock(stride=stride) self.filters = block.stride * block.stride * self.outChannelList[-1] self.addBlockList(DarknetBlockName.ReorgBlock, block, self.filters) self.input_channels = self.filters else: self.create_layer(module_def) self.create_convolutional(module_def) self.create_loss(module_def)
def create_block_list(self): self.block_out_channels = [] self.index = 0 backbone = self.factory.get_base_model(BackboneName.Vgg16) base_out_channels = backbone.get_outchannel_list() self.add_block_list(BlockType.BaseNet, backbone, base_out_channels[-1]) layer1 = ConvBNActivationBlock(in_channels=base_out_channels[-1], out_channels=4096, kernel_size=7, padding=3, bias=True, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(layer1.get_name(), layer1, 4096) dropout1 = nn.Dropout() self.add_block_list(LayerType.Dropout, dropout1, 4096) layer2 = ConvBNActivationBlock(in_channels=4096, out_channels=4096, kernel_size=1, padding=0, bias=True, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(layer2.get_name(), layer2, 4096) dropout2 = nn.Dropout() self.add_block_list(LayerType.Dropout, dropout2, 4096) layer3 = nn.Conv2d(4096, self.class_number, kernel_size=1) self.add_block_list(LayerType.Convolutional, layer3, self.class_number) upsample1 = Upsample(scale_factor=2, mode='bilinear') self.add_block_list(LayerType.Upsample, upsample1, self.block_out_channels[-1]) layer4 = RouteLayer('13') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer4.layers ]) self.add_block_list(layer4.get_name(), layer4, output_channel) layer5 = nn.Conv2d(512, self.class_number, kernel_size=1) self.add_block_list(LayerType.Convolutional, layer5, self.class_number) layer6 = AddLayer('-1,-3') index = layer6.layers[0] output_channel = base_out_channels[ index] if index >= 0 else self.block_out_channels[index] self.add_block_list(layer6.get_name(), layer6, output_channel) layer7 = RouteLayer('9') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer7.layers ]) self.add_block_list(layer7.get_name(), layer7, output_channel) layer8 = nn.Conv2d(256, self.class_number, kernel_size=1) self.add_block_list(LayerType.Convolutional, layer8, self.class_number) layer9 = RouteLayer('-3') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer7.layers ]) self.add_block_list(layer9.get_name(), layer9, output_channel) upsample2 = Upsample(scale_factor=2, mode='bilinear') self.add_block_list(LayerType.Upsample, upsample2, self.block_out_channels[-1]) layer10 = AddLayer('-1,-3') index = layer10.layers[0] output_channel = base_out_channels[ index] if index >= 0 else self.block_out_channels[index] self.add_block_list(layer10.get_name(), layer10, output_channel) upsample3 = Upsample(scale_factor=8, mode='bilinear') self.add_block_list(LayerType.Upsample, upsample3, self.block_out_channels[-1]) self.create_loss()
def create_block_list(self): self.clear_list() spatial_path = SpatialPath(self.data_channel, 128, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(spatial_path.get_name(), spatial_path, 128) backbone = self.factory.get_base_model(BackboneName.ResNet18) base_out_channels = backbone.get_outchannel_list() self.add_block_list(BlockType.BaseNet, backbone, base_out_channels[-1]) inter_channels = 128 global_context = GlobalAvgPooling(512, inter_channels, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(global_context.get_name(), global_context, base_out_channels[-1]) layer1 = RouteLayer('9') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers ]) self.add_block_list(layer1.get_name(), layer1, output_channel) context_path1 = ContextPath(512, inter_channels, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(context_path1.get_name(), context_path1, inter_channels) layer2 = RouteLayer('7') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer2.layers ]) self.add_block_list(layer2.get_name(), layer2, output_channel) context_path2 = ContextPath(256, inter_channels, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(context_path2.get_name(), context_path2, inter_channels) ffm = FeatureFusionBlock(256, 256, 4, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(ffm.get_name(), ffm, 256) conv1 = ConvBNActivationBlock(in_channels=256, out_channels=64, kernel_size=3, padding=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, 64) dropout = nn.Dropout(0.1) self.add_block_list(LayerType.Dropout, dropout, self.block_out_channels[-1]) conv2 = nn.Conv2d(64, self.class_number, 1) self.add_block_list(LayerType.Convolutional, conv2, self.class_number) layer = Upsample(scale_factor=8, mode='bilinear') self.add_block_list(layer.get_name(), layer, self.block_out_channels[-1]) self.create_loss()
def entry_flow(self, entry_block3_stride): # Entry flow conv1 = ConvBNActivationBlock(in_channels=self.data_channel, out_channels=32, kernel_size=3, stride=2, padding=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, 32) conv2 = ConvBNActivationBlock(in_channels=32, out_channels=64, kernel_size=3, stride=1, padding=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv2.get_name(), conv2, 64) block1 = XceptionConvBlock([64, 128, 128, 128], stride=2, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(block1.get_name(), block1, 128) double_sep_conv1 = DoubleSeparableConv2dBlock( [128, 256, 256], bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(double_sep_conv1.get_name(), double_sep_conv1, 256) sep_conv1 = SeparableConv2dBNActivation( inplanes=256, planes=256, dilation=1, stride=2, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(sep_conv1.get_name(), sep_conv1, 256) layer1 = RouteLayer('-3') output_channel = sum( [self.block_out_channels[i] for i in layer1.layers]) self.add_block_list(layer1.get_name(), layer1, output_channel) conv3 = ConvBNActivationBlock(in_channels=128, out_channels=256, kernel_size=1, stride=2, bias=False, bnName=self.bn_name, activationName=ActivationType.Linear) self.add_block_list(conv3.get_name(), conv3, 256) layer2 = AddLayer('-3,-1') output_channel = 256 self.add_block_list(layer2.get_name(), layer2, output_channel) double_sep_conv2 = DoubleSeparableConv2dBlock( [256, 728, 728], bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(double_sep_conv2.get_name(), double_sep_conv2, 728) sep_conv2 = SeparableConv2dBNActivation( inplanes=728, planes=728, dilation=1, stride=entry_block3_stride, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(sep_conv2.get_name(), sep_conv2, 728) layer3 = RouteLayer('-3') output_channel = sum( [self.block_out_channels[i] for i in layer3.layers]) self.add_block_list(layer3.get_name(), layer3, output_channel) conv4 = ConvBNActivationBlock(in_channels=256, out_channels=728, kernel_size=1, stride=entry_block3_stride, bias=False, bnName=self.bn_name, activationName=ActivationType.Linear) self.add_block_list(conv4.get_name(), conv4, 728) layer4 = AddLayer('-3,-1') output_channel = 728 self.add_block_list(layer4.get_name(), layer4, output_channel)
def enc_head(self, in_channels, base_out_channels): if self.is_jpu: conv1 = ConvBNActivationBlock(in_channels=in_channels, out_channels=512, kernel_size=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, 512) else: conv1 = ConvBNActivationBlock(in_channels=in_channels, out_channels=512, kernel_size=3, padding=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(conv1.get_name(), conv1, 512) if self.lateral: route1 = RouteLayer('8') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in route1.layers ]) self.add_block_list(route1.get_name(), route1, output_channel) connect1 = ConvBNActivationBlock( in_channels=output_channel, out_channels=512, kernel_size=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(connect1.get_name(), connect1, 512) route2 = RouteLayer('14') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in route2.layers ]) self.add_block_list(route2.get_name(), route2, output_channel) connect2 = ConvBNActivationBlock( in_channels=output_channel, out_channels=512, kernel_size=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(connect2.get_name(), connect2, 512) route3 = RouteLayer('-5,-3,-1') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in route2.layers ]) self.add_block_list(route3.get_name(), route3, output_channel) fusion = ConvBNActivationBlock(in_channels=output_channel, out_channels=512, kernel_size=3, padding=1, bias=False, bnName=self.bn_name, activationName=self.activation_name) self.add_block_list(fusion.get_name(), fusion, 512) encmodule = EncBlock(in_channels=512, nclass=self.class_number, se_loss=self.is_se_loss, bn_name=self.bn_name, activation_name=self.activation_name) self.add_block_list(encmodule.get_name(), encmodule, 512) dropout = nn.Dropout2d(0.1, False) self.add_block_list(LayerType.Dropout, dropout, self.block_out_channels[-1]) conv2 = nn.Conv2d(self.block_out_channels[-1], self.class_number, 1) self.add_block_list(LayerType.Convolutional, conv2, self.class_number) up = Upsample(scale_factor=8, mode='bilinear') self.add_block_list(up.get_name(), up, self.class_number)
def create_block_list(self): self.block_out_channels = [] self.index = 0 backbone = self.factory.get_base_model(BackboneName.ResNet101) base_out_channels = backbone.get_outchannel_list() self.add_block_list(BlockType.BaseNet, backbone, base_out_channels[-1]) dropout1 = nn.Dropout(p=0.5) self.add_block_list(LayerType.Dropout, dropout1, self.block_out_channels[-1]) layer1 = RouteLayer('31') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers ]) self.add_block_list(layer1.get_name(), layer1, output_channel) dropout2 = nn.Dropout(p=0.5) self.add_block_list(LayerType.Dropout, dropout2, self.block_out_channels[-1]) layer2 = RouteLayer('-3') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers ]) self.add_block_list(layer2.get_name(), layer2, output_channel) conv1 = nn.Conv2d(2048, 512, 1, bias=False) self.add_block_list(LayerType.Convolutional, conv1, 512) layer3 = RouteLayer('-3') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers ]) self.add_block_list(layer3.get_name(), layer3, output_channel) conv2 = nn.Conv2d(1024, 256, 1, bias=False) self.add_block_list(LayerType.Convolutional, conv2, 256) refinenet1 = RefineNetBlock(512, 512, 4, activation_name=self.activation_name) output_channel = 256 self.add_block_list(refinenet1.get_name(), refinenet1, output_channel) layer4 = RouteLayer('8') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers ]) self.add_block_list(layer4.get_name(), layer4, output_channel) conv3 = nn.Conv2d(512, 256, 1, bias=False) self.add_block_list(LayerType.Convolutional, conv3, 256) refinenet2 = RefineNetBlock(256, 256, 4, activation_name=self.activation_name) output_channel = 256 self.add_block_list(refinenet2.get_name(), refinenet2, output_channel) layer5 = RouteLayer('4') output_channel = sum([ base_out_channels[i] if i >= 0 else self.block_out_channels[i] for i in layer1.layers ]) self.add_block_list(layer5.get_name(), layer5, output_channel) conv4 = nn.Conv2d(256, 256, 1, bias=False) self.add_block_list(LayerType.Convolutional, conv4, 256) refinenet3 = RefineNetBlock(256, 256, 4, activation_name=self.activation_name) output_channel = 256 self.add_block_list(refinenet3.get_name(), refinenet3, output_channel) crp = CRPBlock(256, 256, 4) output_channel = 256 self.add_block_list(crp.get_name(), crp, output_channel) conv5 = nn.Conv2d(256, self.class_number, kernel_size=3, stride=1, padding=1, bias=True) self.add_block_list(LayerType.Convolutional, conv5, self.class_number) layer6 = Upsample(scale_factor=4, mode='bilinear') self.add_block_list(layer6.get_name(), layer6, self.block_out_channels[-1]) self.create_loss()