/*
 * Copyright (c) 2020. Kin-Hong Wong. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

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

package object_detection.protos;

public final class BoxPredictorOuterClass {
  private BoxPredictorOuterClass() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface BoxPredictorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:object_detection.protos.BoxPredictor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
     * @return Whether the convolutionalBoxPredictor field is set.
     */
    boolean hasConvolutionalBoxPredictor();
    /**
     * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
     * @return The convolutionalBoxPredictor.
     */
    object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor getConvolutionalBoxPredictor();
    /**
     * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
     */
    object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictorOrBuilder getConvolutionalBoxPredictorOrBuilder();

    /**
     * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
     * @return Whether the maskRcnnBoxPredictor field is set.
     */
    boolean hasMaskRcnnBoxPredictor();
    /**
     * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
     * @return The maskRcnnBoxPredictor.
     */
    object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor getMaskRcnnBoxPredictor();
    /**
     * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
     */
    object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictorOrBuilder getMaskRcnnBoxPredictorOrBuilder();

    /**
     * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
     * @return Whether the rfcnBoxPredictor field is set.
     */
    boolean hasRfcnBoxPredictor();
    /**
     * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
     * @return The rfcnBoxPredictor.
     */
    object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor getRfcnBoxPredictor();
    /**
     * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
     */
    object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictorOrBuilder getRfcnBoxPredictorOrBuilder();

    /**
     * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
     * @return Whether the weightSharedConvolutionalBoxPredictor field is set.
     */
    boolean hasWeightSharedConvolutionalBoxPredictor();
    /**
     * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
     * @return The weightSharedConvolutionalBoxPredictor.
     */
    object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor getWeightSharedConvolutionalBoxPredictor();
    /**
     * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
     */
    object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictorOrBuilder getWeightSharedConvolutionalBoxPredictorOrBuilder();

    public object_detection.protos.BoxPredictorOuterClass.BoxPredictor.BoxPredictorOneofCase getBoxPredictorOneofCase();
  }
  /**
   * <pre>
   * Configuration proto for box predictor. See core/box_predictor.py for details.
   * </pre>
   *
   * Protobuf type {@code object_detection.protos.BoxPredictor}
   */
  public static final class BoxPredictor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:object_detection.protos.BoxPredictor)
      BoxPredictorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use BoxPredictor.newBuilder() to construct.
    private BoxPredictor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private BoxPredictor() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new BoxPredictor();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private BoxPredictor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.Builder subBuilder = null;
              if (boxPredictorOneofCase_ == 1) {
                subBuilder = ((object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_).toBuilder();
              }
              boxPredictorOneof_ =
                  input.readMessage(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_);
                boxPredictorOneof_ = subBuilder.buildPartial();
              }
              boxPredictorOneofCase_ = 1;
              break;
            }
            case 18: {
              object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.Builder subBuilder = null;
              if (boxPredictorOneofCase_ == 2) {
                subBuilder = ((object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_).toBuilder();
              }
              boxPredictorOneof_ =
                  input.readMessage(object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_);
                boxPredictorOneof_ = subBuilder.buildPartial();
              }
              boxPredictorOneofCase_ = 2;
              break;
            }
            case 26: {
              object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.Builder subBuilder = null;
              if (boxPredictorOneofCase_ == 3) {
                subBuilder = ((object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_).toBuilder();
              }
              boxPredictorOneof_ =
                  input.readMessage(object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_);
                boxPredictorOneof_ = subBuilder.buildPartial();
              }
              boxPredictorOneofCase_ = 3;
              break;
            }
            case 34: {
              object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.Builder subBuilder = null;
              if (boxPredictorOneofCase_ == 4) {
                subBuilder = ((object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_).toBuilder();
              }
              boxPredictorOneof_ =
                  input.readMessage(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_);
                boxPredictorOneof_ = subBuilder.buildPartial();
              }
              boxPredictorOneofCase_ = 4;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_BoxPredictor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_BoxPredictor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              object_detection.protos.BoxPredictorOuterClass.BoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.BoxPredictor.Builder.class);
    }

    private int bitField0_;
    private int boxPredictorOneofCase_ = 0;
    private java.lang.Object boxPredictorOneof_;
    public enum BoxPredictorOneofCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      CONVOLUTIONAL_BOX_PREDICTOR(1),
      MASK_RCNN_BOX_PREDICTOR(2),
      RFCN_BOX_PREDICTOR(3),
      WEIGHT_SHARED_CONVOLUTIONAL_BOX_PREDICTOR(4),
      BOXPREDICTORONEOF_NOT_SET(0);
      private final int value;
      private BoxPredictorOneofCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static BoxPredictorOneofCase valueOf(int value) {
        return forNumber(value);
      }

      public static BoxPredictorOneofCase forNumber(int value) {
        switch (value) {
          case 1: return CONVOLUTIONAL_BOX_PREDICTOR;
          case 2: return MASK_RCNN_BOX_PREDICTOR;
          case 3: return RFCN_BOX_PREDICTOR;
          case 4: return WEIGHT_SHARED_CONVOLUTIONAL_BOX_PREDICTOR;
          case 0: return BOXPREDICTORONEOF_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public BoxPredictorOneofCase
    getBoxPredictorOneofCase() {
      return BoxPredictorOneofCase.forNumber(
          boxPredictorOneofCase_);
    }

    public static final int CONVOLUTIONAL_BOX_PREDICTOR_FIELD_NUMBER = 1;
    /**
     * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
     * @return Whether the convolutionalBoxPredictor field is set.
     */
    @java.lang.Override
    public boolean hasConvolutionalBoxPredictor() {
      return boxPredictorOneofCase_ == 1;
    }
    /**
     * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
     * @return The convolutionalBoxPredictor.
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor getConvolutionalBoxPredictor() {
      if (boxPredictorOneofCase_ == 1) {
         return (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_;
      }
      return object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance();
    }
    /**
     * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictorOrBuilder getConvolutionalBoxPredictorOrBuilder() {
      if (boxPredictorOneofCase_ == 1) {
         return (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_;
      }
      return object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance();
    }

    public static final int MASK_RCNN_BOX_PREDICTOR_FIELD_NUMBER = 2;
    /**
     * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
     * @return Whether the maskRcnnBoxPredictor field is set.
     */
    @java.lang.Override
    public boolean hasMaskRcnnBoxPredictor() {
      return boxPredictorOneofCase_ == 2;
    }
    /**
     * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
     * @return The maskRcnnBoxPredictor.
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor getMaskRcnnBoxPredictor() {
      if (boxPredictorOneofCase_ == 2) {
         return (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_;
      }
      return object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance();
    }
    /**
     * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictorOrBuilder getMaskRcnnBoxPredictorOrBuilder() {
      if (boxPredictorOneofCase_ == 2) {
         return (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_;
      }
      return object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance();
    }

    public static final int RFCN_BOX_PREDICTOR_FIELD_NUMBER = 3;
    /**
     * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
     * @return Whether the rfcnBoxPredictor field is set.
     */
    @java.lang.Override
    public boolean hasRfcnBoxPredictor() {
      return boxPredictorOneofCase_ == 3;
    }
    /**
     * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
     * @return The rfcnBoxPredictor.
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor getRfcnBoxPredictor() {
      if (boxPredictorOneofCase_ == 3) {
         return (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_;
      }
      return object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance();
    }
    /**
     * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictorOrBuilder getRfcnBoxPredictorOrBuilder() {
      if (boxPredictorOneofCase_ == 3) {
         return (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_;
      }
      return object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance();
    }

    public static final int WEIGHT_SHARED_CONVOLUTIONAL_BOX_PREDICTOR_FIELD_NUMBER = 4;
    /**
     * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
     * @return Whether the weightSharedConvolutionalBoxPredictor field is set.
     */
    @java.lang.Override
    public boolean hasWeightSharedConvolutionalBoxPredictor() {
      return boxPredictorOneofCase_ == 4;
    }
    /**
     * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
     * @return The weightSharedConvolutionalBoxPredictor.
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor getWeightSharedConvolutionalBoxPredictor() {
      if (boxPredictorOneofCase_ == 4) {
         return (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_;
      }
      return object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance();
    }
    /**
     * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictorOrBuilder getWeightSharedConvolutionalBoxPredictorOrBuilder() {
      if (boxPredictorOneofCase_ == 4) {
         return (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_;
      }
      return object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance();
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (boxPredictorOneofCase_ == 1) {
        output.writeMessage(1, (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_);
      }
      if (boxPredictorOneofCase_ == 2) {
        output.writeMessage(2, (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_);
      }
      if (boxPredictorOneofCase_ == 3) {
        output.writeMessage(3, (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_);
      }
      if (boxPredictorOneofCase_ == 4) {
        output.writeMessage(4, (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (boxPredictorOneofCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_);
      }
      if (boxPredictorOneofCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_);
      }
      if (boxPredictorOneofCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_);
      }
      if (boxPredictorOneofCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof object_detection.protos.BoxPredictorOuterClass.BoxPredictor)) {
        return super.equals(obj);
      }
      object_detection.protos.BoxPredictorOuterClass.BoxPredictor other = (object_detection.protos.BoxPredictorOuterClass.BoxPredictor) obj;

      if (!getBoxPredictorOneofCase().equals(other.getBoxPredictorOneofCase())) return false;
      switch (boxPredictorOneofCase_) {
        case 1:
          if (!getConvolutionalBoxPredictor()
              .equals(other.getConvolutionalBoxPredictor())) return false;
          break;
        case 2:
          if (!getMaskRcnnBoxPredictor()
              .equals(other.getMaskRcnnBoxPredictor())) return false;
          break;
        case 3:
          if (!getRfcnBoxPredictor()
              .equals(other.getRfcnBoxPredictor())) return false;
          break;
        case 4:
          if (!getWeightSharedConvolutionalBoxPredictor()
              .equals(other.getWeightSharedConvolutionalBoxPredictor())) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (boxPredictorOneofCase_) {
        case 1:
          hash = (37 * hash) + CONVOLUTIONAL_BOX_PREDICTOR_FIELD_NUMBER;
          hash = (53 * hash) + getConvolutionalBoxPredictor().hashCode();
          break;
        case 2:
          hash = (37 * hash) + MASK_RCNN_BOX_PREDICTOR_FIELD_NUMBER;
          hash = (53 * hash) + getMaskRcnnBoxPredictor().hashCode();
          break;
        case 3:
          hash = (37 * hash) + RFCN_BOX_PREDICTOR_FIELD_NUMBER;
          hash = (53 * hash) + getRfcnBoxPredictor().hashCode();
          break;
        case 4:
          hash = (37 * hash) + WEIGHT_SHARED_CONVOLUTIONAL_BOX_PREDICTOR_FIELD_NUMBER;
          hash = (53 * hash) + getWeightSharedConvolutionalBoxPredictor().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(object_detection.protos.BoxPredictorOuterClass.BoxPredictor prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Configuration proto for box predictor. See core/box_predictor.py for details.
     * </pre>
     *
     * Protobuf type {@code object_detection.protos.BoxPredictor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:object_detection.protos.BoxPredictor)
        object_detection.protos.BoxPredictorOuterClass.BoxPredictorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_BoxPredictor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_BoxPredictor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                object_detection.protos.BoxPredictorOuterClass.BoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.BoxPredictor.Builder.class);
      }

      // Construct using object_detection.protos.BoxPredictorOuterClass.BoxPredictor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        boxPredictorOneofCase_ = 0;
        boxPredictorOneof_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_BoxPredictor_descriptor;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.BoxPredictor getDefaultInstanceForType() {
        return object_detection.protos.BoxPredictorOuterClass.BoxPredictor.getDefaultInstance();
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.BoxPredictor build() {
        object_detection.protos.BoxPredictorOuterClass.BoxPredictor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.BoxPredictor buildPartial() {
        object_detection.protos.BoxPredictorOuterClass.BoxPredictor result = new object_detection.protos.BoxPredictorOuterClass.BoxPredictor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (boxPredictorOneofCase_ == 1) {
          if (convolutionalBoxPredictorBuilder_ == null) {
            result.boxPredictorOneof_ = boxPredictorOneof_;
          } else {
            result.boxPredictorOneof_ = convolutionalBoxPredictorBuilder_.build();
          }
        }
        if (boxPredictorOneofCase_ == 2) {
          if (maskRcnnBoxPredictorBuilder_ == null) {
            result.boxPredictorOneof_ = boxPredictorOneof_;
          } else {
            result.boxPredictorOneof_ = maskRcnnBoxPredictorBuilder_.build();
          }
        }
        if (boxPredictorOneofCase_ == 3) {
          if (rfcnBoxPredictorBuilder_ == null) {
            result.boxPredictorOneof_ = boxPredictorOneof_;
          } else {
            result.boxPredictorOneof_ = rfcnBoxPredictorBuilder_.build();
          }
        }
        if (boxPredictorOneofCase_ == 4) {
          if (weightSharedConvolutionalBoxPredictorBuilder_ == null) {
            result.boxPredictorOneof_ = boxPredictorOneof_;
          } else {
            result.boxPredictorOneof_ = weightSharedConvolutionalBoxPredictorBuilder_.build();
          }
        }
        result.bitField0_ = to_bitField0_;
        result.boxPredictorOneofCase_ = boxPredictorOneofCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof object_detection.protos.BoxPredictorOuterClass.BoxPredictor) {
          return mergeFrom((object_detection.protos.BoxPredictorOuterClass.BoxPredictor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(object_detection.protos.BoxPredictorOuterClass.BoxPredictor other) {
        if (other == object_detection.protos.BoxPredictorOuterClass.BoxPredictor.getDefaultInstance()) return this;
        switch (other.getBoxPredictorOneofCase()) {
          case CONVOLUTIONAL_BOX_PREDICTOR: {
            mergeConvolutionalBoxPredictor(other.getConvolutionalBoxPredictor());
            break;
          }
          case MASK_RCNN_BOX_PREDICTOR: {
            mergeMaskRcnnBoxPredictor(other.getMaskRcnnBoxPredictor());
            break;
          }
          case RFCN_BOX_PREDICTOR: {
            mergeRfcnBoxPredictor(other.getRfcnBoxPredictor());
            break;
          }
          case WEIGHT_SHARED_CONVOLUTIONAL_BOX_PREDICTOR: {
            mergeWeightSharedConvolutionalBoxPredictor(other.getWeightSharedConvolutionalBoxPredictor());
            break;
          }
          case BOXPREDICTORONEOF_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        object_detection.protos.BoxPredictorOuterClass.BoxPredictor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (object_detection.protos.BoxPredictorOuterClass.BoxPredictor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int boxPredictorOneofCase_ = 0;
      private java.lang.Object boxPredictorOneof_;
      public BoxPredictorOneofCase
          getBoxPredictorOneofCase() {
        return BoxPredictorOneofCase.forNumber(
            boxPredictorOneofCase_);
      }

      public Builder clearBoxPredictorOneof() {
        boxPredictorOneofCase_ = 0;
        boxPredictorOneof_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictorOrBuilder> convolutionalBoxPredictorBuilder_;
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       * @return Whether the convolutionalBoxPredictor field is set.
       */
      @java.lang.Override
      public boolean hasConvolutionalBoxPredictor() {
        return boxPredictorOneofCase_ == 1;
      }
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       * @return The convolutionalBoxPredictor.
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor getConvolutionalBoxPredictor() {
        if (convolutionalBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 1) {
            return (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_;
          }
          return object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance();
        } else {
          if (boxPredictorOneofCase_ == 1) {
            return convolutionalBoxPredictorBuilder_.getMessage();
          }
          return object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance();
        }
      }
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       */
      public Builder setConvolutionalBoxPredictor(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor value) {
        if (convolutionalBoxPredictorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          boxPredictorOneof_ = value;
          onChanged();
        } else {
          convolutionalBoxPredictorBuilder_.setMessage(value);
        }
        boxPredictorOneofCase_ = 1;
        return this;
      }
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       */
      public Builder setConvolutionalBoxPredictor(
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.Builder builderForValue) {
        if (convolutionalBoxPredictorBuilder_ == null) {
          boxPredictorOneof_ = builderForValue.build();
          onChanged();
        } else {
          convolutionalBoxPredictorBuilder_.setMessage(builderForValue.build());
        }
        boxPredictorOneofCase_ = 1;
        return this;
      }
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       */
      public Builder mergeConvolutionalBoxPredictor(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor value) {
        if (convolutionalBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 1 &&
              boxPredictorOneof_ != object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance()) {
            boxPredictorOneof_ = object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.newBuilder((object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_)
                .mergeFrom(value).buildPartial();
          } else {
            boxPredictorOneof_ = value;
          }
          onChanged();
        } else {
          if (boxPredictorOneofCase_ == 1) {
            convolutionalBoxPredictorBuilder_.mergeFrom(value);
          }
          convolutionalBoxPredictorBuilder_.setMessage(value);
        }
        boxPredictorOneofCase_ = 1;
        return this;
      }
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       */
      public Builder clearConvolutionalBoxPredictor() {
        if (convolutionalBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 1) {
            boxPredictorOneofCase_ = 0;
            boxPredictorOneof_ = null;
            onChanged();
          }
        } else {
          if (boxPredictorOneofCase_ == 1) {
            boxPredictorOneofCase_ = 0;
            boxPredictorOneof_ = null;
          }
          convolutionalBoxPredictorBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       */
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.Builder getConvolutionalBoxPredictorBuilder() {
        return getConvolutionalBoxPredictorFieldBuilder().getBuilder();
      }
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictorOrBuilder getConvolutionalBoxPredictorOrBuilder() {
        if ((boxPredictorOneofCase_ == 1) && (convolutionalBoxPredictorBuilder_ != null)) {
          return convolutionalBoxPredictorBuilder_.getMessageOrBuilder();
        } else {
          if (boxPredictorOneofCase_ == 1) {
            return (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_;
          }
          return object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance();
        }
      }
      /**
       * <code>.object_detection.protos.ConvolutionalBoxPredictor convolutional_box_predictor = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictorOrBuilder>
          getConvolutionalBoxPredictorFieldBuilder() {
        if (convolutionalBoxPredictorBuilder_ == null) {
          if (!(boxPredictorOneofCase_ == 1)) {
            boxPredictorOneof_ = object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance();
          }
          convolutionalBoxPredictorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictorOrBuilder>(
                  (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) boxPredictorOneof_,
                  getParentForChildren(),
                  isClean());
          boxPredictorOneof_ = null;
        }
        boxPredictorOneofCase_ = 1;
        onChanged();;
        return convolutionalBoxPredictorBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor, object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictorOrBuilder> maskRcnnBoxPredictorBuilder_;
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       * @return Whether the maskRcnnBoxPredictor field is set.
       */
      @java.lang.Override
      public boolean hasMaskRcnnBoxPredictor() {
        return boxPredictorOneofCase_ == 2;
      }
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       * @return The maskRcnnBoxPredictor.
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor getMaskRcnnBoxPredictor() {
        if (maskRcnnBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 2) {
            return (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_;
          }
          return object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance();
        } else {
          if (boxPredictorOneofCase_ == 2) {
            return maskRcnnBoxPredictorBuilder_.getMessage();
          }
          return object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance();
        }
      }
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       */
      public Builder setMaskRcnnBoxPredictor(object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor value) {
        if (maskRcnnBoxPredictorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          boxPredictorOneof_ = value;
          onChanged();
        } else {
          maskRcnnBoxPredictorBuilder_.setMessage(value);
        }
        boxPredictorOneofCase_ = 2;
        return this;
      }
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       */
      public Builder setMaskRcnnBoxPredictor(
          object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.Builder builderForValue) {
        if (maskRcnnBoxPredictorBuilder_ == null) {
          boxPredictorOneof_ = builderForValue.build();
          onChanged();
        } else {
          maskRcnnBoxPredictorBuilder_.setMessage(builderForValue.build());
        }
        boxPredictorOneofCase_ = 2;
        return this;
      }
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       */
      public Builder mergeMaskRcnnBoxPredictor(object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor value) {
        if (maskRcnnBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 2 &&
              boxPredictorOneof_ != object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance()) {
            boxPredictorOneof_ = object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.newBuilder((object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_)
                .mergeFrom(value).buildPartial();
          } else {
            boxPredictorOneof_ = value;
          }
          onChanged();
        } else {
          if (boxPredictorOneofCase_ == 2) {
            maskRcnnBoxPredictorBuilder_.mergeFrom(value);
          }
          maskRcnnBoxPredictorBuilder_.setMessage(value);
        }
        boxPredictorOneofCase_ = 2;
        return this;
      }
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       */
      public Builder clearMaskRcnnBoxPredictor() {
        if (maskRcnnBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 2) {
            boxPredictorOneofCase_ = 0;
            boxPredictorOneof_ = null;
            onChanged();
          }
        } else {
          if (boxPredictorOneofCase_ == 2) {
            boxPredictorOneofCase_ = 0;
            boxPredictorOneof_ = null;
          }
          maskRcnnBoxPredictorBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       */
      public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.Builder getMaskRcnnBoxPredictorBuilder() {
        return getMaskRcnnBoxPredictorFieldBuilder().getBuilder();
      }
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictorOrBuilder getMaskRcnnBoxPredictorOrBuilder() {
        if ((boxPredictorOneofCase_ == 2) && (maskRcnnBoxPredictorBuilder_ != null)) {
          return maskRcnnBoxPredictorBuilder_.getMessageOrBuilder();
        } else {
          if (boxPredictorOneofCase_ == 2) {
            return (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_;
          }
          return object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance();
        }
      }
      /**
       * <code>.object_detection.protos.MaskRCNNBoxPredictor mask_rcnn_box_predictor = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor, object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictorOrBuilder>
          getMaskRcnnBoxPredictorFieldBuilder() {
        if (maskRcnnBoxPredictorBuilder_ == null) {
          if (!(boxPredictorOneofCase_ == 2)) {
            boxPredictorOneof_ = object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance();
          }
          maskRcnnBoxPredictorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor, object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictorOrBuilder>(
                  (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) boxPredictorOneof_,
                  getParentForChildren(),
                  isClean());
          boxPredictorOneof_ = null;
        }
        boxPredictorOneofCase_ = 2;
        onChanged();;
        return maskRcnnBoxPredictorBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor, object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictorOrBuilder> rfcnBoxPredictorBuilder_;
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       * @return Whether the rfcnBoxPredictor field is set.
       */
      @java.lang.Override
      public boolean hasRfcnBoxPredictor() {
        return boxPredictorOneofCase_ == 3;
      }
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       * @return The rfcnBoxPredictor.
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor getRfcnBoxPredictor() {
        if (rfcnBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 3) {
            return (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_;
          }
          return object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance();
        } else {
          if (boxPredictorOneofCase_ == 3) {
            return rfcnBoxPredictorBuilder_.getMessage();
          }
          return object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance();
        }
      }
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       */
      public Builder setRfcnBoxPredictor(object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor value) {
        if (rfcnBoxPredictorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          boxPredictorOneof_ = value;
          onChanged();
        } else {
          rfcnBoxPredictorBuilder_.setMessage(value);
        }
        boxPredictorOneofCase_ = 3;
        return this;
      }
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       */
      public Builder setRfcnBoxPredictor(
          object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.Builder builderForValue) {
        if (rfcnBoxPredictorBuilder_ == null) {
          boxPredictorOneof_ = builderForValue.build();
          onChanged();
        } else {
          rfcnBoxPredictorBuilder_.setMessage(builderForValue.build());
        }
        boxPredictorOneofCase_ = 3;
        return this;
      }
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       */
      public Builder mergeRfcnBoxPredictor(object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor value) {
        if (rfcnBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 3 &&
              boxPredictorOneof_ != object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance()) {
            boxPredictorOneof_ = object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.newBuilder((object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_)
                .mergeFrom(value).buildPartial();
          } else {
            boxPredictorOneof_ = value;
          }
          onChanged();
        } else {
          if (boxPredictorOneofCase_ == 3) {
            rfcnBoxPredictorBuilder_.mergeFrom(value);
          }
          rfcnBoxPredictorBuilder_.setMessage(value);
        }
        boxPredictorOneofCase_ = 3;
        return this;
      }
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       */
      public Builder clearRfcnBoxPredictor() {
        if (rfcnBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 3) {
            boxPredictorOneofCase_ = 0;
            boxPredictorOneof_ = null;
            onChanged();
          }
        } else {
          if (boxPredictorOneofCase_ == 3) {
            boxPredictorOneofCase_ = 0;
            boxPredictorOneof_ = null;
          }
          rfcnBoxPredictorBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       */
      public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.Builder getRfcnBoxPredictorBuilder() {
        return getRfcnBoxPredictorFieldBuilder().getBuilder();
      }
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictorOrBuilder getRfcnBoxPredictorOrBuilder() {
        if ((boxPredictorOneofCase_ == 3) && (rfcnBoxPredictorBuilder_ != null)) {
          return rfcnBoxPredictorBuilder_.getMessageOrBuilder();
        } else {
          if (boxPredictorOneofCase_ == 3) {
            return (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_;
          }
          return object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance();
        }
      }
      /**
       * <code>.object_detection.protos.RfcnBoxPredictor rfcn_box_predictor = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor, object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictorOrBuilder>
          getRfcnBoxPredictorFieldBuilder() {
        if (rfcnBoxPredictorBuilder_ == null) {
          if (!(boxPredictorOneofCase_ == 3)) {
            boxPredictorOneof_ = object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance();
          }
          rfcnBoxPredictorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor, object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictorOrBuilder>(
                  (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) boxPredictorOneof_,
                  getParentForChildren(),
                  isClean());
          boxPredictorOneof_ = null;
        }
        boxPredictorOneofCase_ = 3;
        onChanged();;
        return rfcnBoxPredictorBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictorOrBuilder> weightSharedConvolutionalBoxPredictorBuilder_;
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       * @return Whether the weightSharedConvolutionalBoxPredictor field is set.
       */
      @java.lang.Override
      public boolean hasWeightSharedConvolutionalBoxPredictor() {
        return boxPredictorOneofCase_ == 4;
      }
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       * @return The weightSharedConvolutionalBoxPredictor.
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor getWeightSharedConvolutionalBoxPredictor() {
        if (weightSharedConvolutionalBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 4) {
            return (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_;
          }
          return object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance();
        } else {
          if (boxPredictorOneofCase_ == 4) {
            return weightSharedConvolutionalBoxPredictorBuilder_.getMessage();
          }
          return object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance();
        }
      }
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       */
      public Builder setWeightSharedConvolutionalBoxPredictor(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor value) {
        if (weightSharedConvolutionalBoxPredictorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          boxPredictorOneof_ = value;
          onChanged();
        } else {
          weightSharedConvolutionalBoxPredictorBuilder_.setMessage(value);
        }
        boxPredictorOneofCase_ = 4;
        return this;
      }
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       */
      public Builder setWeightSharedConvolutionalBoxPredictor(
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.Builder builderForValue) {
        if (weightSharedConvolutionalBoxPredictorBuilder_ == null) {
          boxPredictorOneof_ = builderForValue.build();
          onChanged();
        } else {
          weightSharedConvolutionalBoxPredictorBuilder_.setMessage(builderForValue.build());
        }
        boxPredictorOneofCase_ = 4;
        return this;
      }
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       */
      public Builder mergeWeightSharedConvolutionalBoxPredictor(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor value) {
        if (weightSharedConvolutionalBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 4 &&
              boxPredictorOneof_ != object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance()) {
            boxPredictorOneof_ = object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.newBuilder((object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_)
                .mergeFrom(value).buildPartial();
          } else {
            boxPredictorOneof_ = value;
          }
          onChanged();
        } else {
          if (boxPredictorOneofCase_ == 4) {
            weightSharedConvolutionalBoxPredictorBuilder_.mergeFrom(value);
          }
          weightSharedConvolutionalBoxPredictorBuilder_.setMessage(value);
        }
        boxPredictorOneofCase_ = 4;
        return this;
      }
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       */
      public Builder clearWeightSharedConvolutionalBoxPredictor() {
        if (weightSharedConvolutionalBoxPredictorBuilder_ == null) {
          if (boxPredictorOneofCase_ == 4) {
            boxPredictorOneofCase_ = 0;
            boxPredictorOneof_ = null;
            onChanged();
          }
        } else {
          if (boxPredictorOneofCase_ == 4) {
            boxPredictorOneofCase_ = 0;
            boxPredictorOneof_ = null;
          }
          weightSharedConvolutionalBoxPredictorBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       */
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.Builder getWeightSharedConvolutionalBoxPredictorBuilder() {
        return getWeightSharedConvolutionalBoxPredictorFieldBuilder().getBuilder();
      }
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictorOrBuilder getWeightSharedConvolutionalBoxPredictorOrBuilder() {
        if ((boxPredictorOneofCase_ == 4) && (weightSharedConvolutionalBoxPredictorBuilder_ != null)) {
          return weightSharedConvolutionalBoxPredictorBuilder_.getMessageOrBuilder();
        } else {
          if (boxPredictorOneofCase_ == 4) {
            return (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_;
          }
          return object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance();
        }
      }
      /**
       * <code>.object_detection.protos.WeightSharedConvolutionalBoxPredictor weight_shared_convolutional_box_predictor = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictorOrBuilder>
          getWeightSharedConvolutionalBoxPredictorFieldBuilder() {
        if (weightSharedConvolutionalBoxPredictorBuilder_ == null) {
          if (!(boxPredictorOneofCase_ == 4)) {
            boxPredictorOneof_ = object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance();
          }
          weightSharedConvolutionalBoxPredictorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.Builder, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictorOrBuilder>(
                  (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) boxPredictorOneof_,
                  getParentForChildren(),
                  isClean());
          boxPredictorOneof_ = null;
        }
        boxPredictorOneofCase_ = 4;
        onChanged();;
        return weightSharedConvolutionalBoxPredictorBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:object_detection.protos.BoxPredictor)
    }

    // @@protoc_insertion_point(class_scope:object_detection.protos.BoxPredictor)
    private static final object_detection.protos.BoxPredictorOuterClass.BoxPredictor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new object_detection.protos.BoxPredictorOuterClass.BoxPredictor();
    }

    public static object_detection.protos.BoxPredictorOuterClass.BoxPredictor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<BoxPredictor>
        PARSER = new com.google.protobuf.AbstractParser<BoxPredictor>() {
      @java.lang.Override
      public BoxPredictor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new BoxPredictor(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<BoxPredictor> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<BoxPredictor> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.BoxPredictor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConvolutionalBoxPredictorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:object_detection.protos.ConvolutionalBoxPredictor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return Whether the convHyperparams field is set.
     */
    boolean hasConvHyperparams();
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return The convHyperparams.
     */
    object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams();
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     */
    object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder();

    /**
     * <pre>
     * Minimum feature depth prior to predicting box encodings and class
     * predictions.
     * </pre>
     *
     * <code>optional int32 min_depth = 2 [default = 0];</code>
     * @return Whether the minDepth field is set.
     */
    boolean hasMinDepth();
    /**
     * <pre>
     * Minimum feature depth prior to predicting box encodings and class
     * predictions.
     * </pre>
     *
     * <code>optional int32 min_depth = 2 [default = 0];</code>
     * @return The minDepth.
     */
    int getMinDepth();

    /**
     * <pre>
     * Maximum feature depth prior to predicting box encodings and class
     * predictions. If max_depth is set to 0, no additional feature map will be
     * inserted before location and class predictions.
     * </pre>
     *
     * <code>optional int32 max_depth = 3 [default = 0];</code>
     * @return Whether the maxDepth field is set.
     */
    boolean hasMaxDepth();
    /**
     * <pre>
     * Maximum feature depth prior to predicting box encodings and class
     * predictions. If max_depth is set to 0, no additional feature map will be
     * inserted before location and class predictions.
     * </pre>
     *
     * <code>optional int32 max_depth = 3 [default = 0];</code>
     * @return The maxDepth.
     */
    int getMaxDepth();

    /**
     * <pre>
     * Number of the additional conv layers before the predictor.
     * </pre>
     *
     * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
     * @return Whether the numLayersBeforePredictor field is set.
     */
    boolean hasNumLayersBeforePredictor();
    /**
     * <pre>
     * Number of the additional conv layers before the predictor.
     * </pre>
     *
     * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
     * @return The numLayersBeforePredictor.
     */
    int getNumLayersBeforePredictor();

    /**
     * <pre>
     * Whether to use dropout for class prediction.
     * </pre>
     *
     * <code>optional bool use_dropout = 5 [default = true];</code>
     * @return Whether the useDropout field is set.
     */
    boolean hasUseDropout();
    /**
     * <pre>
     * Whether to use dropout for class prediction.
     * </pre>
     *
     * <code>optional bool use_dropout = 5 [default = true];</code>
     * @return The useDropout.
     */
    boolean getUseDropout();

    /**
     * <pre>
     * Keep probability for dropout
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 6 [default = 0.8];</code>
     * @return Whether the dropoutKeepProbability field is set.
     */
    boolean hasDropoutKeepProbability();
    /**
     * <pre>
     * Keep probability for dropout
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 6 [default = 0.8];</code>
     * @return The dropoutKeepProbability.
     */
    float getDropoutKeepProbability();

    /**
     * <pre>
     * Size of final convolution kernel. If the spatial resolution of the feature
     * map is smaller than the kernel size, then the kernel size is set to
     * min(feature_width, feature_height).
     * </pre>
     *
     * <code>optional int32 kernel_size = 7 [default = 1];</code>
     * @return Whether the kernelSize field is set.
     */
    boolean hasKernelSize();
    /**
     * <pre>
     * Size of final convolution kernel. If the spatial resolution of the feature
     * map is smaller than the kernel size, then the kernel size is set to
     * min(feature_width, feature_height).
     * </pre>
     *
     * <code>optional int32 kernel_size = 7 [default = 1];</code>
     * @return The kernelSize.
     */
    int getKernelSize();

    /**
     * <pre>
     * Size of the encoding for boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 8 [default = 4];</code>
     * @return Whether the boxCodeSize field is set.
     */
    boolean hasBoxCodeSize();
    /**
     * <pre>
     * Size of the encoding for boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 8 [default = 4];</code>
     * @return The boxCodeSize.
     */
    int getBoxCodeSize();

    /**
     * <pre>
     * Whether to apply sigmoid to the output of class predictions.
     * TODO(jonathanhuang): Do we need this since we have a post processing
     * module.?
     * </pre>
     *
     * <code>optional bool apply_sigmoid_to_scores = 9 [default = false];</code>
     * @return Whether the applySigmoidToScores field is set.
     */
    boolean hasApplySigmoidToScores();
    /**
     * <pre>
     * Whether to apply sigmoid to the output of class predictions.
     * TODO(jonathanhuang): Do we need this since we have a post processing
     * module.?
     * </pre>
     *
     * <code>optional bool apply_sigmoid_to_scores = 9 [default = false];</code>
     * @return The applySigmoidToScores.
     */
    boolean getApplySigmoidToScores();

    /**
     * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
     * @return Whether the classPredictionBiasInit field is set.
     */
    boolean hasClassPredictionBiasInit();
    /**
     * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
     * @return The classPredictionBiasInit.
     */
    float getClassPredictionBiasInit();

    /**
     * <pre>
     * Whether to use depthwise separable convolution for box predictor layers.
     * </pre>
     *
     * <code>optional bool use_depthwise = 11 [default = false];</code>
     * @return Whether the useDepthwise field is set.
     */
    boolean hasUseDepthwise();
    /**
     * <pre>
     * Whether to use depthwise separable convolution for box predictor layers.
     * </pre>
     *
     * <code>optional bool use_depthwise = 11 [default = false];</code>
     * @return The useDepthwise.
     */
    boolean getUseDepthwise();

    /**
     * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
     * @return Whether the boxEncodingsClipRange field is set.
     */
    boolean hasBoxEncodingsClipRange();
    /**
     * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
     * @return The boxEncodingsClipRange.
     */
    object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange getBoxEncodingsClipRange();
    /**
     * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
     */
    object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder getBoxEncodingsClipRangeOrBuilder();
  }
  /**
   * <pre>
   * Configuration proto for Convolutional box predictor.
   * Next id: 13
   * </pre>
   *
   * Protobuf type {@code object_detection.protos.ConvolutionalBoxPredictor}
   */
  public static final class ConvolutionalBoxPredictor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:object_detection.protos.ConvolutionalBoxPredictor)
      ConvolutionalBoxPredictorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ConvolutionalBoxPredictor.newBuilder() to construct.
    private ConvolutionalBoxPredictor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ConvolutionalBoxPredictor() {
      useDropout_ = true;
      dropoutKeepProbability_ = 0.8F;
      kernelSize_ = 1;
      boxCodeSize_ = 4;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ConvolutionalBoxPredictor();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ConvolutionalBoxPredictor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = convHyperparams_.toBuilder();
              }
              convHyperparams_ = input.readMessage(object_detection.protos.HyperparamsOuterClass.Hyperparams.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(convHyperparams_);
                convHyperparams_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              minDepth_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              maxDepth_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              numLayersBeforePredictor_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              useDropout_ = input.readBool();
              break;
            }
            case 53: {
              bitField0_ |= 0x00000020;
              dropoutKeepProbability_ = input.readFloat();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              kernelSize_ = input.readInt32();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              boxCodeSize_ = input.readInt32();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000100;
              applySigmoidToScores_ = input.readBool();
              break;
            }
            case 85: {
              bitField0_ |= 0x00000200;
              classPredictionBiasInit_ = input.readFloat();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000400;
              useDepthwise_ = input.readBool();
              break;
            }
            case 98: {
              object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder subBuilder = null;
              if (((bitField0_ & 0x00000800) != 0)) {
                subBuilder = boxEncodingsClipRange_.toBuilder();
              }
              boxEncodingsClipRange_ = input.readMessage(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(boxEncodingsClipRange_);
                boxEncodingsClipRange_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000800;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.Builder.class);
    }

    public interface BoxEncodingsClipRangeOrBuilder extends
        // @@protoc_insertion_point(interface_extends:object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>optional float min = 1;</code>
       * @return Whether the min field is set.
       */
      boolean hasMin();
      /**
       * <code>optional float min = 1;</code>
       * @return The min.
       */
      float getMin();

      /**
       * <code>optional float max = 2;</code>
       * @return Whether the max field is set.
       */
      boolean hasMax();
      /**
       * <code>optional float max = 2;</code>
       * @return The max.
       */
      float getMax();
    }
    /**
     * <pre>
     * If specified, apply clipping to box encodings.
     * </pre>
     *
     * Protobuf type {@code object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange}
     */
    public static final class BoxEncodingsClipRange extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange)
        BoxEncodingsClipRangeOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use BoxEncodingsClipRange.newBuilder() to construct.
      private BoxEncodingsClipRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private BoxEncodingsClipRange() {
      }

      @java.lang.Override
      @SuppressWarnings({"unused"})
      protected java.lang.Object newInstance(
          UnusedPrivateParameter unused) {
        return new BoxEncodingsClipRange();
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private BoxEncodingsClipRange(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 13: {
                bitField0_ |= 0x00000001;
                min_ = input.readFloat();
                break;
              }
              case 21: {
                bitField0_ |= 0x00000002;
                max_ = input.readFloat();
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.class, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder.class);
      }

      private int bitField0_;
      public static final int MIN_FIELD_NUMBER = 1;
      private float min_;
      /**
       * <code>optional float min = 1;</code>
       * @return Whether the min field is set.
       */
      @java.lang.Override
      public boolean hasMin() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional float min = 1;</code>
       * @return The min.
       */
      @java.lang.Override
      public float getMin() {
        return min_;
      }

      public static final int MAX_FIELD_NUMBER = 2;
      private float max_;
      /**
       * <code>optional float max = 2;</code>
       * @return Whether the max field is set.
       */
      @java.lang.Override
      public boolean hasMax() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional float max = 2;</code>
       * @return The max.
       */
      @java.lang.Override
      public float getMax() {
        return max_;
      }

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (((bitField0_ & 0x00000001) != 0)) {
          output.writeFloat(1, min_);
        }
        if (((bitField0_ & 0x00000002) != 0)) {
          output.writeFloat(2, max_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) != 0)) {
          size += com.google.protobuf.CodedOutputStream
            .computeFloatSize(1, min_);
        }
        if (((bitField0_ & 0x00000002) != 0)) {
          size += com.google.protobuf.CodedOutputStream
            .computeFloatSize(2, max_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange)) {
          return super.equals(obj);
        }
        object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange other = (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange) obj;

        if (hasMin() != other.hasMin()) return false;
        if (hasMin()) {
          if (java.lang.Float.floatToIntBits(getMin())
              != java.lang.Float.floatToIntBits(
                  other.getMin())) return false;
        }
        if (hasMax() != other.hasMax()) return false;
        if (hasMax()) {
          if (java.lang.Float.floatToIntBits(getMax())
              != java.lang.Float.floatToIntBits(
                  other.getMax())) return false;
        }
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasMin()) {
          hash = (37 * hash) + MIN_FIELD_NUMBER;
          hash = (53 * hash) + java.lang.Float.floatToIntBits(
              getMin());
        }
        if (hasMax()) {
          hash = (37 * hash) + MAX_FIELD_NUMBER;
          hash = (53 * hash) + java.lang.Float.floatToIntBits(
              getMax());
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * If specified, apply clipping to box encodings.
       * </pre>
       *
       * Protobuf type {@code object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange)
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.class, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder.class);
        }

        // Construct using object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          min_ = 0F;
          bitField0_ = (bitField0_ & ~0x00000001);
          max_ = 0F;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor;
        }

        @java.lang.Override
        public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange getDefaultInstanceForType() {
          return object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance();
        }

        @java.lang.Override
        public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange build() {
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange buildPartial() {
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange result = new object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) != 0)) {
            result.min_ = min_;
            to_bitField0_ |= 0x00000001;
          }
          if (((from_bitField0_ & 0x00000002) != 0)) {
            result.max_ = max_;
            to_bitField0_ |= 0x00000002;
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange) {
            return mergeFrom((object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange other) {
          if (other == object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance()) return this;
          if (other.hasMin()) {
            setMin(other.getMin());
          }
          if (other.hasMax()) {
            setMax(other.getMax());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private float min_ ;
        /**
         * <code>optional float min = 1;</code>
         * @return Whether the min field is set.
         */
        @java.lang.Override
        public boolean hasMin() {
          return ((bitField0_ & 0x00000001) != 0);
        }
        /**
         * <code>optional float min = 1;</code>
         * @return The min.
         */
        @java.lang.Override
        public float getMin() {
          return min_;
        }
        /**
         * <code>optional float min = 1;</code>
         * @param value The min to set.
         * @return This builder for chaining.
         */
        public Builder setMin(float value) {
          bitField0_ |= 0x00000001;
          min_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional float min = 1;</code>
         * @return This builder for chaining.
         */
        public Builder clearMin() {
          bitField0_ = (bitField0_ & ~0x00000001);
          min_ = 0F;
          onChanged();
          return this;
        }

        private float max_ ;
        /**
         * <code>optional float max = 2;</code>
         * @return Whether the max field is set.
         */
        @java.lang.Override
        public boolean hasMax() {
          return ((bitField0_ & 0x00000002) != 0);
        }
        /**
         * <code>optional float max = 2;</code>
         * @return The max.
         */
        @java.lang.Override
        public float getMax() {
          return max_;
        }
        /**
         * <code>optional float max = 2;</code>
         * @param value The max to set.
         * @return This builder for chaining.
         */
        public Builder setMax(float value) {
          bitField0_ |= 0x00000002;
          max_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional float max = 2;</code>
         * @return This builder for chaining.
         */
        public Builder clearMax() {
          bitField0_ = (bitField0_ & ~0x00000002);
          max_ = 0F;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange)
      }

      // @@protoc_insertion_point(class_scope:object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange)
      private static final object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange();
      }

      public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<BoxEncodingsClipRange>
          PARSER = new com.google.protobuf.AbstractParser<BoxEncodingsClipRange>() {
        @java.lang.Override
        public BoxEncodingsClipRange parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new BoxEncodingsClipRange(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<BoxEncodingsClipRange> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<BoxEncodingsClipRange> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int CONV_HYPERPARAMS_FIELD_NUMBER = 1;
    private object_detection.protos.HyperparamsOuterClass.Hyperparams convHyperparams_;
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return Whether the convHyperparams field is set.
     */
    @java.lang.Override
    public boolean hasConvHyperparams() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return The convHyperparams.
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams() {
      return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
    }
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder() {
      return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
    }

    public static final int MIN_DEPTH_FIELD_NUMBER = 2;
    private int minDepth_;
    /**
     * <pre>
     * Minimum feature depth prior to predicting box encodings and class
     * predictions.
     * </pre>
     *
     * <code>optional int32 min_depth = 2 [default = 0];</code>
     * @return Whether the minDepth field is set.
     */
    @java.lang.Override
    public boolean hasMinDepth() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Minimum feature depth prior to predicting box encodings and class
     * predictions.
     * </pre>
     *
     * <code>optional int32 min_depth = 2 [default = 0];</code>
     * @return The minDepth.
     */
    @java.lang.Override
    public int getMinDepth() {
      return minDepth_;
    }

    public static final int MAX_DEPTH_FIELD_NUMBER = 3;
    private int maxDepth_;
    /**
     * <pre>
     * Maximum feature depth prior to predicting box encodings and class
     * predictions. If max_depth is set to 0, no additional feature map will be
     * inserted before location and class predictions.
     * </pre>
     *
     * <code>optional int32 max_depth = 3 [default = 0];</code>
     * @return Whether the maxDepth field is set.
     */
    @java.lang.Override
    public boolean hasMaxDepth() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * Maximum feature depth prior to predicting box encodings and class
     * predictions. If max_depth is set to 0, no additional feature map will be
     * inserted before location and class predictions.
     * </pre>
     *
     * <code>optional int32 max_depth = 3 [default = 0];</code>
     * @return The maxDepth.
     */
    @java.lang.Override
    public int getMaxDepth() {
      return maxDepth_;
    }

    public static final int NUM_LAYERS_BEFORE_PREDICTOR_FIELD_NUMBER = 4;
    private int numLayersBeforePredictor_;
    /**
     * <pre>
     * Number of the additional conv layers before the predictor.
     * </pre>
     *
     * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
     * @return Whether the numLayersBeforePredictor field is set.
     */
    @java.lang.Override
    public boolean hasNumLayersBeforePredictor() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * Number of the additional conv layers before the predictor.
     * </pre>
     *
     * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
     * @return The numLayersBeforePredictor.
     */
    @java.lang.Override
    public int getNumLayersBeforePredictor() {
      return numLayersBeforePredictor_;
    }

    public static final int USE_DROPOUT_FIELD_NUMBER = 5;
    private boolean useDropout_;
    /**
     * <pre>
     * Whether to use dropout for class prediction.
     * </pre>
     *
     * <code>optional bool use_dropout = 5 [default = true];</code>
     * @return Whether the useDropout field is set.
     */
    @java.lang.Override
    public boolean hasUseDropout() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * Whether to use dropout for class prediction.
     * </pre>
     *
     * <code>optional bool use_dropout = 5 [default = true];</code>
     * @return The useDropout.
     */
    @java.lang.Override
    public boolean getUseDropout() {
      return useDropout_;
    }

    public static final int DROPOUT_KEEP_PROBABILITY_FIELD_NUMBER = 6;
    private float dropoutKeepProbability_;
    /**
     * <pre>
     * Keep probability for dropout
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 6 [default = 0.8];</code>
     * @return Whether the dropoutKeepProbability field is set.
     */
    @java.lang.Override
    public boolean hasDropoutKeepProbability() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * Keep probability for dropout
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 6 [default = 0.8];</code>
     * @return The dropoutKeepProbability.
     */
    @java.lang.Override
    public float getDropoutKeepProbability() {
      return dropoutKeepProbability_;
    }

    public static final int KERNEL_SIZE_FIELD_NUMBER = 7;
    private int kernelSize_;
    /**
     * <pre>
     * Size of final convolution kernel. If the spatial resolution of the feature
     * map is smaller than the kernel size, then the kernel size is set to
     * min(feature_width, feature_height).
     * </pre>
     *
     * <code>optional int32 kernel_size = 7 [default = 1];</code>
     * @return Whether the kernelSize field is set.
     */
    @java.lang.Override
    public boolean hasKernelSize() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * Size of final convolution kernel. If the spatial resolution of the feature
     * map is smaller than the kernel size, then the kernel size is set to
     * min(feature_width, feature_height).
     * </pre>
     *
     * <code>optional int32 kernel_size = 7 [default = 1];</code>
     * @return The kernelSize.
     */
    @java.lang.Override
    public int getKernelSize() {
      return kernelSize_;
    }

    public static final int BOX_CODE_SIZE_FIELD_NUMBER = 8;
    private int boxCodeSize_;
    /**
     * <pre>
     * Size of the encoding for boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 8 [default = 4];</code>
     * @return Whether the boxCodeSize field is set.
     */
    @java.lang.Override
    public boolean hasBoxCodeSize() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <pre>
     * Size of the encoding for boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 8 [default = 4];</code>
     * @return The boxCodeSize.
     */
    @java.lang.Override
    public int getBoxCodeSize() {
      return boxCodeSize_;
    }

    public static final int APPLY_SIGMOID_TO_SCORES_FIELD_NUMBER = 9;
    private boolean applySigmoidToScores_;
    /**
     * <pre>
     * Whether to apply sigmoid to the output of class predictions.
     * TODO(jonathanhuang): Do we need this since we have a post processing
     * module.?
     * </pre>
     *
     * <code>optional bool apply_sigmoid_to_scores = 9 [default = false];</code>
     * @return Whether the applySigmoidToScores field is set.
     */
    @java.lang.Override
    public boolean hasApplySigmoidToScores() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * Whether to apply sigmoid to the output of class predictions.
     * TODO(jonathanhuang): Do we need this since we have a post processing
     * module.?
     * </pre>
     *
     * <code>optional bool apply_sigmoid_to_scores = 9 [default = false];</code>
     * @return The applySigmoidToScores.
     */
    @java.lang.Override
    public boolean getApplySigmoidToScores() {
      return applySigmoidToScores_;
    }

    public static final int CLASS_PREDICTION_BIAS_INIT_FIELD_NUMBER = 10;
    private float classPredictionBiasInit_;
    /**
     * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
     * @return Whether the classPredictionBiasInit field is set.
     */
    @java.lang.Override
    public boolean hasClassPredictionBiasInit() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
     * @return The classPredictionBiasInit.
     */
    @java.lang.Override
    public float getClassPredictionBiasInit() {
      return classPredictionBiasInit_;
    }

    public static final int USE_DEPTHWISE_FIELD_NUMBER = 11;
    private boolean useDepthwise_;
    /**
     * <pre>
     * Whether to use depthwise separable convolution for box predictor layers.
     * </pre>
     *
     * <code>optional bool use_depthwise = 11 [default = false];</code>
     * @return Whether the useDepthwise field is set.
     */
    @java.lang.Override
    public boolean hasUseDepthwise() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <pre>
     * Whether to use depthwise separable convolution for box predictor layers.
     * </pre>
     *
     * <code>optional bool use_depthwise = 11 [default = false];</code>
     * @return The useDepthwise.
     */
    @java.lang.Override
    public boolean getUseDepthwise() {
      return useDepthwise_;
    }

    public static final int BOX_ENCODINGS_CLIP_RANGE_FIELD_NUMBER = 12;
    private object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange boxEncodingsClipRange_;
    /**
     * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
     * @return Whether the boxEncodingsClipRange field is set.
     */
    @java.lang.Override
    public boolean hasBoxEncodingsClipRange() {
      return ((bitField0_ & 0x00000800) != 0);
    }
    /**
     * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
     * @return The boxEncodingsClipRange.
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange getBoxEncodingsClipRange() {
      return boxEncodingsClipRange_ == null ? object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance() : boxEncodingsClipRange_;
    }
    /**
     * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder getBoxEncodingsClipRangeOrBuilder() {
      return boxEncodingsClipRange_ == null ? object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance() : boxEncodingsClipRange_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getConvHyperparams());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeInt32(2, minDepth_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeInt32(3, maxDepth_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeInt32(4, numLayersBeforePredictor_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeBool(5, useDropout_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeFloat(6, dropoutKeepProbability_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeInt32(7, kernelSize_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeInt32(8, boxCodeSize_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        output.writeBool(9, applySigmoidToScores_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        output.writeFloat(10, classPredictionBiasInit_);
      }
      if (((bitField0_ & 0x00000400) != 0)) {
        output.writeBool(11, useDepthwise_);
      }
      if (((bitField0_ & 0x00000800) != 0)) {
        output.writeMessage(12, getBoxEncodingsClipRange());
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getConvHyperparams());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, minDepth_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, maxDepth_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, numLayersBeforePredictor_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, useDropout_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(6, dropoutKeepProbability_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, kernelSize_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, boxCodeSize_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(9, applySigmoidToScores_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(10, classPredictionBiasInit_);
      }
      if (((bitField0_ & 0x00000400) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(11, useDepthwise_);
      }
      if (((bitField0_ & 0x00000800) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, getBoxEncodingsClipRange());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor)) {
        return super.equals(obj);
      }
      object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor other = (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) obj;

      if (hasConvHyperparams() != other.hasConvHyperparams()) return false;
      if (hasConvHyperparams()) {
        if (!getConvHyperparams()
            .equals(other.getConvHyperparams())) return false;
      }
      if (hasMinDepth() != other.hasMinDepth()) return false;
      if (hasMinDepth()) {
        if (getMinDepth()
            != other.getMinDepth()) return false;
      }
      if (hasMaxDepth() != other.hasMaxDepth()) return false;
      if (hasMaxDepth()) {
        if (getMaxDepth()
            != other.getMaxDepth()) return false;
      }
      if (hasNumLayersBeforePredictor() != other.hasNumLayersBeforePredictor()) return false;
      if (hasNumLayersBeforePredictor()) {
        if (getNumLayersBeforePredictor()
            != other.getNumLayersBeforePredictor()) return false;
      }
      if (hasUseDropout() != other.hasUseDropout()) return false;
      if (hasUseDropout()) {
        if (getUseDropout()
            != other.getUseDropout()) return false;
      }
      if (hasDropoutKeepProbability() != other.hasDropoutKeepProbability()) return false;
      if (hasDropoutKeepProbability()) {
        if (java.lang.Float.floatToIntBits(getDropoutKeepProbability())
            != java.lang.Float.floatToIntBits(
                other.getDropoutKeepProbability())) return false;
      }
      if (hasKernelSize() != other.hasKernelSize()) return false;
      if (hasKernelSize()) {
        if (getKernelSize()
            != other.getKernelSize()) return false;
      }
      if (hasBoxCodeSize() != other.hasBoxCodeSize()) return false;
      if (hasBoxCodeSize()) {
        if (getBoxCodeSize()
            != other.getBoxCodeSize()) return false;
      }
      if (hasApplySigmoidToScores() != other.hasApplySigmoidToScores()) return false;
      if (hasApplySigmoidToScores()) {
        if (getApplySigmoidToScores()
            != other.getApplySigmoidToScores()) return false;
      }
      if (hasClassPredictionBiasInit() != other.hasClassPredictionBiasInit()) return false;
      if (hasClassPredictionBiasInit()) {
        if (java.lang.Float.floatToIntBits(getClassPredictionBiasInit())
            != java.lang.Float.floatToIntBits(
                other.getClassPredictionBiasInit())) return false;
      }
      if (hasUseDepthwise() != other.hasUseDepthwise()) return false;
      if (hasUseDepthwise()) {
        if (getUseDepthwise()
            != other.getUseDepthwise()) return false;
      }
      if (hasBoxEncodingsClipRange() != other.hasBoxEncodingsClipRange()) return false;
      if (hasBoxEncodingsClipRange()) {
        if (!getBoxEncodingsClipRange()
            .equals(other.getBoxEncodingsClipRange())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasConvHyperparams()) {
        hash = (37 * hash) + CONV_HYPERPARAMS_FIELD_NUMBER;
        hash = (53 * hash) + getConvHyperparams().hashCode();
      }
      if (hasMinDepth()) {
        hash = (37 * hash) + MIN_DEPTH_FIELD_NUMBER;
        hash = (53 * hash) + getMinDepth();
      }
      if (hasMaxDepth()) {
        hash = (37 * hash) + MAX_DEPTH_FIELD_NUMBER;
        hash = (53 * hash) + getMaxDepth();
      }
      if (hasNumLayersBeforePredictor()) {
        hash = (37 * hash) + NUM_LAYERS_BEFORE_PREDICTOR_FIELD_NUMBER;
        hash = (53 * hash) + getNumLayersBeforePredictor();
      }
      if (hasUseDropout()) {
        hash = (37 * hash) + USE_DROPOUT_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getUseDropout());
      }
      if (hasDropoutKeepProbability()) {
        hash = (37 * hash) + DROPOUT_KEEP_PROBABILITY_FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getDropoutKeepProbability());
      }
      if (hasKernelSize()) {
        hash = (37 * hash) + KERNEL_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getKernelSize();
      }
      if (hasBoxCodeSize()) {
        hash = (37 * hash) + BOX_CODE_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getBoxCodeSize();
      }
      if (hasApplySigmoidToScores()) {
        hash = (37 * hash) + APPLY_SIGMOID_TO_SCORES_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getApplySigmoidToScores());
      }
      if (hasClassPredictionBiasInit()) {
        hash = (37 * hash) + CLASS_PREDICTION_BIAS_INIT_FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getClassPredictionBiasInit());
      }
      if (hasUseDepthwise()) {
        hash = (37 * hash) + USE_DEPTHWISE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getUseDepthwise());
      }
      if (hasBoxEncodingsClipRange()) {
        hash = (37 * hash) + BOX_ENCODINGS_CLIP_RANGE_FIELD_NUMBER;
        hash = (53 * hash) + getBoxEncodingsClipRange().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Configuration proto for Convolutional box predictor.
     * Next id: 13
     * </pre>
     *
     * Protobuf type {@code object_detection.protos.ConvolutionalBoxPredictor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:object_detection.protos.ConvolutionalBoxPredictor)
        object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.Builder.class);
      }

      // Construct using object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getConvHyperparamsFieldBuilder();
          getBoxEncodingsClipRangeFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = null;
        } else {
          convHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        minDepth_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        maxDepth_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        numLayersBeforePredictor_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        useDropout_ = true;
        bitField0_ = (bitField0_ & ~0x00000010);
        dropoutKeepProbability_ = 0.8F;
        bitField0_ = (bitField0_ & ~0x00000020);
        kernelSize_ = 1;
        bitField0_ = (bitField0_ & ~0x00000040);
        boxCodeSize_ = 4;
        bitField0_ = (bitField0_ & ~0x00000080);
        applySigmoidToScores_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        classPredictionBiasInit_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000200);
        useDepthwise_ = false;
        bitField0_ = (bitField0_ & ~0x00000400);
        if (boxEncodingsClipRangeBuilder_ == null) {
          boxEncodingsClipRange_ = null;
        } else {
          boxEncodingsClipRangeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_ConvolutionalBoxPredictor_descriptor;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor getDefaultInstanceForType() {
        return object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance();
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor build() {
        object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor buildPartial() {
        object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor result = new object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (convHyperparamsBuilder_ == null) {
            result.convHyperparams_ = convHyperparams_;
          } else {
            result.convHyperparams_ = convHyperparamsBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.minDepth_ = minDepth_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.maxDepth_ = maxDepth_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.numLayersBeforePredictor_ = numLayersBeforePredictor_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.useDropout_ = useDropout_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.dropoutKeepProbability_ = dropoutKeepProbability_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.kernelSize_ = kernelSize_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          to_bitField0_ |= 0x00000080;
        }
        result.boxCodeSize_ = boxCodeSize_;
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.applySigmoidToScores_ = applySigmoidToScores_;
          to_bitField0_ |= 0x00000100;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          result.classPredictionBiasInit_ = classPredictionBiasInit_;
          to_bitField0_ |= 0x00000200;
        }
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.useDepthwise_ = useDepthwise_;
          to_bitField0_ |= 0x00000400;
        }
        if (((from_bitField0_ & 0x00000800) != 0)) {
          if (boxEncodingsClipRangeBuilder_ == null) {
            result.boxEncodingsClipRange_ = boxEncodingsClipRange_;
          } else {
            result.boxEncodingsClipRange_ = boxEncodingsClipRangeBuilder_.build();
          }
          to_bitField0_ |= 0x00000800;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) {
          return mergeFrom((object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor other) {
        if (other == object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.getDefaultInstance()) return this;
        if (other.hasConvHyperparams()) {
          mergeConvHyperparams(other.getConvHyperparams());
        }
        if (other.hasMinDepth()) {
          setMinDepth(other.getMinDepth());
        }
        if (other.hasMaxDepth()) {
          setMaxDepth(other.getMaxDepth());
        }
        if (other.hasNumLayersBeforePredictor()) {
          setNumLayersBeforePredictor(other.getNumLayersBeforePredictor());
        }
        if (other.hasUseDropout()) {
          setUseDropout(other.getUseDropout());
        }
        if (other.hasDropoutKeepProbability()) {
          setDropoutKeepProbability(other.getDropoutKeepProbability());
        }
        if (other.hasKernelSize()) {
          setKernelSize(other.getKernelSize());
        }
        if (other.hasBoxCodeSize()) {
          setBoxCodeSize(other.getBoxCodeSize());
        }
        if (other.hasApplySigmoidToScores()) {
          setApplySigmoidToScores(other.getApplySigmoidToScores());
        }
        if (other.hasClassPredictionBiasInit()) {
          setClassPredictionBiasInit(other.getClassPredictionBiasInit());
        }
        if (other.hasUseDepthwise()) {
          setUseDepthwise(other.getUseDepthwise());
        }
        if (other.hasBoxEncodingsClipRange()) {
          mergeBoxEncodingsClipRange(other.getBoxEncodingsClipRange());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private object_detection.protos.HyperparamsOuterClass.Hyperparams convHyperparams_;
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder> convHyperparamsBuilder_;
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       * @return Whether the convHyperparams field is set.
       */
      public boolean hasConvHyperparams() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       * @return The convHyperparams.
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams() {
        if (convHyperparamsBuilder_ == null) {
          return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
        } else {
          return convHyperparamsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder setConvHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (convHyperparamsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          convHyperparams_ = value;
          onChanged();
        } else {
          convHyperparamsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder setConvHyperparams(
          object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder builderForValue) {
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = builderForValue.build();
          onChanged();
        } else {
          convHyperparamsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder mergeConvHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (convHyperparamsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              convHyperparams_ != null &&
              convHyperparams_ != object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance()) {
            convHyperparams_ =
              object_detection.protos.HyperparamsOuterClass.Hyperparams.newBuilder(convHyperparams_).mergeFrom(value).buildPartial();
          } else {
            convHyperparams_ = value;
          }
          onChanged();
        } else {
          convHyperparamsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder clearConvHyperparams() {
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = null;
          onChanged();
        } else {
          convHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder getConvHyperparamsBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getConvHyperparamsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder() {
        if (convHyperparamsBuilder_ != null) {
          return convHyperparamsBuilder_.getMessageOrBuilder();
        } else {
          return convHyperparams_ == null ?
              object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
        }
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>
          getConvHyperparamsFieldBuilder() {
        if (convHyperparamsBuilder_ == null) {
          convHyperparamsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>(
                  getConvHyperparams(),
                  getParentForChildren(),
                  isClean());
          convHyperparams_ = null;
        }
        return convHyperparamsBuilder_;
      }

      private int minDepth_ ;
      /**
       * <pre>
       * Minimum feature depth prior to predicting box encodings and class
       * predictions.
       * </pre>
       *
       * <code>optional int32 min_depth = 2 [default = 0];</code>
       * @return Whether the minDepth field is set.
       */
      @java.lang.Override
      public boolean hasMinDepth() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * Minimum feature depth prior to predicting box encodings and class
       * predictions.
       * </pre>
       *
       * <code>optional int32 min_depth = 2 [default = 0];</code>
       * @return The minDepth.
       */
      @java.lang.Override
      public int getMinDepth() {
        return minDepth_;
      }
      /**
       * <pre>
       * Minimum feature depth prior to predicting box encodings and class
       * predictions.
       * </pre>
       *
       * <code>optional int32 min_depth = 2 [default = 0];</code>
       * @param value The minDepth to set.
       * @return This builder for chaining.
       */
      public Builder setMinDepth(int value) {
        bitField0_ |= 0x00000002;
        minDepth_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Minimum feature depth prior to predicting box encodings and class
       * predictions.
       * </pre>
       *
       * <code>optional int32 min_depth = 2 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearMinDepth() {
        bitField0_ = (bitField0_ & ~0x00000002);
        minDepth_ = 0;
        onChanged();
        return this;
      }

      private int maxDepth_ ;
      /**
       * <pre>
       * Maximum feature depth prior to predicting box encodings and class
       * predictions. If max_depth is set to 0, no additional feature map will be
       * inserted before location and class predictions.
       * </pre>
       *
       * <code>optional int32 max_depth = 3 [default = 0];</code>
       * @return Whether the maxDepth field is set.
       */
      @java.lang.Override
      public boolean hasMaxDepth() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * Maximum feature depth prior to predicting box encodings and class
       * predictions. If max_depth is set to 0, no additional feature map will be
       * inserted before location and class predictions.
       * </pre>
       *
       * <code>optional int32 max_depth = 3 [default = 0];</code>
       * @return The maxDepth.
       */
      @java.lang.Override
      public int getMaxDepth() {
        return maxDepth_;
      }
      /**
       * <pre>
       * Maximum feature depth prior to predicting box encodings and class
       * predictions. If max_depth is set to 0, no additional feature map will be
       * inserted before location and class predictions.
       * </pre>
       *
       * <code>optional int32 max_depth = 3 [default = 0];</code>
       * @param value The maxDepth to set.
       * @return This builder for chaining.
       */
      public Builder setMaxDepth(int value) {
        bitField0_ |= 0x00000004;
        maxDepth_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Maximum feature depth prior to predicting box encodings and class
       * predictions. If max_depth is set to 0, no additional feature map will be
       * inserted before location and class predictions.
       * </pre>
       *
       * <code>optional int32 max_depth = 3 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearMaxDepth() {
        bitField0_ = (bitField0_ & ~0x00000004);
        maxDepth_ = 0;
        onChanged();
        return this;
      }

      private int numLayersBeforePredictor_ ;
      /**
       * <pre>
       * Number of the additional conv layers before the predictor.
       * </pre>
       *
       * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
       * @return Whether the numLayersBeforePredictor field is set.
       */
      @java.lang.Override
      public boolean hasNumLayersBeforePredictor() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <pre>
       * Number of the additional conv layers before the predictor.
       * </pre>
       *
       * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
       * @return The numLayersBeforePredictor.
       */
      @java.lang.Override
      public int getNumLayersBeforePredictor() {
        return numLayersBeforePredictor_;
      }
      /**
       * <pre>
       * Number of the additional conv layers before the predictor.
       * </pre>
       *
       * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
       * @param value The numLayersBeforePredictor to set.
       * @return This builder for chaining.
       */
      public Builder setNumLayersBeforePredictor(int value) {
        bitField0_ |= 0x00000008;
        numLayersBeforePredictor_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Number of the additional conv layers before the predictor.
       * </pre>
       *
       * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearNumLayersBeforePredictor() {
        bitField0_ = (bitField0_ & ~0x00000008);
        numLayersBeforePredictor_ = 0;
        onChanged();
        return this;
      }

      private boolean useDropout_ = true;
      /**
       * <pre>
       * Whether to use dropout for class prediction.
       * </pre>
       *
       * <code>optional bool use_dropout = 5 [default = true];</code>
       * @return Whether the useDropout field is set.
       */
      @java.lang.Override
      public boolean hasUseDropout() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <pre>
       * Whether to use dropout for class prediction.
       * </pre>
       *
       * <code>optional bool use_dropout = 5 [default = true];</code>
       * @return The useDropout.
       */
      @java.lang.Override
      public boolean getUseDropout() {
        return useDropout_;
      }
      /**
       * <pre>
       * Whether to use dropout for class prediction.
       * </pre>
       *
       * <code>optional bool use_dropout = 5 [default = true];</code>
       * @param value The useDropout to set.
       * @return This builder for chaining.
       */
      public Builder setUseDropout(boolean value) {
        bitField0_ |= 0x00000010;
        useDropout_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to use dropout for class prediction.
       * </pre>
       *
       * <code>optional bool use_dropout = 5 [default = true];</code>
       * @return This builder for chaining.
       */
      public Builder clearUseDropout() {
        bitField0_ = (bitField0_ & ~0x00000010);
        useDropout_ = true;
        onChanged();
        return this;
      }

      private float dropoutKeepProbability_ = 0.8F;
      /**
       * <pre>
       * Keep probability for dropout
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 6 [default = 0.8];</code>
       * @return Whether the dropoutKeepProbability field is set.
       */
      @java.lang.Override
      public boolean hasDropoutKeepProbability() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <pre>
       * Keep probability for dropout
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 6 [default = 0.8];</code>
       * @return The dropoutKeepProbability.
       */
      @java.lang.Override
      public float getDropoutKeepProbability() {
        return dropoutKeepProbability_;
      }
      /**
       * <pre>
       * Keep probability for dropout
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 6 [default = 0.8];</code>
       * @param value The dropoutKeepProbability to set.
       * @return This builder for chaining.
       */
      public Builder setDropoutKeepProbability(float value) {
        bitField0_ |= 0x00000020;
        dropoutKeepProbability_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Keep probability for dropout
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 6 [default = 0.8];</code>
       * @return This builder for chaining.
       */
      public Builder clearDropoutKeepProbability() {
        bitField0_ = (bitField0_ & ~0x00000020);
        dropoutKeepProbability_ = 0.8F;
        onChanged();
        return this;
      }

      private int kernelSize_ = 1;
      /**
       * <pre>
       * Size of final convolution kernel. If the spatial resolution of the feature
       * map is smaller than the kernel size, then the kernel size is set to
       * min(feature_width, feature_height).
       * </pre>
       *
       * <code>optional int32 kernel_size = 7 [default = 1];</code>
       * @return Whether the kernelSize field is set.
       */
      @java.lang.Override
      public boolean hasKernelSize() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <pre>
       * Size of final convolution kernel. If the spatial resolution of the feature
       * map is smaller than the kernel size, then the kernel size is set to
       * min(feature_width, feature_height).
       * </pre>
       *
       * <code>optional int32 kernel_size = 7 [default = 1];</code>
       * @return The kernelSize.
       */
      @java.lang.Override
      public int getKernelSize() {
        return kernelSize_;
      }
      /**
       * <pre>
       * Size of final convolution kernel. If the spatial resolution of the feature
       * map is smaller than the kernel size, then the kernel size is set to
       * min(feature_width, feature_height).
       * </pre>
       *
       * <code>optional int32 kernel_size = 7 [default = 1];</code>
       * @param value The kernelSize to set.
       * @return This builder for chaining.
       */
      public Builder setKernelSize(int value) {
        bitField0_ |= 0x00000040;
        kernelSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Size of final convolution kernel. If the spatial resolution of the feature
       * map is smaller than the kernel size, then the kernel size is set to
       * min(feature_width, feature_height).
       * </pre>
       *
       * <code>optional int32 kernel_size = 7 [default = 1];</code>
       * @return This builder for chaining.
       */
      public Builder clearKernelSize() {
        bitField0_ = (bitField0_ & ~0x00000040);
        kernelSize_ = 1;
        onChanged();
        return this;
      }

      private int boxCodeSize_ = 4;
      /**
       * <pre>
       * Size of the encoding for boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 8 [default = 4];</code>
       * @return Whether the boxCodeSize field is set.
       */
      @java.lang.Override
      public boolean hasBoxCodeSize() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <pre>
       * Size of the encoding for boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 8 [default = 4];</code>
       * @return The boxCodeSize.
       */
      @java.lang.Override
      public int getBoxCodeSize() {
        return boxCodeSize_;
      }
      /**
       * <pre>
       * Size of the encoding for boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 8 [default = 4];</code>
       * @param value The boxCodeSize to set.
       * @return This builder for chaining.
       */
      public Builder setBoxCodeSize(int value) {
        bitField0_ |= 0x00000080;
        boxCodeSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Size of the encoding for boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 8 [default = 4];</code>
       * @return This builder for chaining.
       */
      public Builder clearBoxCodeSize() {
        bitField0_ = (bitField0_ & ~0x00000080);
        boxCodeSize_ = 4;
        onChanged();
        return this;
      }

      private boolean applySigmoidToScores_ ;
      /**
       * <pre>
       * Whether to apply sigmoid to the output of class predictions.
       * TODO(jonathanhuang): Do we need this since we have a post processing
       * module.?
       * </pre>
       *
       * <code>optional bool apply_sigmoid_to_scores = 9 [default = false];</code>
       * @return Whether the applySigmoidToScores field is set.
       */
      @java.lang.Override
      public boolean hasApplySigmoidToScores() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <pre>
       * Whether to apply sigmoid to the output of class predictions.
       * TODO(jonathanhuang): Do we need this since we have a post processing
       * module.?
       * </pre>
       *
       * <code>optional bool apply_sigmoid_to_scores = 9 [default = false];</code>
       * @return The applySigmoidToScores.
       */
      @java.lang.Override
      public boolean getApplySigmoidToScores() {
        return applySigmoidToScores_;
      }
      /**
       * <pre>
       * Whether to apply sigmoid to the output of class predictions.
       * TODO(jonathanhuang): Do we need this since we have a post processing
       * module.?
       * </pre>
       *
       * <code>optional bool apply_sigmoid_to_scores = 9 [default = false];</code>
       * @param value The applySigmoidToScores to set.
       * @return This builder for chaining.
       */
      public Builder setApplySigmoidToScores(boolean value) {
        bitField0_ |= 0x00000100;
        applySigmoidToScores_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to apply sigmoid to the output of class predictions.
       * TODO(jonathanhuang): Do we need this since we have a post processing
       * module.?
       * </pre>
       *
       * <code>optional bool apply_sigmoid_to_scores = 9 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearApplySigmoidToScores() {
        bitField0_ = (bitField0_ & ~0x00000100);
        applySigmoidToScores_ = false;
        onChanged();
        return this;
      }

      private float classPredictionBiasInit_ ;
      /**
       * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
       * @return Whether the classPredictionBiasInit field is set.
       */
      @java.lang.Override
      public boolean hasClassPredictionBiasInit() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
       * @return The classPredictionBiasInit.
       */
      @java.lang.Override
      public float getClassPredictionBiasInit() {
        return classPredictionBiasInit_;
      }
      /**
       * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
       * @param value The classPredictionBiasInit to set.
       * @return This builder for chaining.
       */
      public Builder setClassPredictionBiasInit(float value) {
        bitField0_ |= 0x00000200;
        classPredictionBiasInit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearClassPredictionBiasInit() {
        bitField0_ = (bitField0_ & ~0x00000200);
        classPredictionBiasInit_ = 0F;
        onChanged();
        return this;
      }

      private boolean useDepthwise_ ;
      /**
       * <pre>
       * Whether to use depthwise separable convolution for box predictor layers.
       * </pre>
       *
       * <code>optional bool use_depthwise = 11 [default = false];</code>
       * @return Whether the useDepthwise field is set.
       */
      @java.lang.Override
      public boolean hasUseDepthwise() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <pre>
       * Whether to use depthwise separable convolution for box predictor layers.
       * </pre>
       *
       * <code>optional bool use_depthwise = 11 [default = false];</code>
       * @return The useDepthwise.
       */
      @java.lang.Override
      public boolean getUseDepthwise() {
        return useDepthwise_;
      }
      /**
       * <pre>
       * Whether to use depthwise separable convolution for box predictor layers.
       * </pre>
       *
       * <code>optional bool use_depthwise = 11 [default = false];</code>
       * @param value The useDepthwise to set.
       * @return This builder for chaining.
       */
      public Builder setUseDepthwise(boolean value) {
        bitField0_ |= 0x00000400;
        useDepthwise_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to use depthwise separable convolution for box predictor layers.
       * </pre>
       *
       * <code>optional bool use_depthwise = 11 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearUseDepthwise() {
        bitField0_ = (bitField0_ & ~0x00000400);
        useDepthwise_ = false;
        onChanged();
        return this;
      }

      private object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange boxEncodingsClipRange_;
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder> boxEncodingsClipRangeBuilder_;
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       * @return Whether the boxEncodingsClipRange field is set.
       */
      public boolean hasBoxEncodingsClipRange() {
        return ((bitField0_ & 0x00000800) != 0);
      }
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       * @return The boxEncodingsClipRange.
       */
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange getBoxEncodingsClipRange() {
        if (boxEncodingsClipRangeBuilder_ == null) {
          return boxEncodingsClipRange_ == null ? object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance() : boxEncodingsClipRange_;
        } else {
          return boxEncodingsClipRangeBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       */
      public Builder setBoxEncodingsClipRange(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange value) {
        if (boxEncodingsClipRangeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          boxEncodingsClipRange_ = value;
          onChanged();
        } else {
          boxEncodingsClipRangeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       */
      public Builder setBoxEncodingsClipRange(
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder builderForValue) {
        if (boxEncodingsClipRangeBuilder_ == null) {
          boxEncodingsClipRange_ = builderForValue.build();
          onChanged();
        } else {
          boxEncodingsClipRangeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       */
      public Builder mergeBoxEncodingsClipRange(object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange value) {
        if (boxEncodingsClipRangeBuilder_ == null) {
          if (((bitField0_ & 0x00000800) != 0) &&
              boxEncodingsClipRange_ != null &&
              boxEncodingsClipRange_ != object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance()) {
            boxEncodingsClipRange_ =
              object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.newBuilder(boxEncodingsClipRange_).mergeFrom(value).buildPartial();
          } else {
            boxEncodingsClipRange_ = value;
          }
          onChanged();
        } else {
          boxEncodingsClipRangeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       */
      public Builder clearBoxEncodingsClipRange() {
        if (boxEncodingsClipRangeBuilder_ == null) {
          boxEncodingsClipRange_ = null;
          onChanged();
        } else {
          boxEncodingsClipRangeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       */
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder getBoxEncodingsClipRangeBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getBoxEncodingsClipRangeFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       */
      public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder getBoxEncodingsClipRangeOrBuilder() {
        if (boxEncodingsClipRangeBuilder_ != null) {
          return boxEncodingsClipRangeBuilder_.getMessageOrBuilder();
        } else {
          return boxEncodingsClipRange_ == null ?
              object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance() : boxEncodingsClipRange_;
        }
      }
      /**
       * <code>optional .object_detection.protos.ConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 12;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder>
          getBoxEncodingsClipRangeFieldBuilder() {
        if (boxEncodingsClipRangeBuilder_ == null) {
          boxEncodingsClipRangeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder, object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder>(
                  getBoxEncodingsClipRange(),
                  getParentForChildren(),
                  isClean());
          boxEncodingsClipRange_ = null;
        }
        return boxEncodingsClipRangeBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:object_detection.protos.ConvolutionalBoxPredictor)
    }

    // @@protoc_insertion_point(class_scope:object_detection.protos.ConvolutionalBoxPredictor)
    private static final object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor();
    }

    public static object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ConvolutionalBoxPredictor>
        PARSER = new com.google.protobuf.AbstractParser<ConvolutionalBoxPredictor>() {
      @java.lang.Override
      public ConvolutionalBoxPredictor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConvolutionalBoxPredictor(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<ConvolutionalBoxPredictor> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ConvolutionalBoxPredictor> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.ConvolutionalBoxPredictor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface WeightSharedConvolutionalBoxPredictorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:object_detection.protos.WeightSharedConvolutionalBoxPredictor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return Whether the convHyperparams field is set.
     */
    boolean hasConvHyperparams();
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return The convHyperparams.
     */
    object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams();
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     */
    object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder();

    /**
     * <pre>
     * Number of the additional conv layers before the predictor.
     * </pre>
     *
     * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
     * @return Whether the numLayersBeforePredictor field is set.
     */
    boolean hasNumLayersBeforePredictor();
    /**
     * <pre>
     * Number of the additional conv layers before the predictor.
     * </pre>
     *
     * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
     * @return The numLayersBeforePredictor.
     */
    int getNumLayersBeforePredictor();

    /**
     * <pre>
     * Output depth for the convolution ops prior to predicting box encodings
     * and class predictions.
     * </pre>
     *
     * <code>optional int32 depth = 2 [default = 0];</code>
     * @return Whether the depth field is set.
     */
    boolean hasDepth();
    /**
     * <pre>
     * Output depth for the convolution ops prior to predicting box encodings
     * and class predictions.
     * </pre>
     *
     * <code>optional int32 depth = 2 [default = 0];</code>
     * @return The depth.
     */
    int getDepth();

    /**
     * <pre>
     * Size of final convolution kernel. If the spatial resolution of the feature
     * map is smaller than the kernel size, then the kernel size is set to
     * min(feature_width, feature_height).
     * </pre>
     *
     * <code>optional int32 kernel_size = 7 [default = 3];</code>
     * @return Whether the kernelSize field is set.
     */
    boolean hasKernelSize();
    /**
     * <pre>
     * Size of final convolution kernel. If the spatial resolution of the feature
     * map is smaller than the kernel size, then the kernel size is set to
     * min(feature_width, feature_height).
     * </pre>
     *
     * <code>optional int32 kernel_size = 7 [default = 3];</code>
     * @return The kernelSize.
     */
    int getKernelSize();

    /**
     * <pre>
     * Size of the encoding for boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 8 [default = 4];</code>
     * @return Whether the boxCodeSize field is set.
     */
    boolean hasBoxCodeSize();
    /**
     * <pre>
     * Size of the encoding for boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 8 [default = 4];</code>
     * @return The boxCodeSize.
     */
    int getBoxCodeSize();

    /**
     * <pre>
     * Bias initialization for class prediction. It has been show to stabilize
     * training where there are large number of negative boxes. See
     * https://arxiv.org/abs/1708.02002 for details.
     * </pre>
     *
     * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
     * @return Whether the classPredictionBiasInit field is set.
     */
    boolean hasClassPredictionBiasInit();
    /**
     * <pre>
     * Bias initialization for class prediction. It has been show to stabilize
     * training where there are large number of negative boxes. See
     * https://arxiv.org/abs/1708.02002 for details.
     * </pre>
     *
     * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
     * @return The classPredictionBiasInit.
     */
    float getClassPredictionBiasInit();

    /**
     * <pre>
     * Whether to use dropout for class prediction.
     * </pre>
     *
     * <code>optional bool use_dropout = 11 [default = false];</code>
     * @return Whether the useDropout field is set.
     */
    boolean hasUseDropout();
    /**
     * <pre>
     * Whether to use dropout for class prediction.
     * </pre>
     *
     * <code>optional bool use_dropout = 11 [default = false];</code>
     * @return The useDropout.
     */
    boolean getUseDropout();

    /**
     * <pre>
     * Keep probability for dropout.
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 12 [default = 0.8];</code>
     * @return Whether the dropoutKeepProbability field is set.
     */
    boolean hasDropoutKeepProbability();
    /**
     * <pre>
     * Keep probability for dropout.
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 12 [default = 0.8];</code>
     * @return The dropoutKeepProbability.
     */
    float getDropoutKeepProbability();

    /**
     * <pre>
     * Whether to share the multi-layer tower between box prediction and class
     * prediction heads.
     * </pre>
     *
     * <code>optional bool share_prediction_tower = 13 [default = false];</code>
     * @return Whether the sharePredictionTower field is set.
     */
    boolean hasSharePredictionTower();
    /**
     * <pre>
     * Whether to share the multi-layer tower between box prediction and class
     * prediction heads.
     * </pre>
     *
     * <code>optional bool share_prediction_tower = 13 [default = false];</code>
     * @return The sharePredictionTower.
     */
    boolean getSharePredictionTower();

    /**
     * <pre>
     * Whether to use depthwise separable convolution for box predictor layers.
     * </pre>
     *
     * <code>optional bool use_depthwise = 14 [default = false];</code>
     * @return Whether the useDepthwise field is set.
     */
    boolean hasUseDepthwise();
    /**
     * <pre>
     * Whether to use depthwise separable convolution for box predictor layers.
     * </pre>
     *
     * <code>optional bool use_depthwise = 14 [default = false];</code>
     * @return The useDepthwise.
     */
    boolean getUseDepthwise();

    /**
     * <pre>
     * Callable elementwise score converter at inference time.
     * </pre>
     *
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter score_converter = 16 [default = IDENTITY];</code>
     * @return Whether the scoreConverter field is set.
     */
    boolean hasScoreConverter();
    /**
     * <pre>
     * Callable elementwise score converter at inference time.
     * </pre>
     *
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter score_converter = 16 [default = IDENTITY];</code>
     * @return The scoreConverter.
     */
    object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter getScoreConverter();

    /**
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
     * @return Whether the boxEncodingsClipRange field is set.
     */
    boolean hasBoxEncodingsClipRange();
    /**
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
     * @return The boxEncodingsClipRange.
     */
    object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange getBoxEncodingsClipRange();
    /**
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
     */
    object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder getBoxEncodingsClipRangeOrBuilder();
  }
  /**
   * <pre>
   * Configuration proto for weight shared convolutional box predictor.
   * Next id: 19
   * </pre>
   *
   * Protobuf type {@code object_detection.protos.WeightSharedConvolutionalBoxPredictor}
   */
  public static final class WeightSharedConvolutionalBoxPredictor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:object_detection.protos.WeightSharedConvolutionalBoxPredictor)
      WeightSharedConvolutionalBoxPredictorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use WeightSharedConvolutionalBoxPredictor.newBuilder() to construct.
    private WeightSharedConvolutionalBoxPredictor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private WeightSharedConvolutionalBoxPredictor() {
      kernelSize_ = 3;
      boxCodeSize_ = 4;
      dropoutKeepProbability_ = 0.8F;
      scoreConverter_ = 0;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new WeightSharedConvolutionalBoxPredictor();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private WeightSharedConvolutionalBoxPredictor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = convHyperparams_.toBuilder();
              }
              convHyperparams_ = input.readMessage(object_detection.protos.HyperparamsOuterClass.Hyperparams.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(convHyperparams_);
                convHyperparams_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000004;
              depth_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000002;
              numLayersBeforePredictor_ = input.readInt32();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000008;
              kernelSize_ = input.readInt32();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000010;
              boxCodeSize_ = input.readInt32();
              break;
            }
            case 85: {
              bitField0_ |= 0x00000020;
              classPredictionBiasInit_ = input.readFloat();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000040;
              useDropout_ = input.readBool();
              break;
            }
            case 101: {
              bitField0_ |= 0x00000080;
              dropoutKeepProbability_ = input.readFloat();
              break;
            }
            case 104: {
              bitField0_ |= 0x00000100;
              sharePredictionTower_ = input.readBool();
              break;
            }
            case 112: {
              bitField0_ |= 0x00000200;
              useDepthwise_ = input.readBool();
              break;
            }
            case 128: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter value = object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(16, rawValue);
              } else {
                bitField0_ |= 0x00000400;
                scoreConverter_ = rawValue;
              }
              break;
            }
            case 138: {
              object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder subBuilder = null;
              if (((bitField0_ & 0x00000800) != 0)) {
                subBuilder = boxEncodingsClipRange_.toBuilder();
              }
              boxEncodingsClipRange_ = input.readMessage(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(boxEncodingsClipRange_);
                boxEncodingsClipRange_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000800;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.Builder.class);
    }

    /**
     * <pre>
     * Enum to specify how to convert the detection scores at inference time.
     * </pre>
     *
     * Protobuf enum {@code object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter}
     */
    public enum ScoreConverter
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       * Input scores equals output scores.
       * </pre>
       *
       * <code>IDENTITY = 0;</code>
       */
      IDENTITY(0),
      /**
       * <pre>
       * Applies a sigmoid on input scores.
       * </pre>
       *
       * <code>SIGMOID = 1;</code>
       */
      SIGMOID(1),
      ;

      /**
       * <pre>
       * Input scores equals output scores.
       * </pre>
       *
       * <code>IDENTITY = 0;</code>
       */
      public static final int IDENTITY_VALUE = 0;
      /**
       * <pre>
       * Applies a sigmoid on input scores.
       * </pre>
       *
       * <code>SIGMOID = 1;</code>
       */
      public static final int SIGMOID_VALUE = 1;


      public final int getNumber() {
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ScoreConverter valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static ScoreConverter forNumber(int value) {
        switch (value) {
          case 0: return IDENTITY;
          case 1: return SIGMOID;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<ScoreConverter>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          ScoreConverter> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<ScoreConverter>() {
              public ScoreConverter findValueByNumber(int number) {
                return ScoreConverter.forNumber(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDescriptor().getEnumTypes().get(0);
      }

      private static final ScoreConverter[] VALUES = values();

      public static ScoreConverter valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private ScoreConverter(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter)
    }

    public interface BoxEncodingsClipRangeOrBuilder extends
        // @@protoc_insertion_point(interface_extends:object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>optional float min = 1;</code>
       * @return Whether the min field is set.
       */
      boolean hasMin();
      /**
       * <code>optional float min = 1;</code>
       * @return The min.
       */
      float getMin();

      /**
       * <code>optional float max = 2;</code>
       * @return Whether the max field is set.
       */
      boolean hasMax();
      /**
       * <code>optional float max = 2;</code>
       * @return The max.
       */
      float getMax();
    }
    /**
     * <pre>
     * If specified, apply clipping to box encodings.
     * </pre>
     *
     * Protobuf type {@code object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange}
     */
    public static final class BoxEncodingsClipRange extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange)
        BoxEncodingsClipRangeOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use BoxEncodingsClipRange.newBuilder() to construct.
      private BoxEncodingsClipRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private BoxEncodingsClipRange() {
      }

      @java.lang.Override
      @SuppressWarnings({"unused"})
      protected java.lang.Object newInstance(
          UnusedPrivateParameter unused) {
        return new BoxEncodingsClipRange();
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private BoxEncodingsClipRange(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 13: {
                bitField0_ |= 0x00000001;
                min_ = input.readFloat();
                break;
              }
              case 21: {
                bitField0_ |= 0x00000002;
                max_ = input.readFloat();
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.class, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder.class);
      }

      private int bitField0_;
      public static final int MIN_FIELD_NUMBER = 1;
      private float min_;
      /**
       * <code>optional float min = 1;</code>
       * @return Whether the min field is set.
       */
      @java.lang.Override
      public boolean hasMin() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional float min = 1;</code>
       * @return The min.
       */
      @java.lang.Override
      public float getMin() {
        return min_;
      }

      public static final int MAX_FIELD_NUMBER = 2;
      private float max_;
      /**
       * <code>optional float max = 2;</code>
       * @return Whether the max field is set.
       */
      @java.lang.Override
      public boolean hasMax() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional float max = 2;</code>
       * @return The max.
       */
      @java.lang.Override
      public float getMax() {
        return max_;
      }

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (((bitField0_ & 0x00000001) != 0)) {
          output.writeFloat(1, min_);
        }
        if (((bitField0_ & 0x00000002) != 0)) {
          output.writeFloat(2, max_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) != 0)) {
          size += com.google.protobuf.CodedOutputStream
            .computeFloatSize(1, min_);
        }
        if (((bitField0_ & 0x00000002) != 0)) {
          size += com.google.protobuf.CodedOutputStream
            .computeFloatSize(2, max_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange)) {
          return super.equals(obj);
        }
        object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange other = (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange) obj;

        if (hasMin() != other.hasMin()) return false;
        if (hasMin()) {
          if (java.lang.Float.floatToIntBits(getMin())
              != java.lang.Float.floatToIntBits(
                  other.getMin())) return false;
        }
        if (hasMax() != other.hasMax()) return false;
        if (hasMax()) {
          if (java.lang.Float.floatToIntBits(getMax())
              != java.lang.Float.floatToIntBits(
                  other.getMax())) return false;
        }
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasMin()) {
          hash = (37 * hash) + MIN_FIELD_NUMBER;
          hash = (53 * hash) + java.lang.Float.floatToIntBits(
              getMin());
        }
        if (hasMax()) {
          hash = (37 * hash) + MAX_FIELD_NUMBER;
          hash = (53 * hash) + java.lang.Float.floatToIntBits(
              getMax());
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * If specified, apply clipping to box encodings.
       * </pre>
       *
       * Protobuf type {@code object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange)
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.class, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder.class);
        }

        // Construct using object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          min_ = 0F;
          bitField0_ = (bitField0_ & ~0x00000001);
          max_ = 0F;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor;
        }

        @java.lang.Override
        public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange getDefaultInstanceForType() {
          return object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance();
        }

        @java.lang.Override
        public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange build() {
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange buildPartial() {
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange result = new object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) != 0)) {
            result.min_ = min_;
            to_bitField0_ |= 0x00000001;
          }
          if (((from_bitField0_ & 0x00000002) != 0)) {
            result.max_ = max_;
            to_bitField0_ |= 0x00000002;
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange) {
            return mergeFrom((object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange other) {
          if (other == object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance()) return this;
          if (other.hasMin()) {
            setMin(other.getMin());
          }
          if (other.hasMax()) {
            setMax(other.getMax());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private float min_ ;
        /**
         * <code>optional float min = 1;</code>
         * @return Whether the min field is set.
         */
        @java.lang.Override
        public boolean hasMin() {
          return ((bitField0_ & 0x00000001) != 0);
        }
        /**
         * <code>optional float min = 1;</code>
         * @return The min.
         */
        @java.lang.Override
        public float getMin() {
          return min_;
        }
        /**
         * <code>optional float min = 1;</code>
         * @param value The min to set.
         * @return This builder for chaining.
         */
        public Builder setMin(float value) {
          bitField0_ |= 0x00000001;
          min_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional float min = 1;</code>
         * @return This builder for chaining.
         */
        public Builder clearMin() {
          bitField0_ = (bitField0_ & ~0x00000001);
          min_ = 0F;
          onChanged();
          return this;
        }

        private float max_ ;
        /**
         * <code>optional float max = 2;</code>
         * @return Whether the max field is set.
         */
        @java.lang.Override
        public boolean hasMax() {
          return ((bitField0_ & 0x00000002) != 0);
        }
        /**
         * <code>optional float max = 2;</code>
         * @return The max.
         */
        @java.lang.Override
        public float getMax() {
          return max_;
        }
        /**
         * <code>optional float max = 2;</code>
         * @param value The max to set.
         * @return This builder for chaining.
         */
        public Builder setMax(float value) {
          bitField0_ |= 0x00000002;
          max_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional float max = 2;</code>
         * @return This builder for chaining.
         */
        public Builder clearMax() {
          bitField0_ = (bitField0_ & ~0x00000002);
          max_ = 0F;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange)
      }

      // @@protoc_insertion_point(class_scope:object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange)
      private static final object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange();
      }

      public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<BoxEncodingsClipRange>
          PARSER = new com.google.protobuf.AbstractParser<BoxEncodingsClipRange>() {
        @java.lang.Override
        public BoxEncodingsClipRange parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new BoxEncodingsClipRange(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<BoxEncodingsClipRange> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<BoxEncodingsClipRange> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int CONV_HYPERPARAMS_FIELD_NUMBER = 1;
    private object_detection.protos.HyperparamsOuterClass.Hyperparams convHyperparams_;
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return Whether the convHyperparams field is set.
     */
    @java.lang.Override
    public boolean hasConvHyperparams() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return The convHyperparams.
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams() {
      return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
    }
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder() {
      return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
    }

    public static final int NUM_LAYERS_BEFORE_PREDICTOR_FIELD_NUMBER = 4;
    private int numLayersBeforePredictor_;
    /**
     * <pre>
     * Number of the additional conv layers before the predictor.
     * </pre>
     *
     * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
     * @return Whether the numLayersBeforePredictor field is set.
     */
    @java.lang.Override
    public boolean hasNumLayersBeforePredictor() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Number of the additional conv layers before the predictor.
     * </pre>
     *
     * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
     * @return The numLayersBeforePredictor.
     */
    @java.lang.Override
    public int getNumLayersBeforePredictor() {
      return numLayersBeforePredictor_;
    }

    public static final int DEPTH_FIELD_NUMBER = 2;
    private int depth_;
    /**
     * <pre>
     * Output depth for the convolution ops prior to predicting box encodings
     * and class predictions.
     * </pre>
     *
     * <code>optional int32 depth = 2 [default = 0];</code>
     * @return Whether the depth field is set.
     */
    @java.lang.Override
    public boolean hasDepth() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * Output depth for the convolution ops prior to predicting box encodings
     * and class predictions.
     * </pre>
     *
     * <code>optional int32 depth = 2 [default = 0];</code>
     * @return The depth.
     */
    @java.lang.Override
    public int getDepth() {
      return depth_;
    }

    public static final int KERNEL_SIZE_FIELD_NUMBER = 7;
    private int kernelSize_;
    /**
     * <pre>
     * Size of final convolution kernel. If the spatial resolution of the feature
     * map is smaller than the kernel size, then the kernel size is set to
     * min(feature_width, feature_height).
     * </pre>
     *
     * <code>optional int32 kernel_size = 7 [default = 3];</code>
     * @return Whether the kernelSize field is set.
     */
    @java.lang.Override
    public boolean hasKernelSize() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * Size of final convolution kernel. If the spatial resolution of the feature
     * map is smaller than the kernel size, then the kernel size is set to
     * min(feature_width, feature_height).
     * </pre>
     *
     * <code>optional int32 kernel_size = 7 [default = 3];</code>
     * @return The kernelSize.
     */
    @java.lang.Override
    public int getKernelSize() {
      return kernelSize_;
    }

    public static final int BOX_CODE_SIZE_FIELD_NUMBER = 8;
    private int boxCodeSize_;
    /**
     * <pre>
     * Size of the encoding for boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 8 [default = 4];</code>
     * @return Whether the boxCodeSize field is set.
     */
    @java.lang.Override
    public boolean hasBoxCodeSize() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * Size of the encoding for boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 8 [default = 4];</code>
     * @return The boxCodeSize.
     */
    @java.lang.Override
    public int getBoxCodeSize() {
      return boxCodeSize_;
    }

    public static final int CLASS_PREDICTION_BIAS_INIT_FIELD_NUMBER = 10;
    private float classPredictionBiasInit_;
    /**
     * <pre>
     * Bias initialization for class prediction. It has been show to stabilize
     * training where there are large number of negative boxes. See
     * https://arxiv.org/abs/1708.02002 for details.
     * </pre>
     *
     * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
     * @return Whether the classPredictionBiasInit field is set.
     */
    @java.lang.Override
    public boolean hasClassPredictionBiasInit() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * Bias initialization for class prediction. It has been show to stabilize
     * training where there are large number of negative boxes. See
     * https://arxiv.org/abs/1708.02002 for details.
     * </pre>
     *
     * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
     * @return The classPredictionBiasInit.
     */
    @java.lang.Override
    public float getClassPredictionBiasInit() {
      return classPredictionBiasInit_;
    }

    public static final int USE_DROPOUT_FIELD_NUMBER = 11;
    private boolean useDropout_;
    /**
     * <pre>
     * Whether to use dropout for class prediction.
     * </pre>
     *
     * <code>optional bool use_dropout = 11 [default = false];</code>
     * @return Whether the useDropout field is set.
     */
    @java.lang.Override
    public boolean hasUseDropout() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * Whether to use dropout for class prediction.
     * </pre>
     *
     * <code>optional bool use_dropout = 11 [default = false];</code>
     * @return The useDropout.
     */
    @java.lang.Override
    public boolean getUseDropout() {
      return useDropout_;
    }

    public static final int DROPOUT_KEEP_PROBABILITY_FIELD_NUMBER = 12;
    private float dropoutKeepProbability_;
    /**
     * <pre>
     * Keep probability for dropout.
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 12 [default = 0.8];</code>
     * @return Whether the dropoutKeepProbability field is set.
     */
    @java.lang.Override
    public boolean hasDropoutKeepProbability() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <pre>
     * Keep probability for dropout.
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 12 [default = 0.8];</code>
     * @return The dropoutKeepProbability.
     */
    @java.lang.Override
    public float getDropoutKeepProbability() {
      return dropoutKeepProbability_;
    }

    public static final int SHARE_PREDICTION_TOWER_FIELD_NUMBER = 13;
    private boolean sharePredictionTower_;
    /**
     * <pre>
     * Whether to share the multi-layer tower between box prediction and class
     * prediction heads.
     * </pre>
     *
     * <code>optional bool share_prediction_tower = 13 [default = false];</code>
     * @return Whether the sharePredictionTower field is set.
     */
    @java.lang.Override
    public boolean hasSharePredictionTower() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * Whether to share the multi-layer tower between box prediction and class
     * prediction heads.
     * </pre>
     *
     * <code>optional bool share_prediction_tower = 13 [default = false];</code>
     * @return The sharePredictionTower.
     */
    @java.lang.Override
    public boolean getSharePredictionTower() {
      return sharePredictionTower_;
    }

    public static final int USE_DEPTHWISE_FIELD_NUMBER = 14;
    private boolean useDepthwise_;
    /**
     * <pre>
     * Whether to use depthwise separable convolution for box predictor layers.
     * </pre>
     *
     * <code>optional bool use_depthwise = 14 [default = false];</code>
     * @return Whether the useDepthwise field is set.
     */
    @java.lang.Override
    public boolean hasUseDepthwise() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <pre>
     * Whether to use depthwise separable convolution for box predictor layers.
     * </pre>
     *
     * <code>optional bool use_depthwise = 14 [default = false];</code>
     * @return The useDepthwise.
     */
    @java.lang.Override
    public boolean getUseDepthwise() {
      return useDepthwise_;
    }

    public static final int SCORE_CONVERTER_FIELD_NUMBER = 16;
    private int scoreConverter_;
    /**
     * <pre>
     * Callable elementwise score converter at inference time.
     * </pre>
     *
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter score_converter = 16 [default = IDENTITY];</code>
     * @return Whether the scoreConverter field is set.
     */
    @java.lang.Override public boolean hasScoreConverter() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <pre>
     * Callable elementwise score converter at inference time.
     * </pre>
     *
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter score_converter = 16 [default = IDENTITY];</code>
     * @return The scoreConverter.
     */
    @java.lang.Override public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter getScoreConverter() {
      @SuppressWarnings("deprecation")
      object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter result = object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter.valueOf(scoreConverter_);
      return result == null ? object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter.IDENTITY : result;
    }

    public static final int BOX_ENCODINGS_CLIP_RANGE_FIELD_NUMBER = 17;
    private object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange boxEncodingsClipRange_;
    /**
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
     * @return Whether the boxEncodingsClipRange field is set.
     */
    @java.lang.Override
    public boolean hasBoxEncodingsClipRange() {
      return ((bitField0_ & 0x00000800) != 0);
    }
    /**
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
     * @return The boxEncodingsClipRange.
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange getBoxEncodingsClipRange() {
      return boxEncodingsClipRange_ == null ? object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance() : boxEncodingsClipRange_;
    }
    /**
     * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
     */
    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder getBoxEncodingsClipRangeOrBuilder() {
      return boxEncodingsClipRange_ == null ? object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance() : boxEncodingsClipRange_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getConvHyperparams());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeInt32(2, depth_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeInt32(4, numLayersBeforePredictor_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeInt32(7, kernelSize_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeInt32(8, boxCodeSize_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeFloat(10, classPredictionBiasInit_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeBool(11, useDropout_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeFloat(12, dropoutKeepProbability_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        output.writeBool(13, sharePredictionTower_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        output.writeBool(14, useDepthwise_);
      }
      if (((bitField0_ & 0x00000400) != 0)) {
        output.writeEnum(16, scoreConverter_);
      }
      if (((bitField0_ & 0x00000800) != 0)) {
        output.writeMessage(17, getBoxEncodingsClipRange());
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getConvHyperparams());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, depth_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, numLayersBeforePredictor_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, kernelSize_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, boxCodeSize_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(10, classPredictionBiasInit_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(11, useDropout_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(12, dropoutKeepProbability_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, sharePredictionTower_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(14, useDepthwise_);
      }
      if (((bitField0_ & 0x00000400) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(16, scoreConverter_);
      }
      if (((bitField0_ & 0x00000800) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(17, getBoxEncodingsClipRange());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor)) {
        return super.equals(obj);
      }
      object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor other = (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) obj;

      if (hasConvHyperparams() != other.hasConvHyperparams()) return false;
      if (hasConvHyperparams()) {
        if (!getConvHyperparams()
            .equals(other.getConvHyperparams())) return false;
      }
      if (hasNumLayersBeforePredictor() != other.hasNumLayersBeforePredictor()) return false;
      if (hasNumLayersBeforePredictor()) {
        if (getNumLayersBeforePredictor()
            != other.getNumLayersBeforePredictor()) return false;
      }
      if (hasDepth() != other.hasDepth()) return false;
      if (hasDepth()) {
        if (getDepth()
            != other.getDepth()) return false;
      }
      if (hasKernelSize() != other.hasKernelSize()) return false;
      if (hasKernelSize()) {
        if (getKernelSize()
            != other.getKernelSize()) return false;
      }
      if (hasBoxCodeSize() != other.hasBoxCodeSize()) return false;
      if (hasBoxCodeSize()) {
        if (getBoxCodeSize()
            != other.getBoxCodeSize()) return false;
      }
      if (hasClassPredictionBiasInit() != other.hasClassPredictionBiasInit()) return false;
      if (hasClassPredictionBiasInit()) {
        if (java.lang.Float.floatToIntBits(getClassPredictionBiasInit())
            != java.lang.Float.floatToIntBits(
                other.getClassPredictionBiasInit())) return false;
      }
      if (hasUseDropout() != other.hasUseDropout()) return false;
      if (hasUseDropout()) {
        if (getUseDropout()
            != other.getUseDropout()) return false;
      }
      if (hasDropoutKeepProbability() != other.hasDropoutKeepProbability()) return false;
      if (hasDropoutKeepProbability()) {
        if (java.lang.Float.floatToIntBits(getDropoutKeepProbability())
            != java.lang.Float.floatToIntBits(
                other.getDropoutKeepProbability())) return false;
      }
      if (hasSharePredictionTower() != other.hasSharePredictionTower()) return false;
      if (hasSharePredictionTower()) {
        if (getSharePredictionTower()
            != other.getSharePredictionTower()) return false;
      }
      if (hasUseDepthwise() != other.hasUseDepthwise()) return false;
      if (hasUseDepthwise()) {
        if (getUseDepthwise()
            != other.getUseDepthwise()) return false;
      }
      if (hasScoreConverter() != other.hasScoreConverter()) return false;
      if (hasScoreConverter()) {
        if (scoreConverter_ != other.scoreConverter_) return false;
      }
      if (hasBoxEncodingsClipRange() != other.hasBoxEncodingsClipRange()) return false;
      if (hasBoxEncodingsClipRange()) {
        if (!getBoxEncodingsClipRange()
            .equals(other.getBoxEncodingsClipRange())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasConvHyperparams()) {
        hash = (37 * hash) + CONV_HYPERPARAMS_FIELD_NUMBER;
        hash = (53 * hash) + getConvHyperparams().hashCode();
      }
      if (hasNumLayersBeforePredictor()) {
        hash = (37 * hash) + NUM_LAYERS_BEFORE_PREDICTOR_FIELD_NUMBER;
        hash = (53 * hash) + getNumLayersBeforePredictor();
      }
      if (hasDepth()) {
        hash = (37 * hash) + DEPTH_FIELD_NUMBER;
        hash = (53 * hash) + getDepth();
      }
      if (hasKernelSize()) {
        hash = (37 * hash) + KERNEL_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getKernelSize();
      }
      if (hasBoxCodeSize()) {
        hash = (37 * hash) + BOX_CODE_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getBoxCodeSize();
      }
      if (hasClassPredictionBiasInit()) {
        hash = (37 * hash) + CLASS_PREDICTION_BIAS_INIT_FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getClassPredictionBiasInit());
      }
      if (hasUseDropout()) {
        hash = (37 * hash) + USE_DROPOUT_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getUseDropout());
      }
      if (hasDropoutKeepProbability()) {
        hash = (37 * hash) + DROPOUT_KEEP_PROBABILITY_FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getDropoutKeepProbability());
      }
      if (hasSharePredictionTower()) {
        hash = (37 * hash) + SHARE_PREDICTION_TOWER_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSharePredictionTower());
      }
      if (hasUseDepthwise()) {
        hash = (37 * hash) + USE_DEPTHWISE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getUseDepthwise());
      }
      if (hasScoreConverter()) {
        hash = (37 * hash) + SCORE_CONVERTER_FIELD_NUMBER;
        hash = (53 * hash) + scoreConverter_;
      }
      if (hasBoxEncodingsClipRange()) {
        hash = (37 * hash) + BOX_ENCODINGS_CLIP_RANGE_FIELD_NUMBER;
        hash = (53 * hash) + getBoxEncodingsClipRange().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Configuration proto for weight shared convolutional box predictor.
     * Next id: 19
     * </pre>
     *
     * Protobuf type {@code object_detection.protos.WeightSharedConvolutionalBoxPredictor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:object_detection.protos.WeightSharedConvolutionalBoxPredictor)
        object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.Builder.class);
      }

      // Construct using object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getConvHyperparamsFieldBuilder();
          getBoxEncodingsClipRangeFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = null;
        } else {
          convHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        numLayersBeforePredictor_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        depth_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        kernelSize_ = 3;
        bitField0_ = (bitField0_ & ~0x00000008);
        boxCodeSize_ = 4;
        bitField0_ = (bitField0_ & ~0x00000010);
        classPredictionBiasInit_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000020);
        useDropout_ = false;
        bitField0_ = (bitField0_ & ~0x00000040);
        dropoutKeepProbability_ = 0.8F;
        bitField0_ = (bitField0_ & ~0x00000080);
        sharePredictionTower_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        useDepthwise_ = false;
        bitField0_ = (bitField0_ & ~0x00000200);
        scoreConverter_ = 0;
        bitField0_ = (bitField0_ & ~0x00000400);
        if (boxEncodingsClipRangeBuilder_ == null) {
          boxEncodingsClipRange_ = null;
        } else {
          boxEncodingsClipRangeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_descriptor;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor getDefaultInstanceForType() {
        return object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance();
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor build() {
        object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor buildPartial() {
        object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor result = new object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (convHyperparamsBuilder_ == null) {
            result.convHyperparams_ = convHyperparams_;
          } else {
            result.convHyperparams_ = convHyperparamsBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.numLayersBeforePredictor_ = numLayersBeforePredictor_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.depth_ = depth_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.kernelSize_ = kernelSize_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.boxCodeSize_ = boxCodeSize_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.classPredictionBiasInit_ = classPredictionBiasInit_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.useDropout_ = useDropout_;
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          to_bitField0_ |= 0x00000080;
        }
        result.dropoutKeepProbability_ = dropoutKeepProbability_;
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.sharePredictionTower_ = sharePredictionTower_;
          to_bitField0_ |= 0x00000100;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          result.useDepthwise_ = useDepthwise_;
          to_bitField0_ |= 0x00000200;
        }
        if (((from_bitField0_ & 0x00000400) != 0)) {
          to_bitField0_ |= 0x00000400;
        }
        result.scoreConverter_ = scoreConverter_;
        if (((from_bitField0_ & 0x00000800) != 0)) {
          if (boxEncodingsClipRangeBuilder_ == null) {
            result.boxEncodingsClipRange_ = boxEncodingsClipRange_;
          } else {
            result.boxEncodingsClipRange_ = boxEncodingsClipRangeBuilder_.build();
          }
          to_bitField0_ |= 0x00000800;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) {
          return mergeFrom((object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor other) {
        if (other == object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.getDefaultInstance()) return this;
        if (other.hasConvHyperparams()) {
          mergeConvHyperparams(other.getConvHyperparams());
        }
        if (other.hasNumLayersBeforePredictor()) {
          setNumLayersBeforePredictor(other.getNumLayersBeforePredictor());
        }
        if (other.hasDepth()) {
          setDepth(other.getDepth());
        }
        if (other.hasKernelSize()) {
          setKernelSize(other.getKernelSize());
        }
        if (other.hasBoxCodeSize()) {
          setBoxCodeSize(other.getBoxCodeSize());
        }
        if (other.hasClassPredictionBiasInit()) {
          setClassPredictionBiasInit(other.getClassPredictionBiasInit());
        }
        if (other.hasUseDropout()) {
          setUseDropout(other.getUseDropout());
        }
        if (other.hasDropoutKeepProbability()) {
          setDropoutKeepProbability(other.getDropoutKeepProbability());
        }
        if (other.hasSharePredictionTower()) {
          setSharePredictionTower(other.getSharePredictionTower());
        }
        if (other.hasUseDepthwise()) {
          setUseDepthwise(other.getUseDepthwise());
        }
        if (other.hasScoreConverter()) {
          setScoreConverter(other.getScoreConverter());
        }
        if (other.hasBoxEncodingsClipRange()) {
          mergeBoxEncodingsClipRange(other.getBoxEncodingsClipRange());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private object_detection.protos.HyperparamsOuterClass.Hyperparams convHyperparams_;
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder> convHyperparamsBuilder_;
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       * @return Whether the convHyperparams field is set.
       */
      public boolean hasConvHyperparams() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       * @return The convHyperparams.
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams() {
        if (convHyperparamsBuilder_ == null) {
          return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
        } else {
          return convHyperparamsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder setConvHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (convHyperparamsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          convHyperparams_ = value;
          onChanged();
        } else {
          convHyperparamsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder setConvHyperparams(
          object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder builderForValue) {
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = builderForValue.build();
          onChanged();
        } else {
          convHyperparamsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder mergeConvHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (convHyperparamsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              convHyperparams_ != null &&
              convHyperparams_ != object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance()) {
            convHyperparams_ =
              object_detection.protos.HyperparamsOuterClass.Hyperparams.newBuilder(convHyperparams_).mergeFrom(value).buildPartial();
          } else {
            convHyperparams_ = value;
          }
          onChanged();
        } else {
          convHyperparamsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder clearConvHyperparams() {
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = null;
          onChanged();
        } else {
          convHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder getConvHyperparamsBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getConvHyperparamsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder() {
        if (convHyperparamsBuilder_ != null) {
          return convHyperparamsBuilder_.getMessageOrBuilder();
        } else {
          return convHyperparams_ == null ?
              object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
        }
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>
          getConvHyperparamsFieldBuilder() {
        if (convHyperparamsBuilder_ == null) {
          convHyperparamsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>(
                  getConvHyperparams(),
                  getParentForChildren(),
                  isClean());
          convHyperparams_ = null;
        }
        return convHyperparamsBuilder_;
      }

      private int numLayersBeforePredictor_ ;
      /**
       * <pre>
       * Number of the additional conv layers before the predictor.
       * </pre>
       *
       * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
       * @return Whether the numLayersBeforePredictor field is set.
       */
      @java.lang.Override
      public boolean hasNumLayersBeforePredictor() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * Number of the additional conv layers before the predictor.
       * </pre>
       *
       * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
       * @return The numLayersBeforePredictor.
       */
      @java.lang.Override
      public int getNumLayersBeforePredictor() {
        return numLayersBeforePredictor_;
      }
      /**
       * <pre>
       * Number of the additional conv layers before the predictor.
       * </pre>
       *
       * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
       * @param value The numLayersBeforePredictor to set.
       * @return This builder for chaining.
       */
      public Builder setNumLayersBeforePredictor(int value) {
        bitField0_ |= 0x00000002;
        numLayersBeforePredictor_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Number of the additional conv layers before the predictor.
       * </pre>
       *
       * <code>optional int32 num_layers_before_predictor = 4 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearNumLayersBeforePredictor() {
        bitField0_ = (bitField0_ & ~0x00000002);
        numLayersBeforePredictor_ = 0;
        onChanged();
        return this;
      }

      private int depth_ ;
      /**
       * <pre>
       * Output depth for the convolution ops prior to predicting box encodings
       * and class predictions.
       * </pre>
       *
       * <code>optional int32 depth = 2 [default = 0];</code>
       * @return Whether the depth field is set.
       */
      @java.lang.Override
      public boolean hasDepth() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * Output depth for the convolution ops prior to predicting box encodings
       * and class predictions.
       * </pre>
       *
       * <code>optional int32 depth = 2 [default = 0];</code>
       * @return The depth.
       */
      @java.lang.Override
      public int getDepth() {
        return depth_;
      }
      /**
       * <pre>
       * Output depth for the convolution ops prior to predicting box encodings
       * and class predictions.
       * </pre>
       *
       * <code>optional int32 depth = 2 [default = 0];</code>
       * @param value The depth to set.
       * @return This builder for chaining.
       */
      public Builder setDepth(int value) {
        bitField0_ |= 0x00000004;
        depth_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Output depth for the convolution ops prior to predicting box encodings
       * and class predictions.
       * </pre>
       *
       * <code>optional int32 depth = 2 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearDepth() {
        bitField0_ = (bitField0_ & ~0x00000004);
        depth_ = 0;
        onChanged();
        return this;
      }

      private int kernelSize_ = 3;
      /**
       * <pre>
       * Size of final convolution kernel. If the spatial resolution of the feature
       * map is smaller than the kernel size, then the kernel size is set to
       * min(feature_width, feature_height).
       * </pre>
       *
       * <code>optional int32 kernel_size = 7 [default = 3];</code>
       * @return Whether the kernelSize field is set.
       */
      @java.lang.Override
      public boolean hasKernelSize() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <pre>
       * Size of final convolution kernel. If the spatial resolution of the feature
       * map is smaller than the kernel size, then the kernel size is set to
       * min(feature_width, feature_height).
       * </pre>
       *
       * <code>optional int32 kernel_size = 7 [default = 3];</code>
       * @return The kernelSize.
       */
      @java.lang.Override
      public int getKernelSize() {
        return kernelSize_;
      }
      /**
       * <pre>
       * Size of final convolution kernel. If the spatial resolution of the feature
       * map is smaller than the kernel size, then the kernel size is set to
       * min(feature_width, feature_height).
       * </pre>
       *
       * <code>optional int32 kernel_size = 7 [default = 3];</code>
       * @param value The kernelSize to set.
       * @return This builder for chaining.
       */
      public Builder setKernelSize(int value) {
        bitField0_ |= 0x00000008;
        kernelSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Size of final convolution kernel. If the spatial resolution of the feature
       * map is smaller than the kernel size, then the kernel size is set to
       * min(feature_width, feature_height).
       * </pre>
       *
       * <code>optional int32 kernel_size = 7 [default = 3];</code>
       * @return This builder for chaining.
       */
      public Builder clearKernelSize() {
        bitField0_ = (bitField0_ & ~0x00000008);
        kernelSize_ = 3;
        onChanged();
        return this;
      }

      private int boxCodeSize_ = 4;
      /**
       * <pre>
       * Size of the encoding for boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 8 [default = 4];</code>
       * @return Whether the boxCodeSize field is set.
       */
      @java.lang.Override
      public boolean hasBoxCodeSize() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <pre>
       * Size of the encoding for boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 8 [default = 4];</code>
       * @return The boxCodeSize.
       */
      @java.lang.Override
      public int getBoxCodeSize() {
        return boxCodeSize_;
      }
      /**
       * <pre>
       * Size of the encoding for boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 8 [default = 4];</code>
       * @param value The boxCodeSize to set.
       * @return This builder for chaining.
       */
      public Builder setBoxCodeSize(int value) {
        bitField0_ |= 0x00000010;
        boxCodeSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Size of the encoding for boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 8 [default = 4];</code>
       * @return This builder for chaining.
       */
      public Builder clearBoxCodeSize() {
        bitField0_ = (bitField0_ & ~0x00000010);
        boxCodeSize_ = 4;
        onChanged();
        return this;
      }

      private float classPredictionBiasInit_ ;
      /**
       * <pre>
       * Bias initialization for class prediction. It has been show to stabilize
       * training where there are large number of negative boxes. See
       * https://arxiv.org/abs/1708.02002 for details.
       * </pre>
       *
       * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
       * @return Whether the classPredictionBiasInit field is set.
       */
      @java.lang.Override
      public boolean hasClassPredictionBiasInit() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <pre>
       * Bias initialization for class prediction. It has been show to stabilize
       * training where there are large number of negative boxes. See
       * https://arxiv.org/abs/1708.02002 for details.
       * </pre>
       *
       * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
       * @return The classPredictionBiasInit.
       */
      @java.lang.Override
      public float getClassPredictionBiasInit() {
        return classPredictionBiasInit_;
      }
      /**
       * <pre>
       * Bias initialization for class prediction. It has been show to stabilize
       * training where there are large number of negative boxes. See
       * https://arxiv.org/abs/1708.02002 for details.
       * </pre>
       *
       * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
       * @param value The classPredictionBiasInit to set.
       * @return This builder for chaining.
       */
      public Builder setClassPredictionBiasInit(float value) {
        bitField0_ |= 0x00000020;
        classPredictionBiasInit_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Bias initialization for class prediction. It has been show to stabilize
       * training where there are large number of negative boxes. See
       * https://arxiv.org/abs/1708.02002 for details.
       * </pre>
       *
       * <code>optional float class_prediction_bias_init = 10 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearClassPredictionBiasInit() {
        bitField0_ = (bitField0_ & ~0x00000020);
        classPredictionBiasInit_ = 0F;
        onChanged();
        return this;
      }

      private boolean useDropout_ ;
      /**
       * <pre>
       * Whether to use dropout for class prediction.
       * </pre>
       *
       * <code>optional bool use_dropout = 11 [default = false];</code>
       * @return Whether the useDropout field is set.
       */
      @java.lang.Override
      public boolean hasUseDropout() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <pre>
       * Whether to use dropout for class prediction.
       * </pre>
       *
       * <code>optional bool use_dropout = 11 [default = false];</code>
       * @return The useDropout.
       */
      @java.lang.Override
      public boolean getUseDropout() {
        return useDropout_;
      }
      /**
       * <pre>
       * Whether to use dropout for class prediction.
       * </pre>
       *
       * <code>optional bool use_dropout = 11 [default = false];</code>
       * @param value The useDropout to set.
       * @return This builder for chaining.
       */
      public Builder setUseDropout(boolean value) {
        bitField0_ |= 0x00000040;
        useDropout_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to use dropout for class prediction.
       * </pre>
       *
       * <code>optional bool use_dropout = 11 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearUseDropout() {
        bitField0_ = (bitField0_ & ~0x00000040);
        useDropout_ = false;
        onChanged();
        return this;
      }

      private float dropoutKeepProbability_ = 0.8F;
      /**
       * <pre>
       * Keep probability for dropout.
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 12 [default = 0.8];</code>
       * @return Whether the dropoutKeepProbability field is set.
       */
      @java.lang.Override
      public boolean hasDropoutKeepProbability() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <pre>
       * Keep probability for dropout.
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 12 [default = 0.8];</code>
       * @return The dropoutKeepProbability.
       */
      @java.lang.Override
      public float getDropoutKeepProbability() {
        return dropoutKeepProbability_;
      }
      /**
       * <pre>
       * Keep probability for dropout.
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 12 [default = 0.8];</code>
       * @param value The dropoutKeepProbability to set.
       * @return This builder for chaining.
       */
      public Builder setDropoutKeepProbability(float value) {
        bitField0_ |= 0x00000080;
        dropoutKeepProbability_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Keep probability for dropout.
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 12 [default = 0.8];</code>
       * @return This builder for chaining.
       */
      public Builder clearDropoutKeepProbability() {
        bitField0_ = (bitField0_ & ~0x00000080);
        dropoutKeepProbability_ = 0.8F;
        onChanged();
        return this;
      }

      private boolean sharePredictionTower_ ;
      /**
       * <pre>
       * Whether to share the multi-layer tower between box prediction and class
       * prediction heads.
       * </pre>
       *
       * <code>optional bool share_prediction_tower = 13 [default = false];</code>
       * @return Whether the sharePredictionTower field is set.
       */
      @java.lang.Override
      public boolean hasSharePredictionTower() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <pre>
       * Whether to share the multi-layer tower between box prediction and class
       * prediction heads.
       * </pre>
       *
       * <code>optional bool share_prediction_tower = 13 [default = false];</code>
       * @return The sharePredictionTower.
       */
      @java.lang.Override
      public boolean getSharePredictionTower() {
        return sharePredictionTower_;
      }
      /**
       * <pre>
       * Whether to share the multi-layer tower between box prediction and class
       * prediction heads.
       * </pre>
       *
       * <code>optional bool share_prediction_tower = 13 [default = false];</code>
       * @param value The sharePredictionTower to set.
       * @return This builder for chaining.
       */
      public Builder setSharePredictionTower(boolean value) {
        bitField0_ |= 0x00000100;
        sharePredictionTower_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to share the multi-layer tower between box prediction and class
       * prediction heads.
       * </pre>
       *
       * <code>optional bool share_prediction_tower = 13 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearSharePredictionTower() {
        bitField0_ = (bitField0_ & ~0x00000100);
        sharePredictionTower_ = false;
        onChanged();
        return this;
      }

      private boolean useDepthwise_ ;
      /**
       * <pre>
       * Whether to use depthwise separable convolution for box predictor layers.
       * </pre>
       *
       * <code>optional bool use_depthwise = 14 [default = false];</code>
       * @return Whether the useDepthwise field is set.
       */
      @java.lang.Override
      public boolean hasUseDepthwise() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <pre>
       * Whether to use depthwise separable convolution for box predictor layers.
       * </pre>
       *
       * <code>optional bool use_depthwise = 14 [default = false];</code>
       * @return The useDepthwise.
       */
      @java.lang.Override
      public boolean getUseDepthwise() {
        return useDepthwise_;
      }
      /**
       * <pre>
       * Whether to use depthwise separable convolution for box predictor layers.
       * </pre>
       *
       * <code>optional bool use_depthwise = 14 [default = false];</code>
       * @param value The useDepthwise to set.
       * @return This builder for chaining.
       */
      public Builder setUseDepthwise(boolean value) {
        bitField0_ |= 0x00000200;
        useDepthwise_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to use depthwise separable convolution for box predictor layers.
       * </pre>
       *
       * <code>optional bool use_depthwise = 14 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearUseDepthwise() {
        bitField0_ = (bitField0_ & ~0x00000200);
        useDepthwise_ = false;
        onChanged();
        return this;
      }

      private int scoreConverter_ = 0;
      /**
       * <pre>
       * Callable elementwise score converter at inference time.
       * </pre>
       *
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter score_converter = 16 [default = IDENTITY];</code>
       * @return Whether the scoreConverter field is set.
       */
      @java.lang.Override public boolean hasScoreConverter() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <pre>
       * Callable elementwise score converter at inference time.
       * </pre>
       *
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter score_converter = 16 [default = IDENTITY];</code>
       * @return The scoreConverter.
       */
      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter getScoreConverter() {
        @SuppressWarnings("deprecation")
        object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter result = object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter.valueOf(scoreConverter_);
        return result == null ? object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter.IDENTITY : result;
      }
      /**
       * <pre>
       * Callable elementwise score converter at inference time.
       * </pre>
       *
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter score_converter = 16 [default = IDENTITY];</code>
       * @param value The scoreConverter to set.
       * @return This builder for chaining.
       */
      public Builder setScoreConverter(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.ScoreConverter value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000400;
        scoreConverter_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Callable elementwise score converter at inference time.
       * </pre>
       *
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.ScoreConverter score_converter = 16 [default = IDENTITY];</code>
       * @return This builder for chaining.
       */
      public Builder clearScoreConverter() {
        bitField0_ = (bitField0_ & ~0x00000400);
        scoreConverter_ = 0;
        onChanged();
        return this;
      }

      private object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange boxEncodingsClipRange_;
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder> boxEncodingsClipRangeBuilder_;
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       * @return Whether the boxEncodingsClipRange field is set.
       */
      public boolean hasBoxEncodingsClipRange() {
        return ((bitField0_ & 0x00000800) != 0);
      }
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       * @return The boxEncodingsClipRange.
       */
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange getBoxEncodingsClipRange() {
        if (boxEncodingsClipRangeBuilder_ == null) {
          return boxEncodingsClipRange_ == null ? object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance() : boxEncodingsClipRange_;
        } else {
          return boxEncodingsClipRangeBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       */
      public Builder setBoxEncodingsClipRange(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange value) {
        if (boxEncodingsClipRangeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          boxEncodingsClipRange_ = value;
          onChanged();
        } else {
          boxEncodingsClipRangeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       */
      public Builder setBoxEncodingsClipRange(
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder builderForValue) {
        if (boxEncodingsClipRangeBuilder_ == null) {
          boxEncodingsClipRange_ = builderForValue.build();
          onChanged();
        } else {
          boxEncodingsClipRangeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       */
      public Builder mergeBoxEncodingsClipRange(object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange value) {
        if (boxEncodingsClipRangeBuilder_ == null) {
          if (((bitField0_ & 0x00000800) != 0) &&
              boxEncodingsClipRange_ != null &&
              boxEncodingsClipRange_ != object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance()) {
            boxEncodingsClipRange_ =
              object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.newBuilder(boxEncodingsClipRange_).mergeFrom(value).buildPartial();
          } else {
            boxEncodingsClipRange_ = value;
          }
          onChanged();
        } else {
          boxEncodingsClipRangeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       */
      public Builder clearBoxEncodingsClipRange() {
        if (boxEncodingsClipRangeBuilder_ == null) {
          boxEncodingsClipRange_ = null;
          onChanged();
        } else {
          boxEncodingsClipRangeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       */
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder getBoxEncodingsClipRangeBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getBoxEncodingsClipRangeFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       */
      public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder getBoxEncodingsClipRangeOrBuilder() {
        if (boxEncodingsClipRangeBuilder_ != null) {
          return boxEncodingsClipRangeBuilder_.getMessageOrBuilder();
        } else {
          return boxEncodingsClipRange_ == null ?
              object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.getDefaultInstance() : boxEncodingsClipRange_;
        }
      }
      /**
       * <code>optional .object_detection.protos.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange box_encodings_clip_range = 17;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder>
          getBoxEncodingsClipRangeFieldBuilder() {
        if (boxEncodingsClipRangeBuilder_ == null) {
          boxEncodingsClipRangeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRange.Builder, object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor.BoxEncodingsClipRangeOrBuilder>(
                  getBoxEncodingsClipRange(),
                  getParentForChildren(),
                  isClean());
          boxEncodingsClipRange_ = null;
        }
        return boxEncodingsClipRangeBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:object_detection.protos.WeightSharedConvolutionalBoxPredictor)
    }

    // @@protoc_insertion_point(class_scope:object_detection.protos.WeightSharedConvolutionalBoxPredictor)
    private static final object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor();
    }

    public static object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<WeightSharedConvolutionalBoxPredictor>
        PARSER = new com.google.protobuf.AbstractParser<WeightSharedConvolutionalBoxPredictor>() {
      @java.lang.Override
      public WeightSharedConvolutionalBoxPredictor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new WeightSharedConvolutionalBoxPredictor(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<WeightSharedConvolutionalBoxPredictor> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<WeightSharedConvolutionalBoxPredictor> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.WeightSharedConvolutionalBoxPredictor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MaskRCNNBoxPredictorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:object_detection.protos.MaskRCNNBoxPredictor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Hyperparameters for fully connected ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
     * @return Whether the fcHyperparams field is set.
     */
    boolean hasFcHyperparams();
    /**
     * <pre>
     * Hyperparameters for fully connected ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
     * @return The fcHyperparams.
     */
    object_detection.protos.HyperparamsOuterClass.Hyperparams getFcHyperparams();
    /**
     * <pre>
     * Hyperparameters for fully connected ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
     */
    object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getFcHyperparamsOrBuilder();

    /**
     * <pre>
     * Whether to use dropout op prior to the both box and class predictions.
     * </pre>
     *
     * <code>optional bool use_dropout = 2 [default = false];</code>
     * @return Whether the useDropout field is set.
     */
    boolean hasUseDropout();
    /**
     * <pre>
     * Whether to use dropout op prior to the both box and class predictions.
     * </pre>
     *
     * <code>optional bool use_dropout = 2 [default = false];</code>
     * @return The useDropout.
     */
    boolean getUseDropout();

    /**
     * <pre>
     * Keep probability for dropout. This is only used if use_dropout is true.
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 3 [default = 0.5];</code>
     * @return Whether the dropoutKeepProbability field is set.
     */
    boolean hasDropoutKeepProbability();
    /**
     * <pre>
     * Keep probability for dropout. This is only used if use_dropout is true.
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 3 [default = 0.5];</code>
     * @return The dropoutKeepProbability.
     */
    float getDropoutKeepProbability();

    /**
     * <pre>
     * Size of the encoding for the boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 4 [default = 4];</code>
     * @return Whether the boxCodeSize field is set.
     */
    boolean hasBoxCodeSize();
    /**
     * <pre>
     * Size of the encoding for the boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 4 [default = 4];</code>
     * @return The boxCodeSize.
     */
    int getBoxCodeSize();

    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
     * @return Whether the convHyperparams field is set.
     */
    boolean hasConvHyperparams();
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
     * @return The convHyperparams.
     */
    object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams();
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
     */
    object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder();

    /**
     * <pre>
     * Whether to predict instance masks inside detection boxes.
     * </pre>
     *
     * <code>optional bool predict_instance_masks = 6 [default = false];</code>
     * @return Whether the predictInstanceMasks field is set.
     */
    boolean hasPredictInstanceMasks();
    /**
     * <pre>
     * Whether to predict instance masks inside detection boxes.
     * </pre>
     *
     * <code>optional bool predict_instance_masks = 6 [default = false];</code>
     * @return The predictInstanceMasks.
     */
    boolean getPredictInstanceMasks();

    /**
     * <pre>
     * The depth for the first conv2d_transpose op applied to the
     * image_features in the mask prediction branch. If set to 0, the value
     * will be set automatically based on the number of channels in the image
     * features and the number of classes.
     * </pre>
     *
     * <code>optional int32 mask_prediction_conv_depth = 7 [default = 256];</code>
     * @return Whether the maskPredictionConvDepth field is set.
     */
    boolean hasMaskPredictionConvDepth();
    /**
     * <pre>
     * The depth for the first conv2d_transpose op applied to the
     * image_features in the mask prediction branch. If set to 0, the value
     * will be set automatically based on the number of channels in the image
     * features and the number of classes.
     * </pre>
     *
     * <code>optional int32 mask_prediction_conv_depth = 7 [default = 256];</code>
     * @return The maskPredictionConvDepth.
     */
    int getMaskPredictionConvDepth();

    /**
     * <pre>
     * Whether to predict keypoints inside detection boxes.
     * </pre>
     *
     * <code>optional bool predict_keypoints = 8 [default = false];</code>
     * @return Whether the predictKeypoints field is set.
     */
    boolean hasPredictKeypoints();
    /**
     * <pre>
     * Whether to predict keypoints inside detection boxes.
     * </pre>
     *
     * <code>optional bool predict_keypoints = 8 [default = false];</code>
     * @return The predictKeypoints.
     */
    boolean getPredictKeypoints();

    /**
     * <pre>
     * The height and the width of the predicted mask.
     * </pre>
     *
     * <code>optional int32 mask_height = 9 [default = 15];</code>
     * @return Whether the maskHeight field is set.
     */
    boolean hasMaskHeight();
    /**
     * <pre>
     * The height and the width of the predicted mask.
     * </pre>
     *
     * <code>optional int32 mask_height = 9 [default = 15];</code>
     * @return The maskHeight.
     */
    int getMaskHeight();

    /**
     * <code>optional int32 mask_width = 10 [default = 15];</code>
     * @return Whether the maskWidth field is set.
     */
    boolean hasMaskWidth();
    /**
     * <code>optional int32 mask_width = 10 [default = 15];</code>
     * @return The maskWidth.
     */
    int getMaskWidth();

    /**
     * <pre>
     * The number of convolutions applied to image_features in the mask prediction
     * branch.
     * </pre>
     *
     * <code>optional int32 mask_prediction_num_conv_layers = 11 [default = 2];</code>
     * @return Whether the maskPredictionNumConvLayers field is set.
     */
    boolean hasMaskPredictionNumConvLayers();
    /**
     * <pre>
     * The number of convolutions applied to image_features in the mask prediction
     * branch.
     * </pre>
     *
     * <code>optional int32 mask_prediction_num_conv_layers = 11 [default = 2];</code>
     * @return The maskPredictionNumConvLayers.
     */
    int getMaskPredictionNumConvLayers();

    /**
     * <code>optional bool masks_are_class_agnostic = 12 [default = false];</code>
     * @return Whether the masksAreClassAgnostic field is set.
     */
    boolean hasMasksAreClassAgnostic();
    /**
     * <code>optional bool masks_are_class_agnostic = 12 [default = false];</code>
     * @return The masksAreClassAgnostic.
     */
    boolean getMasksAreClassAgnostic();

    /**
     * <pre>
     * Whether to use one box for all classes rather than a different box for each
     * class.
     * </pre>
     *
     * <code>optional bool share_box_across_classes = 13 [default = false];</code>
     * @return Whether the shareBoxAcrossClasses field is set.
     */
    boolean hasShareBoxAcrossClasses();
    /**
     * <pre>
     * Whether to use one box for all classes rather than a different box for each
     * class.
     * </pre>
     *
     * <code>optional bool share_box_across_classes = 13 [default = false];</code>
     * @return The shareBoxAcrossClasses.
     */
    boolean getShareBoxAcrossClasses();

    /**
     * <pre>
     * Whether to apply convolutions on mask features before upsampling using
     * nearest neighbor resizing.
     * By default, mask features are resized to [`mask_height`, `mask_width`]
     * before applying convolutions and predicting masks.
     * </pre>
     *
     * <code>optional bool convolve_then_upsample_masks = 14 [default = false];</code>
     * @return Whether the convolveThenUpsampleMasks field is set.
     */
    boolean hasConvolveThenUpsampleMasks();
    /**
     * <pre>
     * Whether to apply convolutions on mask features before upsampling using
     * nearest neighbor resizing.
     * By default, mask features are resized to [`mask_height`, `mask_width`]
     * before applying convolutions and predicting masks.
     * </pre>
     *
     * <code>optional bool convolve_then_upsample_masks = 14 [default = false];</code>
     * @return The convolveThenUpsampleMasks.
     */
    boolean getConvolveThenUpsampleMasks();
  }
  /**
   * <pre>
   * TODO(alirezafathi): Refactor the proto file to be able to configure mask rcnn
   * head easily.
   * Next id: 15
   * </pre>
   *
   * Protobuf type {@code object_detection.protos.MaskRCNNBoxPredictor}
   */
  public static final class MaskRCNNBoxPredictor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:object_detection.protos.MaskRCNNBoxPredictor)
      MaskRCNNBoxPredictorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MaskRCNNBoxPredictor.newBuilder() to construct.
    private MaskRCNNBoxPredictor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MaskRCNNBoxPredictor() {
      dropoutKeepProbability_ = 0.5F;
      boxCodeSize_ = 4;
      maskPredictionConvDepth_ = 256;
      maskHeight_ = 15;
      maskWidth_ = 15;
      maskPredictionNumConvLayers_ = 2;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new MaskRCNNBoxPredictor();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MaskRCNNBoxPredictor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = fcHyperparams_.toBuilder();
              }
              fcHyperparams_ = input.readMessage(object_detection.protos.HyperparamsOuterClass.Hyperparams.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(fcHyperparams_);
                fcHyperparams_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              useDropout_ = input.readBool();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              dropoutKeepProbability_ = input.readFloat();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              boxCodeSize_ = input.readInt32();
              break;
            }
            case 42: {
              object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) != 0)) {
                subBuilder = convHyperparams_.toBuilder();
              }
              convHyperparams_ = input.readMessage(object_detection.protos.HyperparamsOuterClass.Hyperparams.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(convHyperparams_);
                convHyperparams_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              predictInstanceMasks_ = input.readBool();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              maskPredictionConvDepth_ = input.readInt32();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              predictKeypoints_ = input.readBool();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000100;
              maskHeight_ = input.readInt32();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000200;
              maskWidth_ = input.readInt32();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000400;
              maskPredictionNumConvLayers_ = input.readInt32();
              break;
            }
            case 96: {
              bitField0_ |= 0x00000800;
              masksAreClassAgnostic_ = input.readBool();
              break;
            }
            case 104: {
              bitField0_ |= 0x00001000;
              shareBoxAcrossClasses_ = input.readBool();
              break;
            }
            case 112: {
              bitField0_ |= 0x00002000;
              convolveThenUpsampleMasks_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_MaskRCNNBoxPredictor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_MaskRCNNBoxPredictor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.Builder.class);
    }

    private int bitField0_;
    public static final int FC_HYPERPARAMS_FIELD_NUMBER = 1;
    private object_detection.protos.HyperparamsOuterClass.Hyperparams fcHyperparams_;
    /**
     * <pre>
     * Hyperparameters for fully connected ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
     * @return Whether the fcHyperparams field is set.
     */
    @java.lang.Override
    public boolean hasFcHyperparams() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Hyperparameters for fully connected ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
     * @return The fcHyperparams.
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.Hyperparams getFcHyperparams() {
      return fcHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : fcHyperparams_;
    }
    /**
     * <pre>
     * Hyperparameters for fully connected ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getFcHyperparamsOrBuilder() {
      return fcHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : fcHyperparams_;
    }

    public static final int USE_DROPOUT_FIELD_NUMBER = 2;
    private boolean useDropout_;
    /**
     * <pre>
     * Whether to use dropout op prior to the both box and class predictions.
     * </pre>
     *
     * <code>optional bool use_dropout = 2 [default = false];</code>
     * @return Whether the useDropout field is set.
     */
    @java.lang.Override
    public boolean hasUseDropout() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Whether to use dropout op prior to the both box and class predictions.
     * </pre>
     *
     * <code>optional bool use_dropout = 2 [default = false];</code>
     * @return The useDropout.
     */
    @java.lang.Override
    public boolean getUseDropout() {
      return useDropout_;
    }

    public static final int DROPOUT_KEEP_PROBABILITY_FIELD_NUMBER = 3;
    private float dropoutKeepProbability_;
    /**
     * <pre>
     * Keep probability for dropout. This is only used if use_dropout is true.
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 3 [default = 0.5];</code>
     * @return Whether the dropoutKeepProbability field is set.
     */
    @java.lang.Override
    public boolean hasDropoutKeepProbability() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * Keep probability for dropout. This is only used if use_dropout is true.
     * </pre>
     *
     * <code>optional float dropout_keep_probability = 3 [default = 0.5];</code>
     * @return The dropoutKeepProbability.
     */
    @java.lang.Override
    public float getDropoutKeepProbability() {
      return dropoutKeepProbability_;
    }

    public static final int BOX_CODE_SIZE_FIELD_NUMBER = 4;
    private int boxCodeSize_;
    /**
     * <pre>
     * Size of the encoding for the boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 4 [default = 4];</code>
     * @return Whether the boxCodeSize field is set.
     */
    @java.lang.Override
    public boolean hasBoxCodeSize() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * Size of the encoding for the boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 4 [default = 4];</code>
     * @return The boxCodeSize.
     */
    @java.lang.Override
    public int getBoxCodeSize() {
      return boxCodeSize_;
    }

    public static final int CONV_HYPERPARAMS_FIELD_NUMBER = 5;
    private object_detection.protos.HyperparamsOuterClass.Hyperparams convHyperparams_;
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
     * @return Whether the convHyperparams field is set.
     */
    @java.lang.Override
    public boolean hasConvHyperparams() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
     * @return The convHyperparams.
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams() {
      return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
    }
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder() {
      return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
    }

    public static final int PREDICT_INSTANCE_MASKS_FIELD_NUMBER = 6;
    private boolean predictInstanceMasks_;
    /**
     * <pre>
     * Whether to predict instance masks inside detection boxes.
     * </pre>
     *
     * <code>optional bool predict_instance_masks = 6 [default = false];</code>
     * @return Whether the predictInstanceMasks field is set.
     */
    @java.lang.Override
    public boolean hasPredictInstanceMasks() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * Whether to predict instance masks inside detection boxes.
     * </pre>
     *
     * <code>optional bool predict_instance_masks = 6 [default = false];</code>
     * @return The predictInstanceMasks.
     */
    @java.lang.Override
    public boolean getPredictInstanceMasks() {
      return predictInstanceMasks_;
    }

    public static final int MASK_PREDICTION_CONV_DEPTH_FIELD_NUMBER = 7;
    private int maskPredictionConvDepth_;
    /**
     * <pre>
     * The depth for the first conv2d_transpose op applied to the
     * image_features in the mask prediction branch. If set to 0, the value
     * will be set automatically based on the number of channels in the image
     * features and the number of classes.
     * </pre>
     *
     * <code>optional int32 mask_prediction_conv_depth = 7 [default = 256];</code>
     * @return Whether the maskPredictionConvDepth field is set.
     */
    @java.lang.Override
    public boolean hasMaskPredictionConvDepth() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <pre>
     * The depth for the first conv2d_transpose op applied to the
     * image_features in the mask prediction branch. If set to 0, the value
     * will be set automatically based on the number of channels in the image
     * features and the number of classes.
     * </pre>
     *
     * <code>optional int32 mask_prediction_conv_depth = 7 [default = 256];</code>
     * @return The maskPredictionConvDepth.
     */
    @java.lang.Override
    public int getMaskPredictionConvDepth() {
      return maskPredictionConvDepth_;
    }

    public static final int PREDICT_KEYPOINTS_FIELD_NUMBER = 8;
    private boolean predictKeypoints_;
    /**
     * <pre>
     * Whether to predict keypoints inside detection boxes.
     * </pre>
     *
     * <code>optional bool predict_keypoints = 8 [default = false];</code>
     * @return Whether the predictKeypoints field is set.
     */
    @java.lang.Override
    public boolean hasPredictKeypoints() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <pre>
     * Whether to predict keypoints inside detection boxes.
     * </pre>
     *
     * <code>optional bool predict_keypoints = 8 [default = false];</code>
     * @return The predictKeypoints.
     */
    @java.lang.Override
    public boolean getPredictKeypoints() {
      return predictKeypoints_;
    }

    public static final int MASK_HEIGHT_FIELD_NUMBER = 9;
    private int maskHeight_;
    /**
     * <pre>
     * The height and the width of the predicted mask.
     * </pre>
     *
     * <code>optional int32 mask_height = 9 [default = 15];</code>
     * @return Whether the maskHeight field is set.
     */
    @java.lang.Override
    public boolean hasMaskHeight() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <pre>
     * The height and the width of the predicted mask.
     * </pre>
     *
     * <code>optional int32 mask_height = 9 [default = 15];</code>
     * @return The maskHeight.
     */
    @java.lang.Override
    public int getMaskHeight() {
      return maskHeight_;
    }

    public static final int MASK_WIDTH_FIELD_NUMBER = 10;
    private int maskWidth_;
    /**
     * <code>optional int32 mask_width = 10 [default = 15];</code>
     * @return Whether the maskWidth field is set.
     */
    @java.lang.Override
    public boolean hasMaskWidth() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional int32 mask_width = 10 [default = 15];</code>
     * @return The maskWidth.
     */
    @java.lang.Override
    public int getMaskWidth() {
      return maskWidth_;
    }

    public static final int MASK_PREDICTION_NUM_CONV_LAYERS_FIELD_NUMBER = 11;
    private int maskPredictionNumConvLayers_;
    /**
     * <pre>
     * The number of convolutions applied to image_features in the mask prediction
     * branch.
     * </pre>
     *
     * <code>optional int32 mask_prediction_num_conv_layers = 11 [default = 2];</code>
     * @return Whether the maskPredictionNumConvLayers field is set.
     */
    @java.lang.Override
    public boolean hasMaskPredictionNumConvLayers() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <pre>
     * The number of convolutions applied to image_features in the mask prediction
     * branch.
     * </pre>
     *
     * <code>optional int32 mask_prediction_num_conv_layers = 11 [default = 2];</code>
     * @return The maskPredictionNumConvLayers.
     */
    @java.lang.Override
    public int getMaskPredictionNumConvLayers() {
      return maskPredictionNumConvLayers_;
    }

    public static final int MASKS_ARE_CLASS_AGNOSTIC_FIELD_NUMBER = 12;
    private boolean masksAreClassAgnostic_;
    /**
     * <code>optional bool masks_are_class_agnostic = 12 [default = false];</code>
     * @return Whether the masksAreClassAgnostic field is set.
     */
    @java.lang.Override
    public boolean hasMasksAreClassAgnostic() {
      return ((bitField0_ & 0x00000800) != 0);
    }
    /**
     * <code>optional bool masks_are_class_agnostic = 12 [default = false];</code>
     * @return The masksAreClassAgnostic.
     */
    @java.lang.Override
    public boolean getMasksAreClassAgnostic() {
      return masksAreClassAgnostic_;
    }

    public static final int SHARE_BOX_ACROSS_CLASSES_FIELD_NUMBER = 13;
    private boolean shareBoxAcrossClasses_;
    /**
     * <pre>
     * Whether to use one box for all classes rather than a different box for each
     * class.
     * </pre>
     *
     * <code>optional bool share_box_across_classes = 13 [default = false];</code>
     * @return Whether the shareBoxAcrossClasses field is set.
     */
    @java.lang.Override
    public boolean hasShareBoxAcrossClasses() {
      return ((bitField0_ & 0x00001000) != 0);
    }
    /**
     * <pre>
     * Whether to use one box for all classes rather than a different box for each
     * class.
     * </pre>
     *
     * <code>optional bool share_box_across_classes = 13 [default = false];</code>
     * @return The shareBoxAcrossClasses.
     */
    @java.lang.Override
    public boolean getShareBoxAcrossClasses() {
      return shareBoxAcrossClasses_;
    }

    public static final int CONVOLVE_THEN_UPSAMPLE_MASKS_FIELD_NUMBER = 14;
    private boolean convolveThenUpsampleMasks_;
    /**
     * <pre>
     * Whether to apply convolutions on mask features before upsampling using
     * nearest neighbor resizing.
     * By default, mask features are resized to [`mask_height`, `mask_width`]
     * before applying convolutions and predicting masks.
     * </pre>
     *
     * <code>optional bool convolve_then_upsample_masks = 14 [default = false];</code>
     * @return Whether the convolveThenUpsampleMasks field is set.
     */
    @java.lang.Override
    public boolean hasConvolveThenUpsampleMasks() {
      return ((bitField0_ & 0x00002000) != 0);
    }
    /**
     * <pre>
     * Whether to apply convolutions on mask features before upsampling using
     * nearest neighbor resizing.
     * By default, mask features are resized to [`mask_height`, `mask_width`]
     * before applying convolutions and predicting masks.
     * </pre>
     *
     * <code>optional bool convolve_then_upsample_masks = 14 [default = false];</code>
     * @return The convolveThenUpsampleMasks.
     */
    @java.lang.Override
    public boolean getConvolveThenUpsampleMasks() {
      return convolveThenUpsampleMasks_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getFcHyperparams());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeBool(2, useDropout_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFloat(3, dropoutKeepProbability_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeInt32(4, boxCodeSize_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeMessage(5, getConvHyperparams());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeBool(6, predictInstanceMasks_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeInt32(7, maskPredictionConvDepth_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeBool(8, predictKeypoints_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        output.writeInt32(9, maskHeight_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        output.writeInt32(10, maskWidth_);
      }
      if (((bitField0_ & 0x00000400) != 0)) {
        output.writeInt32(11, maskPredictionNumConvLayers_);
      }
      if (((bitField0_ & 0x00000800) != 0)) {
        output.writeBool(12, masksAreClassAgnostic_);
      }
      if (((bitField0_ & 0x00001000) != 0)) {
        output.writeBool(13, shareBoxAcrossClasses_);
      }
      if (((bitField0_ & 0x00002000) != 0)) {
        output.writeBool(14, convolveThenUpsampleMasks_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFcHyperparams());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, useDropout_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(3, dropoutKeepProbability_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, boxCodeSize_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getConvHyperparams());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, predictInstanceMasks_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, maskPredictionConvDepth_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, predictKeypoints_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, maskHeight_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(10, maskWidth_);
      }
      if (((bitField0_ & 0x00000400) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(11, maskPredictionNumConvLayers_);
      }
      if (((bitField0_ & 0x00000800) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, masksAreClassAgnostic_);
      }
      if (((bitField0_ & 0x00001000) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, shareBoxAcrossClasses_);
      }
      if (((bitField0_ & 0x00002000) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(14, convolveThenUpsampleMasks_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor)) {
        return super.equals(obj);
      }
      object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor other = (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) obj;

      if (hasFcHyperparams() != other.hasFcHyperparams()) return false;
      if (hasFcHyperparams()) {
        if (!getFcHyperparams()
            .equals(other.getFcHyperparams())) return false;
      }
      if (hasUseDropout() != other.hasUseDropout()) return false;
      if (hasUseDropout()) {
        if (getUseDropout()
            != other.getUseDropout()) return false;
      }
      if (hasDropoutKeepProbability() != other.hasDropoutKeepProbability()) return false;
      if (hasDropoutKeepProbability()) {
        if (java.lang.Float.floatToIntBits(getDropoutKeepProbability())
            != java.lang.Float.floatToIntBits(
                other.getDropoutKeepProbability())) return false;
      }
      if (hasBoxCodeSize() != other.hasBoxCodeSize()) return false;
      if (hasBoxCodeSize()) {
        if (getBoxCodeSize()
            != other.getBoxCodeSize()) return false;
      }
      if (hasConvHyperparams() != other.hasConvHyperparams()) return false;
      if (hasConvHyperparams()) {
        if (!getConvHyperparams()
            .equals(other.getConvHyperparams())) return false;
      }
      if (hasPredictInstanceMasks() != other.hasPredictInstanceMasks()) return false;
      if (hasPredictInstanceMasks()) {
        if (getPredictInstanceMasks()
            != other.getPredictInstanceMasks()) return false;
      }
      if (hasMaskPredictionConvDepth() != other.hasMaskPredictionConvDepth()) return false;
      if (hasMaskPredictionConvDepth()) {
        if (getMaskPredictionConvDepth()
            != other.getMaskPredictionConvDepth()) return false;
      }
      if (hasPredictKeypoints() != other.hasPredictKeypoints()) return false;
      if (hasPredictKeypoints()) {
        if (getPredictKeypoints()
            != other.getPredictKeypoints()) return false;
      }
      if (hasMaskHeight() != other.hasMaskHeight()) return false;
      if (hasMaskHeight()) {
        if (getMaskHeight()
            != other.getMaskHeight()) return false;
      }
      if (hasMaskWidth() != other.hasMaskWidth()) return false;
      if (hasMaskWidth()) {
        if (getMaskWidth()
            != other.getMaskWidth()) return false;
      }
      if (hasMaskPredictionNumConvLayers() != other.hasMaskPredictionNumConvLayers()) return false;
      if (hasMaskPredictionNumConvLayers()) {
        if (getMaskPredictionNumConvLayers()
            != other.getMaskPredictionNumConvLayers()) return false;
      }
      if (hasMasksAreClassAgnostic() != other.hasMasksAreClassAgnostic()) return false;
      if (hasMasksAreClassAgnostic()) {
        if (getMasksAreClassAgnostic()
            != other.getMasksAreClassAgnostic()) return false;
      }
      if (hasShareBoxAcrossClasses() != other.hasShareBoxAcrossClasses()) return false;
      if (hasShareBoxAcrossClasses()) {
        if (getShareBoxAcrossClasses()
            != other.getShareBoxAcrossClasses()) return false;
      }
      if (hasConvolveThenUpsampleMasks() != other.hasConvolveThenUpsampleMasks()) return false;
      if (hasConvolveThenUpsampleMasks()) {
        if (getConvolveThenUpsampleMasks()
            != other.getConvolveThenUpsampleMasks()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFcHyperparams()) {
        hash = (37 * hash) + FC_HYPERPARAMS_FIELD_NUMBER;
        hash = (53 * hash) + getFcHyperparams().hashCode();
      }
      if (hasUseDropout()) {
        hash = (37 * hash) + USE_DROPOUT_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getUseDropout());
      }
      if (hasDropoutKeepProbability()) {
        hash = (37 * hash) + DROPOUT_KEEP_PROBABILITY_FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getDropoutKeepProbability());
      }
      if (hasBoxCodeSize()) {
        hash = (37 * hash) + BOX_CODE_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getBoxCodeSize();
      }
      if (hasConvHyperparams()) {
        hash = (37 * hash) + CONV_HYPERPARAMS_FIELD_NUMBER;
        hash = (53 * hash) + getConvHyperparams().hashCode();
      }
      if (hasPredictInstanceMasks()) {
        hash = (37 * hash) + PREDICT_INSTANCE_MASKS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getPredictInstanceMasks());
      }
      if (hasMaskPredictionConvDepth()) {
        hash = (37 * hash) + MASK_PREDICTION_CONV_DEPTH_FIELD_NUMBER;
        hash = (53 * hash) + getMaskPredictionConvDepth();
      }
      if (hasPredictKeypoints()) {
        hash = (37 * hash) + PREDICT_KEYPOINTS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getPredictKeypoints());
      }
      if (hasMaskHeight()) {
        hash = (37 * hash) + MASK_HEIGHT_FIELD_NUMBER;
        hash = (53 * hash) + getMaskHeight();
      }
      if (hasMaskWidth()) {
        hash = (37 * hash) + MASK_WIDTH_FIELD_NUMBER;
        hash = (53 * hash) + getMaskWidth();
      }
      if (hasMaskPredictionNumConvLayers()) {
        hash = (37 * hash) + MASK_PREDICTION_NUM_CONV_LAYERS_FIELD_NUMBER;
        hash = (53 * hash) + getMaskPredictionNumConvLayers();
      }
      if (hasMasksAreClassAgnostic()) {
        hash = (37 * hash) + MASKS_ARE_CLASS_AGNOSTIC_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getMasksAreClassAgnostic());
      }
      if (hasShareBoxAcrossClasses()) {
        hash = (37 * hash) + SHARE_BOX_ACROSS_CLASSES_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getShareBoxAcrossClasses());
      }
      if (hasConvolveThenUpsampleMasks()) {
        hash = (37 * hash) + CONVOLVE_THEN_UPSAMPLE_MASKS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getConvolveThenUpsampleMasks());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * TODO(alirezafathi): Refactor the proto file to be able to configure mask rcnn
     * head easily.
     * Next id: 15
     * </pre>
     *
     * Protobuf type {@code object_detection.protos.MaskRCNNBoxPredictor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:object_detection.protos.MaskRCNNBoxPredictor)
        object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_MaskRCNNBoxPredictor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_MaskRCNNBoxPredictor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.Builder.class);
      }

      // Construct using object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFcHyperparamsFieldBuilder();
          getConvHyperparamsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (fcHyperparamsBuilder_ == null) {
          fcHyperparams_ = null;
        } else {
          fcHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        useDropout_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        dropoutKeepProbability_ = 0.5F;
        bitField0_ = (bitField0_ & ~0x00000004);
        boxCodeSize_ = 4;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = null;
        } else {
          convHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        predictInstanceMasks_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        maskPredictionConvDepth_ = 256;
        bitField0_ = (bitField0_ & ~0x00000040);
        predictKeypoints_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        maskHeight_ = 15;
        bitField0_ = (bitField0_ & ~0x00000100);
        maskWidth_ = 15;
        bitField0_ = (bitField0_ & ~0x00000200);
        maskPredictionNumConvLayers_ = 2;
        bitField0_ = (bitField0_ & ~0x00000400);
        masksAreClassAgnostic_ = false;
        bitField0_ = (bitField0_ & ~0x00000800);
        shareBoxAcrossClasses_ = false;
        bitField0_ = (bitField0_ & ~0x00001000);
        convolveThenUpsampleMasks_ = false;
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_MaskRCNNBoxPredictor_descriptor;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor getDefaultInstanceForType() {
        return object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance();
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor build() {
        object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor buildPartial() {
        object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor result = new object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (fcHyperparamsBuilder_ == null) {
            result.fcHyperparams_ = fcHyperparams_;
          } else {
            result.fcHyperparams_ = fcHyperparamsBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.useDropout_ = useDropout_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.dropoutKeepProbability_ = dropoutKeepProbability_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.boxCodeSize_ = boxCodeSize_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          if (convHyperparamsBuilder_ == null) {
            result.convHyperparams_ = convHyperparams_;
          } else {
            result.convHyperparams_ = convHyperparamsBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.predictInstanceMasks_ = predictInstanceMasks_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.maskPredictionConvDepth_ = maskPredictionConvDepth_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.predictKeypoints_ = predictKeypoints_;
          to_bitField0_ |= 0x00000080;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          to_bitField0_ |= 0x00000100;
        }
        result.maskHeight_ = maskHeight_;
        if (((from_bitField0_ & 0x00000200) != 0)) {
          to_bitField0_ |= 0x00000200;
        }
        result.maskWidth_ = maskWidth_;
        if (((from_bitField0_ & 0x00000400) != 0)) {
          to_bitField0_ |= 0x00000400;
        }
        result.maskPredictionNumConvLayers_ = maskPredictionNumConvLayers_;
        if (((from_bitField0_ & 0x00000800) != 0)) {
          result.masksAreClassAgnostic_ = masksAreClassAgnostic_;
          to_bitField0_ |= 0x00000800;
        }
        if (((from_bitField0_ & 0x00001000) != 0)) {
          result.shareBoxAcrossClasses_ = shareBoxAcrossClasses_;
          to_bitField0_ |= 0x00001000;
        }
        if (((from_bitField0_ & 0x00002000) != 0)) {
          result.convolveThenUpsampleMasks_ = convolveThenUpsampleMasks_;
          to_bitField0_ |= 0x00002000;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) {
          return mergeFrom((object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor other) {
        if (other == object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor.getDefaultInstance()) return this;
        if (other.hasFcHyperparams()) {
          mergeFcHyperparams(other.getFcHyperparams());
        }
        if (other.hasUseDropout()) {
          setUseDropout(other.getUseDropout());
        }
        if (other.hasDropoutKeepProbability()) {
          setDropoutKeepProbability(other.getDropoutKeepProbability());
        }
        if (other.hasBoxCodeSize()) {
          setBoxCodeSize(other.getBoxCodeSize());
        }
        if (other.hasConvHyperparams()) {
          mergeConvHyperparams(other.getConvHyperparams());
        }
        if (other.hasPredictInstanceMasks()) {
          setPredictInstanceMasks(other.getPredictInstanceMasks());
        }
        if (other.hasMaskPredictionConvDepth()) {
          setMaskPredictionConvDepth(other.getMaskPredictionConvDepth());
        }
        if (other.hasPredictKeypoints()) {
          setPredictKeypoints(other.getPredictKeypoints());
        }
        if (other.hasMaskHeight()) {
          setMaskHeight(other.getMaskHeight());
        }
        if (other.hasMaskWidth()) {
          setMaskWidth(other.getMaskWidth());
        }
        if (other.hasMaskPredictionNumConvLayers()) {
          setMaskPredictionNumConvLayers(other.getMaskPredictionNumConvLayers());
        }
        if (other.hasMasksAreClassAgnostic()) {
          setMasksAreClassAgnostic(other.getMasksAreClassAgnostic());
        }
        if (other.hasShareBoxAcrossClasses()) {
          setShareBoxAcrossClasses(other.getShareBoxAcrossClasses());
        }
        if (other.hasConvolveThenUpsampleMasks()) {
          setConvolveThenUpsampleMasks(other.getConvolveThenUpsampleMasks());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private object_detection.protos.HyperparamsOuterClass.Hyperparams fcHyperparams_;
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder> fcHyperparamsBuilder_;
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       * @return Whether the fcHyperparams field is set.
       */
      public boolean hasFcHyperparams() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       * @return The fcHyperparams.
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams getFcHyperparams() {
        if (fcHyperparamsBuilder_ == null) {
          return fcHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : fcHyperparams_;
        } else {
          return fcHyperparamsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       */
      public Builder setFcHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (fcHyperparamsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          fcHyperparams_ = value;
          onChanged();
        } else {
          fcHyperparamsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       */
      public Builder setFcHyperparams(
          object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder builderForValue) {
        if (fcHyperparamsBuilder_ == null) {
          fcHyperparams_ = builderForValue.build();
          onChanged();
        } else {
          fcHyperparamsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       */
      public Builder mergeFcHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (fcHyperparamsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              fcHyperparams_ != null &&
              fcHyperparams_ != object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance()) {
            fcHyperparams_ =
              object_detection.protos.HyperparamsOuterClass.Hyperparams.newBuilder(fcHyperparams_).mergeFrom(value).buildPartial();
          } else {
            fcHyperparams_ = value;
          }
          onChanged();
        } else {
          fcHyperparamsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       */
      public Builder clearFcHyperparams() {
        if (fcHyperparamsBuilder_ == null) {
          fcHyperparams_ = null;
          onChanged();
        } else {
          fcHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder getFcHyperparamsBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getFcHyperparamsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getFcHyperparamsOrBuilder() {
        if (fcHyperparamsBuilder_ != null) {
          return fcHyperparamsBuilder_.getMessageOrBuilder();
        } else {
          return fcHyperparams_ == null ?
              object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : fcHyperparams_;
        }
      }
      /**
       * <pre>
       * Hyperparameters for fully connected ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams fc_hyperparams = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>
          getFcHyperparamsFieldBuilder() {
        if (fcHyperparamsBuilder_ == null) {
          fcHyperparamsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>(
                  getFcHyperparams(),
                  getParentForChildren(),
                  isClean());
          fcHyperparams_ = null;
        }
        return fcHyperparamsBuilder_;
      }

      private boolean useDropout_ ;
      /**
       * <pre>
       * Whether to use dropout op prior to the both box and class predictions.
       * </pre>
       *
       * <code>optional bool use_dropout = 2 [default = false];</code>
       * @return Whether the useDropout field is set.
       */
      @java.lang.Override
      public boolean hasUseDropout() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * Whether to use dropout op prior to the both box and class predictions.
       * </pre>
       *
       * <code>optional bool use_dropout = 2 [default = false];</code>
       * @return The useDropout.
       */
      @java.lang.Override
      public boolean getUseDropout() {
        return useDropout_;
      }
      /**
       * <pre>
       * Whether to use dropout op prior to the both box and class predictions.
       * </pre>
       *
       * <code>optional bool use_dropout = 2 [default = false];</code>
       * @param value The useDropout to set.
       * @return This builder for chaining.
       */
      public Builder setUseDropout(boolean value) {
        bitField0_ |= 0x00000002;
        useDropout_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to use dropout op prior to the both box and class predictions.
       * </pre>
       *
       * <code>optional bool use_dropout = 2 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearUseDropout() {
        bitField0_ = (bitField0_ & ~0x00000002);
        useDropout_ = false;
        onChanged();
        return this;
      }

      private float dropoutKeepProbability_ = 0.5F;
      /**
       * <pre>
       * Keep probability for dropout. This is only used if use_dropout is true.
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 3 [default = 0.5];</code>
       * @return Whether the dropoutKeepProbability field is set.
       */
      @java.lang.Override
      public boolean hasDropoutKeepProbability() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * Keep probability for dropout. This is only used if use_dropout is true.
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 3 [default = 0.5];</code>
       * @return The dropoutKeepProbability.
       */
      @java.lang.Override
      public float getDropoutKeepProbability() {
        return dropoutKeepProbability_;
      }
      /**
       * <pre>
       * Keep probability for dropout. This is only used if use_dropout is true.
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 3 [default = 0.5];</code>
       * @param value The dropoutKeepProbability to set.
       * @return This builder for chaining.
       */
      public Builder setDropoutKeepProbability(float value) {
        bitField0_ |= 0x00000004;
        dropoutKeepProbability_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Keep probability for dropout. This is only used if use_dropout is true.
       * </pre>
       *
       * <code>optional float dropout_keep_probability = 3 [default = 0.5];</code>
       * @return This builder for chaining.
       */
      public Builder clearDropoutKeepProbability() {
        bitField0_ = (bitField0_ & ~0x00000004);
        dropoutKeepProbability_ = 0.5F;
        onChanged();
        return this;
      }

      private int boxCodeSize_ = 4;
      /**
       * <pre>
       * Size of the encoding for the boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 4 [default = 4];</code>
       * @return Whether the boxCodeSize field is set.
       */
      @java.lang.Override
      public boolean hasBoxCodeSize() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <pre>
       * Size of the encoding for the boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 4 [default = 4];</code>
       * @return The boxCodeSize.
       */
      @java.lang.Override
      public int getBoxCodeSize() {
        return boxCodeSize_;
      }
      /**
       * <pre>
       * Size of the encoding for the boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 4 [default = 4];</code>
       * @param value The boxCodeSize to set.
       * @return This builder for chaining.
       */
      public Builder setBoxCodeSize(int value) {
        bitField0_ |= 0x00000008;
        boxCodeSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Size of the encoding for the boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 4 [default = 4];</code>
       * @return This builder for chaining.
       */
      public Builder clearBoxCodeSize() {
        bitField0_ = (bitField0_ & ~0x00000008);
        boxCodeSize_ = 4;
        onChanged();
        return this;
      }

      private object_detection.protos.HyperparamsOuterClass.Hyperparams convHyperparams_;
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder> convHyperparamsBuilder_;
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       * @return Whether the convHyperparams field is set.
       */
      public boolean hasConvHyperparams() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       * @return The convHyperparams.
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams() {
        if (convHyperparamsBuilder_ == null) {
          return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
        } else {
          return convHyperparamsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       */
      public Builder setConvHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (convHyperparamsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          convHyperparams_ = value;
          onChanged();
        } else {
          convHyperparamsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       */
      public Builder setConvHyperparams(
          object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder builderForValue) {
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = builderForValue.build();
          onChanged();
        } else {
          convHyperparamsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       */
      public Builder mergeConvHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (convHyperparamsBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
              convHyperparams_ != null &&
              convHyperparams_ != object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance()) {
            convHyperparams_ =
              object_detection.protos.HyperparamsOuterClass.Hyperparams.newBuilder(convHyperparams_).mergeFrom(value).buildPartial();
          } else {
            convHyperparams_ = value;
          }
          onChanged();
        } else {
          convHyperparamsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       */
      public Builder clearConvHyperparams() {
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = null;
          onChanged();
        } else {
          convHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder getConvHyperparamsBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getConvHyperparamsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder() {
        if (convHyperparamsBuilder_ != null) {
          return convHyperparamsBuilder_.getMessageOrBuilder();
        } else {
          return convHyperparams_ == null ?
              object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
        }
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>
          getConvHyperparamsFieldBuilder() {
        if (convHyperparamsBuilder_ == null) {
          convHyperparamsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>(
                  getConvHyperparams(),
                  getParentForChildren(),
                  isClean());
          convHyperparams_ = null;
        }
        return convHyperparamsBuilder_;
      }

      private boolean predictInstanceMasks_ ;
      /**
       * <pre>
       * Whether to predict instance masks inside detection boxes.
       * </pre>
       *
       * <code>optional bool predict_instance_masks = 6 [default = false];</code>
       * @return Whether the predictInstanceMasks field is set.
       */
      @java.lang.Override
      public boolean hasPredictInstanceMasks() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <pre>
       * Whether to predict instance masks inside detection boxes.
       * </pre>
       *
       * <code>optional bool predict_instance_masks = 6 [default = false];</code>
       * @return The predictInstanceMasks.
       */
      @java.lang.Override
      public boolean getPredictInstanceMasks() {
        return predictInstanceMasks_;
      }
      /**
       * <pre>
       * Whether to predict instance masks inside detection boxes.
       * </pre>
       *
       * <code>optional bool predict_instance_masks = 6 [default = false];</code>
       * @param value The predictInstanceMasks to set.
       * @return This builder for chaining.
       */
      public Builder setPredictInstanceMasks(boolean value) {
        bitField0_ |= 0x00000020;
        predictInstanceMasks_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to predict instance masks inside detection boxes.
       * </pre>
       *
       * <code>optional bool predict_instance_masks = 6 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearPredictInstanceMasks() {
        bitField0_ = (bitField0_ & ~0x00000020);
        predictInstanceMasks_ = false;
        onChanged();
        return this;
      }

      private int maskPredictionConvDepth_ = 256;
      /**
       * <pre>
       * The depth for the first conv2d_transpose op applied to the
       * image_features in the mask prediction branch. If set to 0, the value
       * will be set automatically based on the number of channels in the image
       * features and the number of classes.
       * </pre>
       *
       * <code>optional int32 mask_prediction_conv_depth = 7 [default = 256];</code>
       * @return Whether the maskPredictionConvDepth field is set.
       */
      @java.lang.Override
      public boolean hasMaskPredictionConvDepth() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <pre>
       * The depth for the first conv2d_transpose op applied to the
       * image_features in the mask prediction branch. If set to 0, the value
       * will be set automatically based on the number of channels in the image
       * features and the number of classes.
       * </pre>
       *
       * <code>optional int32 mask_prediction_conv_depth = 7 [default = 256];</code>
       * @return The maskPredictionConvDepth.
       */
      @java.lang.Override
      public int getMaskPredictionConvDepth() {
        return maskPredictionConvDepth_;
      }
      /**
       * <pre>
       * The depth for the first conv2d_transpose op applied to the
       * image_features in the mask prediction branch. If set to 0, the value
       * will be set automatically based on the number of channels in the image
       * features and the number of classes.
       * </pre>
       *
       * <code>optional int32 mask_prediction_conv_depth = 7 [default = 256];</code>
       * @param value The maskPredictionConvDepth to set.
       * @return This builder for chaining.
       */
      public Builder setMaskPredictionConvDepth(int value) {
        bitField0_ |= 0x00000040;
        maskPredictionConvDepth_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The depth for the first conv2d_transpose op applied to the
       * image_features in the mask prediction branch. If set to 0, the value
       * will be set automatically based on the number of channels in the image
       * features and the number of classes.
       * </pre>
       *
       * <code>optional int32 mask_prediction_conv_depth = 7 [default = 256];</code>
       * @return This builder for chaining.
       */
      public Builder clearMaskPredictionConvDepth() {
        bitField0_ = (bitField0_ & ~0x00000040);
        maskPredictionConvDepth_ = 256;
        onChanged();
        return this;
      }

      private boolean predictKeypoints_ ;
      /**
       * <pre>
       * Whether to predict keypoints inside detection boxes.
       * </pre>
       *
       * <code>optional bool predict_keypoints = 8 [default = false];</code>
       * @return Whether the predictKeypoints field is set.
       */
      @java.lang.Override
      public boolean hasPredictKeypoints() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <pre>
       * Whether to predict keypoints inside detection boxes.
       * </pre>
       *
       * <code>optional bool predict_keypoints = 8 [default = false];</code>
       * @return The predictKeypoints.
       */
      @java.lang.Override
      public boolean getPredictKeypoints() {
        return predictKeypoints_;
      }
      /**
       * <pre>
       * Whether to predict keypoints inside detection boxes.
       * </pre>
       *
       * <code>optional bool predict_keypoints = 8 [default = false];</code>
       * @param value The predictKeypoints to set.
       * @return This builder for chaining.
       */
      public Builder setPredictKeypoints(boolean value) {
        bitField0_ |= 0x00000080;
        predictKeypoints_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to predict keypoints inside detection boxes.
       * </pre>
       *
       * <code>optional bool predict_keypoints = 8 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearPredictKeypoints() {
        bitField0_ = (bitField0_ & ~0x00000080);
        predictKeypoints_ = false;
        onChanged();
        return this;
      }

      private int maskHeight_ = 15;
      /**
       * <pre>
       * The height and the width of the predicted mask.
       * </pre>
       *
       * <code>optional int32 mask_height = 9 [default = 15];</code>
       * @return Whether the maskHeight field is set.
       */
      @java.lang.Override
      public boolean hasMaskHeight() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <pre>
       * The height and the width of the predicted mask.
       * </pre>
       *
       * <code>optional int32 mask_height = 9 [default = 15];</code>
       * @return The maskHeight.
       */
      @java.lang.Override
      public int getMaskHeight() {
        return maskHeight_;
      }
      /**
       * <pre>
       * The height and the width of the predicted mask.
       * </pre>
       *
       * <code>optional int32 mask_height = 9 [default = 15];</code>
       * @param value The maskHeight to set.
       * @return This builder for chaining.
       */
      public Builder setMaskHeight(int value) {
        bitField0_ |= 0x00000100;
        maskHeight_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The height and the width of the predicted mask.
       * </pre>
       *
       * <code>optional int32 mask_height = 9 [default = 15];</code>
       * @return This builder for chaining.
       */
      public Builder clearMaskHeight() {
        bitField0_ = (bitField0_ & ~0x00000100);
        maskHeight_ = 15;
        onChanged();
        return this;
      }

      private int maskWidth_ = 15;
      /**
       * <code>optional int32 mask_width = 10 [default = 15];</code>
       * @return Whether the maskWidth field is set.
       */
      @java.lang.Override
      public boolean hasMaskWidth() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <code>optional int32 mask_width = 10 [default = 15];</code>
       * @return The maskWidth.
       */
      @java.lang.Override
      public int getMaskWidth() {
        return maskWidth_;
      }
      /**
       * <code>optional int32 mask_width = 10 [default = 15];</code>
       * @param value The maskWidth to set.
       * @return This builder for chaining.
       */
      public Builder setMaskWidth(int value) {
        bitField0_ |= 0x00000200;
        maskWidth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 mask_width = 10 [default = 15];</code>
       * @return This builder for chaining.
       */
      public Builder clearMaskWidth() {
        bitField0_ = (bitField0_ & ~0x00000200);
        maskWidth_ = 15;
        onChanged();
        return this;
      }

      private int maskPredictionNumConvLayers_ = 2;
      /**
       * <pre>
       * The number of convolutions applied to image_features in the mask prediction
       * branch.
       * </pre>
       *
       * <code>optional int32 mask_prediction_num_conv_layers = 11 [default = 2];</code>
       * @return Whether the maskPredictionNumConvLayers field is set.
       */
      @java.lang.Override
      public boolean hasMaskPredictionNumConvLayers() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <pre>
       * The number of convolutions applied to image_features in the mask prediction
       * branch.
       * </pre>
       *
       * <code>optional int32 mask_prediction_num_conv_layers = 11 [default = 2];</code>
       * @return The maskPredictionNumConvLayers.
       */
      @java.lang.Override
      public int getMaskPredictionNumConvLayers() {
        return maskPredictionNumConvLayers_;
      }
      /**
       * <pre>
       * The number of convolutions applied to image_features in the mask prediction
       * branch.
       * </pre>
       *
       * <code>optional int32 mask_prediction_num_conv_layers = 11 [default = 2];</code>
       * @param value The maskPredictionNumConvLayers to set.
       * @return This builder for chaining.
       */
      public Builder setMaskPredictionNumConvLayers(int value) {
        bitField0_ |= 0x00000400;
        maskPredictionNumConvLayers_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The number of convolutions applied to image_features in the mask prediction
       * branch.
       * </pre>
       *
       * <code>optional int32 mask_prediction_num_conv_layers = 11 [default = 2];</code>
       * @return This builder for chaining.
       */
      public Builder clearMaskPredictionNumConvLayers() {
        bitField0_ = (bitField0_ & ~0x00000400);
        maskPredictionNumConvLayers_ = 2;
        onChanged();
        return this;
      }

      private boolean masksAreClassAgnostic_ ;
      /**
       * <code>optional bool masks_are_class_agnostic = 12 [default = false];</code>
       * @return Whether the masksAreClassAgnostic field is set.
       */
      @java.lang.Override
      public boolean hasMasksAreClassAgnostic() {
        return ((bitField0_ & 0x00000800) != 0);
      }
      /**
       * <code>optional bool masks_are_class_agnostic = 12 [default = false];</code>
       * @return The masksAreClassAgnostic.
       */
      @java.lang.Override
      public boolean getMasksAreClassAgnostic() {
        return masksAreClassAgnostic_;
      }
      /**
       * <code>optional bool masks_are_class_agnostic = 12 [default = false];</code>
       * @param value The masksAreClassAgnostic to set.
       * @return This builder for chaining.
       */
      public Builder setMasksAreClassAgnostic(boolean value) {
        bitField0_ |= 0x00000800;
        masksAreClassAgnostic_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool masks_are_class_agnostic = 12 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearMasksAreClassAgnostic() {
        bitField0_ = (bitField0_ & ~0x00000800);
        masksAreClassAgnostic_ = false;
        onChanged();
        return this;
      }

      private boolean shareBoxAcrossClasses_ ;
      /**
       * <pre>
       * Whether to use one box for all classes rather than a different box for each
       * class.
       * </pre>
       *
       * <code>optional bool share_box_across_classes = 13 [default = false];</code>
       * @return Whether the shareBoxAcrossClasses field is set.
       */
      @java.lang.Override
      public boolean hasShareBoxAcrossClasses() {
        return ((bitField0_ & 0x00001000) != 0);
      }
      /**
       * <pre>
       * Whether to use one box for all classes rather than a different box for each
       * class.
       * </pre>
       *
       * <code>optional bool share_box_across_classes = 13 [default = false];</code>
       * @return The shareBoxAcrossClasses.
       */
      @java.lang.Override
      public boolean getShareBoxAcrossClasses() {
        return shareBoxAcrossClasses_;
      }
      /**
       * <pre>
       * Whether to use one box for all classes rather than a different box for each
       * class.
       * </pre>
       *
       * <code>optional bool share_box_across_classes = 13 [default = false];</code>
       * @param value The shareBoxAcrossClasses to set.
       * @return This builder for chaining.
       */
      public Builder setShareBoxAcrossClasses(boolean value) {
        bitField0_ |= 0x00001000;
        shareBoxAcrossClasses_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to use one box for all classes rather than a different box for each
       * class.
       * </pre>
       *
       * <code>optional bool share_box_across_classes = 13 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearShareBoxAcrossClasses() {
        bitField0_ = (bitField0_ & ~0x00001000);
        shareBoxAcrossClasses_ = false;
        onChanged();
        return this;
      }

      private boolean convolveThenUpsampleMasks_ ;
      /**
       * <pre>
       * Whether to apply convolutions on mask features before upsampling using
       * nearest neighbor resizing.
       * By default, mask features are resized to [`mask_height`, `mask_width`]
       * before applying convolutions and predicting masks.
       * </pre>
       *
       * <code>optional bool convolve_then_upsample_masks = 14 [default = false];</code>
       * @return Whether the convolveThenUpsampleMasks field is set.
       */
      @java.lang.Override
      public boolean hasConvolveThenUpsampleMasks() {
        return ((bitField0_ & 0x00002000) != 0);
      }
      /**
       * <pre>
       * Whether to apply convolutions on mask features before upsampling using
       * nearest neighbor resizing.
       * By default, mask features are resized to [`mask_height`, `mask_width`]
       * before applying convolutions and predicting masks.
       * </pre>
       *
       * <code>optional bool convolve_then_upsample_masks = 14 [default = false];</code>
       * @return The convolveThenUpsampleMasks.
       */
      @java.lang.Override
      public boolean getConvolveThenUpsampleMasks() {
        return convolveThenUpsampleMasks_;
      }
      /**
       * <pre>
       * Whether to apply convolutions on mask features before upsampling using
       * nearest neighbor resizing.
       * By default, mask features are resized to [`mask_height`, `mask_width`]
       * before applying convolutions and predicting masks.
       * </pre>
       *
       * <code>optional bool convolve_then_upsample_masks = 14 [default = false];</code>
       * @param value The convolveThenUpsampleMasks to set.
       * @return This builder for chaining.
       */
      public Builder setConvolveThenUpsampleMasks(boolean value) {
        bitField0_ |= 0x00002000;
        convolveThenUpsampleMasks_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to apply convolutions on mask features before upsampling using
       * nearest neighbor resizing.
       * By default, mask features are resized to [`mask_height`, `mask_width`]
       * before applying convolutions and predicting masks.
       * </pre>
       *
       * <code>optional bool convolve_then_upsample_masks = 14 [default = false];</code>
       * @return This builder for chaining.
       */
      public Builder clearConvolveThenUpsampleMasks() {
        bitField0_ = (bitField0_ & ~0x00002000);
        convolveThenUpsampleMasks_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:object_detection.protos.MaskRCNNBoxPredictor)
    }

    // @@protoc_insertion_point(class_scope:object_detection.protos.MaskRCNNBoxPredictor)
    private static final object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor();
    }

    public static object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<MaskRCNNBoxPredictor>
        PARSER = new com.google.protobuf.AbstractParser<MaskRCNNBoxPredictor>() {
      @java.lang.Override
      public MaskRCNNBoxPredictor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MaskRCNNBoxPredictor(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<MaskRCNNBoxPredictor> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<MaskRCNNBoxPredictor> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.MaskRCNNBoxPredictor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RfcnBoxPredictorOrBuilder extends
      // @@protoc_insertion_point(interface_extends:object_detection.protos.RfcnBoxPredictor)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return Whether the convHyperparams field is set.
     */
    boolean hasConvHyperparams();
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return The convHyperparams.
     */
    object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams();
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     */
    object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder();

    /**
     * <pre>
     * Bin sizes for RFCN crops.
     * </pre>
     *
     * <code>optional int32 num_spatial_bins_height = 2 [default = 3];</code>
     * @return Whether the numSpatialBinsHeight field is set.
     */
    boolean hasNumSpatialBinsHeight();
    /**
     * <pre>
     * Bin sizes for RFCN crops.
     * </pre>
     *
     * <code>optional int32 num_spatial_bins_height = 2 [default = 3];</code>
     * @return The numSpatialBinsHeight.
     */
    int getNumSpatialBinsHeight();

    /**
     * <code>optional int32 num_spatial_bins_width = 3 [default = 3];</code>
     * @return Whether the numSpatialBinsWidth field is set.
     */
    boolean hasNumSpatialBinsWidth();
    /**
     * <code>optional int32 num_spatial_bins_width = 3 [default = 3];</code>
     * @return The numSpatialBinsWidth.
     */
    int getNumSpatialBinsWidth();

    /**
     * <pre>
     * Target depth to reduce the input image features to.
     * </pre>
     *
     * <code>optional int32 depth = 4 [default = 1024];</code>
     * @return Whether the depth field is set.
     */
    boolean hasDepth();
    /**
     * <pre>
     * Target depth to reduce the input image features to.
     * </pre>
     *
     * <code>optional int32 depth = 4 [default = 1024];</code>
     * @return The depth.
     */
    int getDepth();

    /**
     * <pre>
     * Size of the encoding for the boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 5 [default = 4];</code>
     * @return Whether the boxCodeSize field is set.
     */
    boolean hasBoxCodeSize();
    /**
     * <pre>
     * Size of the encoding for the boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 5 [default = 4];</code>
     * @return The boxCodeSize.
     */
    int getBoxCodeSize();

    /**
     * <pre>
     * Size to resize the rfcn crops to.
     * </pre>
     *
     * <code>optional int32 crop_height = 6 [default = 12];</code>
     * @return Whether the cropHeight field is set.
     */
    boolean hasCropHeight();
    /**
     * <pre>
     * Size to resize the rfcn crops to.
     * </pre>
     *
     * <code>optional int32 crop_height = 6 [default = 12];</code>
     * @return The cropHeight.
     */
    int getCropHeight();

    /**
     * <code>optional int32 crop_width = 7 [default = 12];</code>
     * @return Whether the cropWidth field is set.
     */
    boolean hasCropWidth();
    /**
     * <code>optional int32 crop_width = 7 [default = 12];</code>
     * @return The cropWidth.
     */
    int getCropWidth();
  }
  /**
   * Protobuf type {@code object_detection.protos.RfcnBoxPredictor}
   */
  public static final class RfcnBoxPredictor extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:object_detection.protos.RfcnBoxPredictor)
      RfcnBoxPredictorOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RfcnBoxPredictor.newBuilder() to construct.
    private RfcnBoxPredictor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RfcnBoxPredictor() {
      numSpatialBinsHeight_ = 3;
      numSpatialBinsWidth_ = 3;
      depth_ = 1024;
      boxCodeSize_ = 4;
      cropHeight_ = 12;
      cropWidth_ = 12;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new RfcnBoxPredictor();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RfcnBoxPredictor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = convHyperparams_.toBuilder();
              }
              convHyperparams_ = input.readMessage(object_detection.protos.HyperparamsOuterClass.Hyperparams.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(convHyperparams_);
                convHyperparams_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              numSpatialBinsHeight_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              numSpatialBinsWidth_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              depth_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              boxCodeSize_ = input.readInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              cropHeight_ = input.readInt32();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              cropWidth_ = input.readInt32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_RfcnBoxPredictor_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_RfcnBoxPredictor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.Builder.class);
    }

    private int bitField0_;
    public static final int CONV_HYPERPARAMS_FIELD_NUMBER = 1;
    private object_detection.protos.HyperparamsOuterClass.Hyperparams convHyperparams_;
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return Whether the convHyperparams field is set.
     */
    @java.lang.Override
    public boolean hasConvHyperparams() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     * @return The convHyperparams.
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams() {
      return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
    }
    /**
     * <pre>
     * Hyperparameters for convolution ops used in the box predictor.
     * </pre>
     *
     * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
     */
    @java.lang.Override
    public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder() {
      return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
    }

    public static final int NUM_SPATIAL_BINS_HEIGHT_FIELD_NUMBER = 2;
    private int numSpatialBinsHeight_;
    /**
     * <pre>
     * Bin sizes for RFCN crops.
     * </pre>
     *
     * <code>optional int32 num_spatial_bins_height = 2 [default = 3];</code>
     * @return Whether the numSpatialBinsHeight field is set.
     */
    @java.lang.Override
    public boolean hasNumSpatialBinsHeight() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Bin sizes for RFCN crops.
     * </pre>
     *
     * <code>optional int32 num_spatial_bins_height = 2 [default = 3];</code>
     * @return The numSpatialBinsHeight.
     */
    @java.lang.Override
    public int getNumSpatialBinsHeight() {
      return numSpatialBinsHeight_;
    }

    public static final int NUM_SPATIAL_BINS_WIDTH_FIELD_NUMBER = 3;
    private int numSpatialBinsWidth_;
    /**
     * <code>optional int32 num_spatial_bins_width = 3 [default = 3];</code>
     * @return Whether the numSpatialBinsWidth field is set.
     */
    @java.lang.Override
    public boolean hasNumSpatialBinsWidth() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional int32 num_spatial_bins_width = 3 [default = 3];</code>
     * @return The numSpatialBinsWidth.
     */
    @java.lang.Override
    public int getNumSpatialBinsWidth() {
      return numSpatialBinsWidth_;
    }

    public static final int DEPTH_FIELD_NUMBER = 4;
    private int depth_;
    /**
     * <pre>
     * Target depth to reduce the input image features to.
     * </pre>
     *
     * <code>optional int32 depth = 4 [default = 1024];</code>
     * @return Whether the depth field is set.
     */
    @java.lang.Override
    public boolean hasDepth() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * Target depth to reduce the input image features to.
     * </pre>
     *
     * <code>optional int32 depth = 4 [default = 1024];</code>
     * @return The depth.
     */
    @java.lang.Override
    public int getDepth() {
      return depth_;
    }

    public static final int BOX_CODE_SIZE_FIELD_NUMBER = 5;
    private int boxCodeSize_;
    /**
     * <pre>
     * Size of the encoding for the boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 5 [default = 4];</code>
     * @return Whether the boxCodeSize field is set.
     */
    @java.lang.Override
    public boolean hasBoxCodeSize() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * Size of the encoding for the boxes.
     * </pre>
     *
     * <code>optional int32 box_code_size = 5 [default = 4];</code>
     * @return The boxCodeSize.
     */
    @java.lang.Override
    public int getBoxCodeSize() {
      return boxCodeSize_;
    }

    public static final int CROP_HEIGHT_FIELD_NUMBER = 6;
    private int cropHeight_;
    /**
     * <pre>
     * Size to resize the rfcn crops to.
     * </pre>
     *
     * <code>optional int32 crop_height = 6 [default = 12];</code>
     * @return Whether the cropHeight field is set.
     */
    @java.lang.Override
    public boolean hasCropHeight() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * Size to resize the rfcn crops to.
     * </pre>
     *
     * <code>optional int32 crop_height = 6 [default = 12];</code>
     * @return The cropHeight.
     */
    @java.lang.Override
    public int getCropHeight() {
      return cropHeight_;
    }

    public static final int CROP_WIDTH_FIELD_NUMBER = 7;
    private int cropWidth_;
    /**
     * <code>optional int32 crop_width = 7 [default = 12];</code>
     * @return Whether the cropWidth field is set.
     */
    @java.lang.Override
    public boolean hasCropWidth() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional int32 crop_width = 7 [default = 12];</code>
     * @return The cropWidth.
     */
    @java.lang.Override
    public int getCropWidth() {
      return cropWidth_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getConvHyperparams());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeInt32(2, numSpatialBinsHeight_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeInt32(3, numSpatialBinsWidth_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeInt32(4, depth_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeInt32(5, boxCodeSize_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeInt32(6, cropHeight_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeInt32(7, cropWidth_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getConvHyperparams());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, numSpatialBinsHeight_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, numSpatialBinsWidth_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, depth_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, boxCodeSize_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, cropHeight_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, cropWidth_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor)) {
        return super.equals(obj);
      }
      object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor other = (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) obj;

      if (hasConvHyperparams() != other.hasConvHyperparams()) return false;
      if (hasConvHyperparams()) {
        if (!getConvHyperparams()
            .equals(other.getConvHyperparams())) return false;
      }
      if (hasNumSpatialBinsHeight() != other.hasNumSpatialBinsHeight()) return false;
      if (hasNumSpatialBinsHeight()) {
        if (getNumSpatialBinsHeight()
            != other.getNumSpatialBinsHeight()) return false;
      }
      if (hasNumSpatialBinsWidth() != other.hasNumSpatialBinsWidth()) return false;
      if (hasNumSpatialBinsWidth()) {
        if (getNumSpatialBinsWidth()
            != other.getNumSpatialBinsWidth()) return false;
      }
      if (hasDepth() != other.hasDepth()) return false;
      if (hasDepth()) {
        if (getDepth()
            != other.getDepth()) return false;
      }
      if (hasBoxCodeSize() != other.hasBoxCodeSize()) return false;
      if (hasBoxCodeSize()) {
        if (getBoxCodeSize()
            != other.getBoxCodeSize()) return false;
      }
      if (hasCropHeight() != other.hasCropHeight()) return false;
      if (hasCropHeight()) {
        if (getCropHeight()
            != other.getCropHeight()) return false;
      }
      if (hasCropWidth() != other.hasCropWidth()) return false;
      if (hasCropWidth()) {
        if (getCropWidth()
            != other.getCropWidth()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasConvHyperparams()) {
        hash = (37 * hash) + CONV_HYPERPARAMS_FIELD_NUMBER;
        hash = (53 * hash) + getConvHyperparams().hashCode();
      }
      if (hasNumSpatialBinsHeight()) {
        hash = (37 * hash) + NUM_SPATIAL_BINS_HEIGHT_FIELD_NUMBER;
        hash = (53 * hash) + getNumSpatialBinsHeight();
      }
      if (hasNumSpatialBinsWidth()) {
        hash = (37 * hash) + NUM_SPATIAL_BINS_WIDTH_FIELD_NUMBER;
        hash = (53 * hash) + getNumSpatialBinsWidth();
      }
      if (hasDepth()) {
        hash = (37 * hash) + DEPTH_FIELD_NUMBER;
        hash = (53 * hash) + getDepth();
      }
      if (hasBoxCodeSize()) {
        hash = (37 * hash) + BOX_CODE_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getBoxCodeSize();
      }
      if (hasCropHeight()) {
        hash = (37 * hash) + CROP_HEIGHT_FIELD_NUMBER;
        hash = (53 * hash) + getCropHeight();
      }
      if (hasCropWidth()) {
        hash = (37 * hash) + CROP_WIDTH_FIELD_NUMBER;
        hash = (53 * hash) + getCropWidth();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code object_detection.protos.RfcnBoxPredictor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:object_detection.protos.RfcnBoxPredictor)
        object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_RfcnBoxPredictor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_RfcnBoxPredictor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.class, object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.Builder.class);
      }

      // Construct using object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getConvHyperparamsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = null;
        } else {
          convHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        numSpatialBinsHeight_ = 3;
        bitField0_ = (bitField0_ & ~0x00000002);
        numSpatialBinsWidth_ = 3;
        bitField0_ = (bitField0_ & ~0x00000004);
        depth_ = 1024;
        bitField0_ = (bitField0_ & ~0x00000008);
        boxCodeSize_ = 4;
        bitField0_ = (bitField0_ & ~0x00000010);
        cropHeight_ = 12;
        bitField0_ = (bitField0_ & ~0x00000020);
        cropWidth_ = 12;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return object_detection.protos.BoxPredictorOuterClass.internal_static_object_detection_protos_RfcnBoxPredictor_descriptor;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor getDefaultInstanceForType() {
        return object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance();
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor build() {
        object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor buildPartial() {
        object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor result = new object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (convHyperparamsBuilder_ == null) {
            result.convHyperparams_ = convHyperparams_;
          } else {
            result.convHyperparams_ = convHyperparamsBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.numSpatialBinsHeight_ = numSpatialBinsHeight_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.numSpatialBinsWidth_ = numSpatialBinsWidth_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.depth_ = depth_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.boxCodeSize_ = boxCodeSize_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.cropHeight_ = cropHeight_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.cropWidth_ = cropWidth_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) {
          return mergeFrom((object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor other) {
        if (other == object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor.getDefaultInstance()) return this;
        if (other.hasConvHyperparams()) {
          mergeConvHyperparams(other.getConvHyperparams());
        }
        if (other.hasNumSpatialBinsHeight()) {
          setNumSpatialBinsHeight(other.getNumSpatialBinsHeight());
        }
        if (other.hasNumSpatialBinsWidth()) {
          setNumSpatialBinsWidth(other.getNumSpatialBinsWidth());
        }
        if (other.hasDepth()) {
          setDepth(other.getDepth());
        }
        if (other.hasBoxCodeSize()) {
          setBoxCodeSize(other.getBoxCodeSize());
        }
        if (other.hasCropHeight()) {
          setCropHeight(other.getCropHeight());
        }
        if (other.hasCropWidth()) {
          setCropWidth(other.getCropWidth());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private object_detection.protos.HyperparamsOuterClass.Hyperparams convHyperparams_;
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder> convHyperparamsBuilder_;
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       * @return Whether the convHyperparams field is set.
       */
      public boolean hasConvHyperparams() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       * @return The convHyperparams.
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams getConvHyperparams() {
        if (convHyperparamsBuilder_ == null) {
          return convHyperparams_ == null ? object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
        } else {
          return convHyperparamsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder setConvHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (convHyperparamsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          convHyperparams_ = value;
          onChanged();
        } else {
          convHyperparamsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder setConvHyperparams(
          object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder builderForValue) {
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = builderForValue.build();
          onChanged();
        } else {
          convHyperparamsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder mergeConvHyperparams(object_detection.protos.HyperparamsOuterClass.Hyperparams value) {
        if (convHyperparamsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              convHyperparams_ != null &&
              convHyperparams_ != object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance()) {
            convHyperparams_ =
              object_detection.protos.HyperparamsOuterClass.Hyperparams.newBuilder(convHyperparams_).mergeFrom(value).buildPartial();
          } else {
            convHyperparams_ = value;
          }
          onChanged();
        } else {
          convHyperparamsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public Builder clearConvHyperparams() {
        if (convHyperparamsBuilder_ == null) {
          convHyperparams_ = null;
          onChanged();
        } else {
          convHyperparamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder getConvHyperparamsBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getConvHyperparamsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      public object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder getConvHyperparamsOrBuilder() {
        if (convHyperparamsBuilder_ != null) {
          return convHyperparamsBuilder_.getMessageOrBuilder();
        } else {
          return convHyperparams_ == null ?
              object_detection.protos.HyperparamsOuterClass.Hyperparams.getDefaultInstance() : convHyperparams_;
        }
      }
      /**
       * <pre>
       * Hyperparameters for convolution ops used in the box predictor.
       * </pre>
       *
       * <code>optional .object_detection.protos.Hyperparams conv_hyperparams = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>
          getConvHyperparamsFieldBuilder() {
        if (convHyperparamsBuilder_ == null) {
          convHyperparamsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              object_detection.protos.HyperparamsOuterClass.Hyperparams, object_detection.protos.HyperparamsOuterClass.Hyperparams.Builder, object_detection.protos.HyperparamsOuterClass.HyperparamsOrBuilder>(
                  getConvHyperparams(),
                  getParentForChildren(),
                  isClean());
          convHyperparams_ = null;
        }
        return convHyperparamsBuilder_;
      }

      private int numSpatialBinsHeight_ = 3;
      /**
       * <pre>
       * Bin sizes for RFCN crops.
       * </pre>
       *
       * <code>optional int32 num_spatial_bins_height = 2 [default = 3];</code>
       * @return Whether the numSpatialBinsHeight field is set.
       */
      @java.lang.Override
      public boolean hasNumSpatialBinsHeight() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * Bin sizes for RFCN crops.
       * </pre>
       *
       * <code>optional int32 num_spatial_bins_height = 2 [default = 3];</code>
       * @return The numSpatialBinsHeight.
       */
      @java.lang.Override
      public int getNumSpatialBinsHeight() {
        return numSpatialBinsHeight_;
      }
      /**
       * <pre>
       * Bin sizes for RFCN crops.
       * </pre>
       *
       * <code>optional int32 num_spatial_bins_height = 2 [default = 3];</code>
       * @param value The numSpatialBinsHeight to set.
       * @return This builder for chaining.
       */
      public Builder setNumSpatialBinsHeight(int value) {
        bitField0_ |= 0x00000002;
        numSpatialBinsHeight_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Bin sizes for RFCN crops.
       * </pre>
       *
       * <code>optional int32 num_spatial_bins_height = 2 [default = 3];</code>
       * @return This builder for chaining.
       */
      public Builder clearNumSpatialBinsHeight() {
        bitField0_ = (bitField0_ & ~0x00000002);
        numSpatialBinsHeight_ = 3;
        onChanged();
        return this;
      }

      private int numSpatialBinsWidth_ = 3;
      /**
       * <code>optional int32 num_spatial_bins_width = 3 [default = 3];</code>
       * @return Whether the numSpatialBinsWidth field is set.
       */
      @java.lang.Override
      public boolean hasNumSpatialBinsWidth() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional int32 num_spatial_bins_width = 3 [default = 3];</code>
       * @return The numSpatialBinsWidth.
       */
      @java.lang.Override
      public int getNumSpatialBinsWidth() {
        return numSpatialBinsWidth_;
      }
      /**
       * <code>optional int32 num_spatial_bins_width = 3 [default = 3];</code>
       * @param value The numSpatialBinsWidth to set.
       * @return This builder for chaining.
       */
      public Builder setNumSpatialBinsWidth(int value) {
        bitField0_ |= 0x00000004;
        numSpatialBinsWidth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 num_spatial_bins_width = 3 [default = 3];</code>
       * @return This builder for chaining.
       */
      public Builder clearNumSpatialBinsWidth() {
        bitField0_ = (bitField0_ & ~0x00000004);
        numSpatialBinsWidth_ = 3;
        onChanged();
        return this;
      }

      private int depth_ = 1024;
      /**
       * <pre>
       * Target depth to reduce the input image features to.
       * </pre>
       *
       * <code>optional int32 depth = 4 [default = 1024];</code>
       * @return Whether the depth field is set.
       */
      @java.lang.Override
      public boolean hasDepth() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <pre>
       * Target depth to reduce the input image features to.
       * </pre>
       *
       * <code>optional int32 depth = 4 [default = 1024];</code>
       * @return The depth.
       */
      @java.lang.Override
      public int getDepth() {
        return depth_;
      }
      /**
       * <pre>
       * Target depth to reduce the input image features to.
       * </pre>
       *
       * <code>optional int32 depth = 4 [default = 1024];</code>
       * @param value The depth to set.
       * @return This builder for chaining.
       */
      public Builder setDepth(int value) {
        bitField0_ |= 0x00000008;
        depth_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Target depth to reduce the input image features to.
       * </pre>
       *
       * <code>optional int32 depth = 4 [default = 1024];</code>
       * @return This builder for chaining.
       */
      public Builder clearDepth() {
        bitField0_ = (bitField0_ & ~0x00000008);
        depth_ = 1024;
        onChanged();
        return this;
      }

      private int boxCodeSize_ = 4;
      /**
       * <pre>
       * Size of the encoding for the boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 5 [default = 4];</code>
       * @return Whether the boxCodeSize field is set.
       */
      @java.lang.Override
      public boolean hasBoxCodeSize() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <pre>
       * Size of the encoding for the boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 5 [default = 4];</code>
       * @return The boxCodeSize.
       */
      @java.lang.Override
      public int getBoxCodeSize() {
        return boxCodeSize_;
      }
      /**
       * <pre>
       * Size of the encoding for the boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 5 [default = 4];</code>
       * @param value The boxCodeSize to set.
       * @return This builder for chaining.
       */
      public Builder setBoxCodeSize(int value) {
        bitField0_ |= 0x00000010;
        boxCodeSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Size of the encoding for the boxes.
       * </pre>
       *
       * <code>optional int32 box_code_size = 5 [default = 4];</code>
       * @return This builder for chaining.
       */
      public Builder clearBoxCodeSize() {
        bitField0_ = (bitField0_ & ~0x00000010);
        boxCodeSize_ = 4;
        onChanged();
        return this;
      }

      private int cropHeight_ = 12;
      /**
       * <pre>
       * Size to resize the rfcn crops to.
       * </pre>
       *
       * <code>optional int32 crop_height = 6 [default = 12];</code>
       * @return Whether the cropHeight field is set.
       */
      @java.lang.Override
      public boolean hasCropHeight() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <pre>
       * Size to resize the rfcn crops to.
       * </pre>
       *
       * <code>optional int32 crop_height = 6 [default = 12];</code>
       * @return The cropHeight.
       */
      @java.lang.Override
      public int getCropHeight() {
        return cropHeight_;
      }
      /**
       * <pre>
       * Size to resize the rfcn crops to.
       * </pre>
       *
       * <code>optional int32 crop_height = 6 [default = 12];</code>
       * @param value The cropHeight to set.
       * @return This builder for chaining.
       */
      public Builder setCropHeight(int value) {
        bitField0_ |= 0x00000020;
        cropHeight_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Size to resize the rfcn crops to.
       * </pre>
       *
       * <code>optional int32 crop_height = 6 [default = 12];</code>
       * @return This builder for chaining.
       */
      public Builder clearCropHeight() {
        bitField0_ = (bitField0_ & ~0x00000020);
        cropHeight_ = 12;
        onChanged();
        return this;
      }

      private int cropWidth_ = 12;
      /**
       * <code>optional int32 crop_width = 7 [default = 12];</code>
       * @return Whether the cropWidth field is set.
       */
      @java.lang.Override
      public boolean hasCropWidth() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional int32 crop_width = 7 [default = 12];</code>
       * @return The cropWidth.
       */
      @java.lang.Override
      public int getCropWidth() {
        return cropWidth_;
      }
      /**
       * <code>optional int32 crop_width = 7 [default = 12];</code>
       * @param value The cropWidth to set.
       * @return This builder for chaining.
       */
      public Builder setCropWidth(int value) {
        bitField0_ |= 0x00000040;
        cropWidth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 crop_width = 7 [default = 12];</code>
       * @return This builder for chaining.
       */
      public Builder clearCropWidth() {
        bitField0_ = (bitField0_ & ~0x00000040);
        cropWidth_ = 12;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:object_detection.protos.RfcnBoxPredictor)
    }

    // @@protoc_insertion_point(class_scope:object_detection.protos.RfcnBoxPredictor)
    private static final object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor();
    }

    public static object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RfcnBoxPredictor>
        PARSER = new com.google.protobuf.AbstractParser<RfcnBoxPredictor>() {
      @java.lang.Override
      public RfcnBoxPredictor parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RfcnBoxPredictor(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RfcnBoxPredictor> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<RfcnBoxPredictor> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public object_detection.protos.BoxPredictorOuterClass.RfcnBoxPredictor getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_object_detection_protos_BoxPredictor_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_object_detection_protos_BoxPredictor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_object_detection_protos_ConvolutionalBoxPredictor_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_object_detection_protos_ConvolutionalBoxPredictor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_object_detection_protos_MaskRCNNBoxPredictor_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_object_detection_protos_MaskRCNNBoxPredictor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_object_detection_protos_RfcnBoxPredictor_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_object_detection_protos_RfcnBoxPredictor_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n+object_detection/protos/box_predictor." +
      "proto\022\027object_detection.protos\032)object_d" +
      "etection/protos/hyperparams.proto\"\220\003\n\014Bo" +
      "xPredictor\022Y\n\033convolutional_box_predicto" +
      "r\030\001 \001(\01322.object_detection.protos.Convol" +
      "utionalBoxPredictorH\000\022P\n\027mask_rcnn_box_p" +
      "redictor\030\002 \001(\0132-.object_detection.protos" +
      ".MaskRCNNBoxPredictorH\000\022G\n\022rfcn_box_pred" +
      "ictor\030\003 \001(\0132).object_detection.protos.Rf" +
      "cnBoxPredictorH\000\022s\n)weight_shared_convol" +
      "utional_box_predictor\030\004 \001(\0132>.object_det" +
      "ection.protos.WeightSharedConvolutionalB" +
      "oxPredictorH\000B\025\n\023box_predictor_oneof\"\257\004\n" +
      "\031ConvolutionalBoxPredictor\022>\n\020conv_hyper" +
      "params\030\001 \001(\0132$.object_detection.protos.H" +
      "yperparams\022\024\n\tmin_depth\030\002 \001(\005:\0010\022\024\n\tmax_" +
      "depth\030\003 \001(\005:\0010\022&\n\033num_layers_before_pred" +
      "ictor\030\004 \001(\005:\0010\022\031\n\013use_dropout\030\005 \001(\010:\004tru" +
      "e\022%\n\030dropout_keep_probability\030\006 \001(\002:\0030.8" +
      "\022\026\n\013kernel_size\030\007 \001(\005:\0011\022\030\n\rbox_code_siz" +
      "e\030\010 \001(\005:\0014\022&\n\027apply_sigmoid_to_scores\030\t " +
      "\001(\010:\005false\022%\n\032class_prediction_bias_init" +
      "\030\n \001(\002:\0010\022\034\n\ruse_depthwise\030\013 \001(\010:\005false\022" +
      "j\n\030box_encodings_clip_range\030\014 \001(\0132H.obje" +
      "ct_detection.protos.ConvolutionalBoxPred" +
      "ictor.BoxEncodingsClipRange\0321\n\025BoxEncodi" +
      "ngsClipRange\022\013\n\003min\030\001 \001(\002\022\013\n\003max\030\002 \001(\002\"\314" +
      "\005\n%WeightSharedConvolutionalBoxPredictor" +
      "\022>\n\020conv_hyperparams\030\001 \001(\0132$.object_dete" +
      "ction.protos.Hyperparams\022&\n\033num_layers_b" +
      "efore_predictor\030\004 \001(\005:\0010\022\020\n\005depth\030\002 \001(\005:" +
      "\0010\022\026\n\013kernel_size\030\007 \001(\005:\0013\022\030\n\rbox_code_s" +
      "ize\030\010 \001(\005:\0014\022%\n\032class_prediction_bias_in" +
      "it\030\n \001(\002:\0010\022\032\n\013use_dropout\030\013 \001(\010:\005false\022" +
      "%\n\030dropout_keep_probability\030\014 \001(\002:\0030.8\022%" +
      "\n\026share_prediction_tower\030\r \001(\010:\005false\022\034\n" +
      "\ruse_depthwise\030\016 \001(\010:\005false\022p\n\017score_con" +
      "verter\030\020 \001(\0162M.object_detection.protos.W" +
      "eightSharedConvolutionalBoxPredictor.Sco" +
      "reConverter:\010IDENTITY\022v\n\030box_encodings_c" +
      "lip_range\030\021 \001(\0132T.object_detection.proto" +
      "s.WeightSharedConvolutionalBoxPredictor." +
      "BoxEncodingsClipRange\0321\n\025BoxEncodingsCli" +
      "pRange\022\013\n\003min\030\001 \001(\002\022\013\n\003max\030\002 \001(\002\"+\n\016Scor" +
      "eConverter\022\014\n\010IDENTITY\020\000\022\013\n\007SIGMOID\020\001\"\277\004" +
      "\n\024MaskRCNNBoxPredictor\022<\n\016fc_hyperparams" +
      "\030\001 \001(\0132$.object_detection.protos.Hyperpa" +
      "rams\022\032\n\013use_dropout\030\002 \001(\010:\005false\022%\n\030drop" +
      "out_keep_probability\030\003 \001(\002:\0030.5\022\030\n\rbox_c" +
      "ode_size\030\004 \001(\005:\0014\022>\n\020conv_hyperparams\030\005 " +
      "\001(\0132$.object_detection.protos.Hyperparam" +
      "s\022%\n\026predict_instance_masks\030\006 \001(\010:\005false" +
      "\022\'\n\032mask_prediction_conv_depth\030\007 \001(\005:\00325" +
      "6\022 \n\021predict_keypoints\030\010 \001(\010:\005false\022\027\n\013m" +
      "ask_height\030\t \001(\005:\00215\022\026\n\nmask_width\030\n \001(\005" +
      ":\00215\022*\n\037mask_prediction_num_conv_layers\030" +
      "\013 \001(\005:\0012\022\'\n\030masks_are_class_agnostic\030\014 \001" +
      "(\010:\005false\022\'\n\030share_box_across_classes\030\r " +
      "\001(\010:\005false\022+\n\034convolve_then_upsample_mas" +
      "ks\030\016 \001(\010:\005false\"\371\001\n\020RfcnBoxPredictor\022>\n\020" +
      "conv_hyperparams\030\001 \001(\0132$.object_detectio" +
      "n.protos.Hyperparams\022\"\n\027num_spatial_bins" +
      "_height\030\002 \001(\005:\0013\022!\n\026num_spatial_bins_wid" +
      "th\030\003 \001(\005:\0013\022\023\n\005depth\030\004 \001(\005:\0041024\022\030\n\rbox_" +
      "code_size\030\005 \001(\005:\0014\022\027\n\013crop_height\030\006 \001(\005:" +
      "\00212\022\026\n\ncrop_width\030\007 \001(\005:\00212"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          object_detection.protos.HyperparamsOuterClass.getDescriptor(),
        });
    internal_static_object_detection_protos_BoxPredictor_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_object_detection_protos_BoxPredictor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_object_detection_protos_BoxPredictor_descriptor,
        new java.lang.String[] { "ConvolutionalBoxPredictor", "MaskRcnnBoxPredictor", "RfcnBoxPredictor", "WeightSharedConvolutionalBoxPredictor", "BoxPredictorOneof", });
    internal_static_object_detection_protos_ConvolutionalBoxPredictor_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_object_detection_protos_ConvolutionalBoxPredictor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_object_detection_protos_ConvolutionalBoxPredictor_descriptor,
        new java.lang.String[] { "ConvHyperparams", "MinDepth", "MaxDepth", "NumLayersBeforePredictor", "UseDropout", "DropoutKeepProbability", "KernelSize", "BoxCodeSize", "ApplySigmoidToScores", "ClassPredictionBiasInit", "UseDepthwise", "BoxEncodingsClipRange", });
    internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor =
      internal_static_object_detection_protos_ConvolutionalBoxPredictor_descriptor.getNestedTypes().get(0);
    internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_object_detection_protos_ConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor,
        new java.lang.String[] { "Min", "Max", });
    internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_descriptor,
        new java.lang.String[] { "ConvHyperparams", "NumLayersBeforePredictor", "Depth", "KernelSize", "BoxCodeSize", "ClassPredictionBiasInit", "UseDropout", "DropoutKeepProbability", "SharePredictionTower", "UseDepthwise", "ScoreConverter", "BoxEncodingsClipRange", });
    internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor =
      internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_descriptor.getNestedTypes().get(0);
    internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_object_detection_protos_WeightSharedConvolutionalBoxPredictor_BoxEncodingsClipRange_descriptor,
        new java.lang.String[] { "Min", "Max", });
    internal_static_object_detection_protos_MaskRCNNBoxPredictor_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_object_detection_protos_MaskRCNNBoxPredictor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_object_detection_protos_MaskRCNNBoxPredictor_descriptor,
        new java.lang.String[] { "FcHyperparams", "UseDropout", "DropoutKeepProbability", "BoxCodeSize", "ConvHyperparams", "PredictInstanceMasks", "MaskPredictionConvDepth", "PredictKeypoints", "MaskHeight", "MaskWidth", "MaskPredictionNumConvLayers", "MasksAreClassAgnostic", "ShareBoxAcrossClasses", "ConvolveThenUpsampleMasks", });
    internal_static_object_detection_protos_RfcnBoxPredictor_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_object_detection_protos_RfcnBoxPredictor_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_object_detection_protos_RfcnBoxPredictor_descriptor,
        new java.lang.String[] { "ConvHyperparams", "NumSpatialBinsHeight", "NumSpatialBinsWidth", "Depth", "BoxCodeSize", "CropHeight", "CropWidth", });
    object_detection.protos.HyperparamsOuterClass.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
