|
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];
|
|
}
|