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

#ifndef GOOGLE_PROTOBUF_INCLUDED_second_2fprotos_2fsecond_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_second_2fprotos_2fsecond_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3021000
#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 3021005 < 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_util.h>
#include <google/protobuf/metadata_lite.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/generated_enum_reflection.h>
#include <google/protobuf/unknown_field_set.h>
#include "second/protos/losses.pb.h"
#include "second/protos/box_coder.pb.h"
#include "second/protos/target.pb.h"
#include "second/protos/voxel_generator.pb.h"
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_second_2fprotos_2fsecond_2eproto
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct TableStruct_second_2fprotos_2fsecond_2eproto {
  static const uint32_t offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_second_2fprotos_2fsecond_2eproto;
namespace second {
namespace protos {
class VoxelNet;
struct VoxelNetDefaultTypeInternal;
extern VoxelNetDefaultTypeInternal _VoxelNet_default_instance_;
class VoxelNet_MiddleFeatureExtractor;
struct VoxelNet_MiddleFeatureExtractorDefaultTypeInternal;
extern VoxelNet_MiddleFeatureExtractorDefaultTypeInternal _VoxelNet_MiddleFeatureExtractor_default_instance_;
class VoxelNet_RPN;
struct VoxelNet_RPNDefaultTypeInternal;
extern VoxelNet_RPNDefaultTypeInternal _VoxelNet_RPN_default_instance_;
class VoxelNet_VoxelFeatureExtractor;
struct VoxelNet_VoxelFeatureExtractorDefaultTypeInternal;
extern VoxelNet_VoxelFeatureExtractorDefaultTypeInternal _VoxelNet_VoxelFeatureExtractor_default_instance_;
}  // namespace protos
}  // namespace second
PROTOBUF_NAMESPACE_OPEN
template<> ::second::protos::VoxelNet* Arena::CreateMaybeMessage<::second::protos::VoxelNet>(Arena*);
template<> ::second::protos::VoxelNet_MiddleFeatureExtractor* Arena::CreateMaybeMessage<::second::protos::VoxelNet_MiddleFeatureExtractor>(Arena*);
template<> ::second::protos::VoxelNet_RPN* Arena::CreateMaybeMessage<::second::protos::VoxelNet_RPN>(Arena*);
template<> ::second::protos::VoxelNet_VoxelFeatureExtractor* Arena::CreateMaybeMessage<::second::protos::VoxelNet_VoxelFeatureExtractor>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace second {
namespace protos {

enum VoxelNet_LossNormType : int {
  VoxelNet_LossNormType_NormByNumExamples = 0,
  VoxelNet_LossNormType_NormByNumPositives = 1,
  VoxelNet_LossNormType_NormByNumPosNeg = 2,
  VoxelNet_LossNormType_VoxelNet_LossNormType_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::min(),
  VoxelNet_LossNormType_VoxelNet_LossNormType_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<int32_t>::max()
};
bool VoxelNet_LossNormType_IsValid(int value);
constexpr VoxelNet_LossNormType VoxelNet_LossNormType_LossNormType_MIN = VoxelNet_LossNormType_NormByNumExamples;
constexpr VoxelNet_LossNormType VoxelNet_LossNormType_LossNormType_MAX = VoxelNet_LossNormType_NormByNumPosNeg;
constexpr int VoxelNet_LossNormType_LossNormType_ARRAYSIZE = VoxelNet_LossNormType_LossNormType_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* VoxelNet_LossNormType_descriptor();
template<typename T>
inline const std::string& VoxelNet_LossNormType_Name(T enum_t_value) {
  static_assert(::std::is_same<T, VoxelNet_LossNormType>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function VoxelNet_LossNormType_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    VoxelNet_LossNormType_descriptor(), enum_t_value);
}
inline bool VoxelNet_LossNormType_Parse(
    ::PROTOBUF_NAMESPACE_ID::ConstStringParam name, VoxelNet_LossNormType* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<VoxelNet_LossNormType>(
    VoxelNet_LossNormType_descriptor(), name, value);
}
// ===================================================================

class VoxelNet_VoxelFeatureExtractor final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:second.protos.VoxelNet.VoxelFeatureExtractor) */ {
 public:
  inline VoxelNet_VoxelFeatureExtractor() : VoxelNet_VoxelFeatureExtractor(nullptr) {}
  ~VoxelNet_VoxelFeatureExtractor() override;
  explicit PROTOBUF_CONSTEXPR VoxelNet_VoxelFeatureExtractor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

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

  inline VoxelNet_VoxelFeatureExtractor& operator=(const VoxelNet_VoxelFeatureExtractor& from) {
    CopyFrom(from);
    return *this;
  }
  inline VoxelNet_VoxelFeatureExtractor& operator=(VoxelNet_VoxelFeatureExtractor&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const VoxelNet_VoxelFeatureExtractor& default_instance() {
    return *internal_default_instance();
  }
  static inline const VoxelNet_VoxelFeatureExtractor* internal_default_instance() {
    return reinterpret_cast<const VoxelNet_VoxelFeatureExtractor*>(
               &_VoxelNet_VoxelFeatureExtractor_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

  friend void swap(VoxelNet_VoxelFeatureExtractor& a, VoxelNet_VoxelFeatureExtractor& b) {
    a.Swap(&b);
  }
  inline void Swap(VoxelNet_VoxelFeatureExtractor* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(VoxelNet_VoxelFeatureExtractor* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

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

  VoxelNet_VoxelFeatureExtractor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<VoxelNet_VoxelFeatureExtractor>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const VoxelNet_VoxelFeatureExtractor& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom( const VoxelNet_VoxelFeatureExtractor& from) {
    VoxelNet_VoxelFeatureExtractor::MergeImpl(*this, from);
  }
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(VoxelNet_VoxelFeatureExtractor* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "second.protos.VoxelNet.VoxelFeatureExtractor";
  }
  protected:
  explicit VoxelNet_VoxelFeatureExtractor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

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

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

  enum : int {
    kNumFiltersFieldNumber = 2,
    kModuleClassNameFieldNumber = 1,
    kWithDistanceFieldNumber = 3,
  };
  // repeated uint32 num_filters = 2;
  int num_filters_size() const;
  private:
  int _internal_num_filters_size() const;
  public:
  void clear_num_filters();
  private:
  uint32_t _internal_num_filters(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      _internal_num_filters() const;
  void _internal_add_num_filters(uint32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      _internal_mutable_num_filters();
  public:
  uint32_t num_filters(int index) const;
  void set_num_filters(int index, uint32_t value);
  void add_num_filters(uint32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      num_filters() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      mutable_num_filters();

  // string module_class_name = 1;
  void clear_module_class_name();
  const std::string& module_class_name() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_module_class_name(ArgT0&& arg0, ArgT... args);
  std::string* mutable_module_class_name();
  PROTOBUF_NODISCARD std::string* release_module_class_name();
  void set_allocated_module_class_name(std::string* module_class_name);
  private:
  const std::string& _internal_module_class_name() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_module_class_name(const std::string& value);
  std::string* _internal_mutable_module_class_name();
  public:

  // bool with_distance = 3;
  void clear_with_distance();
  bool with_distance() const;
  void set_with_distance(bool value);
  private:
  bool _internal_with_distance() const;
  void _internal_set_with_distance(bool value);
  public:

  // @@protoc_insertion_point(class_scope:second.protos.VoxelNet.VoxelFeatureExtractor)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  struct Impl_ {
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t > num_filters_;
    mutable std::atomic<int> _num_filters_cached_byte_size_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr module_class_name_;
    bool with_distance_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_second_2fprotos_2fsecond_2eproto;
};
// -------------------------------------------------------------------

class VoxelNet_MiddleFeatureExtractor final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:second.protos.VoxelNet.MiddleFeatureExtractor) */ {
 public:
  inline VoxelNet_MiddleFeatureExtractor() : VoxelNet_MiddleFeatureExtractor(nullptr) {}
  ~VoxelNet_MiddleFeatureExtractor() override;
  explicit PROTOBUF_CONSTEXPR VoxelNet_MiddleFeatureExtractor(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

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

  inline VoxelNet_MiddleFeatureExtractor& operator=(const VoxelNet_MiddleFeatureExtractor& from) {
    CopyFrom(from);
    return *this;
  }
  inline VoxelNet_MiddleFeatureExtractor& operator=(VoxelNet_MiddleFeatureExtractor&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const VoxelNet_MiddleFeatureExtractor& default_instance() {
    return *internal_default_instance();
  }
  static inline const VoxelNet_MiddleFeatureExtractor* internal_default_instance() {
    return reinterpret_cast<const VoxelNet_MiddleFeatureExtractor*>(
               &_VoxelNet_MiddleFeatureExtractor_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

  friend void swap(VoxelNet_MiddleFeatureExtractor& a, VoxelNet_MiddleFeatureExtractor& b) {
    a.Swap(&b);
  }
  inline void Swap(VoxelNet_MiddleFeatureExtractor* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(VoxelNet_MiddleFeatureExtractor* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

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

  VoxelNet_MiddleFeatureExtractor* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<VoxelNet_MiddleFeatureExtractor>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const VoxelNet_MiddleFeatureExtractor& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom( const VoxelNet_MiddleFeatureExtractor& from) {
    VoxelNet_MiddleFeatureExtractor::MergeImpl(*this, from);
  }
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(VoxelNet_MiddleFeatureExtractor* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "second.protos.VoxelNet.MiddleFeatureExtractor";
  }
  protected:
  explicit VoxelNet_MiddleFeatureExtractor(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

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

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

  enum : int {
    kNumFiltersDown1FieldNumber = 2,
    kNumFiltersDown2FieldNumber = 3,
    kModuleClassNameFieldNumber = 1,
  };
  // repeated uint32 num_filters_down1 = 2;
  int num_filters_down1_size() const;
  private:
  int _internal_num_filters_down1_size() const;
  public:
  void clear_num_filters_down1();
  private:
  uint32_t _internal_num_filters_down1(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      _internal_num_filters_down1() const;
  void _internal_add_num_filters_down1(uint32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      _internal_mutable_num_filters_down1();
  public:
  uint32_t num_filters_down1(int index) const;
  void set_num_filters_down1(int index, uint32_t value);
  void add_num_filters_down1(uint32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      num_filters_down1() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      mutable_num_filters_down1();

  // repeated uint32 num_filters_down2 = 3;
  int num_filters_down2_size() const;
  private:
  int _internal_num_filters_down2_size() const;
  public:
  void clear_num_filters_down2();
  private:
  uint32_t _internal_num_filters_down2(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      _internal_num_filters_down2() const;
  void _internal_add_num_filters_down2(uint32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      _internal_mutable_num_filters_down2();
  public:
  uint32_t num_filters_down2(int index) const;
  void set_num_filters_down2(int index, uint32_t value);
  void add_num_filters_down2(uint32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      num_filters_down2() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      mutable_num_filters_down2();

  // string module_class_name = 1;
  void clear_module_class_name();
  const std::string& module_class_name() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_module_class_name(ArgT0&& arg0, ArgT... args);
  std::string* mutable_module_class_name();
  PROTOBUF_NODISCARD std::string* release_module_class_name();
  void set_allocated_module_class_name(std::string* module_class_name);
  private:
  const std::string& _internal_module_class_name() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_module_class_name(const std::string& value);
  std::string* _internal_mutable_module_class_name();
  public:

  // @@protoc_insertion_point(class_scope:second.protos.VoxelNet.MiddleFeatureExtractor)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  struct Impl_ {
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t > num_filters_down1_;
    mutable std::atomic<int> _num_filters_down1_cached_byte_size_;
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t > num_filters_down2_;
    mutable std::atomic<int> _num_filters_down2_cached_byte_size_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr module_class_name_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_second_2fprotos_2fsecond_2eproto;
};
// -------------------------------------------------------------------

class VoxelNet_RPN final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:second.protos.VoxelNet.RPN) */ {
 public:
  inline VoxelNet_RPN() : VoxelNet_RPN(nullptr) {}
  ~VoxelNet_RPN() override;
  explicit PROTOBUF_CONSTEXPR VoxelNet_RPN(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

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

  inline VoxelNet_RPN& operator=(const VoxelNet_RPN& from) {
    CopyFrom(from);
    return *this;
  }
  inline VoxelNet_RPN& operator=(VoxelNet_RPN&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const VoxelNet_RPN& default_instance() {
    return *internal_default_instance();
  }
  static inline const VoxelNet_RPN* internal_default_instance() {
    return reinterpret_cast<const VoxelNet_RPN*>(
               &_VoxelNet_RPN_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

  friend void swap(VoxelNet_RPN& a, VoxelNet_RPN& b) {
    a.Swap(&b);
  }
  inline void Swap(VoxelNet_RPN* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(VoxelNet_RPN* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

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

  VoxelNet_RPN* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<VoxelNet_RPN>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const VoxelNet_RPN& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom( const VoxelNet_RPN& from) {
    VoxelNet_RPN::MergeImpl(*this, from);
  }
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(VoxelNet_RPN* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "second.protos.VoxelNet.RPN";
  }
  protected:
  explicit VoxelNet_RPN(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

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

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

  enum : int {
    kLayerNumsFieldNumber = 2,
    kLayerStridesFieldNumber = 3,
    kNumFiltersFieldNumber = 4,
    kUpsampleStridesFieldNumber = 5,
    kNumUpsampleFiltersFieldNumber = 6,
    kModuleClassNameFieldNumber = 1,
    kUseGroupnormFieldNumber = 7,
    kNumGroupsFieldNumber = 8,
  };
  // repeated uint32 layer_nums = 2;
  int layer_nums_size() const;
  private:
  int _internal_layer_nums_size() const;
  public:
  void clear_layer_nums();
  private:
  uint32_t _internal_layer_nums(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      _internal_layer_nums() const;
  void _internal_add_layer_nums(uint32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      _internal_mutable_layer_nums();
  public:
  uint32_t layer_nums(int index) const;
  void set_layer_nums(int index, uint32_t value);
  void add_layer_nums(uint32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      layer_nums() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      mutable_layer_nums();

  // repeated uint32 layer_strides = 3;
  int layer_strides_size() const;
  private:
  int _internal_layer_strides_size() const;
  public:
  void clear_layer_strides();
  private:
  uint32_t _internal_layer_strides(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      _internal_layer_strides() const;
  void _internal_add_layer_strides(uint32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      _internal_mutable_layer_strides();
  public:
  uint32_t layer_strides(int index) const;
  void set_layer_strides(int index, uint32_t value);
  void add_layer_strides(uint32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      layer_strides() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      mutable_layer_strides();

  // repeated uint32 num_filters = 4;
  int num_filters_size() const;
  private:
  int _internal_num_filters_size() const;
  public:
  void clear_num_filters();
  private:
  uint32_t _internal_num_filters(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      _internal_num_filters() const;
  void _internal_add_num_filters(uint32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      _internal_mutable_num_filters();
  public:
  uint32_t num_filters(int index) const;
  void set_num_filters(int index, uint32_t value);
  void add_num_filters(uint32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      num_filters() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      mutable_num_filters();

  // repeated uint32 upsample_strides = 5;
  int upsample_strides_size() const;
  private:
  int _internal_upsample_strides_size() const;
  public:
  void clear_upsample_strides();
  private:
  uint32_t _internal_upsample_strides(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      _internal_upsample_strides() const;
  void _internal_add_upsample_strides(uint32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      _internal_mutable_upsample_strides();
  public:
  uint32_t upsample_strides(int index) const;
  void set_upsample_strides(int index, uint32_t value);
  void add_upsample_strides(uint32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      upsample_strides() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      mutable_upsample_strides();

  // repeated uint32 num_upsample_filters = 6;
  int num_upsample_filters_size() const;
  private:
  int _internal_num_upsample_filters_size() const;
  public:
  void clear_num_upsample_filters();
  private:
  uint32_t _internal_num_upsample_filters(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      _internal_num_upsample_filters() const;
  void _internal_add_num_upsample_filters(uint32_t value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      _internal_mutable_num_upsample_filters();
  public:
  uint32_t num_upsample_filters(int index) const;
  void set_num_upsample_filters(int index, uint32_t value);
  void add_num_upsample_filters(uint32_t value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
      num_upsample_filters() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
      mutable_num_upsample_filters();

  // string module_class_name = 1;
  void clear_module_class_name();
  const std::string& module_class_name() const;
  template <typename ArgT0 = const std::string&, typename... ArgT>
  void set_module_class_name(ArgT0&& arg0, ArgT... args);
  std::string* mutable_module_class_name();
  PROTOBUF_NODISCARD std::string* release_module_class_name();
  void set_allocated_module_class_name(std::string* module_class_name);
  private:
  const std::string& _internal_module_class_name() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_module_class_name(const std::string& value);
  std::string* _internal_mutable_module_class_name();
  public:

  // bool use_groupnorm = 7;
  void clear_use_groupnorm();
  bool use_groupnorm() const;
  void set_use_groupnorm(bool value);
  private:
  bool _internal_use_groupnorm() const;
  void _internal_set_use_groupnorm(bool value);
  public:

  // uint32 num_groups = 8;
  void clear_num_groups();
  uint32_t num_groups() const;
  void set_num_groups(uint32_t value);
  private:
  uint32_t _internal_num_groups() const;
  void _internal_set_num_groups(uint32_t value);
  public:

  // @@protoc_insertion_point(class_scope:second.protos.VoxelNet.RPN)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  struct Impl_ {
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t > layer_nums_;
    mutable std::atomic<int> _layer_nums_cached_byte_size_;
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t > layer_strides_;
    mutable std::atomic<int> _layer_strides_cached_byte_size_;
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t > num_filters_;
    mutable std::atomic<int> _num_filters_cached_byte_size_;
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t > upsample_strides_;
    mutable std::atomic<int> _upsample_strides_cached_byte_size_;
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t > num_upsample_filters_;
    mutable std::atomic<int> _num_upsample_filters_cached_byte_size_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr module_class_name_;
    bool use_groupnorm_;
    uint32_t num_groups_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_second_2fprotos_2fsecond_2eproto;
};
// -------------------------------------------------------------------

class VoxelNet final :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:second.protos.VoxelNet) */ {
 public:
  inline VoxelNet() : VoxelNet(nullptr) {}
  ~VoxelNet() override;
  explicit PROTOBUF_CONSTEXPR VoxelNet(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);

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

  inline VoxelNet& operator=(const VoxelNet& from) {
    CopyFrom(from);
    return *this;
  }
  inline VoxelNet& operator=(VoxelNet&& from) noexcept {
    if (this == &from) return *this;
    if (GetOwningArena() == from.GetOwningArena()
  #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetOwningArena() != nullptr
  #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const VoxelNet& default_instance() {
    return *internal_default_instance();
  }
  static inline const VoxelNet* internal_default_instance() {
    return reinterpret_cast<const VoxelNet*>(
               &_VoxelNet_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    3;

  friend void swap(VoxelNet& a, VoxelNet& b) {
    a.Swap(&b);
  }
  inline void Swap(VoxelNet* other) {
    if (other == this) return;
  #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() != nullptr &&
        GetOwningArena() == other->GetOwningArena()) {
   #else  // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetOwningArena() == other->GetOwningArena()) {
  #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(VoxelNet* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
    InternalSwap(other);
  }

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

  VoxelNet* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
    return CreateMaybeMessage<VoxelNet>(arena);
  }
  using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
  void CopyFrom(const VoxelNet& from);
  using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
  void MergeFrom( const VoxelNet& from) {
    VoxelNet::MergeImpl(*this, from);
  }
  private:
  static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg);
  public:
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  uint8_t* _InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::PROTOBUF_NAMESPACE_ID::Arena* arena, bool is_message_owned);
  void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(VoxelNet* other);

  private:
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "second.protos.VoxelNet";
  }
  protected:
  explicit VoxelNet(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                       bool is_message_owned = false);
  public:

  static const ClassData _class_data_;
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;

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

  typedef VoxelNet_VoxelFeatureExtractor VoxelFeatureExtractor;
  typedef VoxelNet_MiddleFeatureExtractor MiddleFeatureExtractor;
  typedef VoxelNet_RPN RPN;

  typedef VoxelNet_LossNormType LossNormType;
  static constexpr LossNormType NormByNumExamples =
    VoxelNet_LossNormType_NormByNumExamples;
  static constexpr LossNormType NormByNumPositives =
    VoxelNet_LossNormType_NormByNumPositives;
  static constexpr LossNormType NormByNumPosNeg =
    VoxelNet_LossNormType_NormByNumPosNeg;
  static inline bool LossNormType_IsValid(int value) {
    return VoxelNet_LossNormType_IsValid(value);
  }
  static constexpr LossNormType LossNormType_MIN =
    VoxelNet_LossNormType_LossNormType_MIN;
  static constexpr LossNormType LossNormType_MAX =
    VoxelNet_LossNormType_LossNormType_MAX;
  static constexpr int LossNormType_ARRAYSIZE =
    VoxelNet_LossNormType_LossNormType_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  LossNormType_descriptor() {
    return VoxelNet_LossNormType_descriptor();
  }
  template<typename T>
  static inline const std::string& LossNormType_Name(T enum_t_value) {
    static_assert(::std::is_same<T, LossNormType>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function LossNormType_Name.");
    return VoxelNet_LossNormType_Name(enum_t_value);
  }
  static inline bool LossNormType_Parse(::PROTOBUF_NAMESPACE_ID::ConstStringParam name,
      LossNormType* value) {
    return VoxelNet_LossNormType_Parse(name, value);
  }

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

  enum : int {
    kPostCenterLimitRangeFieldNumber = 16,
    kVoxelFeatureExtractorFieldNumber = 2,
    kMiddleFeatureExtractorFieldNumber = 3,
    kRpnFieldNumber = 4,
    kLossFieldNumber = 6,
    kBoxCoderFieldNumber = 25,
    kTargetAssignerFieldNumber = 26,
    kVoxelGeneratorFieldNumber = 29,
    kNumClassFieldNumber = 1,
    kUseSigmoidScoreFieldNumber = 5,
    kEncodeRadErrorBySinFieldNumber = 7,
    kEncodeBackgroundAsZerosFieldNumber = 8,
    kUseAuxClassifierFieldNumber = 9,
    kNmsPreMaxSizeFieldNumber = 12,
    kNmsPostMaxSizeFieldNumber = 13,
    kNmsScoreThresholdFieldNumber = 14,
    kNmsIouThresholdFieldNumber = 15,
    kUseRotateNmsFieldNumber = 10,
    kUseMultiClassNmsFieldNumber = 11,
    kUseDirectionClassifierFieldNumber = 17,
    kUseBevFieldNumber = 22,
    kDirectionLossWeightFieldNumber = 18,
    kPosClassWeightFieldNumber = 19,
    kNegClassWeightFieldNumber = 20,
    kLossNormTypeFieldNumber = 21,
    kWithoutReflectivityFieldNumber = 23,
    kEncodeAngleToVectorFieldNumber = 24,
    kLidarInputFieldNumber = 27,
    kNumPointFeaturesFieldNumber = 28,
  };
  // repeated float post_center_limit_range = 16;
  int post_center_limit_range_size() const;
  private:
  int _internal_post_center_limit_range_size() const;
  public:
  void clear_post_center_limit_range();
  private:
  float _internal_post_center_limit_range(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< float >&
      _internal_post_center_limit_range() const;
  void _internal_add_post_center_limit_range(float value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< float >*
      _internal_mutable_post_center_limit_range();
  public:
  float post_center_limit_range(int index) const;
  void set_post_center_limit_range(int index, float value);
  void add_post_center_limit_range(float value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< float >&
      post_center_limit_range() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< float >*
      mutable_post_center_limit_range();

  // .second.protos.VoxelNet.VoxelFeatureExtractor voxel_feature_extractor = 2;
  bool has_voxel_feature_extractor() const;
  private:
  bool _internal_has_voxel_feature_extractor() const;
  public:
  void clear_voxel_feature_extractor();
  const ::second::protos::VoxelNet_VoxelFeatureExtractor& voxel_feature_extractor() const;
  PROTOBUF_NODISCARD ::second::protos::VoxelNet_VoxelFeatureExtractor* release_voxel_feature_extractor();
  ::second::protos::VoxelNet_VoxelFeatureExtractor* mutable_voxel_feature_extractor();
  void set_allocated_voxel_feature_extractor(::second::protos::VoxelNet_VoxelFeatureExtractor* voxel_feature_extractor);
  private:
  const ::second::protos::VoxelNet_VoxelFeatureExtractor& _internal_voxel_feature_extractor() const;
  ::second::protos::VoxelNet_VoxelFeatureExtractor* _internal_mutable_voxel_feature_extractor();
  public:
  void unsafe_arena_set_allocated_voxel_feature_extractor(
      ::second::protos::VoxelNet_VoxelFeatureExtractor* voxel_feature_extractor);
  ::second::protos::VoxelNet_VoxelFeatureExtractor* unsafe_arena_release_voxel_feature_extractor();

  // .second.protos.VoxelNet.MiddleFeatureExtractor middle_feature_extractor = 3;
  bool has_middle_feature_extractor() const;
  private:
  bool _internal_has_middle_feature_extractor() const;
  public:
  void clear_middle_feature_extractor();
  const ::second::protos::VoxelNet_MiddleFeatureExtractor& middle_feature_extractor() const;
  PROTOBUF_NODISCARD ::second::protos::VoxelNet_MiddleFeatureExtractor* release_middle_feature_extractor();
  ::second::protos::VoxelNet_MiddleFeatureExtractor* mutable_middle_feature_extractor();
  void set_allocated_middle_feature_extractor(::second::protos::VoxelNet_MiddleFeatureExtractor* middle_feature_extractor);
  private:
  const ::second::protos::VoxelNet_MiddleFeatureExtractor& _internal_middle_feature_extractor() const;
  ::second::protos::VoxelNet_MiddleFeatureExtractor* _internal_mutable_middle_feature_extractor();
  public:
  void unsafe_arena_set_allocated_middle_feature_extractor(
      ::second::protos::VoxelNet_MiddleFeatureExtractor* middle_feature_extractor);
  ::second::protos::VoxelNet_MiddleFeatureExtractor* unsafe_arena_release_middle_feature_extractor();

  // .second.protos.VoxelNet.RPN rpn = 4;
  bool has_rpn() const;
  private:
  bool _internal_has_rpn() const;
  public:
  void clear_rpn();
  const ::second::protos::VoxelNet_RPN& rpn() const;
  PROTOBUF_NODISCARD ::second::protos::VoxelNet_RPN* release_rpn();
  ::second::protos::VoxelNet_RPN* mutable_rpn();
  void set_allocated_rpn(::second::protos::VoxelNet_RPN* rpn);
  private:
  const ::second::protos::VoxelNet_RPN& _internal_rpn() const;
  ::second::protos::VoxelNet_RPN* _internal_mutable_rpn();
  public:
  void unsafe_arena_set_allocated_rpn(
      ::second::protos::VoxelNet_RPN* rpn);
  ::second::protos::VoxelNet_RPN* unsafe_arena_release_rpn();

  // .second.protos.Loss loss = 6;
  bool has_loss() const;
  private:
  bool _internal_has_loss() const;
  public:
  void clear_loss();
  const ::second::protos::Loss& loss() const;
  PROTOBUF_NODISCARD ::second::protos::Loss* release_loss();
  ::second::protos::Loss* mutable_loss();
  void set_allocated_loss(::second::protos::Loss* loss);
  private:
  const ::second::protos::Loss& _internal_loss() const;
  ::second::protos::Loss* _internal_mutable_loss();
  public:
  void unsafe_arena_set_allocated_loss(
      ::second::protos::Loss* loss);
  ::second::protos::Loss* unsafe_arena_release_loss();

  // .second.protos.BoxCoder box_coder = 25;
  bool has_box_coder() const;
  private:
  bool _internal_has_box_coder() const;
  public:
  void clear_box_coder();
  const ::second::protos::BoxCoder& box_coder() const;
  PROTOBUF_NODISCARD ::second::protos::BoxCoder* release_box_coder();
  ::second::protos::BoxCoder* mutable_box_coder();
  void set_allocated_box_coder(::second::protos::BoxCoder* box_coder);
  private:
  const ::second::protos::BoxCoder& _internal_box_coder() const;
  ::second::protos::BoxCoder* _internal_mutable_box_coder();
  public:
  void unsafe_arena_set_allocated_box_coder(
      ::second::protos::BoxCoder* box_coder);
  ::second::protos::BoxCoder* unsafe_arena_release_box_coder();

  // .second.protos.TargetAssigner target_assigner = 26;
  bool has_target_assigner() const;
  private:
  bool _internal_has_target_assigner() const;
  public:
  void clear_target_assigner();
  const ::second::protos::TargetAssigner& target_assigner() const;
  PROTOBUF_NODISCARD ::second::protos::TargetAssigner* release_target_assigner();
  ::second::protos::TargetAssigner* mutable_target_assigner();
  void set_allocated_target_assigner(::second::protos::TargetAssigner* target_assigner);
  private:
  const ::second::protos::TargetAssigner& _internal_target_assigner() const;
  ::second::protos::TargetAssigner* _internal_mutable_target_assigner();
  public:
  void unsafe_arena_set_allocated_target_assigner(
      ::second::protos::TargetAssigner* target_assigner);
  ::second::protos::TargetAssigner* unsafe_arena_release_target_assigner();

  // .second.protos.VoxelGenerator voxel_generator = 29;
  bool has_voxel_generator() const;
  private:
  bool _internal_has_voxel_generator() const;
  public:
  void clear_voxel_generator();
  const ::second::protos::VoxelGenerator& voxel_generator() const;
  PROTOBUF_NODISCARD ::second::protos::VoxelGenerator* release_voxel_generator();
  ::second::protos::VoxelGenerator* mutable_voxel_generator();
  void set_allocated_voxel_generator(::second::protos::VoxelGenerator* voxel_generator);
  private:
  const ::second::protos::VoxelGenerator& _internal_voxel_generator() const;
  ::second::protos::VoxelGenerator* _internal_mutable_voxel_generator();
  public:
  void unsafe_arena_set_allocated_voxel_generator(
      ::second::protos::VoxelGenerator* voxel_generator);
  ::second::protos::VoxelGenerator* unsafe_arena_release_voxel_generator();

  // uint32 num_class = 1;
  void clear_num_class();
  uint32_t num_class() const;
  void set_num_class(uint32_t value);
  private:
  uint32_t _internal_num_class() const;
  void _internal_set_num_class(uint32_t value);
  public:

  // bool use_sigmoid_score = 5;
  void clear_use_sigmoid_score();
  bool use_sigmoid_score() const;
  void set_use_sigmoid_score(bool value);
  private:
  bool _internal_use_sigmoid_score() const;
  void _internal_set_use_sigmoid_score(bool value);
  public:

  // bool encode_rad_error_by_sin = 7;
  void clear_encode_rad_error_by_sin();
  bool encode_rad_error_by_sin() const;
  void set_encode_rad_error_by_sin(bool value);
  private:
  bool _internal_encode_rad_error_by_sin() const;
  void _internal_set_encode_rad_error_by_sin(bool value);
  public:

  // bool encode_background_as_zeros = 8;
  void clear_encode_background_as_zeros();
  bool encode_background_as_zeros() const;
  void set_encode_background_as_zeros(bool value);
  private:
  bool _internal_encode_background_as_zeros() const;
  void _internal_set_encode_background_as_zeros(bool value);
  public:

  // bool use_aux_classifier = 9;
  void clear_use_aux_classifier();
  bool use_aux_classifier() const;
  void set_use_aux_classifier(bool value);
  private:
  bool _internal_use_aux_classifier() const;
  void _internal_set_use_aux_classifier(bool value);
  public:

  // uint32 nms_pre_max_size = 12;
  void clear_nms_pre_max_size();
  uint32_t nms_pre_max_size() const;
  void set_nms_pre_max_size(uint32_t value);
  private:
  uint32_t _internal_nms_pre_max_size() const;
  void _internal_set_nms_pre_max_size(uint32_t value);
  public:

  // uint32 nms_post_max_size = 13;
  void clear_nms_post_max_size();
  uint32_t nms_post_max_size() const;
  void set_nms_post_max_size(uint32_t value);
  private:
  uint32_t _internal_nms_post_max_size() const;
  void _internal_set_nms_post_max_size(uint32_t value);
  public:

  // float nms_score_threshold = 14;
  void clear_nms_score_threshold();
  float nms_score_threshold() const;
  void set_nms_score_threshold(float value);
  private:
  float _internal_nms_score_threshold() const;
  void _internal_set_nms_score_threshold(float value);
  public:

  // float nms_iou_threshold = 15;
  void clear_nms_iou_threshold();
  float nms_iou_threshold() const;
  void set_nms_iou_threshold(float value);
  private:
  float _internal_nms_iou_threshold() const;
  void _internal_set_nms_iou_threshold(float value);
  public:

  // bool use_rotate_nms = 10;
  void clear_use_rotate_nms();
  bool use_rotate_nms() const;
  void set_use_rotate_nms(bool value);
  private:
  bool _internal_use_rotate_nms() const;
  void _internal_set_use_rotate_nms(bool value);
  public:

  // bool use_multi_class_nms = 11;
  void clear_use_multi_class_nms();
  bool use_multi_class_nms() const;
  void set_use_multi_class_nms(bool value);
  private:
  bool _internal_use_multi_class_nms() const;
  void _internal_set_use_multi_class_nms(bool value);
  public:

  // bool use_direction_classifier = 17;
  void clear_use_direction_classifier();
  bool use_direction_classifier() const;
  void set_use_direction_classifier(bool value);
  private:
  bool _internal_use_direction_classifier() const;
  void _internal_set_use_direction_classifier(bool value);
  public:

  // bool use_bev = 22;
  void clear_use_bev();
  bool use_bev() const;
  void set_use_bev(bool value);
  private:
  bool _internal_use_bev() const;
  void _internal_set_use_bev(bool value);
  public:

  // float direction_loss_weight = 18;
  void clear_direction_loss_weight();
  float direction_loss_weight() const;
  void set_direction_loss_weight(float value);
  private:
  float _internal_direction_loss_weight() const;
  void _internal_set_direction_loss_weight(float value);
  public:

  // float pos_class_weight = 19;
  void clear_pos_class_weight();
  float pos_class_weight() const;
  void set_pos_class_weight(float value);
  private:
  float _internal_pos_class_weight() const;
  void _internal_set_pos_class_weight(float value);
  public:

  // float neg_class_weight = 20;
  void clear_neg_class_weight();
  float neg_class_weight() const;
  void set_neg_class_weight(float value);
  private:
  float _internal_neg_class_weight() const;
  void _internal_set_neg_class_weight(float value);
  public:

  // .second.protos.VoxelNet.LossNormType loss_norm_type = 21;
  void clear_loss_norm_type();
  ::second::protos::VoxelNet_LossNormType loss_norm_type() const;
  void set_loss_norm_type(::second::protos::VoxelNet_LossNormType value);
  private:
  ::second::protos::VoxelNet_LossNormType _internal_loss_norm_type() const;
  void _internal_set_loss_norm_type(::second::protos::VoxelNet_LossNormType value);
  public:

  // bool without_reflectivity = 23;
  void clear_without_reflectivity();
  bool without_reflectivity() const;
  void set_without_reflectivity(bool value);
  private:
  bool _internal_without_reflectivity() const;
  void _internal_set_without_reflectivity(bool value);
  public:

  // bool encode_angle_to_vector = 24;
  void clear_encode_angle_to_vector();
  bool encode_angle_to_vector() const;
  void set_encode_angle_to_vector(bool value);
  private:
  bool _internal_encode_angle_to_vector() const;
  void _internal_set_encode_angle_to_vector(bool value);
  public:

  // bool lidar_input = 27;
  void clear_lidar_input();
  bool lidar_input() const;
  void set_lidar_input(bool value);
  private:
  bool _internal_lidar_input() const;
  void _internal_set_lidar_input(bool value);
  public:

  // uint32 num_point_features = 28;
  void clear_num_point_features();
  uint32_t num_point_features() const;
  void set_num_point_features(uint32_t value);
  private:
  uint32_t _internal_num_point_features() const;
  void _internal_set_num_point_features(uint32_t value);
  public:

  // @@protoc_insertion_point(class_scope:second.protos.VoxelNet)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  struct Impl_ {
    ::PROTOBUF_NAMESPACE_ID::RepeatedField< float > post_center_limit_range_;
    ::second::protos::VoxelNet_VoxelFeatureExtractor* voxel_feature_extractor_;
    ::second::protos::VoxelNet_MiddleFeatureExtractor* middle_feature_extractor_;
    ::second::protos::VoxelNet_RPN* rpn_;
    ::second::protos::Loss* loss_;
    ::second::protos::BoxCoder* box_coder_;
    ::second::protos::TargetAssigner* target_assigner_;
    ::second::protos::VoxelGenerator* voxel_generator_;
    uint32_t num_class_;
    bool use_sigmoid_score_;
    bool encode_rad_error_by_sin_;
    bool encode_background_as_zeros_;
    bool use_aux_classifier_;
    uint32_t nms_pre_max_size_;
    uint32_t nms_post_max_size_;
    float nms_score_threshold_;
    float nms_iou_threshold_;
    bool use_rotate_nms_;
    bool use_multi_class_nms_;
    bool use_direction_classifier_;
    bool use_bev_;
    float direction_loss_weight_;
    float pos_class_weight_;
    float neg_class_weight_;
    int loss_norm_type_;
    bool without_reflectivity_;
    bool encode_angle_to_vector_;
    bool lidar_input_;
    uint32_t num_point_features_;
    mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_second_2fprotos_2fsecond_2eproto;
};
// ===================================================================


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

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

// string module_class_name = 1;
inline void VoxelNet_VoxelFeatureExtractor::clear_module_class_name() {
  _impl_.module_class_name_.ClearToEmpty();
}
inline const std::string& VoxelNet_VoxelFeatureExtractor::module_class_name() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
  return _internal_module_class_name();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void VoxelNet_VoxelFeatureExtractor::set_module_class_name(ArgT0&& arg0, ArgT... args) {
 
 _impl_.module_class_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
}
inline std::string* VoxelNet_VoxelFeatureExtractor::mutable_module_class_name() {
  std::string* _s = _internal_mutable_module_class_name();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
  return _s;
}
inline const std::string& VoxelNet_VoxelFeatureExtractor::_internal_module_class_name() const {
  return _impl_.module_class_name_.Get();
}
inline void VoxelNet_VoxelFeatureExtractor::_internal_set_module_class_name(const std::string& value) {
  
  _impl_.module_class_name_.Set(value, GetArenaForAllocation());
}
inline std::string* VoxelNet_VoxelFeatureExtractor::_internal_mutable_module_class_name() {
  
  return _impl_.module_class_name_.Mutable(GetArenaForAllocation());
}
inline std::string* VoxelNet_VoxelFeatureExtractor::release_module_class_name() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
  return _impl_.module_class_name_.Release();
}
inline void VoxelNet_VoxelFeatureExtractor::set_allocated_module_class_name(std::string* module_class_name) {
  if (module_class_name != nullptr) {
    
  } else {
    
  }
  _impl_.module_class_name_.SetAllocated(module_class_name, GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (_impl_.module_class_name_.IsDefault()) {
    _impl_.module_class_name_.Set("", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
}

// repeated uint32 num_filters = 2;
inline int VoxelNet_VoxelFeatureExtractor::_internal_num_filters_size() const {
  return _impl_.num_filters_.size();
}
inline int VoxelNet_VoxelFeatureExtractor::num_filters_size() const {
  return _internal_num_filters_size();
}
inline void VoxelNet_VoxelFeatureExtractor::clear_num_filters() {
  _impl_.num_filters_.Clear();
}
inline uint32_t VoxelNet_VoxelFeatureExtractor::_internal_num_filters(int index) const {
  return _impl_.num_filters_.Get(index);
}
inline uint32_t VoxelNet_VoxelFeatureExtractor::num_filters(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.VoxelFeatureExtractor.num_filters)
  return _internal_num_filters(index);
}
inline void VoxelNet_VoxelFeatureExtractor::set_num_filters(int index, uint32_t value) {
  _impl_.num_filters_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.VoxelFeatureExtractor.num_filters)
}
inline void VoxelNet_VoxelFeatureExtractor::_internal_add_num_filters(uint32_t value) {
  _impl_.num_filters_.Add(value);
}
inline void VoxelNet_VoxelFeatureExtractor::add_num_filters(uint32_t value) {
  _internal_add_num_filters(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.VoxelFeatureExtractor.num_filters)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_VoxelFeatureExtractor::_internal_num_filters() const {
  return _impl_.num_filters_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_VoxelFeatureExtractor::num_filters() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.VoxelFeatureExtractor.num_filters)
  return _internal_num_filters();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_VoxelFeatureExtractor::_internal_mutable_num_filters() {
  return &_impl_.num_filters_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_VoxelFeatureExtractor::mutable_num_filters() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.VoxelFeatureExtractor.num_filters)
  return _internal_mutable_num_filters();
}

// bool with_distance = 3;
inline void VoxelNet_VoxelFeatureExtractor::clear_with_distance() {
  _impl_.with_distance_ = false;
}
inline bool VoxelNet_VoxelFeatureExtractor::_internal_with_distance() const {
  return _impl_.with_distance_;
}
inline bool VoxelNet_VoxelFeatureExtractor::with_distance() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.VoxelFeatureExtractor.with_distance)
  return _internal_with_distance();
}
inline void VoxelNet_VoxelFeatureExtractor::_internal_set_with_distance(bool value) {
  
  _impl_.with_distance_ = value;
}
inline void VoxelNet_VoxelFeatureExtractor::set_with_distance(bool value) {
  _internal_set_with_distance(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.VoxelFeatureExtractor.with_distance)
}

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

// VoxelNet_MiddleFeatureExtractor

// string module_class_name = 1;
inline void VoxelNet_MiddleFeatureExtractor::clear_module_class_name() {
  _impl_.module_class_name_.ClearToEmpty();
}
inline const std::string& VoxelNet_MiddleFeatureExtractor::module_class_name() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
  return _internal_module_class_name();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void VoxelNet_MiddleFeatureExtractor::set_module_class_name(ArgT0&& arg0, ArgT... args) {
 
 _impl_.module_class_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
}
inline std::string* VoxelNet_MiddleFeatureExtractor::mutable_module_class_name() {
  std::string* _s = _internal_mutable_module_class_name();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
  return _s;
}
inline const std::string& VoxelNet_MiddleFeatureExtractor::_internal_module_class_name() const {
  return _impl_.module_class_name_.Get();
}
inline void VoxelNet_MiddleFeatureExtractor::_internal_set_module_class_name(const std::string& value) {
  
  _impl_.module_class_name_.Set(value, GetArenaForAllocation());
}
inline std::string* VoxelNet_MiddleFeatureExtractor::_internal_mutable_module_class_name() {
  
  return _impl_.module_class_name_.Mutable(GetArenaForAllocation());
}
inline std::string* VoxelNet_MiddleFeatureExtractor::release_module_class_name() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
  return _impl_.module_class_name_.Release();
}
inline void VoxelNet_MiddleFeatureExtractor::set_allocated_module_class_name(std::string* module_class_name) {
  if (module_class_name != nullptr) {
    
  } else {
    
  }
  _impl_.module_class_name_.SetAllocated(module_class_name, GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (_impl_.module_class_name_.IsDefault()) {
    _impl_.module_class_name_.Set("", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
}

// repeated uint32 num_filters_down1 = 2;
inline int VoxelNet_MiddleFeatureExtractor::_internal_num_filters_down1_size() const {
  return _impl_.num_filters_down1_.size();
}
inline int VoxelNet_MiddleFeatureExtractor::num_filters_down1_size() const {
  return _internal_num_filters_down1_size();
}
inline void VoxelNet_MiddleFeatureExtractor::clear_num_filters_down1() {
  _impl_.num_filters_down1_.Clear();
}
inline uint32_t VoxelNet_MiddleFeatureExtractor::_internal_num_filters_down1(int index) const {
  return _impl_.num_filters_down1_.Get(index);
}
inline uint32_t VoxelNet_MiddleFeatureExtractor::num_filters_down1(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down1)
  return _internal_num_filters_down1(index);
}
inline void VoxelNet_MiddleFeatureExtractor::set_num_filters_down1(int index, uint32_t value) {
  _impl_.num_filters_down1_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down1)
}
inline void VoxelNet_MiddleFeatureExtractor::_internal_add_num_filters_down1(uint32_t value) {
  _impl_.num_filters_down1_.Add(value);
}
inline void VoxelNet_MiddleFeatureExtractor::add_num_filters_down1(uint32_t value) {
  _internal_add_num_filters_down1(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down1)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_MiddleFeatureExtractor::_internal_num_filters_down1() const {
  return _impl_.num_filters_down1_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_MiddleFeatureExtractor::num_filters_down1() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down1)
  return _internal_num_filters_down1();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_MiddleFeatureExtractor::_internal_mutable_num_filters_down1() {
  return &_impl_.num_filters_down1_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_MiddleFeatureExtractor::mutable_num_filters_down1() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down1)
  return _internal_mutable_num_filters_down1();
}

// repeated uint32 num_filters_down2 = 3;
inline int VoxelNet_MiddleFeatureExtractor::_internal_num_filters_down2_size() const {
  return _impl_.num_filters_down2_.size();
}
inline int VoxelNet_MiddleFeatureExtractor::num_filters_down2_size() const {
  return _internal_num_filters_down2_size();
}
inline void VoxelNet_MiddleFeatureExtractor::clear_num_filters_down2() {
  _impl_.num_filters_down2_.Clear();
}
inline uint32_t VoxelNet_MiddleFeatureExtractor::_internal_num_filters_down2(int index) const {
  return _impl_.num_filters_down2_.Get(index);
}
inline uint32_t VoxelNet_MiddleFeatureExtractor::num_filters_down2(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down2)
  return _internal_num_filters_down2(index);
}
inline void VoxelNet_MiddleFeatureExtractor::set_num_filters_down2(int index, uint32_t value) {
  _impl_.num_filters_down2_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down2)
}
inline void VoxelNet_MiddleFeatureExtractor::_internal_add_num_filters_down2(uint32_t value) {
  _impl_.num_filters_down2_.Add(value);
}
inline void VoxelNet_MiddleFeatureExtractor::add_num_filters_down2(uint32_t value) {
  _internal_add_num_filters_down2(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down2)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_MiddleFeatureExtractor::_internal_num_filters_down2() const {
  return _impl_.num_filters_down2_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_MiddleFeatureExtractor::num_filters_down2() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down2)
  return _internal_num_filters_down2();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_MiddleFeatureExtractor::_internal_mutable_num_filters_down2() {
  return &_impl_.num_filters_down2_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_MiddleFeatureExtractor::mutable_num_filters_down2() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.MiddleFeatureExtractor.num_filters_down2)
  return _internal_mutable_num_filters_down2();
}

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

// VoxelNet_RPN

// string module_class_name = 1;
inline void VoxelNet_RPN::clear_module_class_name() {
  _impl_.module_class_name_.ClearToEmpty();
}
inline const std::string& VoxelNet_RPN::module_class_name() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.module_class_name)
  return _internal_module_class_name();
}
template <typename ArgT0, typename... ArgT>
inline PROTOBUF_ALWAYS_INLINE
void VoxelNet_RPN::set_module_class_name(ArgT0&& arg0, ArgT... args) {
 
 _impl_.module_class_name_.Set(static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.module_class_name)
}
inline std::string* VoxelNet_RPN::mutable_module_class_name() {
  std::string* _s = _internal_mutable_module_class_name();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.RPN.module_class_name)
  return _s;
}
inline const std::string& VoxelNet_RPN::_internal_module_class_name() const {
  return _impl_.module_class_name_.Get();
}
inline void VoxelNet_RPN::_internal_set_module_class_name(const std::string& value) {
  
  _impl_.module_class_name_.Set(value, GetArenaForAllocation());
}
inline std::string* VoxelNet_RPN::_internal_mutable_module_class_name() {
  
  return _impl_.module_class_name_.Mutable(GetArenaForAllocation());
}
inline std::string* VoxelNet_RPN::release_module_class_name() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.RPN.module_class_name)
  return _impl_.module_class_name_.Release();
}
inline void VoxelNet_RPN::set_allocated_module_class_name(std::string* module_class_name) {
  if (module_class_name != nullptr) {
    
  } else {
    
  }
  _impl_.module_class_name_.SetAllocated(module_class_name, GetArenaForAllocation());
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (_impl_.module_class_name_.IsDefault()) {
    _impl_.module_class_name_.Set("", GetArenaForAllocation());
  }
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.RPN.module_class_name)
}

// repeated uint32 layer_nums = 2;
inline int VoxelNet_RPN::_internal_layer_nums_size() const {
  return _impl_.layer_nums_.size();
}
inline int VoxelNet_RPN::layer_nums_size() const {
  return _internal_layer_nums_size();
}
inline void VoxelNet_RPN::clear_layer_nums() {
  _impl_.layer_nums_.Clear();
}
inline uint32_t VoxelNet_RPN::_internal_layer_nums(int index) const {
  return _impl_.layer_nums_.Get(index);
}
inline uint32_t VoxelNet_RPN::layer_nums(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.layer_nums)
  return _internal_layer_nums(index);
}
inline void VoxelNet_RPN::set_layer_nums(int index, uint32_t value) {
  _impl_.layer_nums_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.layer_nums)
}
inline void VoxelNet_RPN::_internal_add_layer_nums(uint32_t value) {
  _impl_.layer_nums_.Add(value);
}
inline void VoxelNet_RPN::add_layer_nums(uint32_t value) {
  _internal_add_layer_nums(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.RPN.layer_nums)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::_internal_layer_nums() const {
  return _impl_.layer_nums_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::layer_nums() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.RPN.layer_nums)
  return _internal_layer_nums();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::_internal_mutable_layer_nums() {
  return &_impl_.layer_nums_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::mutable_layer_nums() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.RPN.layer_nums)
  return _internal_mutable_layer_nums();
}

// repeated uint32 layer_strides = 3;
inline int VoxelNet_RPN::_internal_layer_strides_size() const {
  return _impl_.layer_strides_.size();
}
inline int VoxelNet_RPN::layer_strides_size() const {
  return _internal_layer_strides_size();
}
inline void VoxelNet_RPN::clear_layer_strides() {
  _impl_.layer_strides_.Clear();
}
inline uint32_t VoxelNet_RPN::_internal_layer_strides(int index) const {
  return _impl_.layer_strides_.Get(index);
}
inline uint32_t VoxelNet_RPN::layer_strides(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.layer_strides)
  return _internal_layer_strides(index);
}
inline void VoxelNet_RPN::set_layer_strides(int index, uint32_t value) {
  _impl_.layer_strides_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.layer_strides)
}
inline void VoxelNet_RPN::_internal_add_layer_strides(uint32_t value) {
  _impl_.layer_strides_.Add(value);
}
inline void VoxelNet_RPN::add_layer_strides(uint32_t value) {
  _internal_add_layer_strides(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.RPN.layer_strides)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::_internal_layer_strides() const {
  return _impl_.layer_strides_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::layer_strides() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.RPN.layer_strides)
  return _internal_layer_strides();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::_internal_mutable_layer_strides() {
  return &_impl_.layer_strides_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::mutable_layer_strides() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.RPN.layer_strides)
  return _internal_mutable_layer_strides();
}

// repeated uint32 num_filters = 4;
inline int VoxelNet_RPN::_internal_num_filters_size() const {
  return _impl_.num_filters_.size();
}
inline int VoxelNet_RPN::num_filters_size() const {
  return _internal_num_filters_size();
}
inline void VoxelNet_RPN::clear_num_filters() {
  _impl_.num_filters_.Clear();
}
inline uint32_t VoxelNet_RPN::_internal_num_filters(int index) const {
  return _impl_.num_filters_.Get(index);
}
inline uint32_t VoxelNet_RPN::num_filters(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.num_filters)
  return _internal_num_filters(index);
}
inline void VoxelNet_RPN::set_num_filters(int index, uint32_t value) {
  _impl_.num_filters_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.num_filters)
}
inline void VoxelNet_RPN::_internal_add_num_filters(uint32_t value) {
  _impl_.num_filters_.Add(value);
}
inline void VoxelNet_RPN::add_num_filters(uint32_t value) {
  _internal_add_num_filters(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.RPN.num_filters)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::_internal_num_filters() const {
  return _impl_.num_filters_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::num_filters() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.RPN.num_filters)
  return _internal_num_filters();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::_internal_mutable_num_filters() {
  return &_impl_.num_filters_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::mutable_num_filters() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.RPN.num_filters)
  return _internal_mutable_num_filters();
}

// repeated uint32 upsample_strides = 5;
inline int VoxelNet_RPN::_internal_upsample_strides_size() const {
  return _impl_.upsample_strides_.size();
}
inline int VoxelNet_RPN::upsample_strides_size() const {
  return _internal_upsample_strides_size();
}
inline void VoxelNet_RPN::clear_upsample_strides() {
  _impl_.upsample_strides_.Clear();
}
inline uint32_t VoxelNet_RPN::_internal_upsample_strides(int index) const {
  return _impl_.upsample_strides_.Get(index);
}
inline uint32_t VoxelNet_RPN::upsample_strides(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.upsample_strides)
  return _internal_upsample_strides(index);
}
inline void VoxelNet_RPN::set_upsample_strides(int index, uint32_t value) {
  _impl_.upsample_strides_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.upsample_strides)
}
inline void VoxelNet_RPN::_internal_add_upsample_strides(uint32_t value) {
  _impl_.upsample_strides_.Add(value);
}
inline void VoxelNet_RPN::add_upsample_strides(uint32_t value) {
  _internal_add_upsample_strides(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.RPN.upsample_strides)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::_internal_upsample_strides() const {
  return _impl_.upsample_strides_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::upsample_strides() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.RPN.upsample_strides)
  return _internal_upsample_strides();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::_internal_mutable_upsample_strides() {
  return &_impl_.upsample_strides_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::mutable_upsample_strides() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.RPN.upsample_strides)
  return _internal_mutable_upsample_strides();
}

// repeated uint32 num_upsample_filters = 6;
inline int VoxelNet_RPN::_internal_num_upsample_filters_size() const {
  return _impl_.num_upsample_filters_.size();
}
inline int VoxelNet_RPN::num_upsample_filters_size() const {
  return _internal_num_upsample_filters_size();
}
inline void VoxelNet_RPN::clear_num_upsample_filters() {
  _impl_.num_upsample_filters_.Clear();
}
inline uint32_t VoxelNet_RPN::_internal_num_upsample_filters(int index) const {
  return _impl_.num_upsample_filters_.Get(index);
}
inline uint32_t VoxelNet_RPN::num_upsample_filters(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.num_upsample_filters)
  return _internal_num_upsample_filters(index);
}
inline void VoxelNet_RPN::set_num_upsample_filters(int index, uint32_t value) {
  _impl_.num_upsample_filters_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.num_upsample_filters)
}
inline void VoxelNet_RPN::_internal_add_num_upsample_filters(uint32_t value) {
  _impl_.num_upsample_filters_.Add(value);
}
inline void VoxelNet_RPN::add_num_upsample_filters(uint32_t value) {
  _internal_add_num_upsample_filters(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.RPN.num_upsample_filters)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::_internal_num_upsample_filters() const {
  return _impl_.num_upsample_filters_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >&
VoxelNet_RPN::num_upsample_filters() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.RPN.num_upsample_filters)
  return _internal_num_upsample_filters();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::_internal_mutable_num_upsample_filters() {
  return &_impl_.num_upsample_filters_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< uint32_t >*
VoxelNet_RPN::mutable_num_upsample_filters() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.RPN.num_upsample_filters)
  return _internal_mutable_num_upsample_filters();
}

// bool use_groupnorm = 7;
inline void VoxelNet_RPN::clear_use_groupnorm() {
  _impl_.use_groupnorm_ = false;
}
inline bool VoxelNet_RPN::_internal_use_groupnorm() const {
  return _impl_.use_groupnorm_;
}
inline bool VoxelNet_RPN::use_groupnorm() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.use_groupnorm)
  return _internal_use_groupnorm();
}
inline void VoxelNet_RPN::_internal_set_use_groupnorm(bool value) {
  
  _impl_.use_groupnorm_ = value;
}
inline void VoxelNet_RPN::set_use_groupnorm(bool value) {
  _internal_set_use_groupnorm(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.use_groupnorm)
}

// uint32 num_groups = 8;
inline void VoxelNet_RPN::clear_num_groups() {
  _impl_.num_groups_ = 0u;
}
inline uint32_t VoxelNet_RPN::_internal_num_groups() const {
  return _impl_.num_groups_;
}
inline uint32_t VoxelNet_RPN::num_groups() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.num_groups)
  return _internal_num_groups();
}
inline void VoxelNet_RPN::_internal_set_num_groups(uint32_t value) {
  
  _impl_.num_groups_ = value;
}
inline void VoxelNet_RPN::set_num_groups(uint32_t value) {
  _internal_set_num_groups(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.num_groups)
}

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

// VoxelNet

// uint32 num_class = 1;
inline void VoxelNet::clear_num_class() {
  _impl_.num_class_ = 0u;
}
inline uint32_t VoxelNet::_internal_num_class() const {
  return _impl_.num_class_;
}
inline uint32_t VoxelNet::num_class() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.num_class)
  return _internal_num_class();
}
inline void VoxelNet::_internal_set_num_class(uint32_t value) {
  
  _impl_.num_class_ = value;
}
inline void VoxelNet::set_num_class(uint32_t value) {
  _internal_set_num_class(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.num_class)
}

// .second.protos.VoxelNet.VoxelFeatureExtractor voxel_feature_extractor = 2;
inline bool VoxelNet::_internal_has_voxel_feature_extractor() const {
  return this != internal_default_instance() && _impl_.voxel_feature_extractor_ != nullptr;
}
inline bool VoxelNet::has_voxel_feature_extractor() const {
  return _internal_has_voxel_feature_extractor();
}
inline void VoxelNet::clear_voxel_feature_extractor() {
  if (GetArenaForAllocation() == nullptr && _impl_.voxel_feature_extractor_ != nullptr) {
    delete _impl_.voxel_feature_extractor_;
  }
  _impl_.voxel_feature_extractor_ = nullptr;
}
inline const ::second::protos::VoxelNet_VoxelFeatureExtractor& VoxelNet::_internal_voxel_feature_extractor() const {
  const ::second::protos::VoxelNet_VoxelFeatureExtractor* p = _impl_.voxel_feature_extractor_;
  return p != nullptr ? *p : reinterpret_cast<const ::second::protos::VoxelNet_VoxelFeatureExtractor&>(
      ::second::protos::_VoxelNet_VoxelFeatureExtractor_default_instance_);
}
inline const ::second::protos::VoxelNet_VoxelFeatureExtractor& VoxelNet::voxel_feature_extractor() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.voxel_feature_extractor)
  return _internal_voxel_feature_extractor();
}
inline void VoxelNet::unsafe_arena_set_allocated_voxel_feature_extractor(
    ::second::protos::VoxelNet_VoxelFeatureExtractor* voxel_feature_extractor) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.voxel_feature_extractor_);
  }
  _impl_.voxel_feature_extractor_ = voxel_feature_extractor;
  if (voxel_feature_extractor) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:second.protos.VoxelNet.voxel_feature_extractor)
}
inline ::second::protos::VoxelNet_VoxelFeatureExtractor* VoxelNet::release_voxel_feature_extractor() {
  
  ::second::protos::VoxelNet_VoxelFeatureExtractor* temp = _impl_.voxel_feature_extractor_;
  _impl_.voxel_feature_extractor_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::second::protos::VoxelNet_VoxelFeatureExtractor* VoxelNet::unsafe_arena_release_voxel_feature_extractor() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.voxel_feature_extractor)
  
  ::second::protos::VoxelNet_VoxelFeatureExtractor* temp = _impl_.voxel_feature_extractor_;
  _impl_.voxel_feature_extractor_ = nullptr;
  return temp;
}
inline ::second::protos::VoxelNet_VoxelFeatureExtractor* VoxelNet::_internal_mutable_voxel_feature_extractor() {
  
  if (_impl_.voxel_feature_extractor_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::VoxelNet_VoxelFeatureExtractor>(GetArenaForAllocation());
    _impl_.voxel_feature_extractor_ = p;
  }
  return _impl_.voxel_feature_extractor_;
}
inline ::second::protos::VoxelNet_VoxelFeatureExtractor* VoxelNet::mutable_voxel_feature_extractor() {
  ::second::protos::VoxelNet_VoxelFeatureExtractor* _msg = _internal_mutable_voxel_feature_extractor();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.voxel_feature_extractor)
  return _msg;
}
inline void VoxelNet::set_allocated_voxel_feature_extractor(::second::protos::VoxelNet_VoxelFeatureExtractor* voxel_feature_extractor) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete _impl_.voxel_feature_extractor_;
  }
  if (voxel_feature_extractor) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(voxel_feature_extractor);
    if (message_arena != submessage_arena) {
      voxel_feature_extractor = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, voxel_feature_extractor, submessage_arena);
    }
    
  } else {
    
  }
  _impl_.voxel_feature_extractor_ = voxel_feature_extractor;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.voxel_feature_extractor)
}

// .second.protos.VoxelNet.MiddleFeatureExtractor middle_feature_extractor = 3;
inline bool VoxelNet::_internal_has_middle_feature_extractor() const {
  return this != internal_default_instance() && _impl_.middle_feature_extractor_ != nullptr;
}
inline bool VoxelNet::has_middle_feature_extractor() const {
  return _internal_has_middle_feature_extractor();
}
inline void VoxelNet::clear_middle_feature_extractor() {
  if (GetArenaForAllocation() == nullptr && _impl_.middle_feature_extractor_ != nullptr) {
    delete _impl_.middle_feature_extractor_;
  }
  _impl_.middle_feature_extractor_ = nullptr;
}
inline const ::second::protos::VoxelNet_MiddleFeatureExtractor& VoxelNet::_internal_middle_feature_extractor() const {
  const ::second::protos::VoxelNet_MiddleFeatureExtractor* p = _impl_.middle_feature_extractor_;
  return p != nullptr ? *p : reinterpret_cast<const ::second::protos::VoxelNet_MiddleFeatureExtractor&>(
      ::second::protos::_VoxelNet_MiddleFeatureExtractor_default_instance_);
}
inline const ::second::protos::VoxelNet_MiddleFeatureExtractor& VoxelNet::middle_feature_extractor() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.middle_feature_extractor)
  return _internal_middle_feature_extractor();
}
inline void VoxelNet::unsafe_arena_set_allocated_middle_feature_extractor(
    ::second::protos::VoxelNet_MiddleFeatureExtractor* middle_feature_extractor) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.middle_feature_extractor_);
  }
  _impl_.middle_feature_extractor_ = middle_feature_extractor;
  if (middle_feature_extractor) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:second.protos.VoxelNet.middle_feature_extractor)
}
inline ::second::protos::VoxelNet_MiddleFeatureExtractor* VoxelNet::release_middle_feature_extractor() {
  
  ::second::protos::VoxelNet_MiddleFeatureExtractor* temp = _impl_.middle_feature_extractor_;
  _impl_.middle_feature_extractor_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::second::protos::VoxelNet_MiddleFeatureExtractor* VoxelNet::unsafe_arena_release_middle_feature_extractor() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.middle_feature_extractor)
  
  ::second::protos::VoxelNet_MiddleFeatureExtractor* temp = _impl_.middle_feature_extractor_;
  _impl_.middle_feature_extractor_ = nullptr;
  return temp;
}
inline ::second::protos::VoxelNet_MiddleFeatureExtractor* VoxelNet::_internal_mutable_middle_feature_extractor() {
  
  if (_impl_.middle_feature_extractor_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::VoxelNet_MiddleFeatureExtractor>(GetArenaForAllocation());
    _impl_.middle_feature_extractor_ = p;
  }
  return _impl_.middle_feature_extractor_;
}
inline ::second::protos::VoxelNet_MiddleFeatureExtractor* VoxelNet::mutable_middle_feature_extractor() {
  ::second::protos::VoxelNet_MiddleFeatureExtractor* _msg = _internal_mutable_middle_feature_extractor();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.middle_feature_extractor)
  return _msg;
}
inline void VoxelNet::set_allocated_middle_feature_extractor(::second::protos::VoxelNet_MiddleFeatureExtractor* middle_feature_extractor) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete _impl_.middle_feature_extractor_;
  }
  if (middle_feature_extractor) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(middle_feature_extractor);
    if (message_arena != submessage_arena) {
      middle_feature_extractor = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, middle_feature_extractor, submessage_arena);
    }
    
  } else {
    
  }
  _impl_.middle_feature_extractor_ = middle_feature_extractor;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.middle_feature_extractor)
}

// .second.protos.VoxelNet.RPN rpn = 4;
inline bool VoxelNet::_internal_has_rpn() const {
  return this != internal_default_instance() && _impl_.rpn_ != nullptr;
}
inline bool VoxelNet::has_rpn() const {
  return _internal_has_rpn();
}
inline void VoxelNet::clear_rpn() {
  if (GetArenaForAllocation() == nullptr && _impl_.rpn_ != nullptr) {
    delete _impl_.rpn_;
  }
  _impl_.rpn_ = nullptr;
}
inline const ::second::protos::VoxelNet_RPN& VoxelNet::_internal_rpn() const {
  const ::second::protos::VoxelNet_RPN* p = _impl_.rpn_;
  return p != nullptr ? *p : reinterpret_cast<const ::second::protos::VoxelNet_RPN&>(
      ::second::protos::_VoxelNet_RPN_default_instance_);
}
inline const ::second::protos::VoxelNet_RPN& VoxelNet::rpn() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.rpn)
  return _internal_rpn();
}
inline void VoxelNet::unsafe_arena_set_allocated_rpn(
    ::second::protos::VoxelNet_RPN* rpn) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.rpn_);
  }
  _impl_.rpn_ = rpn;
  if (rpn) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:second.protos.VoxelNet.rpn)
}
inline ::second::protos::VoxelNet_RPN* VoxelNet::release_rpn() {
  
  ::second::protos::VoxelNet_RPN* temp = _impl_.rpn_;
  _impl_.rpn_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::second::protos::VoxelNet_RPN* VoxelNet::unsafe_arena_release_rpn() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.rpn)
  
  ::second::protos::VoxelNet_RPN* temp = _impl_.rpn_;
  _impl_.rpn_ = nullptr;
  return temp;
}
inline ::second::protos::VoxelNet_RPN* VoxelNet::_internal_mutable_rpn() {
  
  if (_impl_.rpn_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::VoxelNet_RPN>(GetArenaForAllocation());
    _impl_.rpn_ = p;
  }
  return _impl_.rpn_;
}
inline ::second::protos::VoxelNet_RPN* VoxelNet::mutable_rpn() {
  ::second::protos::VoxelNet_RPN* _msg = _internal_mutable_rpn();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.rpn)
  return _msg;
}
inline void VoxelNet::set_allocated_rpn(::second::protos::VoxelNet_RPN* rpn) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete _impl_.rpn_;
  }
  if (rpn) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(rpn);
    if (message_arena != submessage_arena) {
      rpn = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, rpn, submessage_arena);
    }
    
  } else {
    
  }
  _impl_.rpn_ = rpn;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.rpn)
}

// bool use_sigmoid_score = 5;
inline void VoxelNet::clear_use_sigmoid_score() {
  _impl_.use_sigmoid_score_ = false;
}
inline bool VoxelNet::_internal_use_sigmoid_score() const {
  return _impl_.use_sigmoid_score_;
}
inline bool VoxelNet::use_sigmoid_score() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_sigmoid_score)
  return _internal_use_sigmoid_score();
}
inline void VoxelNet::_internal_set_use_sigmoid_score(bool value) {
  
  _impl_.use_sigmoid_score_ = value;
}
inline void VoxelNet::set_use_sigmoid_score(bool value) {
  _internal_set_use_sigmoid_score(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.use_sigmoid_score)
}

// .second.protos.Loss loss = 6;
inline bool VoxelNet::_internal_has_loss() const {
  return this != internal_default_instance() && _impl_.loss_ != nullptr;
}
inline bool VoxelNet::has_loss() const {
  return _internal_has_loss();
}
inline const ::second::protos::Loss& VoxelNet::_internal_loss() const {
  const ::second::protos::Loss* p = _impl_.loss_;
  return p != nullptr ? *p : reinterpret_cast<const ::second::protos::Loss&>(
      ::second::protos::_Loss_default_instance_);
}
inline const ::second::protos::Loss& VoxelNet::loss() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.loss)
  return _internal_loss();
}
inline void VoxelNet::unsafe_arena_set_allocated_loss(
    ::second::protos::Loss* loss) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.loss_);
  }
  _impl_.loss_ = loss;
  if (loss) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:second.protos.VoxelNet.loss)
}
inline ::second::protos::Loss* VoxelNet::release_loss() {
  
  ::second::protos::Loss* temp = _impl_.loss_;
  _impl_.loss_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::second::protos::Loss* VoxelNet::unsafe_arena_release_loss() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.loss)
  
  ::second::protos::Loss* temp = _impl_.loss_;
  _impl_.loss_ = nullptr;
  return temp;
}
inline ::second::protos::Loss* VoxelNet::_internal_mutable_loss() {
  
  if (_impl_.loss_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::Loss>(GetArenaForAllocation());
    _impl_.loss_ = p;
  }
  return _impl_.loss_;
}
inline ::second::protos::Loss* VoxelNet::mutable_loss() {
  ::second::protos::Loss* _msg = _internal_mutable_loss();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.loss)
  return _msg;
}
inline void VoxelNet::set_allocated_loss(::second::protos::Loss* loss) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.loss_);
  }
  if (loss) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(loss));
    if (message_arena != submessage_arena) {
      loss = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, loss, submessage_arena);
    }
    
  } else {
    
  }
  _impl_.loss_ = loss;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.loss)
}

// bool encode_rad_error_by_sin = 7;
inline void VoxelNet::clear_encode_rad_error_by_sin() {
  _impl_.encode_rad_error_by_sin_ = false;
}
inline bool VoxelNet::_internal_encode_rad_error_by_sin() const {
  return _impl_.encode_rad_error_by_sin_;
}
inline bool VoxelNet::encode_rad_error_by_sin() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.encode_rad_error_by_sin)
  return _internal_encode_rad_error_by_sin();
}
inline void VoxelNet::_internal_set_encode_rad_error_by_sin(bool value) {
  
  _impl_.encode_rad_error_by_sin_ = value;
}
inline void VoxelNet::set_encode_rad_error_by_sin(bool value) {
  _internal_set_encode_rad_error_by_sin(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.encode_rad_error_by_sin)
}

// bool encode_background_as_zeros = 8;
inline void VoxelNet::clear_encode_background_as_zeros() {
  _impl_.encode_background_as_zeros_ = false;
}
inline bool VoxelNet::_internal_encode_background_as_zeros() const {
  return _impl_.encode_background_as_zeros_;
}
inline bool VoxelNet::encode_background_as_zeros() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.encode_background_as_zeros)
  return _internal_encode_background_as_zeros();
}
inline void VoxelNet::_internal_set_encode_background_as_zeros(bool value) {
  
  _impl_.encode_background_as_zeros_ = value;
}
inline void VoxelNet::set_encode_background_as_zeros(bool value) {
  _internal_set_encode_background_as_zeros(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.encode_background_as_zeros)
}

// bool use_aux_classifier = 9;
inline void VoxelNet::clear_use_aux_classifier() {
  _impl_.use_aux_classifier_ = false;
}
inline bool VoxelNet::_internal_use_aux_classifier() const {
  return _impl_.use_aux_classifier_;
}
inline bool VoxelNet::use_aux_classifier() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_aux_classifier)
  return _internal_use_aux_classifier();
}
inline void VoxelNet::_internal_set_use_aux_classifier(bool value) {
  
  _impl_.use_aux_classifier_ = value;
}
inline void VoxelNet::set_use_aux_classifier(bool value) {
  _internal_set_use_aux_classifier(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.use_aux_classifier)
}

// bool use_rotate_nms = 10;
inline void VoxelNet::clear_use_rotate_nms() {
  _impl_.use_rotate_nms_ = false;
}
inline bool VoxelNet::_internal_use_rotate_nms() const {
  return _impl_.use_rotate_nms_;
}
inline bool VoxelNet::use_rotate_nms() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_rotate_nms)
  return _internal_use_rotate_nms();
}
inline void VoxelNet::_internal_set_use_rotate_nms(bool value) {
  
  _impl_.use_rotate_nms_ = value;
}
inline void VoxelNet::set_use_rotate_nms(bool value) {
  _internal_set_use_rotate_nms(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.use_rotate_nms)
}

// bool use_multi_class_nms = 11;
inline void VoxelNet::clear_use_multi_class_nms() {
  _impl_.use_multi_class_nms_ = false;
}
inline bool VoxelNet::_internal_use_multi_class_nms() const {
  return _impl_.use_multi_class_nms_;
}
inline bool VoxelNet::use_multi_class_nms() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_multi_class_nms)
  return _internal_use_multi_class_nms();
}
inline void VoxelNet::_internal_set_use_multi_class_nms(bool value) {
  
  _impl_.use_multi_class_nms_ = value;
}
inline void VoxelNet::set_use_multi_class_nms(bool value) {
  _internal_set_use_multi_class_nms(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.use_multi_class_nms)
}

// uint32 nms_pre_max_size = 12;
inline void VoxelNet::clear_nms_pre_max_size() {
  _impl_.nms_pre_max_size_ = 0u;
}
inline uint32_t VoxelNet::_internal_nms_pre_max_size() const {
  return _impl_.nms_pre_max_size_;
}
inline uint32_t VoxelNet::nms_pre_max_size() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.nms_pre_max_size)
  return _internal_nms_pre_max_size();
}
inline void VoxelNet::_internal_set_nms_pre_max_size(uint32_t value) {
  
  _impl_.nms_pre_max_size_ = value;
}
inline void VoxelNet::set_nms_pre_max_size(uint32_t value) {
  _internal_set_nms_pre_max_size(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.nms_pre_max_size)
}

// uint32 nms_post_max_size = 13;
inline void VoxelNet::clear_nms_post_max_size() {
  _impl_.nms_post_max_size_ = 0u;
}
inline uint32_t VoxelNet::_internal_nms_post_max_size() const {
  return _impl_.nms_post_max_size_;
}
inline uint32_t VoxelNet::nms_post_max_size() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.nms_post_max_size)
  return _internal_nms_post_max_size();
}
inline void VoxelNet::_internal_set_nms_post_max_size(uint32_t value) {
  
  _impl_.nms_post_max_size_ = value;
}
inline void VoxelNet::set_nms_post_max_size(uint32_t value) {
  _internal_set_nms_post_max_size(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.nms_post_max_size)
}

// float nms_score_threshold = 14;
inline void VoxelNet::clear_nms_score_threshold() {
  _impl_.nms_score_threshold_ = 0;
}
inline float VoxelNet::_internal_nms_score_threshold() const {
  return _impl_.nms_score_threshold_;
}
inline float VoxelNet::nms_score_threshold() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.nms_score_threshold)
  return _internal_nms_score_threshold();
}
inline void VoxelNet::_internal_set_nms_score_threshold(float value) {
  
  _impl_.nms_score_threshold_ = value;
}
inline void VoxelNet::set_nms_score_threshold(float value) {
  _internal_set_nms_score_threshold(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.nms_score_threshold)
}

// float nms_iou_threshold = 15;
inline void VoxelNet::clear_nms_iou_threshold() {
  _impl_.nms_iou_threshold_ = 0;
}
inline float VoxelNet::_internal_nms_iou_threshold() const {
  return _impl_.nms_iou_threshold_;
}
inline float VoxelNet::nms_iou_threshold() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.nms_iou_threshold)
  return _internal_nms_iou_threshold();
}
inline void VoxelNet::_internal_set_nms_iou_threshold(float value) {
  
  _impl_.nms_iou_threshold_ = value;
}
inline void VoxelNet::set_nms_iou_threshold(float value) {
  _internal_set_nms_iou_threshold(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.nms_iou_threshold)
}

// repeated float post_center_limit_range = 16;
inline int VoxelNet::_internal_post_center_limit_range_size() const {
  return _impl_.post_center_limit_range_.size();
}
inline int VoxelNet::post_center_limit_range_size() const {
  return _internal_post_center_limit_range_size();
}
inline void VoxelNet::clear_post_center_limit_range() {
  _impl_.post_center_limit_range_.Clear();
}
inline float VoxelNet::_internal_post_center_limit_range(int index) const {
  return _impl_.post_center_limit_range_.Get(index);
}
inline float VoxelNet::post_center_limit_range(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.post_center_limit_range)
  return _internal_post_center_limit_range(index);
}
inline void VoxelNet::set_post_center_limit_range(int index, float value) {
  _impl_.post_center_limit_range_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.post_center_limit_range)
}
inline void VoxelNet::_internal_add_post_center_limit_range(float value) {
  _impl_.post_center_limit_range_.Add(value);
}
inline void VoxelNet::add_post_center_limit_range(float value) {
  _internal_add_post_center_limit_range(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.post_center_limit_range)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< float >&
VoxelNet::_internal_post_center_limit_range() const {
  return _impl_.post_center_limit_range_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< float >&
VoxelNet::post_center_limit_range() const {
  // @@protoc_insertion_point(field_list:second.protos.VoxelNet.post_center_limit_range)
  return _internal_post_center_limit_range();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< float >*
VoxelNet::_internal_mutable_post_center_limit_range() {
  return &_impl_.post_center_limit_range_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< float >*
VoxelNet::mutable_post_center_limit_range() {
  // @@protoc_insertion_point(field_mutable_list:second.protos.VoxelNet.post_center_limit_range)
  return _internal_mutable_post_center_limit_range();
}

// bool use_direction_classifier = 17;
inline void VoxelNet::clear_use_direction_classifier() {
  _impl_.use_direction_classifier_ = false;
}
inline bool VoxelNet::_internal_use_direction_classifier() const {
  return _impl_.use_direction_classifier_;
}
inline bool VoxelNet::use_direction_classifier() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_direction_classifier)
  return _internal_use_direction_classifier();
}
inline void VoxelNet::_internal_set_use_direction_classifier(bool value) {
  
  _impl_.use_direction_classifier_ = value;
}
inline void VoxelNet::set_use_direction_classifier(bool value) {
  _internal_set_use_direction_classifier(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.use_direction_classifier)
}

// float direction_loss_weight = 18;
inline void VoxelNet::clear_direction_loss_weight() {
  _impl_.direction_loss_weight_ = 0;
}
inline float VoxelNet::_internal_direction_loss_weight() const {
  return _impl_.direction_loss_weight_;
}
inline float VoxelNet::direction_loss_weight() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.direction_loss_weight)
  return _internal_direction_loss_weight();
}
inline void VoxelNet::_internal_set_direction_loss_weight(float value) {
  
  _impl_.direction_loss_weight_ = value;
}
inline void VoxelNet::set_direction_loss_weight(float value) {
  _internal_set_direction_loss_weight(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.direction_loss_weight)
}

// float pos_class_weight = 19;
inline void VoxelNet::clear_pos_class_weight() {
  _impl_.pos_class_weight_ = 0;
}
inline float VoxelNet::_internal_pos_class_weight() const {
  return _impl_.pos_class_weight_;
}
inline float VoxelNet::pos_class_weight() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.pos_class_weight)
  return _internal_pos_class_weight();
}
inline void VoxelNet::_internal_set_pos_class_weight(float value) {
  
  _impl_.pos_class_weight_ = value;
}
inline void VoxelNet::set_pos_class_weight(float value) {
  _internal_set_pos_class_weight(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.pos_class_weight)
}

// float neg_class_weight = 20;
inline void VoxelNet::clear_neg_class_weight() {
  _impl_.neg_class_weight_ = 0;
}
inline float VoxelNet::_internal_neg_class_weight() const {
  return _impl_.neg_class_weight_;
}
inline float VoxelNet::neg_class_weight() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.neg_class_weight)
  return _internal_neg_class_weight();
}
inline void VoxelNet::_internal_set_neg_class_weight(float value) {
  
  _impl_.neg_class_weight_ = value;
}
inline void VoxelNet::set_neg_class_weight(float value) {
  _internal_set_neg_class_weight(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.neg_class_weight)
}

// .second.protos.VoxelNet.LossNormType loss_norm_type = 21;
inline void VoxelNet::clear_loss_norm_type() {
  _impl_.loss_norm_type_ = 0;
}
inline ::second::protos::VoxelNet_LossNormType VoxelNet::_internal_loss_norm_type() const {
  return static_cast< ::second::protos::VoxelNet_LossNormType >(_impl_.loss_norm_type_);
}
inline ::second::protos::VoxelNet_LossNormType VoxelNet::loss_norm_type() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.loss_norm_type)
  return _internal_loss_norm_type();
}
inline void VoxelNet::_internal_set_loss_norm_type(::second::protos::VoxelNet_LossNormType value) {
  
  _impl_.loss_norm_type_ = value;
}
inline void VoxelNet::set_loss_norm_type(::second::protos::VoxelNet_LossNormType value) {
  _internal_set_loss_norm_type(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.loss_norm_type)
}

// bool use_bev = 22;
inline void VoxelNet::clear_use_bev() {
  _impl_.use_bev_ = false;
}
inline bool VoxelNet::_internal_use_bev() const {
  return _impl_.use_bev_;
}
inline bool VoxelNet::use_bev() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_bev)
  return _internal_use_bev();
}
inline void VoxelNet::_internal_set_use_bev(bool value) {
  
  _impl_.use_bev_ = value;
}
inline void VoxelNet::set_use_bev(bool value) {
  _internal_set_use_bev(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.use_bev)
}

// bool without_reflectivity = 23;
inline void VoxelNet::clear_without_reflectivity() {
  _impl_.without_reflectivity_ = false;
}
inline bool VoxelNet::_internal_without_reflectivity() const {
  return _impl_.without_reflectivity_;
}
inline bool VoxelNet::without_reflectivity() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.without_reflectivity)
  return _internal_without_reflectivity();
}
inline void VoxelNet::_internal_set_without_reflectivity(bool value) {
  
  _impl_.without_reflectivity_ = value;
}
inline void VoxelNet::set_without_reflectivity(bool value) {
  _internal_set_without_reflectivity(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.without_reflectivity)
}

// bool encode_angle_to_vector = 24;
inline void VoxelNet::clear_encode_angle_to_vector() {
  _impl_.encode_angle_to_vector_ = false;
}
inline bool VoxelNet::_internal_encode_angle_to_vector() const {
  return _impl_.encode_angle_to_vector_;
}
inline bool VoxelNet::encode_angle_to_vector() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.encode_angle_to_vector)
  return _internal_encode_angle_to_vector();
}
inline void VoxelNet::_internal_set_encode_angle_to_vector(bool value) {
  
  _impl_.encode_angle_to_vector_ = value;
}
inline void VoxelNet::set_encode_angle_to_vector(bool value) {
  _internal_set_encode_angle_to_vector(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.encode_angle_to_vector)
}

// .second.protos.BoxCoder box_coder = 25;
inline bool VoxelNet::_internal_has_box_coder() const {
  return this != internal_default_instance() && _impl_.box_coder_ != nullptr;
}
inline bool VoxelNet::has_box_coder() const {
  return _internal_has_box_coder();
}
inline const ::second::protos::BoxCoder& VoxelNet::_internal_box_coder() const {
  const ::second::protos::BoxCoder* p = _impl_.box_coder_;
  return p != nullptr ? *p : reinterpret_cast<const ::second::protos::BoxCoder&>(
      ::second::protos::_BoxCoder_default_instance_);
}
inline const ::second::protos::BoxCoder& VoxelNet::box_coder() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.box_coder)
  return _internal_box_coder();
}
inline void VoxelNet::unsafe_arena_set_allocated_box_coder(
    ::second::protos::BoxCoder* box_coder) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.box_coder_);
  }
  _impl_.box_coder_ = box_coder;
  if (box_coder) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:second.protos.VoxelNet.box_coder)
}
inline ::second::protos::BoxCoder* VoxelNet::release_box_coder() {
  
  ::second::protos::BoxCoder* temp = _impl_.box_coder_;
  _impl_.box_coder_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::second::protos::BoxCoder* VoxelNet::unsafe_arena_release_box_coder() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.box_coder)
  
  ::second::protos::BoxCoder* temp = _impl_.box_coder_;
  _impl_.box_coder_ = nullptr;
  return temp;
}
inline ::second::protos::BoxCoder* VoxelNet::_internal_mutable_box_coder() {
  
  if (_impl_.box_coder_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::BoxCoder>(GetArenaForAllocation());
    _impl_.box_coder_ = p;
  }
  return _impl_.box_coder_;
}
inline ::second::protos::BoxCoder* VoxelNet::mutable_box_coder() {
  ::second::protos::BoxCoder* _msg = _internal_mutable_box_coder();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.box_coder)
  return _msg;
}
inline void VoxelNet::set_allocated_box_coder(::second::protos::BoxCoder* box_coder) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.box_coder_);
  }
  if (box_coder) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(box_coder));
    if (message_arena != submessage_arena) {
      box_coder = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, box_coder, submessage_arena);
    }
    
  } else {
    
  }
  _impl_.box_coder_ = box_coder;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.box_coder)
}

// .second.protos.TargetAssigner target_assigner = 26;
inline bool VoxelNet::_internal_has_target_assigner() const {
  return this != internal_default_instance() && _impl_.target_assigner_ != nullptr;
}
inline bool VoxelNet::has_target_assigner() const {
  return _internal_has_target_assigner();
}
inline const ::second::protos::TargetAssigner& VoxelNet::_internal_target_assigner() const {
  const ::second::protos::TargetAssigner* p = _impl_.target_assigner_;
  return p != nullptr ? *p : reinterpret_cast<const ::second::protos::TargetAssigner&>(
      ::second::protos::_TargetAssigner_default_instance_);
}
inline const ::second::protos::TargetAssigner& VoxelNet::target_assigner() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.target_assigner)
  return _internal_target_assigner();
}
inline void VoxelNet::unsafe_arena_set_allocated_target_assigner(
    ::second::protos::TargetAssigner* target_assigner) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.target_assigner_);
  }
  _impl_.target_assigner_ = target_assigner;
  if (target_assigner) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:second.protos.VoxelNet.target_assigner)
}
inline ::second::protos::TargetAssigner* VoxelNet::release_target_assigner() {
  
  ::second::protos::TargetAssigner* temp = _impl_.target_assigner_;
  _impl_.target_assigner_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::second::protos::TargetAssigner* VoxelNet::unsafe_arena_release_target_assigner() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.target_assigner)
  
  ::second::protos::TargetAssigner* temp = _impl_.target_assigner_;
  _impl_.target_assigner_ = nullptr;
  return temp;
}
inline ::second::protos::TargetAssigner* VoxelNet::_internal_mutable_target_assigner() {
  
  if (_impl_.target_assigner_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::TargetAssigner>(GetArenaForAllocation());
    _impl_.target_assigner_ = p;
  }
  return _impl_.target_assigner_;
}
inline ::second::protos::TargetAssigner* VoxelNet::mutable_target_assigner() {
  ::second::protos::TargetAssigner* _msg = _internal_mutable_target_assigner();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.target_assigner)
  return _msg;
}
inline void VoxelNet::set_allocated_target_assigner(::second::protos::TargetAssigner* target_assigner) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.target_assigner_);
  }
  if (target_assigner) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(target_assigner));
    if (message_arena != submessage_arena) {
      target_assigner = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, target_assigner, submessage_arena);
    }
    
  } else {
    
  }
  _impl_.target_assigner_ = target_assigner;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.target_assigner)
}

// bool lidar_input = 27;
inline void VoxelNet::clear_lidar_input() {
  _impl_.lidar_input_ = false;
}
inline bool VoxelNet::_internal_lidar_input() const {
  return _impl_.lidar_input_;
}
inline bool VoxelNet::lidar_input() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.lidar_input)
  return _internal_lidar_input();
}
inline void VoxelNet::_internal_set_lidar_input(bool value) {
  
  _impl_.lidar_input_ = value;
}
inline void VoxelNet::set_lidar_input(bool value) {
  _internal_set_lidar_input(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.lidar_input)
}

// uint32 num_point_features = 28;
inline void VoxelNet::clear_num_point_features() {
  _impl_.num_point_features_ = 0u;
}
inline uint32_t VoxelNet::_internal_num_point_features() const {
  return _impl_.num_point_features_;
}
inline uint32_t VoxelNet::num_point_features() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.num_point_features)
  return _internal_num_point_features();
}
inline void VoxelNet::_internal_set_num_point_features(uint32_t value) {
  
  _impl_.num_point_features_ = value;
}
inline void VoxelNet::set_num_point_features(uint32_t value) {
  _internal_set_num_point_features(value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.num_point_features)
}

// .second.protos.VoxelGenerator voxel_generator = 29;
inline bool VoxelNet::_internal_has_voxel_generator() const {
  return this != internal_default_instance() && _impl_.voxel_generator_ != nullptr;
}
inline bool VoxelNet::has_voxel_generator() const {
  return _internal_has_voxel_generator();
}
inline const ::second::protos::VoxelGenerator& VoxelNet::_internal_voxel_generator() const {
  const ::second::protos::VoxelGenerator* p = _impl_.voxel_generator_;
  return p != nullptr ? *p : reinterpret_cast<const ::second::protos::VoxelGenerator&>(
      ::second::protos::_VoxelGenerator_default_instance_);
}
inline const ::second::protos::VoxelGenerator& VoxelNet::voxel_generator() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.voxel_generator)
  return _internal_voxel_generator();
}
inline void VoxelNet::unsafe_arena_set_allocated_voxel_generator(
    ::second::protos::VoxelGenerator* voxel_generator) {
  if (GetArenaForAllocation() == nullptr) {
    delete reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.voxel_generator_);
  }
  _impl_.voxel_generator_ = voxel_generator;
  if (voxel_generator) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:second.protos.VoxelNet.voxel_generator)
}
inline ::second::protos::VoxelGenerator* VoxelNet::release_voxel_generator() {
  
  ::second::protos::VoxelGenerator* temp = _impl_.voxel_generator_;
  _impl_.voxel_generator_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old =  reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(temp);
  temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  if (GetArenaForAllocation() == nullptr) { delete old; }
#else  // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArenaForAllocation() != nullptr) {
    temp = ::PROTOBUF_NAMESPACE_ID::internal::DuplicateIfNonNull(temp);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return temp;
}
inline ::second::protos::VoxelGenerator* VoxelNet::unsafe_arena_release_voxel_generator() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.voxel_generator)
  
  ::second::protos::VoxelGenerator* temp = _impl_.voxel_generator_;
  _impl_.voxel_generator_ = nullptr;
  return temp;
}
inline ::second::protos::VoxelGenerator* VoxelNet::_internal_mutable_voxel_generator() {
  
  if (_impl_.voxel_generator_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::VoxelGenerator>(GetArenaForAllocation());
    _impl_.voxel_generator_ = p;
  }
  return _impl_.voxel_generator_;
}
inline ::second::protos::VoxelGenerator* VoxelNet::mutable_voxel_generator() {
  ::second::protos::VoxelGenerator* _msg = _internal_mutable_voxel_generator();
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.voxel_generator)
  return _msg;
}
inline void VoxelNet::set_allocated_voxel_generator(::second::protos::VoxelGenerator* voxel_generator) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaForAllocation();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(_impl_.voxel_generator_);
  }
  if (voxel_generator) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
        ::PROTOBUF_NAMESPACE_ID::Arena::InternalGetOwningArena(
                reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(voxel_generator));
    if (message_arena != submessage_arena) {
      voxel_generator = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, voxel_generator, submessage_arena);
    }
    
  } else {
    
  }
  _impl_.voxel_generator_ = voxel_generator;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.voxel_generator)
}

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

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

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


// @@protoc_insertion_point(namespace_scope)

}  // namespace protos
}  // namespace second

PROTOBUF_NAMESPACE_OPEN

template <> struct is_proto_enum< ::second::protos::VoxelNet_LossNormType> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::second::protos::VoxelNet_LossNormType>() {
  return ::second::protos::VoxelNet_LossNormType_descriptor();
}

PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)

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