// 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 < 3009000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 3009002 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/port_undef.inc>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/inlined_string_field.h>
#include <google/protobuf/metadata.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/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 ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[4]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_second_2fprotos_2fsecond_2eproto;
namespace second {
namespace protos {
class VoxelNet;
class VoxelNetDefaultTypeInternal;
extern VoxelNetDefaultTypeInternal _VoxelNet_default_instance_;
class VoxelNet_MiddleFeatureExtractor;
class VoxelNet_MiddleFeatureExtractorDefaultTypeInternal;
extern VoxelNet_MiddleFeatureExtractorDefaultTypeInternal _VoxelNet_MiddleFeatureExtractor_default_instance_;
class VoxelNet_RPN;
class VoxelNet_RPNDefaultTypeInternal;
extern VoxelNet_RPNDefaultTypeInternal _VoxelNet_RPN_default_instance_;
class VoxelNet_VoxelFeatureExtractor;
class 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<::PROTOBUF_NAMESPACE_ID::int32>::min(),
  VoxelNet_LossNormType_VoxelNet_LossNormType_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::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(
    const std::string& name, VoxelNet_LossNormType* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<VoxelNet_LossNormType>(
    VoxelNet_LossNormType_descriptor(), name, value);
}
// ===================================================================

class VoxelNet_VoxelFeatureExtractor :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:second.protos.VoxelNet.VoxelFeatureExtractor) */ {
 public:
  VoxelNet_VoxelFeatureExtractor();
  virtual ~VoxelNet_VoxelFeatureExtractor();

  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 (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

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

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  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;
    InternalSwap(other);
  }

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

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

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

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

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

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

  public:

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

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

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

  // string module_class_name = 1;
  void clear_module_class_name();
  const std::string& module_class_name() const;
  void set_module_class_name(const std::string& value);
  void set_module_class_name(std::string&& value);
  void set_module_class_name(const char* value);
  void set_module_class_name(const char* value, size_t size);
  std::string* mutable_module_class_name();
  std::string* release_module_class_name();
  void set_allocated_module_class_name(std::string* module_class_name);

  // bool with_distance = 3;
  void clear_with_distance();
  bool with_distance() const;
  void set_with_distance(bool value);

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

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > 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_;
  friend struct ::TableStruct_second_2fprotos_2fsecond_2eproto;
};
// -------------------------------------------------------------------

class VoxelNet_MiddleFeatureExtractor :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:second.protos.VoxelNet.MiddleFeatureExtractor) */ {
 public:
  VoxelNet_MiddleFeatureExtractor();
  virtual ~VoxelNet_MiddleFeatureExtractor();

  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 (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

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

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  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;
    InternalSwap(other);
  }

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

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

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

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

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

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

  public:

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

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

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

  // repeated uint32 num_filters_down2 = 3;
  int num_filters_down2_size() const;
  void clear_num_filters_down2();
  ::PROTOBUF_NAMESPACE_ID::uint32 num_filters_down2(int index) const;
  void set_num_filters_down2(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value);
  void add_num_filters_down2(::PROTOBUF_NAMESPACE_ID::uint32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >&
      num_filters_down2() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >*
      mutable_num_filters_down2();

  // string module_class_name = 1;
  void clear_module_class_name();
  const std::string& module_class_name() const;
  void set_module_class_name(const std::string& value);
  void set_module_class_name(std::string&& value);
  void set_module_class_name(const char* value);
  void set_module_class_name(const char* value, size_t size);
  std::string* mutable_module_class_name();
  std::string* release_module_class_name();
  void set_allocated_module_class_name(std::string* module_class_name);

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

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > num_filters_down1_;
  mutable std::atomic<int> _num_filters_down1_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > 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_;
  friend struct ::TableStruct_second_2fprotos_2fsecond_2eproto;
};
// -------------------------------------------------------------------

class VoxelNet_RPN :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:second.protos.VoxelNet.RPN) */ {
 public:
  VoxelNet_RPN();
  virtual ~VoxelNet_RPN();

  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 (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

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

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  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;
    InternalSwap(other);
  }

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

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

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

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

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

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

  public:

  // 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;
  void clear_layer_nums();
  ::PROTOBUF_NAMESPACE_ID::uint32 layer_nums(int index) const;
  void set_layer_nums(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value);
  void add_layer_nums(::PROTOBUF_NAMESPACE_ID::uint32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >&
      layer_nums() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >*
      mutable_layer_nums();

  // repeated uint32 layer_strides = 3;
  int layer_strides_size() const;
  void clear_layer_strides();
  ::PROTOBUF_NAMESPACE_ID::uint32 layer_strides(int index) const;
  void set_layer_strides(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value);
  void add_layer_strides(::PROTOBUF_NAMESPACE_ID::uint32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >&
      layer_strides() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >*
      mutable_layer_strides();

  // repeated uint32 num_filters = 4;
  int num_filters_size() const;
  void clear_num_filters();
  ::PROTOBUF_NAMESPACE_ID::uint32 num_filters(int index) const;
  void set_num_filters(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value);
  void add_num_filters(::PROTOBUF_NAMESPACE_ID::uint32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >&
      num_filters() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >*
      mutable_num_filters();

  // repeated uint32 upsample_strides = 5;
  int upsample_strides_size() const;
  void clear_upsample_strides();
  ::PROTOBUF_NAMESPACE_ID::uint32 upsample_strides(int index) const;
  void set_upsample_strides(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value);
  void add_upsample_strides(::PROTOBUF_NAMESPACE_ID::uint32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >&
      upsample_strides() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >*
      mutable_upsample_strides();

  // repeated uint32 num_upsample_filters = 6;
  int num_upsample_filters_size() const;
  void clear_num_upsample_filters();
  ::PROTOBUF_NAMESPACE_ID::uint32 num_upsample_filters(int index) const;
  void set_num_upsample_filters(int index, ::PROTOBUF_NAMESPACE_ID::uint32 value);
  void add_num_upsample_filters(::PROTOBUF_NAMESPACE_ID::uint32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >&
      num_upsample_filters() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 >*
      mutable_num_upsample_filters();

  // string module_class_name = 1;
  void clear_module_class_name();
  const std::string& module_class_name() const;
  void set_module_class_name(const std::string& value);
  void set_module_class_name(std::string&& value);
  void set_module_class_name(const char* value);
  void set_module_class_name(const char* value, size_t size);
  std::string* mutable_module_class_name();
  std::string* release_module_class_name();
  void set_allocated_module_class_name(std::string* module_class_name);

  // bool use_groupnorm = 7;
  void clear_use_groupnorm();
  bool use_groupnorm() const;
  void set_use_groupnorm(bool value);

  // uint32 num_groups = 8;
  void clear_num_groups();
  ::PROTOBUF_NAMESPACE_ID::uint32 num_groups() const;
  void set_num_groups(::PROTOBUF_NAMESPACE_ID::uint32 value);

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

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > layer_nums_;
  mutable std::atomic<int> _layer_nums_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > layer_strides_;
  mutable std::atomic<int> _layer_strides_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > num_filters_;
  mutable std::atomic<int> _num_filters_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > upsample_strides_;
  mutable std::atomic<int> _upsample_strides_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::uint32 > num_upsample_filters_;
  mutable std::atomic<int> _num_upsample_filters_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr module_class_name_;
  bool use_groupnorm_;
  ::PROTOBUF_NAMESPACE_ID::uint32 num_groups_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_second_2fprotos_2fsecond_2eproto;
};
// -------------------------------------------------------------------

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

  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 (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

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

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  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;
    InternalSwap(other);
  }

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

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

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

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

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

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

  public:

  // 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(const std::string& 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;
  void clear_post_center_limit_range();
  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;
  void clear_voxel_feature_extractor();
  const ::second::protos::VoxelNet_VoxelFeatureExtractor& voxel_feature_extractor() const;
  ::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);

  // .second.protos.VoxelNet.MiddleFeatureExtractor middle_feature_extractor = 3;
  bool has_middle_feature_extractor() const;
  void clear_middle_feature_extractor();
  const ::second::protos::VoxelNet_MiddleFeatureExtractor& middle_feature_extractor() const;
  ::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);

  // .second.protos.VoxelNet.RPN rpn = 4;
  bool has_rpn() const;
  void clear_rpn();
  const ::second::protos::VoxelNet_RPN& rpn() const;
  ::second::protos::VoxelNet_RPN* release_rpn();
  ::second::protos::VoxelNet_RPN* mutable_rpn();
  void set_allocated_rpn(::second::protos::VoxelNet_RPN* rpn);

  // .second.protos.Loss loss = 6;
  bool has_loss() const;
  void clear_loss();
  const ::second::protos::Loss& loss() const;
  ::second::protos::Loss* release_loss();
  ::second::protos::Loss* mutable_loss();
  void set_allocated_loss(::second::protos::Loss* loss);

  // .second.protos.BoxCoder box_coder = 25;
  bool has_box_coder() const;
  void clear_box_coder();
  const ::second::protos::BoxCoder& box_coder() const;
  ::second::protos::BoxCoder* release_box_coder();
  ::second::protos::BoxCoder* mutable_box_coder();
  void set_allocated_box_coder(::second::protos::BoxCoder* box_coder);

  // .second.protos.TargetAssigner target_assigner = 26;
  bool has_target_assigner() const;
  void clear_target_assigner();
  const ::second::protos::TargetAssigner& target_assigner() const;
  ::second::protos::TargetAssigner* release_target_assigner();
  ::second::protos::TargetAssigner* mutable_target_assigner();
  void set_allocated_target_assigner(::second::protos::TargetAssigner* target_assigner);

  // .second.protos.VoxelGenerator voxel_generator = 29;
  bool has_voxel_generator() const;
  void clear_voxel_generator();
  const ::second::protos::VoxelGenerator& voxel_generator() const;
  ::second::protos::VoxelGenerator* release_voxel_generator();
  ::second::protos::VoxelGenerator* mutable_voxel_generator();
  void set_allocated_voxel_generator(::second::protos::VoxelGenerator* voxel_generator);

  // uint32 num_class = 1;
  void clear_num_class();
  ::PROTOBUF_NAMESPACE_ID::uint32 num_class() const;
  void set_num_class(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // bool use_sigmoid_score = 5;
  void clear_use_sigmoid_score();
  bool use_sigmoid_score() const;
  void set_use_sigmoid_score(bool value);

  // 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);

  // 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);

  // bool use_aux_classifier = 9;
  void clear_use_aux_classifier();
  bool use_aux_classifier() const;
  void set_use_aux_classifier(bool value);

  // uint32 nms_pre_max_size = 12;
  void clear_nms_pre_max_size();
  ::PROTOBUF_NAMESPACE_ID::uint32 nms_pre_max_size() const;
  void set_nms_pre_max_size(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // uint32 nms_post_max_size = 13;
  void clear_nms_post_max_size();
  ::PROTOBUF_NAMESPACE_ID::uint32 nms_post_max_size() const;
  void set_nms_post_max_size(::PROTOBUF_NAMESPACE_ID::uint32 value);

  // float nms_score_threshold = 14;
  void clear_nms_score_threshold();
  float nms_score_threshold() const;
  void set_nms_score_threshold(float value);

  // float nms_iou_threshold = 15;
  void clear_nms_iou_threshold();
  float nms_iou_threshold() const;
  void set_nms_iou_threshold(float value);

  // bool use_rotate_nms = 10;
  void clear_use_rotate_nms();
  bool use_rotate_nms() const;
  void set_use_rotate_nms(bool value);

  // 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);

  // bool use_direction_classifier = 17;
  void clear_use_direction_classifier();
  bool use_direction_classifier() const;
  void set_use_direction_classifier(bool value);

  // bool use_bev = 22;
  void clear_use_bev();
  bool use_bev() const;
  void set_use_bev(bool value);

  // float direction_loss_weight = 18;
  void clear_direction_loss_weight();
  float direction_loss_weight() const;
  void set_direction_loss_weight(float value);

  // float pos_class_weight = 19;
  void clear_pos_class_weight();
  float pos_class_weight() const;
  void set_pos_class_weight(float value);

  // float neg_class_weight = 20;
  void clear_neg_class_weight();
  float neg_class_weight() const;
  void set_neg_class_weight(float value);

  // .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);

  // bool without_reflectivity = 23;
  void clear_without_reflectivity();
  bool without_reflectivity() const;
  void set_without_reflectivity(bool value);

  // 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);

  // bool lidar_input = 27;
  void clear_lidar_input();
  bool lidar_input() const;
  void set_lidar_input(bool value);

  // uint32 num_point_features = 28;
  void clear_num_point_features();
  ::PROTOBUF_NAMESPACE_ID::uint32 num_point_features() const;
  void set_num_point_features(::PROTOBUF_NAMESPACE_ID::uint32 value);

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

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< float > post_center_limit_range_;
  mutable std::atomic<int> _post_center_limit_range_cached_byte_size_;
  ::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_;
  ::PROTOBUF_NAMESPACE_ID::uint32 num_class_;
  bool use_sigmoid_score_;
  bool encode_rad_error_by_sin_;
  bool encode_background_as_zeros_;
  bool use_aux_classifier_;
  ::PROTOBUF_NAMESPACE_ID::uint32 nms_pre_max_size_;
  ::PROTOBUF_NAMESPACE_ID::uint32 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_;
  ::PROTOBUF_NAMESPACE_ID::uint32 num_point_features_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  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() {
  module_class_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& VoxelNet_VoxelFeatureExtractor::module_class_name() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
  return module_class_name_.GetNoArena();
}
inline void VoxelNet_VoxelFeatureExtractor::set_module_class_name(const std::string& value) {
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
}
inline void VoxelNet_VoxelFeatureExtractor::set_module_class_name(std::string&& value) {
  
  module_class_name_.SetNoArena(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
}
inline void VoxelNet_VoxelFeatureExtractor::set_module_class_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
}
inline void VoxelNet_VoxelFeatureExtractor::set_module_class_name(const char* value, size_t size) {
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
}
inline std::string* VoxelNet_VoxelFeatureExtractor::mutable_module_class_name() {
  
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
  return module_class_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* VoxelNet_VoxelFeatureExtractor::release_module_class_name() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
  
  return module_class_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void VoxelNet_VoxelFeatureExtractor::set_allocated_module_class_name(std::string* module_class_name) {
  if (module_class_name != nullptr) {
    
  } else {
    
  }
  module_class_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), module_class_name);
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.VoxelFeatureExtractor.module_class_name)
}

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

// bool with_distance = 3;
inline void VoxelNet_VoxelFeatureExtractor::clear_with_distance() {
  with_distance_ = false;
}
inline bool VoxelNet_VoxelFeatureExtractor::with_distance() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.VoxelFeatureExtractor.with_distance)
  return with_distance_;
}
inline void VoxelNet_VoxelFeatureExtractor::set_with_distance(bool value) {
  
  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() {
  module_class_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& VoxelNet_MiddleFeatureExtractor::module_class_name() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
  return module_class_name_.GetNoArena();
}
inline void VoxelNet_MiddleFeatureExtractor::set_module_class_name(const std::string& value) {
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
}
inline void VoxelNet_MiddleFeatureExtractor::set_module_class_name(std::string&& value) {
  
  module_class_name_.SetNoArena(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
}
inline void VoxelNet_MiddleFeatureExtractor::set_module_class_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
}
inline void VoxelNet_MiddleFeatureExtractor::set_module_class_name(const char* value, size_t size) {
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
}
inline std::string* VoxelNet_MiddleFeatureExtractor::mutable_module_class_name() {
  
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
  return module_class_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* VoxelNet_MiddleFeatureExtractor::release_module_class_name() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
  
  return module_class_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void VoxelNet_MiddleFeatureExtractor::set_allocated_module_class_name(std::string* module_class_name) {
  if (module_class_name != nullptr) {
    
  } else {
    
  }
  module_class_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), module_class_name);
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.MiddleFeatureExtractor.module_class_name)
}

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

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

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

// VoxelNet_RPN

// string module_class_name = 1;
inline void VoxelNet_RPN::clear_module_class_name() {
  module_class_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& VoxelNet_RPN::module_class_name() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.module_class_name)
  return module_class_name_.GetNoArena();
}
inline void VoxelNet_RPN::set_module_class_name(const std::string& value) {
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.RPN.module_class_name)
}
inline void VoxelNet_RPN::set_module_class_name(std::string&& value) {
  
  module_class_name_.SetNoArena(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:second.protos.VoxelNet.RPN.module_class_name)
}
inline void VoxelNet_RPN::set_module_class_name(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:second.protos.VoxelNet.RPN.module_class_name)
}
inline void VoxelNet_RPN::set_module_class_name(const char* value, size_t size) {
  
  module_class_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:second.protos.VoxelNet.RPN.module_class_name)
}
inline std::string* VoxelNet_RPN::mutable_module_class_name() {
  
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.RPN.module_class_name)
  return module_class_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* VoxelNet_RPN::release_module_class_name() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.RPN.module_class_name)
  
  return module_class_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void VoxelNet_RPN::set_allocated_module_class_name(std::string* module_class_name) {
  if (module_class_name != nullptr) {
    
  } else {
    
  }
  module_class_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), module_class_name);
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.RPN.module_class_name)
}

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

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

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

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

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

// bool use_groupnorm = 7;
inline void VoxelNet_RPN::clear_use_groupnorm() {
  use_groupnorm_ = false;
}
inline bool VoxelNet_RPN::use_groupnorm() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.use_groupnorm)
  return use_groupnorm_;
}
inline void VoxelNet_RPN::set_use_groupnorm(bool value) {
  
  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() {
  num_groups_ = 0u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 VoxelNet_RPN::num_groups() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.RPN.num_groups)
  return num_groups_;
}
inline void VoxelNet_RPN::set_num_groups(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  
  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() {
  num_class_ = 0u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 VoxelNet::num_class() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.num_class)
  return num_class_;
}
inline void VoxelNet::set_num_class(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  
  num_class_ = value;
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.num_class)
}

// .second.protos.VoxelNet.VoxelFeatureExtractor voxel_feature_extractor = 2;
inline bool VoxelNet::has_voxel_feature_extractor() const {
  return this != internal_default_instance() && voxel_feature_extractor_ != nullptr;
}
inline void VoxelNet::clear_voxel_feature_extractor() {
  if (GetArenaNoVirtual() == nullptr && voxel_feature_extractor_ != nullptr) {
    delete voxel_feature_extractor_;
  }
  voxel_feature_extractor_ = nullptr;
}
inline const ::second::protos::VoxelNet_VoxelFeatureExtractor& VoxelNet::voxel_feature_extractor() const {
  const ::second::protos::VoxelNet_VoxelFeatureExtractor* p = voxel_feature_extractor_;
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.voxel_feature_extractor)
  return p != nullptr ? *p : *reinterpret_cast<const ::second::protos::VoxelNet_VoxelFeatureExtractor*>(
      &::second::protos::_VoxelNet_VoxelFeatureExtractor_default_instance_);
}
inline ::second::protos::VoxelNet_VoxelFeatureExtractor* VoxelNet::release_voxel_feature_extractor() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.voxel_feature_extractor)
  
  ::second::protos::VoxelNet_VoxelFeatureExtractor* temp = voxel_feature_extractor_;
  voxel_feature_extractor_ = nullptr;
  return temp;
}
inline ::second::protos::VoxelNet_VoxelFeatureExtractor* VoxelNet::mutable_voxel_feature_extractor() {
  
  if (voxel_feature_extractor_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::VoxelNet_VoxelFeatureExtractor>(GetArenaNoVirtual());
    voxel_feature_extractor_ = p;
  }
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.voxel_feature_extractor)
  return voxel_feature_extractor_;
}
inline void VoxelNet::set_allocated_voxel_feature_extractor(::second::protos::VoxelNet_VoxelFeatureExtractor* voxel_feature_extractor) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete voxel_feature_extractor_;
  }
  if (voxel_feature_extractor) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      voxel_feature_extractor = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, voxel_feature_extractor, submessage_arena);
    }
    
  } else {
    
  }
  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::has_middle_feature_extractor() const {
  return this != internal_default_instance() && middle_feature_extractor_ != nullptr;
}
inline void VoxelNet::clear_middle_feature_extractor() {
  if (GetArenaNoVirtual() == nullptr && middle_feature_extractor_ != nullptr) {
    delete middle_feature_extractor_;
  }
  middle_feature_extractor_ = nullptr;
}
inline const ::second::protos::VoxelNet_MiddleFeatureExtractor& VoxelNet::middle_feature_extractor() const {
  const ::second::protos::VoxelNet_MiddleFeatureExtractor* p = middle_feature_extractor_;
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.middle_feature_extractor)
  return p != nullptr ? *p : *reinterpret_cast<const ::second::protos::VoxelNet_MiddleFeatureExtractor*>(
      &::second::protos::_VoxelNet_MiddleFeatureExtractor_default_instance_);
}
inline ::second::protos::VoxelNet_MiddleFeatureExtractor* VoxelNet::release_middle_feature_extractor() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.middle_feature_extractor)
  
  ::second::protos::VoxelNet_MiddleFeatureExtractor* temp = middle_feature_extractor_;
  middle_feature_extractor_ = nullptr;
  return temp;
}
inline ::second::protos::VoxelNet_MiddleFeatureExtractor* VoxelNet::mutable_middle_feature_extractor() {
  
  if (middle_feature_extractor_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::VoxelNet_MiddleFeatureExtractor>(GetArenaNoVirtual());
    middle_feature_extractor_ = p;
  }
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.middle_feature_extractor)
  return middle_feature_extractor_;
}
inline void VoxelNet::set_allocated_middle_feature_extractor(::second::protos::VoxelNet_MiddleFeatureExtractor* middle_feature_extractor) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete middle_feature_extractor_;
  }
  if (middle_feature_extractor) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      middle_feature_extractor = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, middle_feature_extractor, submessage_arena);
    }
    
  } else {
    
  }
  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::has_rpn() const {
  return this != internal_default_instance() && rpn_ != nullptr;
}
inline void VoxelNet::clear_rpn() {
  if (GetArenaNoVirtual() == nullptr && rpn_ != nullptr) {
    delete rpn_;
  }
  rpn_ = nullptr;
}
inline const ::second::protos::VoxelNet_RPN& VoxelNet::rpn() const {
  const ::second::protos::VoxelNet_RPN* p = rpn_;
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.rpn)
  return p != nullptr ? *p : *reinterpret_cast<const ::second::protos::VoxelNet_RPN*>(
      &::second::protos::_VoxelNet_RPN_default_instance_);
}
inline ::second::protos::VoxelNet_RPN* VoxelNet::release_rpn() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.rpn)
  
  ::second::protos::VoxelNet_RPN* temp = rpn_;
  rpn_ = nullptr;
  return temp;
}
inline ::second::protos::VoxelNet_RPN* VoxelNet::mutable_rpn() {
  
  if (rpn_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::VoxelNet_RPN>(GetArenaNoVirtual());
    rpn_ = p;
  }
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.rpn)
  return rpn_;
}
inline void VoxelNet::set_allocated_rpn(::second::protos::VoxelNet_RPN* rpn) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete rpn_;
  }
  if (rpn) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      rpn = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, rpn, submessage_arena);
    }
    
  } else {
    
  }
  rpn_ = rpn;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.rpn)
}

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

// .second.protos.Loss loss = 6;
inline bool VoxelNet::has_loss() const {
  return this != internal_default_instance() && loss_ != nullptr;
}
inline const ::second::protos::Loss& VoxelNet::loss() const {
  const ::second::protos::Loss* p = loss_;
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.loss)
  return p != nullptr ? *p : *reinterpret_cast<const ::second::protos::Loss*>(
      &::second::protos::_Loss_default_instance_);
}
inline ::second::protos::Loss* VoxelNet::release_loss() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.loss)
  
  ::second::protos::Loss* temp = loss_;
  loss_ = nullptr;
  return temp;
}
inline ::second::protos::Loss* VoxelNet::mutable_loss() {
  
  if (loss_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::Loss>(GetArenaNoVirtual());
    loss_ = p;
  }
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.loss)
  return loss_;
}
inline void VoxelNet::set_allocated_loss(::second::protos::Loss* loss) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(loss_);
  }
  if (loss) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      loss = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, loss, submessage_arena);
    }
    
  } else {
    
  }
  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() {
  encode_rad_error_by_sin_ = false;
}
inline bool VoxelNet::encode_rad_error_by_sin() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.encode_rad_error_by_sin)
  return encode_rad_error_by_sin_;
}
inline void VoxelNet::set_encode_rad_error_by_sin(bool value) {
  
  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() {
  encode_background_as_zeros_ = false;
}
inline bool VoxelNet::encode_background_as_zeros() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.encode_background_as_zeros)
  return encode_background_as_zeros_;
}
inline void VoxelNet::set_encode_background_as_zeros(bool value) {
  
  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() {
  use_aux_classifier_ = false;
}
inline bool VoxelNet::use_aux_classifier() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_aux_classifier)
  return use_aux_classifier_;
}
inline void VoxelNet::set_use_aux_classifier(bool value) {
  
  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() {
  use_rotate_nms_ = false;
}
inline bool VoxelNet::use_rotate_nms() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_rotate_nms)
  return use_rotate_nms_;
}
inline void VoxelNet::set_use_rotate_nms(bool value) {
  
  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() {
  use_multi_class_nms_ = false;
}
inline bool VoxelNet::use_multi_class_nms() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_multi_class_nms)
  return use_multi_class_nms_;
}
inline void VoxelNet::set_use_multi_class_nms(bool value) {
  
  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() {
  nms_pre_max_size_ = 0u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 VoxelNet::nms_pre_max_size() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.nms_pre_max_size)
  return nms_pre_max_size_;
}
inline void VoxelNet::set_nms_pre_max_size(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  
  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() {
  nms_post_max_size_ = 0u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 VoxelNet::nms_post_max_size() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.nms_post_max_size)
  return nms_post_max_size_;
}
inline void VoxelNet::set_nms_post_max_size(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  
  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() {
  nms_score_threshold_ = 0;
}
inline float VoxelNet::nms_score_threshold() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.nms_score_threshold)
  return nms_score_threshold_;
}
inline void VoxelNet::set_nms_score_threshold(float value) {
  
  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() {
  nms_iou_threshold_ = 0;
}
inline float VoxelNet::nms_iou_threshold() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.nms_iou_threshold)
  return nms_iou_threshold_;
}
inline void VoxelNet::set_nms_iou_threshold(float value) {
  
  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::post_center_limit_range_size() const {
  return post_center_limit_range_.size();
}
inline void VoxelNet::clear_post_center_limit_range() {
  post_center_limit_range_.Clear();
}
inline float VoxelNet::post_center_limit_range(int index) const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.post_center_limit_range)
  return post_center_limit_range_.Get(index);
}
inline void VoxelNet::set_post_center_limit_range(int index, float value) {
  post_center_limit_range_.Set(index, value);
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.post_center_limit_range)
}
inline void VoxelNet::add_post_center_limit_range(float value) {
  post_center_limit_range_.Add(value);
  // @@protoc_insertion_point(field_add:second.protos.VoxelNet.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 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 &post_center_limit_range_;
}

// bool use_direction_classifier = 17;
inline void VoxelNet::clear_use_direction_classifier() {
  use_direction_classifier_ = false;
}
inline bool VoxelNet::use_direction_classifier() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_direction_classifier)
  return use_direction_classifier_;
}
inline void VoxelNet::set_use_direction_classifier(bool value) {
  
  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() {
  direction_loss_weight_ = 0;
}
inline float VoxelNet::direction_loss_weight() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.direction_loss_weight)
  return direction_loss_weight_;
}
inline void VoxelNet::set_direction_loss_weight(float value) {
  
  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() {
  pos_class_weight_ = 0;
}
inline float VoxelNet::pos_class_weight() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.pos_class_weight)
  return pos_class_weight_;
}
inline void VoxelNet::set_pos_class_weight(float value) {
  
  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() {
  neg_class_weight_ = 0;
}
inline float VoxelNet::neg_class_weight() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.neg_class_weight)
  return neg_class_weight_;
}
inline void VoxelNet::set_neg_class_weight(float value) {
  
  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() {
  loss_norm_type_ = 0;
}
inline ::second::protos::VoxelNet_LossNormType VoxelNet::loss_norm_type() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.loss_norm_type)
  return static_cast< ::second::protos::VoxelNet_LossNormType >(loss_norm_type_);
}
inline void VoxelNet::set_loss_norm_type(::second::protos::VoxelNet_LossNormType value) {
  
  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() {
  use_bev_ = false;
}
inline bool VoxelNet::use_bev() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.use_bev)
  return use_bev_;
}
inline void VoxelNet::set_use_bev(bool value) {
  
  use_bev_ = value;
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.use_bev)
}

// bool without_reflectivity = 23;
inline void VoxelNet::clear_without_reflectivity() {
  without_reflectivity_ = false;
}
inline bool VoxelNet::without_reflectivity() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.without_reflectivity)
  return without_reflectivity_;
}
inline void VoxelNet::set_without_reflectivity(bool value) {
  
  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() {
  encode_angle_to_vector_ = false;
}
inline bool VoxelNet::encode_angle_to_vector() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.encode_angle_to_vector)
  return encode_angle_to_vector_;
}
inline void VoxelNet::set_encode_angle_to_vector(bool value) {
  
  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::has_box_coder() const {
  return this != internal_default_instance() && box_coder_ != nullptr;
}
inline const ::second::protos::BoxCoder& VoxelNet::box_coder() const {
  const ::second::protos::BoxCoder* p = box_coder_;
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.box_coder)
  return p != nullptr ? *p : *reinterpret_cast<const ::second::protos::BoxCoder*>(
      &::second::protos::_BoxCoder_default_instance_);
}
inline ::second::protos::BoxCoder* VoxelNet::release_box_coder() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.box_coder)
  
  ::second::protos::BoxCoder* temp = box_coder_;
  box_coder_ = nullptr;
  return temp;
}
inline ::second::protos::BoxCoder* VoxelNet::mutable_box_coder() {
  
  if (box_coder_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::BoxCoder>(GetArenaNoVirtual());
    box_coder_ = p;
  }
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.box_coder)
  return box_coder_;
}
inline void VoxelNet::set_allocated_box_coder(::second::protos::BoxCoder* box_coder) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(box_coder_);
  }
  if (box_coder) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      box_coder = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, box_coder, submessage_arena);
    }
    
  } else {
    
  }
  box_coder_ = box_coder;
  // @@protoc_insertion_point(field_set_allocated:second.protos.VoxelNet.box_coder)
}

// .second.protos.TargetAssigner target_assigner = 26;
inline bool VoxelNet::has_target_assigner() const {
  return this != internal_default_instance() && target_assigner_ != nullptr;
}
inline const ::second::protos::TargetAssigner& VoxelNet::target_assigner() const {
  const ::second::protos::TargetAssigner* p = target_assigner_;
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.target_assigner)
  return p != nullptr ? *p : *reinterpret_cast<const ::second::protos::TargetAssigner*>(
      &::second::protos::_TargetAssigner_default_instance_);
}
inline ::second::protos::TargetAssigner* VoxelNet::release_target_assigner() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.target_assigner)
  
  ::second::protos::TargetAssigner* temp = target_assigner_;
  target_assigner_ = nullptr;
  return temp;
}
inline ::second::protos::TargetAssigner* VoxelNet::mutable_target_assigner() {
  
  if (target_assigner_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::TargetAssigner>(GetArenaNoVirtual());
    target_assigner_ = p;
  }
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.target_assigner)
  return target_assigner_;
}
inline void VoxelNet::set_allocated_target_assigner(::second::protos::TargetAssigner* target_assigner) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(target_assigner_);
  }
  if (target_assigner) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      target_assigner = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, target_assigner, submessage_arena);
    }
    
  } else {
    
  }
  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() {
  lidar_input_ = false;
}
inline bool VoxelNet::lidar_input() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.lidar_input)
  return lidar_input_;
}
inline void VoxelNet::set_lidar_input(bool value) {
  
  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() {
  num_point_features_ = 0u;
}
inline ::PROTOBUF_NAMESPACE_ID::uint32 VoxelNet::num_point_features() const {
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.num_point_features)
  return num_point_features_;
}
inline void VoxelNet::set_num_point_features(::PROTOBUF_NAMESPACE_ID::uint32 value) {
  
  num_point_features_ = value;
  // @@protoc_insertion_point(field_set:second.protos.VoxelNet.num_point_features)
}

// .second.protos.VoxelGenerator voxel_generator = 29;
inline bool VoxelNet::has_voxel_generator() const {
  return this != internal_default_instance() && voxel_generator_ != nullptr;
}
inline const ::second::protos::VoxelGenerator& VoxelNet::voxel_generator() const {
  const ::second::protos::VoxelGenerator* p = voxel_generator_;
  // @@protoc_insertion_point(field_get:second.protos.VoxelNet.voxel_generator)
  return p != nullptr ? *p : *reinterpret_cast<const ::second::protos::VoxelGenerator*>(
      &::second::protos::_VoxelGenerator_default_instance_);
}
inline ::second::protos::VoxelGenerator* VoxelNet::release_voxel_generator() {
  // @@protoc_insertion_point(field_release:second.protos.VoxelNet.voxel_generator)
  
  ::second::protos::VoxelGenerator* temp = voxel_generator_;
  voxel_generator_ = nullptr;
  return temp;
}
inline ::second::protos::VoxelGenerator* VoxelNet::mutable_voxel_generator() {
  
  if (voxel_generator_ == nullptr) {
    auto* p = CreateMaybeMessage<::second::protos::VoxelGenerator>(GetArenaNoVirtual());
    voxel_generator_ = p;
  }
  // @@protoc_insertion_point(field_mutable:second.protos.VoxelNet.voxel_generator)
  return voxel_generator_;
}
inline void VoxelNet::set_allocated_voxel_generator(::second::protos::VoxelGenerator* voxel_generator) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(voxel_generator_);
  }
  if (voxel_generator) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      voxel_generator = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, voxel_generator, submessage_arena);
    }
    
  } else {
    
  }
  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
