syntax = "proto2"; package object_detection.protos; import "object_detection/protos/hyperparams.proto"; // Configuration proto for box predictor. See core/box_predictor.py for details. message BoxPredictor { oneof box_predictor_oneof { ConvolutionalBoxPredictor convolutional_box_predictor = 1; MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2; RfcnBoxPredictor rfcn_box_predictor = 3; WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4; } } // Configuration proto for Convolutional box predictor. // Next id: 13 message ConvolutionalBoxPredictor { // Hyperparameters for convolution ops used in the box predictor. optional Hyperparams conv_hyperparams = 1; // Minimum feature depth prior to predicting box encodings and class // predictions. optional int32 min_depth = 2 [default = 0]; // Maximum feature depth prior to predicting box encodings and class // predictions. If max_depth is set to 0, no additional feature map will be // inserted before location and class predictions. optional int32 max_depth = 3 [default = 0]; // Number of the additional conv layers before the predictor. optional int32 num_layers_before_predictor = 4 [default = 0]; // Whether to use dropout for class prediction. optional bool use_dropout = 5 [default = true]; // Keep probability for dropout optional float dropout_keep_probability = 6 [default = 0.8]; // Size of final convolution kernel. If the spatial resolution of the feature // map is smaller than the kernel size, then the kernel size is set to // min(feature_width, feature_height). optional int32 kernel_size = 7 [default = 1]; // Size of the encoding for boxes. optional int32 box_code_size = 8 [default = 4]; // Whether to apply sigmoid to the output of class predictions. // TODO(jonathanhuang): Do we need this since we have a post processing // module.? optional bool apply_sigmoid_to_scores = 9 [default = false]; optional float class_prediction_bias_init = 10 [default = 0.0]; // Whether to use depthwise separable convolution for box predictor layers. optional bool use_depthwise = 11 [default = false]; } // Configuration proto for weight shared convolutional box predictor. // Next id: 18 message WeightSharedConvolutionalBoxPredictor { // Hyperparameters for convolution ops used in the box predictor. optional Hyperparams conv_hyperparams = 1; // Number of the additional conv layers before the predictor. optional int32 num_layers_before_predictor = 4 [default = 0]; // Output depth for the convolution ops prior to predicting box encodings // and class predictions. optional int32 depth = 2 [default = 0]; // Size of final convolution kernel. If the spatial resolution of the feature // map is smaller than the kernel size, then the kernel size is set to // min(feature_width, feature_height). optional int32 kernel_size = 7 [default = 3]; // Size of the encoding for boxes. optional int32 box_code_size = 8 [default = 4]; // Bias initialization for class prediction. It has been show to stabilize // training where there are large number of negative boxes. See // https://arxiv.org/abs/1708.02002 for details. optional float class_prediction_bias_init = 10 [default = 0.0]; // Whether to use dropout for class prediction. optional bool use_dropout = 11 [default = false]; // Keep probability for dropout. optional float dropout_keep_probability = 12 [default = 0.8]; // Whether to share the multi-layer tower between box prediction and class // prediction heads. optional bool share_prediction_tower = 13 [default = false]; // Whether to use depthwise separable convolution for box predictor layers. optional bool use_depthwise = 14 [default = false]; // Enum to specify how to convert the detection scores at inference time. enum ScoreConverter { // Input scores equals output scores. IDENTITY = 0; // Applies a sigmoid on input scores. SIGMOID = 1; } // Callable elementwise score converter at inference time. optional ScoreConverter score_converter = 16 [default = IDENTITY]; // If specified, apply clipping to box encodings. message BoxEncodingsClipRange { optional float min = 1; optional float max = 2; } optional BoxEncodingsClipRange box_encodings_clip_range = 17; } // TODO(alirezafathi): Refactor the proto file to be able to configure mask rcnn // head easily. // Next id: 15 message MaskRCNNBoxPredictor { // Hyperparameters for fully connected ops used in the box predictor. optional Hyperparams fc_hyperparams = 1; // Whether to use dropout op prior to the both box and class predictions. optional bool use_dropout = 2 [default = false]; // Keep probability for dropout. This is only used if use_dropout is true. optional float dropout_keep_probability = 3 [default = 0.5]; // Size of the encoding for the boxes. optional int32 box_code_size = 4 [default = 4]; // Hyperparameters for convolution ops used in the box predictor. optional Hyperparams conv_hyperparams = 5; // Whether to predict instance masks inside detection boxes. optional bool predict_instance_masks = 6 [default = false]; // The depth for the first conv2d_transpose op applied to the // image_features in the mask prediction branch. If set to 0, the value // will be set automatically based on the number of channels in the image // features and the number of classes. optional int32 mask_prediction_conv_depth = 7 [default = 256]; // Whether to predict keypoints inside detection boxes. optional bool predict_keypoints = 8 [default = false]; // The height and the width of the predicted mask. optional int32 mask_height = 9 [default = 15]; optional int32 mask_width = 10 [default = 15]; // The number of convolutions applied to image_features in the mask prediction // branch. optional int32 mask_prediction_num_conv_layers = 11 [default = 2]; optional bool masks_are_class_agnostic = 12 [default = false]; // Whether to use one box for all classes rather than a different box for each // class. optional bool share_box_across_classes = 13 [default = false]; // Whether to apply convolutions on mask features before upsampling using // nearest neighbor resizing. // By default, mask features are resized to [`mask_height`, `mask_width`] // before applying convolutions and predicting masks. optional bool convolve_then_upsample_masks = 14 [default = false]; } message RfcnBoxPredictor { // Hyperparameters for convolution ops used in the box predictor. optional Hyperparams conv_hyperparams = 1; // Bin sizes for RFCN crops. optional int32 num_spatial_bins_height = 2 [default = 3]; optional int32 num_spatial_bins_width = 3 [default = 3]; // Target depth to reduce the input image features to. optional int32 depth = 4 [default = 1024]; // Size of the encoding for the boxes. optional int32 box_code_size = 5 [default = 4]; // Size to resize the rfcn crops to. optional int32 crop_height = 6 [default = 12]; optional int32 crop_width = 7 [default = 12]; }