syntax = "proto2"; package object_detection.protos; // Message for configuring the localization loss, classification loss and hard // example miner used for training object detection models. See core/losses.py // for details message Loss { // Localization loss to use. optional LocalizationLoss localization_loss = 1; // Classification loss to use. optional ClassificationLoss classification_loss = 2; // If not left to default, applies hard example mining. optional HardExampleMiner hard_example_miner = 3; // Classification loss weight. optional float classification_weight = 4 [default=1.0]; // Localization loss weight. optional float localization_weight = 5 [default=1.0]; // If not left to default, applies random example sampling. optional RandomExampleSampler random_example_sampler = 6; // Equalization loss. message EqualizationLoss { // Weight equalization loss strength. optional float weight = 1 [default=0.0]; // When computing equalization loss, ops that start with // equalization_exclude_prefixes will be ignored. Only used when // equalization_weight > 0. repeated string exclude_prefixes = 2; } optional EqualizationLoss equalization_loss = 7; enum ExpectedLossWeights { NONE = 0; // Use expected_classification_loss_by_expected_sampling // from third_party/tensorflow_models/object_detection/utils/ops.py EXPECTED_SAMPLING = 1; // Use expected_classification_loss_by_reweighting_unmatched_anchors // from third_party/tensorflow_models/object_detection/utils/ops.py REWEIGHTING_UNMATCHED_ANCHORS = 2; } // Method to compute expected loss weights with respect to balanced // positive/negative sampling scheme. If NONE, use explicit sampling. // TODO(birdbrain): Move under ExpectedLossWeights. optional ExpectedLossWeights expected_loss_weights = 18 [default = NONE]; // Minimum number of effective negative samples. // Only applies if expected_loss_weights is not NONE. // TODO(birdbrain): Move under ExpectedLossWeights. optional float min_num_negative_samples = 19 [default=0]; // Desired number of effective negative samples per positive sample. // Only applies if expected_loss_weights is not NONE. // TODO(birdbrain): Move under ExpectedLossWeights. optional float desired_negative_sampling_ratio = 20 [default=3]; } // Configuration for bounding box localization loss function. message LocalizationLoss { oneof localization_loss { WeightedL2LocalizationLoss weighted_l2 = 1; WeightedSmoothL1LocalizationLoss weighted_smooth_l1 = 2; WeightedIOULocalizationLoss weighted_iou = 3; } } // L2 location loss: 0.5 * ||weight * (a - b)|| ^ 2 message WeightedL2LocalizationLoss { // DEPRECATED, do not use. // Output loss per anchor. optional bool anchorwise_output = 1 [default=false]; } // SmoothL1 (Huber) location loss. // The smooth L1_loss is defined elementwise as .5 x^2 if |x| <= delta and // delta * (|x|-0.5*delta) otherwise, where x is the difference between // predictions and target. message WeightedSmoothL1LocalizationLoss { // DEPRECATED, do not use. // Output loss per anchor. optional bool anchorwise_output = 1 [default=false]; // Delta value for huber loss. optional float delta = 2 [default=1.0]; } // Intersection over union location loss: 1 - IOU message WeightedIOULocalizationLoss { } // Configuration for class prediction loss function. message ClassificationLoss { oneof classification_loss { WeightedSigmoidClassificationLoss weighted_sigmoid = 1; WeightedSoftmaxClassificationLoss weighted_softmax = 2; WeightedSoftmaxClassificationAgainstLogitsLoss weighted_logits_softmax = 5; BootstrappedSigmoidClassificationLoss bootstrapped_sigmoid = 3; SigmoidFocalClassificationLoss weighted_sigmoid_focal = 4; } } // Classification loss using a sigmoid function over class predictions. message WeightedSigmoidClassificationLoss { // DEPRECATED, do not use. // Output loss per anchor. optional bool anchorwise_output = 1 [default=false]; } // Sigmoid Focal cross entropy loss as described in // https://arxiv.org/abs/1708.02002 message SigmoidFocalClassificationLoss { // DEPRECATED, do not use. optional bool anchorwise_output = 1 [default = false]; // modulating factor for the loss. optional float gamma = 2 [default = 2.0]; // alpha weighting factor for the loss. optional float alpha = 3; } // Classification loss using a softmax function over class predictions. message WeightedSoftmaxClassificationLoss { // DEPRECATED, do not use. // Output loss per anchor. optional bool anchorwise_output = 1 [default=false]; // Scale logit (input) value before calculating softmax classification loss. // Typically used for softmax distillation. optional float logit_scale = 2 [default = 1.0]; } // Classification loss using a softmax function over class predictions and // a softmax function over the groundtruth labels (assumed to be logits). message WeightedSoftmaxClassificationAgainstLogitsLoss { // DEPRECATED, do not use. optional bool anchorwise_output = 1 [default = false]; // Scale and softmax groundtruth logits before calculating softmax // classification loss. Typically used for softmax distillation with teacher // annotations stored as logits. optional float logit_scale = 2 [default = 1.0]; } // Classification loss using a sigmoid function over the class prediction with // the highest prediction score. message BootstrappedSigmoidClassificationLoss { // Interpolation weight between 0 and 1. optional float alpha = 1; // Whether hard boot strapping should be used or not. If true, will only use // one class favored by model. Othewise, will use all predicted class // probabilities. optional bool hard_bootstrap = 2 [default=false]; // DEPRECATED, do not use. // Output loss per anchor. optional bool anchorwise_output = 3 [default=false]; } // Configuration for hard example miner. message HardExampleMiner { // Maximum number of hard examples to be selected per image (prior to // enforcing max negative to positive ratio constraint). If set to 0, // all examples obtained after NMS are considered. optional int32 num_hard_examples = 1 [default=64]; // Minimum intersection over union for an example to be discarded during NMS. optional float iou_threshold = 2 [default=0.7]; // Whether to use classification losses ('cls', default), localization losses // ('loc') or both losses ('both'). In the case of 'both', cls_loss_weight and // loc_loss_weight are used to compute weighted sum of the two losses. enum LossType { BOTH = 0; CLASSIFICATION = 1; LOCALIZATION = 2; } optional LossType loss_type = 3 [default=BOTH]; // Maximum number of negatives to retain for each positive anchor. If // num_negatives_per_positive is 0 no prespecified negative:positive ratio is // enforced. optional int32 max_negatives_per_positive = 4 [default=0]; // Minimum number of negative anchors to sample for a given image. Setting // this to a positive number samples negatives in an image without any // positive anchors and thus not bias the model towards having at least one // detection per image. optional int32 min_negatives_per_image = 5 [default=0]; } // Configuration for random example sampler. message RandomExampleSampler { // The desired fraction of positive samples in batch when applying random // example sampling. optional float positive_sample_fraction = 1 [default = 0.01]; }