def __init__(self, out_planes, is_training, criterion, ohem_criterion, pretrained_model=None, norm_layer=nn.BatchNorm2d): super(BiSeNet, self).__init__() self.context_path = xception39(pretrained_model, norm_layer=norm_layer) self.business_layer = [] self.is_training = is_training self.spatial_path = SpatialPath(3, 128, norm_layer) conv_channel = 128 self.global_context = nn.Sequential( nn.AdaptiveAvgPool2d(1), ConvBnRelu(256, conv_channel, 1, 1, 0, has_bn=True, has_relu=True, has_bias=False, norm_layer=norm_layer) ) # stage = [256, 128, 64] arms = [AttentionRefinement(256, conv_channel, norm_layer), AttentionRefinement(128, conv_channel, norm_layer)] refines = [ConvBnRelu(conv_channel, conv_channel, 3, 1, 1, has_bn=True, norm_layer=norm_layer, has_relu=True, has_bias=False), ConvBnRelu(conv_channel, conv_channel, 3, 1, 1, has_bn=True, norm_layer=norm_layer, has_relu=True, has_bias=False)] if is_training: heads = [BiSeNetHead(conv_channel, out_planes, 2, True, norm_layer), BiSeNetHead(conv_channel, out_planes, 1, True, norm_layer), BiSeNetHead(conv_channel * 2, out_planes, 1, False, norm_layer)] else: heads = [None, None, BiSeNetHead(conv_channel * 2, out_planes, 8, False, norm_layer)] self.ffm = FeatureFusion(conv_channel * 2, conv_channel * 2, 1, norm_layer) self.arms = nn.ModuleList(arms) self.refines = nn.ModuleList(refines) self.heads = nn.ModuleList(heads) self.business_layer.append(self.spatial_path) self.business_layer.append(self.global_context) self.business_layer.append(self.arms) self.business_layer.append(self.refines) self.business_layer.append(self.heads) self.business_layer.append(self.ffm) if is_training: self.criterion = criterion self.ohem_criterion = ohem_criterion
def __init__(self, out_planes, is_training, criterion, pretrained_model=None, norm_layer=nn.BatchNorm2d): super(BiSeNet, self).__init__() self.context_path = resnet101(pretrained_model, norm_layer=norm_layer, bn_eps=config.bn_eps, bn_momentum=config.bn_momentum, deep_stem=True, stem_width=64) self.business_layer = [] self.is_training = is_training self.spatial_path = SpatialPath(3, 128, norm_layer) conv_channel = 128 self.global_context = nn.Sequential( nn.AdaptiveAvgPool2d(1), ConvBnRelu(2048, conv_channel, 1, 1, 0, has_bn=True, has_relu=True, has_bias=False, norm_layer=norm_layer) ) # stage = [512, 256, 128, 64] arms = [AttentionRefinement(2048, conv_channel, norm_layer), AttentionRefinement(1024, conv_channel, norm_layer)] refines = [ConvBnRelu(conv_channel, conv_channel, 3, 1, 1, has_bn=True, norm_layer=norm_layer, has_relu=True, has_bias=False), ConvBnRelu(conv_channel, conv_channel, 3, 1, 1, has_bn=True, norm_layer=norm_layer, has_relu=True, has_bias=False)] heads = [BiSeNetHead(conv_channel, out_planes, 16, True, norm_layer), BiSeNetHead(conv_channel, out_planes, 8, True, norm_layer), BiSeNetHead(conv_channel * 2, out_planes, 8, False, norm_layer)] self.ffm = FeatureFusion(conv_channel * 2, conv_channel * 2, 1, norm_layer) self.arms = nn.ModuleList(arms) self.refines = nn.ModuleList(refines) self.heads = nn.ModuleList(heads) self.business_layer.append(self.spatial_path) self.business_layer.append(self.global_context) self.business_layer.append(self.arms) self.business_layer.append(self.refines) self.business_layer.append(self.heads) self.business_layer.append(self.ffm) if is_training: self.criterion = criterion
def __init__(self, out_planes, is_training, BN2D = BatchNorm2d): super(Network_Res101, self).__init__() self.layers = [] self.is_training = is_training conv_channel = 128 # use base model of resnet 101 from resnet.py self.context = resnet101(pretrained_model=None, norm_layer=BN2D, bn_eps=config.bn_eps, bn_momentum=config.bn_momentum, deep_stem=False, stem_width=64) self.context_refine = nn.Sequential( nn.AdaptiveAvgPool2d(1), ConvBnRelu(2048,conv_channel, 1, 1, 0, has_bn=True, has_relu=True, has_bias=False, norm_layer=BN2D) ) # ARM for ResBlock 2,3,4 of resnet output arms = [AttentionRefinement(2048, conv_channel, norm_layer=BN2D), AttentionRefinement(1024, conv_channel, norm_layer=BN2D), AttentionRefinement(512, conv_channel, norm_layer=BN2D)] # Refinement of corresponding output refines = [ ConvBnRelu(conv_channel, conv_channel, 3, 1, 1, has_bn=True, norm_layer=BN2D, has_relu=True, has_bias=False), ConvBnRelu(conv_channel, conv_channel, 3, 1, 1, has_bn=True, norm_layer=BN2D, has_relu=True, has_bias=False), ConvBnRelu(conv_channel, conv_channel, 3, 1, 1, has_bn=True, norm_layer=BN2D, has_relu=True, has_bias=False)] self.arms = nn.ModuleList(arms) self.refines = nn.ModuleList(refines) # Refinement on first layer of resnet output self.res_top_refine = ConvBnRelu(256, conv_channel, 3, 1, 1, has_bn=True, norm_layer=BN2D, has_relu=True, has_bias=False) self.ffm = FeatureFusion(conv_channel*2, conv_channel, 1, BN2D) # classifier for final output self.class_refine = nn.Sequential( ConvBnRelu(conv_channel, conv_channel//2, 3, 1, 1, has_bn=True, has_relu=True, has_bias=False, norm_layer=BN2D), nn.Conv2d(conv_channel//2, out_planes, kernel_size=1, stride=1, padding=0) ) self.layers.append(self.context) self.layers.append(self.class_refine) self.layers.append(self.context_refine) self.layers.append(self.arms) self.layers.append(self.ffm) self.layers.append(self.refines) self.layers.append(self.res_top_refine) self.loss = nn.CrossEntropyLoss(reduction='mean',ignore_index=255)