def Deeplabv3pResNet50(input_shape=(512, 512, 3), weights=None, input_tensor=None, classes=21, OS=8, **kwargs): """ Instantiates the Deeplabv3+ MobileNetV3Large architecture # Arguments input_shape: shape of input image. format HxWxC PASCAL VOC model was trained on (512,512,3) images weights: one of 'pascal_voc' (pre-trained on pascal voc) or None (random initialization) input_tensor: optional Keras tensor (i.e. output of `layers.Input()`) to use as image input for the model. classes: number of desired classes. If classes != 21, last layer is initialized randomly OS: determines input_shape/feature_extractor_output ratio. One of {8,16}. # Returns A Keras model instance. """ if not (weights in {'pascal_voc', None}): raise ValueError('The `weights` argument should be either ' '`None` (random initialization) or `pascal_voc` ' '(pre-trained on PASCAL VOC)') if input_tensor is None: img_input = Input(shape=input_shape, name='image_input') else: img_input = input_tensor # normalize input image img_norm = Lambda(normalize, name='input_normalize')(img_input) # backbone body for feature extract x, skip_feature, backbone_len = ResNet50(include_top=False, input_tensor=img_norm, weights='imagenet', OS=OS) # ASPP block x = ASPP_block(x, OS) # Deeplabv3+ decoder for feature projection x = Decoder_block(x, skip_feature) # Final prediction conv block x = DeeplabConv2D(classes, (1, 1), padding='same', name='logits_semantic')(x) x = Lambda(img_resize, arguments={'size': (input_shape[0],input_shape[1]), 'mode': 'bilinear'}, name='pred_resize')(x) x = Reshape((input_shape[0]*input_shape[1], classes)) (x) x = Softmax(name='Predictions/Softmax')(x) # Ensure that the model takes into account # any potential predecessors of `input_tensor`. #if input_tensor is not None: #inputs = get_source_inputs(input_tensor) #else: #inputs = img_input model = Model(img_input, x, name='deeplabv3p_resnet50') return model, backbone_len
def Deeplabv3pMobileNetV2(input_shape=(512, 512, 3), alpha=1.0, weights=None, input_tensor=None, classes=21, OS=8, **kwargs): """ Instantiates the Deeplabv3+ MobileNetV2 architecture # Arguments input_shape: shape of input image. format HxWxC PASCAL VOC model was trained on (512,512,3) images alpha: controls the width of the MobileNetV2 network. This is known as the width multiplier in the MobileNetV2 paper. - If `alpha` < 1.0, proportionally decreases the number of filters in each layer. - If `alpha` > 1.0, proportionally increases the number of filters in each layer. - If `alpha` = 1, default number of filters from the paper are used at each layer. Used only for mobilenetv2 backbone weights: one of 'pascal_voc' (pre-trained on pascal voc) or None (random initialization) input_tensor: optional Keras tensor (i.e. output of `layers.Input()`) to use as image input for the model. classes: number of desired classes. If classes != 21, last layer is initialized randomly OS: determines input_shape/feature_extractor_output ratio. One of {8,16}. Used only for xception backbone. # Returns A Keras model instance. """ if not (weights in {'pascal_voc', None}): raise ValueError('The `weights` argument should be either ' '`None` (random initialization) or `pascal_voc` ' '(pre-trained on PASCAL VOC)') if input_tensor is None: img_input = Input(shape=input_shape, name='image_input') else: img_input = input_tensor # normalize input image img_norm = Lambda(normalize, name='input_normalize')(img_input) # backbone body for feature extract x, skip_feature, backbone_len = MobileNetV2_body(img_norm, OS, alpha) # ASPP block x = ASPP_block(x, OS) # Deeplabv3+ decoder for feature projection x = Decoder_block(x, skip_feature) # Final prediction conv block x = DeeplabConv2D(classes, (1, 1), padding='same', name='logits_semantic')(x) x = Lambda(img_resize, arguments={ 'size': (input_shape[0], input_shape[1]), 'mode': 'bilinear' }, name='pred_resize')(x) x = Reshape((input_shape[0] * input_shape[1], classes))(x) x = Softmax(name='Predictions/Softmax')(x) # Ensure that the model takes into account # any potential predecessors of `input_tensor`. #if input_tensor is not None: #inputs = get_source_inputs(input_tensor) #else: #inputs = img_input model = Model(img_input, x, name='deeplabv3p_mobilenetv2') # load weights #if weights == 'pascal_voc': #weights_path = get_file('deeplabv3_mobilenetv2_tf_dim_ordering_tf_kernels.h5', #WEIGHTS_PATH_MOBILE, #cache_subdir='models') #model.load_weights(weights_path, by_name=True) return model, backbone_len
def Deeplabv3pXception(input_shape=(512, 512, 3), weights='pascal_voc', input_tensor=None, classes=21, OS=16, **kwargs): """ Instantiates the Deeplabv3+ architecture Optionally loads weights pre-trained on PASCAL VOC. This model is available for TensorFlow only, and can only be used with inputs following the TensorFlow data format `(width, height, channels)`. # Arguments input_shape: shape of input image. format HxWxC PASCAL VOC model was trained on (512,512,3) images weights: one of 'pascal_voc' (pre-trained on pascal voc) or None (random initialization) input_tensor: optional Keras tensor (i.e. output of `layers.Input()`) to use as image input for the model. classes: number of desired classes. If classes != 21, last layer is initialized randomly OS: determines input_shape/feature_extractor_output ratio. One of {8,16}. Used only for xception backbone. # Returns A Keras model instance. # Raises RuntimeError: If attempting to run this model with a backend that does not support separable convolutions. ValueError: in case of invalid argument for `weights` or `backbone` """ if not (weights in {'pascal_voc', None}): raise ValueError('The `weights` argument should be either ' '`None` (random initialization) or `pascal_voc` ' '(pre-trained on PASCAL VOC)') if input_tensor is None: img_input = Input(shape=input_shape, name='image_input') else: img_input = input_tensor # normalize input image img_norm = Lambda(normalize, name='input_normalize')(img_input) # backbone body for feature extract x, skip_feature, backbone_len = Xception_body(img_norm, OS) # ASPP block x = ASPP_block(x, OS) # Deeplabv3+ decoder for feature projection x = Decoder_block(x, skip_feature) # Final prediction conv block x = DeeplabConv2D(classes, (1, 1), padding='same', name='logits_semantic')(x) x = Lambda(img_resize, arguments={ 'size': (input_shape[0], input_shape[1]), 'mode': 'bilinear' }, name='pred_resize')(x) x = Reshape((input_shape[0] * input_shape[1], classes))(x) x = Softmax(name='Predictions/Softmax')(x) # Ensure that the model takes into account # any potential predecessors of `input_tensor`. #if input_tensor is not None: #inputs = get_source_inputs(input_tensor) #else: #inputs = img_input model = Model(img_input, x, name='deeplabv3p_xception') # load weights if weights == 'pascal_voc': weights_path = get_file( 'deeplabv3_xception_tf_dim_ordering_tf_kernels.h5', WEIGHTS_PATH_X, cache_subdir='models') model.load_weights(weights_path, by_name=True) return model, backbone_len