// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: object_detection/protos/optimizer.proto

#ifndef GOOGLE_PROTOBUF_INCLUDED_object_5fdetection_2fprotos_2foptimizer_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_object_5fdetection_2fprotos_2foptimizer_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3009000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 3009002 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/port_undef.inc>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/inlined_string_field.h>
#include <google/protobuf/metadata.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/unknown_field_set.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_object_5fdetection_2fprotos_2foptimizer_2eproto
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto {
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[10]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto;
namespace object_detection {
namespace protos {
class AdamOptimizer;
class AdamOptimizerDefaultTypeInternal;
extern AdamOptimizerDefaultTypeInternal _AdamOptimizer_default_instance_;
class ConstantLearningRate;
class ConstantLearningRateDefaultTypeInternal;
extern ConstantLearningRateDefaultTypeInternal _ConstantLearningRate_default_instance_;
class CosineDecayLearningRate;
class CosineDecayLearningRateDefaultTypeInternal;
extern CosineDecayLearningRateDefaultTypeInternal _CosineDecayLearningRate_default_instance_;
class ExponentialDecayLearningRate;
class ExponentialDecayLearningRateDefaultTypeInternal;
extern ExponentialDecayLearningRateDefaultTypeInternal _ExponentialDecayLearningRate_default_instance_;
class LearningRate;
class LearningRateDefaultTypeInternal;
extern LearningRateDefaultTypeInternal _LearningRate_default_instance_;
class ManualStepLearningRate;
class ManualStepLearningRateDefaultTypeInternal;
extern ManualStepLearningRateDefaultTypeInternal _ManualStepLearningRate_default_instance_;
class ManualStepLearningRate_LearningRateSchedule;
class ManualStepLearningRate_LearningRateScheduleDefaultTypeInternal;
extern ManualStepLearningRate_LearningRateScheduleDefaultTypeInternal _ManualStepLearningRate_LearningRateSchedule_default_instance_;
class MomentumOptimizer;
class MomentumOptimizerDefaultTypeInternal;
extern MomentumOptimizerDefaultTypeInternal _MomentumOptimizer_default_instance_;
class Optimizer;
class OptimizerDefaultTypeInternal;
extern OptimizerDefaultTypeInternal _Optimizer_default_instance_;
class RMSPropOptimizer;
class RMSPropOptimizerDefaultTypeInternal;
extern RMSPropOptimizerDefaultTypeInternal _RMSPropOptimizer_default_instance_;
}  // namespace protos
}  // namespace object_detection
PROTOBUF_NAMESPACE_OPEN
template<> ::object_detection::protos::AdamOptimizer* Arena::CreateMaybeMessage<::object_detection::protos::AdamOptimizer>(Arena*);
template<> ::object_detection::protos::ConstantLearningRate* Arena::CreateMaybeMessage<::object_detection::protos::ConstantLearningRate>(Arena*);
template<> ::object_detection::protos::CosineDecayLearningRate* Arena::CreateMaybeMessage<::object_detection::protos::CosineDecayLearningRate>(Arena*);
template<> ::object_detection::protos::ExponentialDecayLearningRate* Arena::CreateMaybeMessage<::object_detection::protos::ExponentialDecayLearningRate>(Arena*);
template<> ::object_detection::protos::LearningRate* Arena::CreateMaybeMessage<::object_detection::protos::LearningRate>(Arena*);
template<> ::object_detection::protos::ManualStepLearningRate* Arena::CreateMaybeMessage<::object_detection::protos::ManualStepLearningRate>(Arena*);
template<> ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule* Arena::CreateMaybeMessage<::object_detection::protos::ManualStepLearningRate_LearningRateSchedule>(Arena*);
template<> ::object_detection::protos::MomentumOptimizer* Arena::CreateMaybeMessage<::object_detection::protos::MomentumOptimizer>(Arena*);
template<> ::object_detection::protos::Optimizer* Arena::CreateMaybeMessage<::object_detection::protos::Optimizer>(Arena*);
template<> ::object_detection::protos::RMSPropOptimizer* Arena::CreateMaybeMessage<::object_detection::protos::RMSPropOptimizer>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace object_detection {
namespace protos {

// ===================================================================

class Optimizer :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.Optimizer) */ {
 public:
  Optimizer();
  virtual ~Optimizer();

  Optimizer(const Optimizer& from);
  Optimizer(Optimizer&& from) noexcept
    : Optimizer() {
    *this = ::std::move(from);
  }

  inline Optimizer& operator=(const Optimizer& from) {
    CopyFrom(from);
    return *this;
  }
  inline Optimizer& operator=(Optimizer&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Optimizer& default_instance();

  enum OptimizerCase {
    kRmsPropOptimizer = 1,
    kMomentumOptimizer = 2,
    kAdamOptimizer = 3,
    OPTIMIZER_NOT_SET = 0,
  };

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const Optimizer* internal_default_instance() {
    return reinterpret_cast<const Optimizer*>(
               &_Optimizer_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

  friend void swap(Optimizer& a, Optimizer& b) {
    a.Swap(&b);
  }
  inline void Swap(Optimizer* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Optimizer* New() const final {
    return CreateMaybeMessage<Optimizer>(nullptr);
  }

  Optimizer* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Optimizer>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Optimizer& from);
  void MergeFrom(const Optimizer& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Optimizer* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.Optimizer";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kUseMovingAverageFieldNumber = 4,
    kMovingAverageDecayFieldNumber = 5,
    kRmsPropOptimizerFieldNumber = 1,
    kMomentumOptimizerFieldNumber = 2,
    kAdamOptimizerFieldNumber = 3,
  };
  // optional bool use_moving_average = 4 [default = true];
  bool has_use_moving_average() const;
  void clear_use_moving_average();
  bool use_moving_average() const;
  void set_use_moving_average(bool value);

  // optional float moving_average_decay = 5 [default = 0.9999];
  bool has_moving_average_decay() const;
  void clear_moving_average_decay();
  float moving_average_decay() const;
  void set_moving_average_decay(float value);

  // optional .object_detection.protos.RMSPropOptimizer rms_prop_optimizer = 1;
  bool has_rms_prop_optimizer() const;
  void clear_rms_prop_optimizer();
  const ::object_detection::protos::RMSPropOptimizer& rms_prop_optimizer() const;
  ::object_detection::protos::RMSPropOptimizer* release_rms_prop_optimizer();
  ::object_detection::protos::RMSPropOptimizer* mutable_rms_prop_optimizer();
  void set_allocated_rms_prop_optimizer(::object_detection::protos::RMSPropOptimizer* rms_prop_optimizer);

  // optional .object_detection.protos.MomentumOptimizer momentum_optimizer = 2;
  bool has_momentum_optimizer() const;
  void clear_momentum_optimizer();
  const ::object_detection::protos::MomentumOptimizer& momentum_optimizer() const;
  ::object_detection::protos::MomentumOptimizer* release_momentum_optimizer();
  ::object_detection::protos::MomentumOptimizer* mutable_momentum_optimizer();
  void set_allocated_momentum_optimizer(::object_detection::protos::MomentumOptimizer* momentum_optimizer);

  // optional .object_detection.protos.AdamOptimizer adam_optimizer = 3;
  bool has_adam_optimizer() const;
  void clear_adam_optimizer();
  const ::object_detection::protos::AdamOptimizer& adam_optimizer() const;
  ::object_detection::protos::AdamOptimizer* release_adam_optimizer();
  ::object_detection::protos::AdamOptimizer* mutable_adam_optimizer();
  void set_allocated_adam_optimizer(::object_detection::protos::AdamOptimizer* adam_optimizer);

  void clear_optimizer();
  OptimizerCase optimizer_case() const;
  // @@protoc_insertion_point(class_scope:object_detection.protos.Optimizer)
 private:
  class _Internal;
  void set_has_rms_prop_optimizer();
  void set_has_momentum_optimizer();
  void set_has_adam_optimizer();

  inline bool has_optimizer() const;
  inline void clear_has_optimizer();

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  bool use_moving_average_;
  float moving_average_decay_;
  union OptimizerUnion {
    OptimizerUnion() {}
    ::object_detection::protos::RMSPropOptimizer* rms_prop_optimizer_;
    ::object_detection::protos::MomentumOptimizer* momentum_optimizer_;
    ::object_detection::protos::AdamOptimizer* adam_optimizer_;
  } optimizer_;
  ::PROTOBUF_NAMESPACE_ID::uint32 _oneof_case_[1];

  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class RMSPropOptimizer :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.RMSPropOptimizer) */ {
 public:
  RMSPropOptimizer();
  virtual ~RMSPropOptimizer();

  RMSPropOptimizer(const RMSPropOptimizer& from);
  RMSPropOptimizer(RMSPropOptimizer&& from) noexcept
    : RMSPropOptimizer() {
    *this = ::std::move(from);
  }

  inline RMSPropOptimizer& operator=(const RMSPropOptimizer& from) {
    CopyFrom(from);
    return *this;
  }
  inline RMSPropOptimizer& operator=(RMSPropOptimizer&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const RMSPropOptimizer& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const RMSPropOptimizer* internal_default_instance() {
    return reinterpret_cast<const RMSPropOptimizer*>(
               &_RMSPropOptimizer_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

  friend void swap(RMSPropOptimizer& a, RMSPropOptimizer& b) {
    a.Swap(&b);
  }
  inline void Swap(RMSPropOptimizer* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline RMSPropOptimizer* New() const final {
    return CreateMaybeMessage<RMSPropOptimizer>(nullptr);
  }

  RMSPropOptimizer* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<RMSPropOptimizer>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const RMSPropOptimizer& from);
  void MergeFrom(const RMSPropOptimizer& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(RMSPropOptimizer* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.RMSPropOptimizer";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kLearningRateFieldNumber = 1,
    kEpsilonFieldNumber = 4,
    kMomentumOptimizerValueFieldNumber = 2,
    kDecayFieldNumber = 3,
  };
  // optional .object_detection.protos.LearningRate learning_rate = 1;
  bool has_learning_rate() const;
  void clear_learning_rate();
  const ::object_detection::protos::LearningRate& learning_rate() const;
  ::object_detection::protos::LearningRate* release_learning_rate();
  ::object_detection::protos::LearningRate* mutable_learning_rate();
  void set_allocated_learning_rate(::object_detection::protos::LearningRate* learning_rate);

  // optional float epsilon = 4 [default = 1];
  bool has_epsilon() const;
  void clear_epsilon();
  float epsilon() const;
  void set_epsilon(float value);

  // optional float momentum_optimizer_value = 2 [default = 0.9];
  bool has_momentum_optimizer_value() const;
  void clear_momentum_optimizer_value();
  float momentum_optimizer_value() const;
  void set_momentum_optimizer_value(float value);

  // optional float decay = 3 [default = 0.9];
  bool has_decay() const;
  void clear_decay();
  float decay() const;
  void set_decay(float value);

  // @@protoc_insertion_point(class_scope:object_detection.protos.RMSPropOptimizer)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::object_detection::protos::LearningRate* learning_rate_;
  float epsilon_;
  float momentum_optimizer_value_;
  float decay_;
  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class MomentumOptimizer :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.MomentumOptimizer) */ {
 public:
  MomentumOptimizer();
  virtual ~MomentumOptimizer();

  MomentumOptimizer(const MomentumOptimizer& from);
  MomentumOptimizer(MomentumOptimizer&& from) noexcept
    : MomentumOptimizer() {
    *this = ::std::move(from);
  }

  inline MomentumOptimizer& operator=(const MomentumOptimizer& from) {
    CopyFrom(from);
    return *this;
  }
  inline MomentumOptimizer& operator=(MomentumOptimizer&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const MomentumOptimizer& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const MomentumOptimizer* internal_default_instance() {
    return reinterpret_cast<const MomentumOptimizer*>(
               &_MomentumOptimizer_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

  friend void swap(MomentumOptimizer& a, MomentumOptimizer& b) {
    a.Swap(&b);
  }
  inline void Swap(MomentumOptimizer* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline MomentumOptimizer* New() const final {
    return CreateMaybeMessage<MomentumOptimizer>(nullptr);
  }

  MomentumOptimizer* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<MomentumOptimizer>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const MomentumOptimizer& from);
  void MergeFrom(const MomentumOptimizer& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(MomentumOptimizer* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.MomentumOptimizer";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kLearningRateFieldNumber = 1,
    kMomentumOptimizerValueFieldNumber = 2,
  };
  // optional .object_detection.protos.LearningRate learning_rate = 1;
  bool has_learning_rate() const;
  void clear_learning_rate();
  const ::object_detection::protos::LearningRate& learning_rate() const;
  ::object_detection::protos::LearningRate* release_learning_rate();
  ::object_detection::protos::LearningRate* mutable_learning_rate();
  void set_allocated_learning_rate(::object_detection::protos::LearningRate* learning_rate);

  // optional float momentum_optimizer_value = 2 [default = 0.9];
  bool has_momentum_optimizer_value() const;
  void clear_momentum_optimizer_value();
  float momentum_optimizer_value() const;
  void set_momentum_optimizer_value(float value);

  // @@protoc_insertion_point(class_scope:object_detection.protos.MomentumOptimizer)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::object_detection::protos::LearningRate* learning_rate_;
  float momentum_optimizer_value_;
  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class AdamOptimizer :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.AdamOptimizer) */ {
 public:
  AdamOptimizer();
  virtual ~AdamOptimizer();

  AdamOptimizer(const AdamOptimizer& from);
  AdamOptimizer(AdamOptimizer&& from) noexcept
    : AdamOptimizer() {
    *this = ::std::move(from);
  }

  inline AdamOptimizer& operator=(const AdamOptimizer& from) {
    CopyFrom(from);
    return *this;
  }
  inline AdamOptimizer& operator=(AdamOptimizer&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const AdamOptimizer& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const AdamOptimizer* internal_default_instance() {
    return reinterpret_cast<const AdamOptimizer*>(
               &_AdamOptimizer_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    3;

  friend void swap(AdamOptimizer& a, AdamOptimizer& b) {
    a.Swap(&b);
  }
  inline void Swap(AdamOptimizer* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline AdamOptimizer* New() const final {
    return CreateMaybeMessage<AdamOptimizer>(nullptr);
  }

  AdamOptimizer* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<AdamOptimizer>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const AdamOptimizer& from);
  void MergeFrom(const AdamOptimizer& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(AdamOptimizer* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.AdamOptimizer";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kLearningRateFieldNumber = 1,
  };
  // optional .object_detection.protos.LearningRate learning_rate = 1;
  bool has_learning_rate() const;
  void clear_learning_rate();
  const ::object_detection::protos::LearningRate& learning_rate() const;
  ::object_detection::protos::LearningRate* release_learning_rate();
  ::object_detection::protos::LearningRate* mutable_learning_rate();
  void set_allocated_learning_rate(::object_detection::protos::LearningRate* learning_rate);

  // @@protoc_insertion_point(class_scope:object_detection.protos.AdamOptimizer)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::object_detection::protos::LearningRate* learning_rate_;
  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class LearningRate :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.LearningRate) */ {
 public:
  LearningRate();
  virtual ~LearningRate();

  LearningRate(const LearningRate& from);
  LearningRate(LearningRate&& from) noexcept
    : LearningRate() {
    *this = ::std::move(from);
  }

  inline LearningRate& operator=(const LearningRate& from) {
    CopyFrom(from);
    return *this;
  }
  inline LearningRate& operator=(LearningRate&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const LearningRate& default_instance();

  enum LearningRateCase {
    kConstantLearningRate = 1,
    kExponentialDecayLearningRate = 2,
    kManualStepLearningRate = 3,
    kCosineDecayLearningRate = 4,
    LEARNING_RATE_NOT_SET = 0,
  };

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const LearningRate* internal_default_instance() {
    return reinterpret_cast<const LearningRate*>(
               &_LearningRate_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    4;

  friend void swap(LearningRate& a, LearningRate& b) {
    a.Swap(&b);
  }
  inline void Swap(LearningRate* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline LearningRate* New() const final {
    return CreateMaybeMessage<LearningRate>(nullptr);
  }

  LearningRate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<LearningRate>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const LearningRate& from);
  void MergeFrom(const LearningRate& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(LearningRate* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.LearningRate";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kConstantLearningRateFieldNumber = 1,
    kExponentialDecayLearningRateFieldNumber = 2,
    kManualStepLearningRateFieldNumber = 3,
    kCosineDecayLearningRateFieldNumber = 4,
  };
  // optional .object_detection.protos.ConstantLearningRate constant_learning_rate = 1;
  bool has_constant_learning_rate() const;
  void clear_constant_learning_rate();
  const ::object_detection::protos::ConstantLearningRate& constant_learning_rate() const;
  ::object_detection::protos::ConstantLearningRate* release_constant_learning_rate();
  ::object_detection::protos::ConstantLearningRate* mutable_constant_learning_rate();
  void set_allocated_constant_learning_rate(::object_detection::protos::ConstantLearningRate* constant_learning_rate);

  // optional .object_detection.protos.ExponentialDecayLearningRate exponential_decay_learning_rate = 2;
  bool has_exponential_decay_learning_rate() const;
  void clear_exponential_decay_learning_rate();
  const ::object_detection::protos::ExponentialDecayLearningRate& exponential_decay_learning_rate() const;
  ::object_detection::protos::ExponentialDecayLearningRate* release_exponential_decay_learning_rate();
  ::object_detection::protos::ExponentialDecayLearningRate* mutable_exponential_decay_learning_rate();
  void set_allocated_exponential_decay_learning_rate(::object_detection::protos::ExponentialDecayLearningRate* exponential_decay_learning_rate);

  // optional .object_detection.protos.ManualStepLearningRate manual_step_learning_rate = 3;
  bool has_manual_step_learning_rate() const;
  void clear_manual_step_learning_rate();
  const ::object_detection::protos::ManualStepLearningRate& manual_step_learning_rate() const;
  ::object_detection::protos::ManualStepLearningRate* release_manual_step_learning_rate();
  ::object_detection::protos::ManualStepLearningRate* mutable_manual_step_learning_rate();
  void set_allocated_manual_step_learning_rate(::object_detection::protos::ManualStepLearningRate* manual_step_learning_rate);

  // optional .object_detection.protos.CosineDecayLearningRate cosine_decay_learning_rate = 4;
  bool has_cosine_decay_learning_rate() const;
  void clear_cosine_decay_learning_rate();
  const ::object_detection::protos::CosineDecayLearningRate& cosine_decay_learning_rate() const;
  ::object_detection::protos::CosineDecayLearningRate* release_cosine_decay_learning_rate();
  ::object_detection::protos::CosineDecayLearningRate* mutable_cosine_decay_learning_rate();
  void set_allocated_cosine_decay_learning_rate(::object_detection::protos::CosineDecayLearningRate* cosine_decay_learning_rate);

  void clear_learning_rate();
  LearningRateCase learning_rate_case() const;
  // @@protoc_insertion_point(class_scope:object_detection.protos.LearningRate)
 private:
  class _Internal;
  void set_has_constant_learning_rate();
  void set_has_exponential_decay_learning_rate();
  void set_has_manual_step_learning_rate();
  void set_has_cosine_decay_learning_rate();

  inline bool has_learning_rate() const;
  inline void clear_has_learning_rate();

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  union LearningRateUnion {
    LearningRateUnion() {}
    ::object_detection::protos::ConstantLearningRate* constant_learning_rate_;
    ::object_detection::protos::ExponentialDecayLearningRate* exponential_decay_learning_rate_;
    ::object_detection::protos::ManualStepLearningRate* manual_step_learning_rate_;
    ::object_detection::protos::CosineDecayLearningRate* cosine_decay_learning_rate_;
  } learning_rate_;
  ::PROTOBUF_NAMESPACE_ID::uint32 _oneof_case_[1];

  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class ConstantLearningRate :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.ConstantLearningRate) */ {
 public:
  ConstantLearningRate();
  virtual ~ConstantLearningRate();

  ConstantLearningRate(const ConstantLearningRate& from);
  ConstantLearningRate(ConstantLearningRate&& from) noexcept
    : ConstantLearningRate() {
    *this = ::std::move(from);
  }

  inline ConstantLearningRate& operator=(const ConstantLearningRate& from) {
    CopyFrom(from);
    return *this;
  }
  inline ConstantLearningRate& operator=(ConstantLearningRate&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ConstantLearningRate& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const ConstantLearningRate* internal_default_instance() {
    return reinterpret_cast<const ConstantLearningRate*>(
               &_ConstantLearningRate_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    5;

  friend void swap(ConstantLearningRate& a, ConstantLearningRate& b) {
    a.Swap(&b);
  }
  inline void Swap(ConstantLearningRate* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline ConstantLearningRate* New() const final {
    return CreateMaybeMessage<ConstantLearningRate>(nullptr);
  }

  ConstantLearningRate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<ConstantLearningRate>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const ConstantLearningRate& from);
  void MergeFrom(const ConstantLearningRate& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ConstantLearningRate* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.ConstantLearningRate";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kLearningRateFieldNumber = 1,
  };
  // optional float learning_rate = 1 [default = 0.002];
  bool has_learning_rate() const;
  void clear_learning_rate();
  float learning_rate() const;
  void set_learning_rate(float value);

  // @@protoc_insertion_point(class_scope:object_detection.protos.ConstantLearningRate)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  float learning_rate_;
  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class ExponentialDecayLearningRate :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.ExponentialDecayLearningRate) */ {
 public:
  ExponentialDecayLearningRate();
  virtual ~ExponentialDecayLearningRate();

  ExponentialDecayLearningRate(const ExponentialDecayLearningRate& from);
  ExponentialDecayLearningRate(ExponentialDecayLearningRate&& from) noexcept
    : ExponentialDecayLearningRate() {
    *this = ::std::move(from);
  }

  inline ExponentialDecayLearningRate& operator=(const ExponentialDecayLearningRate& from) {
    CopyFrom(from);
    return *this;
  }
  inline ExponentialDecayLearningRate& operator=(ExponentialDecayLearningRate&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ExponentialDecayLearningRate& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const ExponentialDecayLearningRate* internal_default_instance() {
    return reinterpret_cast<const ExponentialDecayLearningRate*>(
               &_ExponentialDecayLearningRate_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    6;

  friend void swap(ExponentialDecayLearningRate& a, ExponentialDecayLearningRate& b) {
    a.Swap(&b);
  }
  inline void Swap(ExponentialDecayLearningRate* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline ExponentialDecayLearningRate* New() const final {
    return CreateMaybeMessage<ExponentialDecayLearningRate>(nullptr);
  }

  ExponentialDecayLearningRate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<ExponentialDecayLearningRate>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const ExponentialDecayLearningRate& from);
  void MergeFrom(const ExponentialDecayLearningRate& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ExponentialDecayLearningRate* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.ExponentialDecayLearningRate";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kBurninLearningRateFieldNumber = 5,
    kBurninStepsFieldNumber = 6,
    kMinLearningRateFieldNumber = 7,
    kInitialLearningRateFieldNumber = 1,
    kDecayStepsFieldNumber = 2,
    kDecayFactorFieldNumber = 3,
    kStaircaseFieldNumber = 4,
  };
  // optional float burnin_learning_rate = 5 [default = 0];
  bool has_burnin_learning_rate() const;
  void clear_burnin_learning_rate();
  float burnin_learning_rate() const;
  void set_burnin_learning_rate(float value);

  // optional uint32 burnin_steps = 6 [default = 0];
  bool has_burnin_steps() const;
  void clear_burnin_steps();
  ::PROTOBUF_NAMESPACE_ID::uint32 burnin_steps() const;
  void set_burnin_steps(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // optional float min_learning_rate = 7 [default = 0];
  bool has_min_learning_rate() const;
  void clear_min_learning_rate();
  float min_learning_rate() const;
  void set_min_learning_rate(float value);

  // optional float initial_learning_rate = 1 [default = 0.002];
  bool has_initial_learning_rate() const;
  void clear_initial_learning_rate();
  float initial_learning_rate() const;
  void set_initial_learning_rate(float value);

  // optional uint32 decay_steps = 2 [default = 4000000];
  bool has_decay_steps() const;
  void clear_decay_steps();
  ::PROTOBUF_NAMESPACE_ID::uint32 decay_steps() const;
  void set_decay_steps(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // optional float decay_factor = 3 [default = 0.95];
  bool has_decay_factor() const;
  void clear_decay_factor();
  float decay_factor() const;
  void set_decay_factor(float value);

  // optional bool staircase = 4 [default = true];
  bool has_staircase() const;
  void clear_staircase();
  bool staircase() const;
  void set_staircase(bool value);

  // @@protoc_insertion_point(class_scope:object_detection.protos.ExponentialDecayLearningRate)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  float burnin_learning_rate_;
  ::PROTOBUF_NAMESPACE_ID::uint32 burnin_steps_;
  float min_learning_rate_;
  float initial_learning_rate_;
  ::PROTOBUF_NAMESPACE_ID::uint32 decay_steps_;
  float decay_factor_;
  bool staircase_;
  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class ManualStepLearningRate_LearningRateSchedule :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.ManualStepLearningRate.LearningRateSchedule) */ {
 public:
  ManualStepLearningRate_LearningRateSchedule();
  virtual ~ManualStepLearningRate_LearningRateSchedule();

  ManualStepLearningRate_LearningRateSchedule(const ManualStepLearningRate_LearningRateSchedule& from);
  ManualStepLearningRate_LearningRateSchedule(ManualStepLearningRate_LearningRateSchedule&& from) noexcept
    : ManualStepLearningRate_LearningRateSchedule() {
    *this = ::std::move(from);
  }

  inline ManualStepLearningRate_LearningRateSchedule& operator=(const ManualStepLearningRate_LearningRateSchedule& from) {
    CopyFrom(from);
    return *this;
  }
  inline ManualStepLearningRate_LearningRateSchedule& operator=(ManualStepLearningRate_LearningRateSchedule&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ManualStepLearningRate_LearningRateSchedule& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const ManualStepLearningRate_LearningRateSchedule* internal_default_instance() {
    return reinterpret_cast<const ManualStepLearningRate_LearningRateSchedule*>(
               &_ManualStepLearningRate_LearningRateSchedule_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    7;

  friend void swap(ManualStepLearningRate_LearningRateSchedule& a, ManualStepLearningRate_LearningRateSchedule& b) {
    a.Swap(&b);
  }
  inline void Swap(ManualStepLearningRate_LearningRateSchedule* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline ManualStepLearningRate_LearningRateSchedule* New() const final {
    return CreateMaybeMessage<ManualStepLearningRate_LearningRateSchedule>(nullptr);
  }

  ManualStepLearningRate_LearningRateSchedule* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<ManualStepLearningRate_LearningRateSchedule>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const ManualStepLearningRate_LearningRateSchedule& from);
  void MergeFrom(const ManualStepLearningRate_LearningRateSchedule& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ManualStepLearningRate_LearningRateSchedule* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.ManualStepLearningRate.LearningRateSchedule";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kStepFieldNumber = 1,
    kLearningRateFieldNumber = 2,
  };
  // optional uint32 step = 1;
  bool has_step() const;
  void clear_step();
  ::PROTOBUF_NAMESPACE_ID::uint32 step() const;
  void set_step(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // optional float learning_rate = 2 [default = 0.002];
  bool has_learning_rate() const;
  void clear_learning_rate();
  float learning_rate() const;
  void set_learning_rate(float value);

  // @@protoc_insertion_point(class_scope:object_detection.protos.ManualStepLearningRate.LearningRateSchedule)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::uint32 step_;
  float learning_rate_;
  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class ManualStepLearningRate :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.ManualStepLearningRate) */ {
 public:
  ManualStepLearningRate();
  virtual ~ManualStepLearningRate();

  ManualStepLearningRate(const ManualStepLearningRate& from);
  ManualStepLearningRate(ManualStepLearningRate&& from) noexcept
    : ManualStepLearningRate() {
    *this = ::std::move(from);
  }

  inline ManualStepLearningRate& operator=(const ManualStepLearningRate& from) {
    CopyFrom(from);
    return *this;
  }
  inline ManualStepLearningRate& operator=(ManualStepLearningRate&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ManualStepLearningRate& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const ManualStepLearningRate* internal_default_instance() {
    return reinterpret_cast<const ManualStepLearningRate*>(
               &_ManualStepLearningRate_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    8;

  friend void swap(ManualStepLearningRate& a, ManualStepLearningRate& b) {
    a.Swap(&b);
  }
  inline void Swap(ManualStepLearningRate* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline ManualStepLearningRate* New() const final {
    return CreateMaybeMessage<ManualStepLearningRate>(nullptr);
  }

  ManualStepLearningRate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<ManualStepLearningRate>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const ManualStepLearningRate& from);
  void MergeFrom(const ManualStepLearningRate& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ManualStepLearningRate* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.ManualStepLearningRate";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  typedef ManualStepLearningRate_LearningRateSchedule LearningRateSchedule;

  // accessors -------------------------------------------------------

  enum : int {
    kScheduleFieldNumber = 2,
    kWarmupFieldNumber = 3,
    kInitialLearningRateFieldNumber = 1,
  };
  // repeated .object_detection.protos.ManualStepLearningRate.LearningRateSchedule schedule = 2;
  int schedule_size() const;
  void clear_schedule();
  ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule* mutable_schedule(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule >*
      mutable_schedule();
  const ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule& schedule(int index) const;
  ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule* add_schedule();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule >&
      schedule() const;

  // optional bool warmup = 3 [default = false];
  bool has_warmup() const;
  void clear_warmup();
  bool warmup() const;
  void set_warmup(bool value);

  // optional float initial_learning_rate = 1 [default = 0.002];
  bool has_initial_learning_rate() const;
  void clear_initial_learning_rate();
  float initial_learning_rate() const;
  void set_initial_learning_rate(float value);

  // @@protoc_insertion_point(class_scope:object_detection.protos.ManualStepLearningRate)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule > schedule_;
  bool warmup_;
  float initial_learning_rate_;
  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// -------------------------------------------------------------------

class CosineDecayLearningRate :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:object_detection.protos.CosineDecayLearningRate) */ {
 public:
  CosineDecayLearningRate();
  virtual ~CosineDecayLearningRate();

  CosineDecayLearningRate(const CosineDecayLearningRate& from);
  CosineDecayLearningRate(CosineDecayLearningRate&& from) noexcept
    : CosineDecayLearningRate() {
    *this = ::std::move(from);
  }

  inline CosineDecayLearningRate& operator=(const CosineDecayLearningRate& from) {
    CopyFrom(from);
    return *this;
  }
  inline CosineDecayLearningRate& operator=(CosineDecayLearningRate&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields();
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const CosineDecayLearningRate& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const CosineDecayLearningRate* internal_default_instance() {
    return reinterpret_cast<const CosineDecayLearningRate*>(
               &_CosineDecayLearningRate_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    9;

  friend void swap(CosineDecayLearningRate& a, CosineDecayLearningRate& b) {
    a.Swap(&b);
  }
  inline void Swap(CosineDecayLearningRate* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline CosineDecayLearningRate* New() const final {
    return CreateMaybeMessage<CosineDecayLearningRate>(nullptr);
  }

  CosineDecayLearningRate* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<CosineDecayLearningRate>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const CosineDecayLearningRate& from);
  void MergeFrom(const CosineDecayLearningRate& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  #else
  bool MergePartialFromCodedStream(
      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
  void SerializeWithCachedSizes(
      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(CosineDecayLearningRate* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "object_detection.protos.CosineDecayLearningRate";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto);
    return ::descriptor_table_object_5fdetection_2fprotos_2foptimizer_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kHoldBaseRateStepsFieldNumber = 5,
    kLearningRateBaseFieldNumber = 1,
    kTotalStepsFieldNumber = 2,
    kWarmupLearningRateFieldNumber = 3,
    kWarmupStepsFieldNumber = 4,
  };
  // optional uint32 hold_base_rate_steps = 5 [default = 0];
  bool has_hold_base_rate_steps() const;
  void clear_hold_base_rate_steps();
  ::PROTOBUF_NAMESPACE_ID::uint32 hold_base_rate_steps() const;
  void set_hold_base_rate_steps(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // optional float learning_rate_base = 1 [default = 0.002];
  bool has_learning_rate_base() const;
  void clear_learning_rate_base();
  float learning_rate_base() const;
  void set_learning_rate_base(float value);

  // optional uint32 total_steps = 2 [default = 4000000];
  bool has_total_steps() const;
  void clear_total_steps();
  ::PROTOBUF_NAMESPACE_ID::uint32 total_steps() const;
  void set_total_steps(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // optional float warmup_learning_rate = 3 [default = 0.0002];
  bool has_warmup_learning_rate() const;
  void clear_warmup_learning_rate();
  float warmup_learning_rate() const;
  void set_warmup_learning_rate(float value);

  // optional uint32 warmup_steps = 4 [default = 10000];
  bool has_warmup_steps() const;
  void clear_warmup_steps();
  ::PROTOBUF_NAMESPACE_ID::uint32 warmup_steps() const;
  void set_warmup_steps(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // @@protoc_insertion_point(class_scope:object_detection.protos.CosineDecayLearningRate)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::uint32 hold_base_rate_steps_;
  float learning_rate_base_;
  ::PROTOBUF_NAMESPACE_ID::uint32 total_steps_;
  float warmup_learning_rate_;
  ::PROTOBUF_NAMESPACE_ID::uint32 warmup_steps_;
  friend struct ::TableStruct_object_5fdetection_2fprotos_2foptimizer_2eproto;
};
// ===================================================================


// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// Optimizer

// optional .object_detection.protos.RMSPropOptimizer rms_prop_optimizer = 1;
inline bool Optimizer::has_rms_prop_optimizer() const {
  return optimizer_case() == kRmsPropOptimizer;
}
inline void Optimizer::set_has_rms_prop_optimizer() {
  _oneof_case_[0] = kRmsPropOptimizer;
}
inline void Optimizer::clear_rms_prop_optimizer() {
  if (has_rms_prop_optimizer()) {
    delete optimizer_.rms_prop_optimizer_;
    clear_has_optimizer();
  }
}
inline ::object_detection::protos::RMSPropOptimizer* Optimizer::release_rms_prop_optimizer() {
  // @@protoc_insertion_point(field_release:object_detection.protos.Optimizer.rms_prop_optimizer)
  if (has_rms_prop_optimizer()) {
    clear_has_optimizer();
      ::object_detection::protos::RMSPropOptimizer* temp = optimizer_.rms_prop_optimizer_;
    optimizer_.rms_prop_optimizer_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::object_detection::protos::RMSPropOptimizer& Optimizer::rms_prop_optimizer() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.Optimizer.rms_prop_optimizer)
  return has_rms_prop_optimizer()
      ? *optimizer_.rms_prop_optimizer_
      : *reinterpret_cast< ::object_detection::protos::RMSPropOptimizer*>(&::object_detection::protos::_RMSPropOptimizer_default_instance_);
}
inline ::object_detection::protos::RMSPropOptimizer* Optimizer::mutable_rms_prop_optimizer() {
  if (!has_rms_prop_optimizer()) {
    clear_optimizer();
    set_has_rms_prop_optimizer();
    optimizer_.rms_prop_optimizer_ = CreateMaybeMessage< ::object_detection::protos::RMSPropOptimizer >(
        GetArenaNoVirtual());
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.Optimizer.rms_prop_optimizer)
  return optimizer_.rms_prop_optimizer_;
}

// optional .object_detection.protos.MomentumOptimizer momentum_optimizer = 2;
inline bool Optimizer::has_momentum_optimizer() const {
  return optimizer_case() == kMomentumOptimizer;
}
inline void Optimizer::set_has_momentum_optimizer() {
  _oneof_case_[0] = kMomentumOptimizer;
}
inline void Optimizer::clear_momentum_optimizer() {
  if (has_momentum_optimizer()) {
    delete optimizer_.momentum_optimizer_;
    clear_has_optimizer();
  }
}
inline ::object_detection::protos::MomentumOptimizer* Optimizer::release_momentum_optimizer() {
  // @@protoc_insertion_point(field_release:object_detection.protos.Optimizer.momentum_optimizer)
  if (has_momentum_optimizer()) {
    clear_has_optimizer();
      ::object_detection::protos::MomentumOptimizer* temp = optimizer_.momentum_optimizer_;
    optimizer_.momentum_optimizer_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::object_detection::protos::MomentumOptimizer& Optimizer::momentum_optimizer() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.Optimizer.momentum_optimizer)
  return has_momentum_optimizer()
      ? *optimizer_.momentum_optimizer_
      : *reinterpret_cast< ::object_detection::protos::MomentumOptimizer*>(&::object_detection::protos::_MomentumOptimizer_default_instance_);
}
inline ::object_detection::protos::MomentumOptimizer* Optimizer::mutable_momentum_optimizer() {
  if (!has_momentum_optimizer()) {
    clear_optimizer();
    set_has_momentum_optimizer();
    optimizer_.momentum_optimizer_ = CreateMaybeMessage< ::object_detection::protos::MomentumOptimizer >(
        GetArenaNoVirtual());
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.Optimizer.momentum_optimizer)
  return optimizer_.momentum_optimizer_;
}

// optional .object_detection.protos.AdamOptimizer adam_optimizer = 3;
inline bool Optimizer::has_adam_optimizer() const {
  return optimizer_case() == kAdamOptimizer;
}
inline void Optimizer::set_has_adam_optimizer() {
  _oneof_case_[0] = kAdamOptimizer;
}
inline void Optimizer::clear_adam_optimizer() {
  if (has_adam_optimizer()) {
    delete optimizer_.adam_optimizer_;
    clear_has_optimizer();
  }
}
inline ::object_detection::protos::AdamOptimizer* Optimizer::release_adam_optimizer() {
  // @@protoc_insertion_point(field_release:object_detection.protos.Optimizer.adam_optimizer)
  if (has_adam_optimizer()) {
    clear_has_optimizer();
      ::object_detection::protos::AdamOptimizer* temp = optimizer_.adam_optimizer_;
    optimizer_.adam_optimizer_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::object_detection::protos::AdamOptimizer& Optimizer::adam_optimizer() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.Optimizer.adam_optimizer)
  return has_adam_optimizer()
      ? *optimizer_.adam_optimizer_
      : *reinterpret_cast< ::object_detection::protos::AdamOptimizer*>(&::object_detection::protos::_AdamOptimizer_default_instance_);
}
inline ::object_detection::protos::AdamOptimizer* Optimizer::mutable_adam_optimizer() {
  if (!has_adam_optimizer()) {
    clear_optimizer();
    set_has_adam_optimizer();
    optimizer_.adam_optimizer_ = CreateMaybeMessage< ::object_detection::protos::AdamOptimizer >(
        GetArenaNoVirtual());
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.Optimizer.adam_optimizer)
  return optimizer_.adam_optimizer_;
}

// optional bool use_moving_average = 4 [default = true];
inline bool Optimizer::has_use_moving_average() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void Optimizer::clear_use_moving_average() {
  use_moving_average_ = true;
  _has_bits_[0] &= ~0x00000001u;
}
inline bool Optimizer::use_moving_average() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.Optimizer.use_moving_average)
  return use_moving_average_;
}
inline void Optimizer::set_use_moving_average(bool value) {
  _has_bits_[0] |= 0x00000001u;
  use_moving_average_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.Optimizer.use_moving_average)
}

// optional float moving_average_decay = 5 [default = 0.9999];
inline bool Optimizer::has_moving_average_decay() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void Optimizer::clear_moving_average_decay() {
  moving_average_decay_ = 0.9999f;
  _has_bits_[0] &= ~0x00000002u;
}
inline float Optimizer::moving_average_decay() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.Optimizer.moving_average_decay)
  return moving_average_decay_;
}
inline void Optimizer::set_moving_average_decay(float value) {
  _has_bits_[0] |= 0x00000002u;
  moving_average_decay_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.Optimizer.moving_average_decay)
}

inline bool Optimizer::has_optimizer() const {
  return optimizer_case() != OPTIMIZER_NOT_SET;
}
inline void Optimizer::clear_has_optimizer() {
  _oneof_case_[0] = OPTIMIZER_NOT_SET;
}
inline Optimizer::OptimizerCase Optimizer::optimizer_case() const {
  return Optimizer::OptimizerCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// RMSPropOptimizer

// optional .object_detection.protos.LearningRate learning_rate = 1;
inline bool RMSPropOptimizer::has_learning_rate() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void RMSPropOptimizer::clear_learning_rate() {
  if (learning_rate_ != nullptr) learning_rate_->Clear();
  _has_bits_[0] &= ~0x00000001u;
}
inline const ::object_detection::protos::LearningRate& RMSPropOptimizer::learning_rate() const {
  const ::object_detection::protos::LearningRate* p = learning_rate_;
  // @@protoc_insertion_point(field_get:object_detection.protos.RMSPropOptimizer.learning_rate)
  return p != nullptr ? *p : *reinterpret_cast<const ::object_detection::protos::LearningRate*>(
      &::object_detection::protos::_LearningRate_default_instance_);
}
inline ::object_detection::protos::LearningRate* RMSPropOptimizer::release_learning_rate() {
  // @@protoc_insertion_point(field_release:object_detection.protos.RMSPropOptimizer.learning_rate)
  _has_bits_[0] &= ~0x00000001u;
  ::object_detection::protos::LearningRate* temp = learning_rate_;
  learning_rate_ = nullptr;
  return temp;
}
inline ::object_detection::protos::LearningRate* RMSPropOptimizer::mutable_learning_rate() {
  _has_bits_[0] |= 0x00000001u;
  if (learning_rate_ == nullptr) {
    auto* p = CreateMaybeMessage<::object_detection::protos::LearningRate>(GetArenaNoVirtual());
    learning_rate_ = p;
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.RMSPropOptimizer.learning_rate)
  return learning_rate_;
}
inline void RMSPropOptimizer::set_allocated_learning_rate(::object_detection::protos::LearningRate* learning_rate) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete learning_rate_;
  }
  if (learning_rate) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      learning_rate = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, learning_rate, submessage_arena);
    }
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  learning_rate_ = learning_rate;
  // @@protoc_insertion_point(field_set_allocated:object_detection.protos.RMSPropOptimizer.learning_rate)
}

// optional float momentum_optimizer_value = 2 [default = 0.9];
inline bool RMSPropOptimizer::has_momentum_optimizer_value() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void RMSPropOptimizer::clear_momentum_optimizer_value() {
  momentum_optimizer_value_ = 0.9f;
  _has_bits_[0] &= ~0x00000004u;
}
inline float RMSPropOptimizer::momentum_optimizer_value() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.RMSPropOptimizer.momentum_optimizer_value)
  return momentum_optimizer_value_;
}
inline void RMSPropOptimizer::set_momentum_optimizer_value(float value) {
  _has_bits_[0] |= 0x00000004u;
  momentum_optimizer_value_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.RMSPropOptimizer.momentum_optimizer_value)
}

// optional float decay = 3 [default = 0.9];
inline bool RMSPropOptimizer::has_decay() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void RMSPropOptimizer::clear_decay() {
  decay_ = 0.9f;
  _has_bits_[0] &= ~0x00000008u;
}
inline float RMSPropOptimizer::decay() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.RMSPropOptimizer.decay)
  return decay_;
}
inline void RMSPropOptimizer::set_decay(float value) {
  _has_bits_[0] |= 0x00000008u;
  decay_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.RMSPropOptimizer.decay)
}

// optional float epsilon = 4 [default = 1];
inline bool RMSPropOptimizer::has_epsilon() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void RMSPropOptimizer::clear_epsilon() {
  epsilon_ = 1;
  _has_bits_[0] &= ~0x00000002u;
}
inline float RMSPropOptimizer::epsilon() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.RMSPropOptimizer.epsilon)
  return epsilon_;
}
inline void RMSPropOptimizer::set_epsilon(float value) {
  _has_bits_[0] |= 0x00000002u;
  epsilon_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.RMSPropOptimizer.epsilon)
}

// -------------------------------------------------------------------

// MomentumOptimizer

// optional .object_detection.protos.LearningRate learning_rate = 1;
inline bool MomentumOptimizer::has_learning_rate() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void MomentumOptimizer::clear_learning_rate() {
  if (learning_rate_ != nullptr) learning_rate_->Clear();
  _has_bits_[0] &= ~0x00000001u;
}
inline const ::object_detection::protos::LearningRate& MomentumOptimizer::learning_rate() const {
  const ::object_detection::protos::LearningRate* p = learning_rate_;
  // @@protoc_insertion_point(field_get:object_detection.protos.MomentumOptimizer.learning_rate)
  return p != nullptr ? *p : *reinterpret_cast<const ::object_detection::protos::LearningRate*>(
      &::object_detection::protos::_LearningRate_default_instance_);
}
inline ::object_detection::protos::LearningRate* MomentumOptimizer::release_learning_rate() {
  // @@protoc_insertion_point(field_release:object_detection.protos.MomentumOptimizer.learning_rate)
  _has_bits_[0] &= ~0x00000001u;
  ::object_detection::protos::LearningRate* temp = learning_rate_;
  learning_rate_ = nullptr;
  return temp;
}
inline ::object_detection::protos::LearningRate* MomentumOptimizer::mutable_learning_rate() {
  _has_bits_[0] |= 0x00000001u;
  if (learning_rate_ == nullptr) {
    auto* p = CreateMaybeMessage<::object_detection::protos::LearningRate>(GetArenaNoVirtual());
    learning_rate_ = p;
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.MomentumOptimizer.learning_rate)
  return learning_rate_;
}
inline void MomentumOptimizer::set_allocated_learning_rate(::object_detection::protos::LearningRate* learning_rate) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete learning_rate_;
  }
  if (learning_rate) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      learning_rate = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, learning_rate, submessage_arena);
    }
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  learning_rate_ = learning_rate;
  // @@protoc_insertion_point(field_set_allocated:object_detection.protos.MomentumOptimizer.learning_rate)
}

// optional float momentum_optimizer_value = 2 [default = 0.9];
inline bool MomentumOptimizer::has_momentum_optimizer_value() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void MomentumOptimizer::clear_momentum_optimizer_value() {
  momentum_optimizer_value_ = 0.9f;
  _has_bits_[0] &= ~0x00000002u;
}
inline float MomentumOptimizer::momentum_optimizer_value() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.MomentumOptimizer.momentum_optimizer_value)
  return momentum_optimizer_value_;
}
inline void MomentumOptimizer::set_momentum_optimizer_value(float value) {
  _has_bits_[0] |= 0x00000002u;
  momentum_optimizer_value_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.MomentumOptimizer.momentum_optimizer_value)
}

// -------------------------------------------------------------------

// AdamOptimizer

// optional .object_detection.protos.LearningRate learning_rate = 1;
inline bool AdamOptimizer::has_learning_rate() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void AdamOptimizer::clear_learning_rate() {
  if (learning_rate_ != nullptr) learning_rate_->Clear();
  _has_bits_[0] &= ~0x00000001u;
}
inline const ::object_detection::protos::LearningRate& AdamOptimizer::learning_rate() const {
  const ::object_detection::protos::LearningRate* p = learning_rate_;
  // @@protoc_insertion_point(field_get:object_detection.protos.AdamOptimizer.learning_rate)
  return p != nullptr ? *p : *reinterpret_cast<const ::object_detection::protos::LearningRate*>(
      &::object_detection::protos::_LearningRate_default_instance_);
}
inline ::object_detection::protos::LearningRate* AdamOptimizer::release_learning_rate() {
  // @@protoc_insertion_point(field_release:object_detection.protos.AdamOptimizer.learning_rate)
  _has_bits_[0] &= ~0x00000001u;
  ::object_detection::protos::LearningRate* temp = learning_rate_;
  learning_rate_ = nullptr;
  return temp;
}
inline ::object_detection::protos::LearningRate* AdamOptimizer::mutable_learning_rate() {
  _has_bits_[0] |= 0x00000001u;
  if (learning_rate_ == nullptr) {
    auto* p = CreateMaybeMessage<::object_detection::protos::LearningRate>(GetArenaNoVirtual());
    learning_rate_ = p;
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.AdamOptimizer.learning_rate)
  return learning_rate_;
}
inline void AdamOptimizer::set_allocated_learning_rate(::object_detection::protos::LearningRate* learning_rate) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete learning_rate_;
  }
  if (learning_rate) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      learning_rate = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, learning_rate, submessage_arena);
    }
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  learning_rate_ = learning_rate;
  // @@protoc_insertion_point(field_set_allocated:object_detection.protos.AdamOptimizer.learning_rate)
}

// -------------------------------------------------------------------

// LearningRate

// optional .object_detection.protos.ConstantLearningRate constant_learning_rate = 1;
inline bool LearningRate::has_constant_learning_rate() const {
  return learning_rate_case() == kConstantLearningRate;
}
inline void LearningRate::set_has_constant_learning_rate() {
  _oneof_case_[0] = kConstantLearningRate;
}
inline void LearningRate::clear_constant_learning_rate() {
  if (has_constant_learning_rate()) {
    delete learning_rate_.constant_learning_rate_;
    clear_has_learning_rate();
  }
}
inline ::object_detection::protos::ConstantLearningRate* LearningRate::release_constant_learning_rate() {
  // @@protoc_insertion_point(field_release:object_detection.protos.LearningRate.constant_learning_rate)
  if (has_constant_learning_rate()) {
    clear_has_learning_rate();
      ::object_detection::protos::ConstantLearningRate* temp = learning_rate_.constant_learning_rate_;
    learning_rate_.constant_learning_rate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::object_detection::protos::ConstantLearningRate& LearningRate::constant_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.LearningRate.constant_learning_rate)
  return has_constant_learning_rate()
      ? *learning_rate_.constant_learning_rate_
      : *reinterpret_cast< ::object_detection::protos::ConstantLearningRate*>(&::object_detection::protos::_ConstantLearningRate_default_instance_);
}
inline ::object_detection::protos::ConstantLearningRate* LearningRate::mutable_constant_learning_rate() {
  if (!has_constant_learning_rate()) {
    clear_learning_rate();
    set_has_constant_learning_rate();
    learning_rate_.constant_learning_rate_ = CreateMaybeMessage< ::object_detection::protos::ConstantLearningRate >(
        GetArenaNoVirtual());
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.LearningRate.constant_learning_rate)
  return learning_rate_.constant_learning_rate_;
}

// optional .object_detection.protos.ExponentialDecayLearningRate exponential_decay_learning_rate = 2;
inline bool LearningRate::has_exponential_decay_learning_rate() const {
  return learning_rate_case() == kExponentialDecayLearningRate;
}
inline void LearningRate::set_has_exponential_decay_learning_rate() {
  _oneof_case_[0] = kExponentialDecayLearningRate;
}
inline void LearningRate::clear_exponential_decay_learning_rate() {
  if (has_exponential_decay_learning_rate()) {
    delete learning_rate_.exponential_decay_learning_rate_;
    clear_has_learning_rate();
  }
}
inline ::object_detection::protos::ExponentialDecayLearningRate* LearningRate::release_exponential_decay_learning_rate() {
  // @@protoc_insertion_point(field_release:object_detection.protos.LearningRate.exponential_decay_learning_rate)
  if (has_exponential_decay_learning_rate()) {
    clear_has_learning_rate();
      ::object_detection::protos::ExponentialDecayLearningRate* temp = learning_rate_.exponential_decay_learning_rate_;
    learning_rate_.exponential_decay_learning_rate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::object_detection::protos::ExponentialDecayLearningRate& LearningRate::exponential_decay_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.LearningRate.exponential_decay_learning_rate)
  return has_exponential_decay_learning_rate()
      ? *learning_rate_.exponential_decay_learning_rate_
      : *reinterpret_cast< ::object_detection::protos::ExponentialDecayLearningRate*>(&::object_detection::protos::_ExponentialDecayLearningRate_default_instance_);
}
inline ::object_detection::protos::ExponentialDecayLearningRate* LearningRate::mutable_exponential_decay_learning_rate() {
  if (!has_exponential_decay_learning_rate()) {
    clear_learning_rate();
    set_has_exponential_decay_learning_rate();
    learning_rate_.exponential_decay_learning_rate_ = CreateMaybeMessage< ::object_detection::protos::ExponentialDecayLearningRate >(
        GetArenaNoVirtual());
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.LearningRate.exponential_decay_learning_rate)
  return learning_rate_.exponential_decay_learning_rate_;
}

// optional .object_detection.protos.ManualStepLearningRate manual_step_learning_rate = 3;
inline bool LearningRate::has_manual_step_learning_rate() const {
  return learning_rate_case() == kManualStepLearningRate;
}
inline void LearningRate::set_has_manual_step_learning_rate() {
  _oneof_case_[0] = kManualStepLearningRate;
}
inline void LearningRate::clear_manual_step_learning_rate() {
  if (has_manual_step_learning_rate()) {
    delete learning_rate_.manual_step_learning_rate_;
    clear_has_learning_rate();
  }
}
inline ::object_detection::protos::ManualStepLearningRate* LearningRate::release_manual_step_learning_rate() {
  // @@protoc_insertion_point(field_release:object_detection.protos.LearningRate.manual_step_learning_rate)
  if (has_manual_step_learning_rate()) {
    clear_has_learning_rate();
      ::object_detection::protos::ManualStepLearningRate* temp = learning_rate_.manual_step_learning_rate_;
    learning_rate_.manual_step_learning_rate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::object_detection::protos::ManualStepLearningRate& LearningRate::manual_step_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.LearningRate.manual_step_learning_rate)
  return has_manual_step_learning_rate()
      ? *learning_rate_.manual_step_learning_rate_
      : *reinterpret_cast< ::object_detection::protos::ManualStepLearningRate*>(&::object_detection::protos::_ManualStepLearningRate_default_instance_);
}
inline ::object_detection::protos::ManualStepLearningRate* LearningRate::mutable_manual_step_learning_rate() {
  if (!has_manual_step_learning_rate()) {
    clear_learning_rate();
    set_has_manual_step_learning_rate();
    learning_rate_.manual_step_learning_rate_ = CreateMaybeMessage< ::object_detection::protos::ManualStepLearningRate >(
        GetArenaNoVirtual());
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.LearningRate.manual_step_learning_rate)
  return learning_rate_.manual_step_learning_rate_;
}

// optional .object_detection.protos.CosineDecayLearningRate cosine_decay_learning_rate = 4;
inline bool LearningRate::has_cosine_decay_learning_rate() const {
  return learning_rate_case() == kCosineDecayLearningRate;
}
inline void LearningRate::set_has_cosine_decay_learning_rate() {
  _oneof_case_[0] = kCosineDecayLearningRate;
}
inline void LearningRate::clear_cosine_decay_learning_rate() {
  if (has_cosine_decay_learning_rate()) {
    delete learning_rate_.cosine_decay_learning_rate_;
    clear_has_learning_rate();
  }
}
inline ::object_detection::protos::CosineDecayLearningRate* LearningRate::release_cosine_decay_learning_rate() {
  // @@protoc_insertion_point(field_release:object_detection.protos.LearningRate.cosine_decay_learning_rate)
  if (has_cosine_decay_learning_rate()) {
    clear_has_learning_rate();
      ::object_detection::protos::CosineDecayLearningRate* temp = learning_rate_.cosine_decay_learning_rate_;
    learning_rate_.cosine_decay_learning_rate_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::object_detection::protos::CosineDecayLearningRate& LearningRate::cosine_decay_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.LearningRate.cosine_decay_learning_rate)
  return has_cosine_decay_learning_rate()
      ? *learning_rate_.cosine_decay_learning_rate_
      : *reinterpret_cast< ::object_detection::protos::CosineDecayLearningRate*>(&::object_detection::protos::_CosineDecayLearningRate_default_instance_);
}
inline ::object_detection::protos::CosineDecayLearningRate* LearningRate::mutable_cosine_decay_learning_rate() {
  if (!has_cosine_decay_learning_rate()) {
    clear_learning_rate();
    set_has_cosine_decay_learning_rate();
    learning_rate_.cosine_decay_learning_rate_ = CreateMaybeMessage< ::object_detection::protos::CosineDecayLearningRate >(
        GetArenaNoVirtual());
  }
  // @@protoc_insertion_point(field_mutable:object_detection.protos.LearningRate.cosine_decay_learning_rate)
  return learning_rate_.cosine_decay_learning_rate_;
}

inline bool LearningRate::has_learning_rate() const {
  return learning_rate_case() != LEARNING_RATE_NOT_SET;
}
inline void LearningRate::clear_has_learning_rate() {
  _oneof_case_[0] = LEARNING_RATE_NOT_SET;
}
inline LearningRate::LearningRateCase LearningRate::learning_rate_case() const {
  return LearningRate::LearningRateCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// ConstantLearningRate

// optional float learning_rate = 1 [default = 0.002];
inline bool ConstantLearningRate::has_learning_rate() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ConstantLearningRate::clear_learning_rate() {
  learning_rate_ = 0.002f;
  _has_bits_[0] &= ~0x00000001u;
}
inline float ConstantLearningRate::learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ConstantLearningRate.learning_rate)
  return learning_rate_;
}
inline void ConstantLearningRate::set_learning_rate(float value) {
  _has_bits_[0] |= 0x00000001u;
  learning_rate_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ConstantLearningRate.learning_rate)
}

// -------------------------------------------------------------------

// ExponentialDecayLearningRate

// optional float initial_learning_rate = 1 [default = 0.002];
inline bool ExponentialDecayLearningRate::has_initial_learning_rate() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void ExponentialDecayLearningRate::clear_initial_learning_rate() {
  initial_learning_rate_ = 0.002f;
  _has_bits_[0] &= ~0x00000008u;
}
inline float ExponentialDecayLearningRate::initial_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ExponentialDecayLearningRate.initial_learning_rate)
  return initial_learning_rate_;
}
inline void ExponentialDecayLearningRate::set_initial_learning_rate(float value) {
  _has_bits_[0] |= 0x00000008u;
  initial_learning_rate_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ExponentialDecayLearningRate.initial_learning_rate)
}

// optional uint32 decay_steps = 2 [default = 4000000];
inline bool ExponentialDecayLearningRate::has_decay_steps() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void ExponentialDecayLearningRate::clear_decay_steps() {
  decay_steps_ = 4000000u;
  _has_bits_[0] &= ~0x00000010u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 ExponentialDecayLearningRate::decay_steps() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ExponentialDecayLearningRate.decay_steps)
  return decay_steps_;
}
inline void ExponentialDecayLearningRate::set_decay_steps(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  _has_bits_[0] |= 0x00000010u;
  decay_steps_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ExponentialDecayLearningRate.decay_steps)
}

// optional float decay_factor = 3 [default = 0.95];
inline bool ExponentialDecayLearningRate::has_decay_factor() const {
  return (_has_bits_[0] & 0x00000020u) != 0;
}
inline void ExponentialDecayLearningRate::clear_decay_factor() {
  decay_factor_ = 0.95f;
  _has_bits_[0] &= ~0x00000020u;
}
inline float ExponentialDecayLearningRate::decay_factor() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ExponentialDecayLearningRate.decay_factor)
  return decay_factor_;
}
inline void ExponentialDecayLearningRate::set_decay_factor(float value) {
  _has_bits_[0] |= 0x00000020u;
  decay_factor_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ExponentialDecayLearningRate.decay_factor)
}

// optional bool staircase = 4 [default = true];
inline bool ExponentialDecayLearningRate::has_staircase() const {
  return (_has_bits_[0] & 0x00000040u) != 0;
}
inline void ExponentialDecayLearningRate::clear_staircase() {
  staircase_ = true;
  _has_bits_[0] &= ~0x00000040u;
}
inline bool ExponentialDecayLearningRate::staircase() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ExponentialDecayLearningRate.staircase)
  return staircase_;
}
inline void ExponentialDecayLearningRate::set_staircase(bool value) {
  _has_bits_[0] |= 0x00000040u;
  staircase_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ExponentialDecayLearningRate.staircase)
}

// optional float burnin_learning_rate = 5 [default = 0];
inline bool ExponentialDecayLearningRate::has_burnin_learning_rate() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ExponentialDecayLearningRate::clear_burnin_learning_rate() {
  burnin_learning_rate_ = 0;
  _has_bits_[0] &= ~0x00000001u;
}
inline float ExponentialDecayLearningRate::burnin_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ExponentialDecayLearningRate.burnin_learning_rate)
  return burnin_learning_rate_;
}
inline void ExponentialDecayLearningRate::set_burnin_learning_rate(float value) {
  _has_bits_[0] |= 0x00000001u;
  burnin_learning_rate_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ExponentialDecayLearningRate.burnin_learning_rate)
}

// optional uint32 burnin_steps = 6 [default = 0];
inline bool ExponentialDecayLearningRate::has_burnin_steps() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ExponentialDecayLearningRate::clear_burnin_steps() {
  burnin_steps_ = 0u;
  _has_bits_[0] &= ~0x00000002u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 ExponentialDecayLearningRate::burnin_steps() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ExponentialDecayLearningRate.burnin_steps)
  return burnin_steps_;
}
inline void ExponentialDecayLearningRate::set_burnin_steps(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  _has_bits_[0] |= 0x00000002u;
  burnin_steps_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ExponentialDecayLearningRate.burnin_steps)
}

// optional float min_learning_rate = 7 [default = 0];
inline bool ExponentialDecayLearningRate::has_min_learning_rate() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void ExponentialDecayLearningRate::clear_min_learning_rate() {
  min_learning_rate_ = 0;
  _has_bits_[0] &= ~0x00000004u;
}
inline float ExponentialDecayLearningRate::min_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ExponentialDecayLearningRate.min_learning_rate)
  return min_learning_rate_;
}
inline void ExponentialDecayLearningRate::set_min_learning_rate(float value) {
  _has_bits_[0] |= 0x00000004u;
  min_learning_rate_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ExponentialDecayLearningRate.min_learning_rate)
}

// -------------------------------------------------------------------

// ManualStepLearningRate_LearningRateSchedule

// optional uint32 step = 1;
inline bool ManualStepLearningRate_LearningRateSchedule::has_step() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ManualStepLearningRate_LearningRateSchedule::clear_step() {
  step_ = 0u;
  _has_bits_[0] &= ~0x00000001u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 ManualStepLearningRate_LearningRateSchedule::step() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ManualStepLearningRate.LearningRateSchedule.step)
  return step_;
}
inline void ManualStepLearningRate_LearningRateSchedule::set_step(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  _has_bits_[0] |= 0x00000001u;
  step_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ManualStepLearningRate.LearningRateSchedule.step)
}

// optional float learning_rate = 2 [default = 0.002];
inline bool ManualStepLearningRate_LearningRateSchedule::has_learning_rate() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ManualStepLearningRate_LearningRateSchedule::clear_learning_rate() {
  learning_rate_ = 0.002f;
  _has_bits_[0] &= ~0x00000002u;
}
inline float ManualStepLearningRate_LearningRateSchedule::learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ManualStepLearningRate.LearningRateSchedule.learning_rate)
  return learning_rate_;
}
inline void ManualStepLearningRate_LearningRateSchedule::set_learning_rate(float value) {
  _has_bits_[0] |= 0x00000002u;
  learning_rate_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ManualStepLearningRate.LearningRateSchedule.learning_rate)
}

// -------------------------------------------------------------------

// ManualStepLearningRate

// optional float initial_learning_rate = 1 [default = 0.002];
inline bool ManualStepLearningRate::has_initial_learning_rate() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void ManualStepLearningRate::clear_initial_learning_rate() {
  initial_learning_rate_ = 0.002f;
  _has_bits_[0] &= ~0x00000002u;
}
inline float ManualStepLearningRate::initial_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ManualStepLearningRate.initial_learning_rate)
  return initial_learning_rate_;
}
inline void ManualStepLearningRate::set_initial_learning_rate(float value) {
  _has_bits_[0] |= 0x00000002u;
  initial_learning_rate_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ManualStepLearningRate.initial_learning_rate)
}

// repeated .object_detection.protos.ManualStepLearningRate.LearningRateSchedule schedule = 2;
inline int ManualStepLearningRate::schedule_size() const {
  return schedule_.size();
}
inline void ManualStepLearningRate::clear_schedule() {
  schedule_.Clear();
}
inline ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule* ManualStepLearningRate::mutable_schedule(int index) {
  // @@protoc_insertion_point(field_mutable:object_detection.protos.ManualStepLearningRate.schedule)
  return schedule_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule >*
ManualStepLearningRate::mutable_schedule() {
  // @@protoc_insertion_point(field_mutable_list:object_detection.protos.ManualStepLearningRate.schedule)
  return &schedule_;
}
inline const ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule& ManualStepLearningRate::schedule(int index) const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ManualStepLearningRate.schedule)
  return schedule_.Get(index);
}
inline ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule* ManualStepLearningRate::add_schedule() {
  // @@protoc_insertion_point(field_add:object_detection.protos.ManualStepLearningRate.schedule)
  return schedule_.Add();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::object_detection::protos::ManualStepLearningRate_LearningRateSchedule >&
ManualStepLearningRate::schedule() const {
  // @@protoc_insertion_point(field_list:object_detection.protos.ManualStepLearningRate.schedule)
  return schedule_;
}

// optional bool warmup = 3 [default = false];
inline bool ManualStepLearningRate::has_warmup() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void ManualStepLearningRate::clear_warmup() {
  warmup_ = false;
  _has_bits_[0] &= ~0x00000001u;
}
inline bool ManualStepLearningRate::warmup() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.ManualStepLearningRate.warmup)
  return warmup_;
}
inline void ManualStepLearningRate::set_warmup(bool value) {
  _has_bits_[0] |= 0x00000001u;
  warmup_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.ManualStepLearningRate.warmup)
}

// -------------------------------------------------------------------

// CosineDecayLearningRate

// optional float learning_rate_base = 1 [default = 0.002];
inline bool CosineDecayLearningRate::has_learning_rate_base() const {
  return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void CosineDecayLearningRate::clear_learning_rate_base() {
  learning_rate_base_ = 0.002f;
  _has_bits_[0] &= ~0x00000002u;
}
inline float CosineDecayLearningRate::learning_rate_base() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.CosineDecayLearningRate.learning_rate_base)
  return learning_rate_base_;
}
inline void CosineDecayLearningRate::set_learning_rate_base(float value) {
  _has_bits_[0] |= 0x00000002u;
  learning_rate_base_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.CosineDecayLearningRate.learning_rate_base)
}

// optional uint32 total_steps = 2 [default = 4000000];
inline bool CosineDecayLearningRate::has_total_steps() const {
  return (_has_bits_[0] & 0x00000004u) != 0;
}
inline void CosineDecayLearningRate::clear_total_steps() {
  total_steps_ = 4000000u;
  _has_bits_[0] &= ~0x00000004u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 CosineDecayLearningRate::total_steps() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.CosineDecayLearningRate.total_steps)
  return total_steps_;
}
inline void CosineDecayLearningRate::set_total_steps(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  _has_bits_[0] |= 0x00000004u;
  total_steps_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.CosineDecayLearningRate.total_steps)
}

// optional float warmup_learning_rate = 3 [default = 0.0002];
inline bool CosineDecayLearningRate::has_warmup_learning_rate() const {
  return (_has_bits_[0] & 0x00000008u) != 0;
}
inline void CosineDecayLearningRate::clear_warmup_learning_rate() {
  warmup_learning_rate_ = 0.0002f;
  _has_bits_[0] &= ~0x00000008u;
}
inline float CosineDecayLearningRate::warmup_learning_rate() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.CosineDecayLearningRate.warmup_learning_rate)
  return warmup_learning_rate_;
}
inline void CosineDecayLearningRate::set_warmup_learning_rate(float value) {
  _has_bits_[0] |= 0x00000008u;
  warmup_learning_rate_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.CosineDecayLearningRate.warmup_learning_rate)
}

// optional uint32 warmup_steps = 4 [default = 10000];
inline bool CosineDecayLearningRate::has_warmup_steps() const {
  return (_has_bits_[0] & 0x00000010u) != 0;
}
inline void CosineDecayLearningRate::clear_warmup_steps() {
  warmup_steps_ = 10000u;
  _has_bits_[0] &= ~0x00000010u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 CosineDecayLearningRate::warmup_steps() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.CosineDecayLearningRate.warmup_steps)
  return warmup_steps_;
}
inline void CosineDecayLearningRate::set_warmup_steps(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  _has_bits_[0] |= 0x00000010u;
  warmup_steps_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.CosineDecayLearningRate.warmup_steps)
}

// optional uint32 hold_base_rate_steps = 5 [default = 0];
inline bool CosineDecayLearningRate::has_hold_base_rate_steps() const {
  return (_has_bits_[0] & 0x00000001u) != 0;
}
inline void CosineDecayLearningRate::clear_hold_base_rate_steps() {
  hold_base_rate_steps_ = 0u;
  _has_bits_[0] &= ~0x00000001u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 CosineDecayLearningRate::hold_base_rate_steps() const {
  // @@protoc_insertion_point(field_get:object_detection.protos.CosineDecayLearningRate.hold_base_rate_steps)
  return hold_base_rate_steps_;
}
inline void CosineDecayLearningRate::set_hold_base_rate_steps(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  _has_bits_[0] |= 0x00000001u;
  hold_base_rate_steps_ = value;
  // @@protoc_insertion_point(field_set:object_detection.protos.CosineDecayLearningRate.hold_base_rate_steps)
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace protos
}  // namespace object_detection

// @@protoc_insertion_point(global_scope)

#include <google/protobuf/port_undef.inc>
#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_object_5fdetection_2fprotos_2foptimizer_2eproto
