dnn: modify priorBox layer
authorVladislav Sovrasov <sovrasov.vlad@gmail.com>
Tue, 10 Oct 2017 09:03:05 +0000 (12:03 +0300)
committerVladislav Sovrasov <sovrasov.vlad@gmail.com>
Wed, 11 Oct 2017 08:43:50 +0000 (11:43 +0300)
modules/dnn/misc/caffe/caffe.pb.cc
modules/dnn/misc/caffe/caffe.pb.h
modules/dnn/src/caffe/caffe.proto
modules/dnn/src/layers/prior_box_layer.cpp

index 8f5327e..02605e1 100644 (file)
@@ -347,7 +347,7 @@ void protobuf_AssignDesc_caffe_2eproto() {
       sizeof(NormalizeBBoxParameter),
       GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(NormalizeBBoxParameter, _internal_metadata_));
   PriorBoxParameter_descriptor_ = file->message_type(5);
-  static const int PriorBoxParameter_offsets_[13] = {
+  static const int PriorBoxParameter_offsets_[14] = {
     GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PriorBoxParameter, min_size_),
     GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PriorBoxParameter, max_size_),
     GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PriorBoxParameter, aspect_ratio_),
@@ -361,6 +361,7 @@ void protobuf_AssignDesc_caffe_2eproto() {
     GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PriorBoxParameter, step_h_),
     GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PriorBoxParameter, step_w_),
     GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PriorBoxParameter, offset_),
+    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(PriorBoxParameter, additional_y_offset_),
   };
   PriorBoxParameter_reflection_ =
     ::google::protobuf::internal::GeneratedMessageReflection::NewGeneratedMessageReflection(
@@ -2130,418 +2131,419 @@ void protobuf_AddDesc_caffe_2eproto_impl() {
     "(\r\"\226\001\n\026NormalizeBBoxParameter\022\034\n\016across_"
     "spatial\030\001 \001(\010:\004true\022,\n\014scale_filler\030\002 \001("
     "\0132\026.caffe.FillerParameter\022\034\n\016channel_sha"
-    "red\030\003 \001(\010:\004true\022\022\n\003eps\030\004 \001(\002:\0051e-10\"\243\002\n\021"
+    "red\030\003 \001(\010:\004true\022\022\n\003eps\030\004 \001(\002:\0051e-10\"\307\002\n\021"
     "PriorBoxParameter\022\020\n\010min_size\030\001 \001(\002\022\020\n\010m"
     "ax_size\030\002 \001(\002\022\024\n\014aspect_ratio\030\003 \003(\002\022\022\n\004f"
     "lip\030\004 \001(\010:\004true\022\022\n\004clip\030\005 \001(\010:\004true\022\020\n\010v"
     "ariance\030\006 \003(\002\022\020\n\010img_size\030\007 \001(\r\022\r\n\005img_h"
     "\030\010 \001(\r\022\r\n\005img_w\030\t \001(\r\022\014\n\004step\030\n \001(\002\022\016\n\006s"
     "tep_h\030\013 \001(\002\022\016\n\006step_w\030\014 \001(\002\022\023\n\006offset\030\r "
-    "\001(\002:\0030.5\"\'\n\010CodeType\022\n\n\006CORNER\020\001\022\017\n\013CENT"
-    "ER_SIZE\020\002\"\375\002\n\030DetectionOutputParameter\022\023"
-    "\n\013num_classes\030\001 \001(\r\022\034\n\016share_location\030\002 "
-    "\001(\010:\004true\022\036\n\023background_label_id\030\003 \001(\005:\001"
-    "0\0228\n\tnms_param\030\004 \001(\0132%.caffe.NonMaximumS"
-    "uppressionParameter\0225\n\021save_output_param"
-    "\030\005 \001(\0132\032.caffe.SaveOutputParameter\022<\n\tco"
-    "de_type\030\006 \001(\0162!.caffe.PriorBoxParameter."
-    "CodeType:\006CORNER\022)\n\032variance_encoded_in_"
-    "target\030\010 \001(\010:\005false\022\026\n\nkeep_top_k\030\007 \001(\005:"
-    "\002-1\022\034\n\024confidence_threshold\030\t \001(\002\"\201\001\n\005Da"
-    "tum\022\020\n\010channels\030\001 \001(\005\022\016\n\006height\030\002 \001(\005\022\r\n"
-    "\005width\030\003 \001(\005\022\014\n\004data\030\004 \001(\014\022\r\n\005label\030\005 \001("
-    "\005\022\022\n\nfloat_data\030\006 \003(\002\022\026\n\007encoded\030\007 \001(\010:\005"
-    "false\"\212\002\n\017FillerParameter\022\026\n\004type\030\001 \001(\t:"
-    "\010constant\022\020\n\005value\030\002 \001(\002:\0010\022\016\n\003min\030\003 \001(\002"
-    ":\0010\022\016\n\003max\030\004 \001(\002:\0011\022\017\n\004mean\030\005 \001(\002:\0010\022\016\n\003"
-    "std\030\006 \001(\002:\0011\022\022\n\006sparse\030\007 \001(\005:\002-1\022B\n\rvari"
-    "ance_norm\030\010 \001(\0162#.caffe.FillerParameter."
-    "VarianceNorm:\006FAN_IN\"4\n\014VarianceNorm\022\n\n\006"
-    "FAN_IN\020\000\022\013\n\007FAN_OUT\020\001\022\013\n\007AVERAGE\020\002\"\216\002\n\014N"
-    "etParameter\022\014\n\004name\030\001 \001(\t\022\r\n\005input\030\003 \003(\t"
-    "\022%\n\013input_shape\030\010 \003(\0132\020.caffe.BlobShape\022"
-    "\021\n\tinput_dim\030\004 \003(\005\022\035\n\016force_backward\030\005 \001"
-    "(\010:\005false\022\036\n\005state\030\006 \001(\0132\017.caffe.NetStat"
-    "e\022\031\n\ndebug_info\030\007 \001(\010:\005false\022$\n\005layer\030d "
-    "\003(\0132\025.caffe.LayerParameter\022\'\n\006layers\030\002 \003"
-    "(\0132\027.caffe.V1LayerParameter\"\242\n\n\017SolverPa"
-    "rameter\022\013\n\003net\030\030 \001(\t\022&\n\tnet_param\030\031 \001(\0132"
-    "\023.caffe.NetParameter\022\021\n\ttrain_net\030\001 \001(\t\022"
-    "\020\n\010test_net\030\002 \003(\t\022,\n\017train_net_param\030\025 \001"
-    "(\0132\023.caffe.NetParameter\022+\n\016test_net_para"
-    "m\030\026 \003(\0132\023.caffe.NetParameter\022$\n\013train_st"
-    "ate\030\032 \001(\0132\017.caffe.NetState\022#\n\ntest_state"
-    "\030\033 \003(\0132\017.caffe.NetState\022\021\n\ttest_iter\030\003 \003"
-    "(\005\022\030\n\rtest_interval\030\004 \001(\005:\0010\022 \n\021test_com"
-    "pute_loss\030\023 \001(\010:\005false\022!\n\023test_initializ"
-    "ation\030  \001(\010:\004true\022\017\n\007base_lr\030\005 \001(\002\022\017\n\007di"
-    "splay\030\006 \001(\005\022\027\n\014average_loss\030! \001(\005:\0011\022\020\n\010"
-    "max_iter\030\007 \001(\005\022\024\n\titer_size\030$ \001(\005:\0011\022\021\n\t"
-    "lr_policy\030\010 \001(\t\022\r\n\005gamma\030\t \001(\002\022\r\n\005power\030"
-    "\n \001(\002\022\020\n\010momentum\030\013 \001(\002\022\024\n\014weight_decay\030"
-    "\014 \001(\002\022\037\n\023regularization_type\030\035 \001(\t:\002L2\022\020"
-    "\n\010stepsize\030\r \001(\005\022\021\n\tstepvalue\030\" \003(\005\022\032\n\016c"
-    "lip_gradients\030# \001(\002:\002-1\022\023\n\010snapshot\030\016 \001("
-    "\005:\0010\022\027\n\017snapshot_prefix\030\017 \001(\t\022\034\n\rsnapsho"
-    "t_diff\030\020 \001(\010:\005false\022K\n\017snapshot_format\030%"
-    " \001(\0162%.caffe.SolverParameter.SnapshotFor"
-    "mat:\013BINARYPROTO\022;\n\013solver_mode\030\021 \001(\0162!."
-    "caffe.SolverParameter.SolverMode:\003GPU\022\024\n"
-    "\tdevice_id\030\022 \001(\005:\0010\022\027\n\013random_seed\030\024 \001(\003"
-    ":\002-1\022\021\n\004type\030( \001(\t:\003SGD\022\024\n\005delta\030\037 \001(\002:\005"
-    "1e-08\022\030\n\tmomentum2\030\' \001(\002:\0050.999\022\027\n\trms_d"
-    "ecay\030& \001(\002:\0040.99\022\031\n\ndebug_info\030\027 \001(\010:\005fa"
-    "lse\022\"\n\024snapshot_after_train\030\034 \001(\010:\004true\022"
-    ";\n\013solver_type\030\036 \001(\0162!.caffe.SolverParam"
-    "eter.SolverType:\003SGD\"+\n\016SnapshotFormat\022\010"
-    "\n\004HDF5\020\000\022\017\n\013BINARYPROTO\020\001\"\036\n\nSolverMode\022"
-    "\007\n\003CPU\020\000\022\007\n\003GPU\020\001\"U\n\nSolverType\022\007\n\003SGD\020\000"
-    "\022\014\n\010NESTEROV\020\001\022\013\n\007ADAGRAD\020\002\022\013\n\007RMSPROP\020\003"
-    "\022\014\n\010ADADELTA\020\004\022\010\n\004ADAM\020\005\"l\n\013SolverState\022"
-    "\014\n\004iter\030\001 \001(\005\022\023\n\013learned_net\030\002 \001(\t\022!\n\007hi"
-    "story\030\003 \003(\0132\020.caffe.BlobProto\022\027\n\014current"
-    "_step\030\004 \001(\005:\0010\"N\n\010NetState\022!\n\005phase\030\001 \001("
-    "\0162\014.caffe.Phase:\004TEST\022\020\n\005level\030\002 \001(\005:\0010\022"
-    "\r\n\005stage\030\003 \003(\t\"s\n\014NetStateRule\022\033\n\005phase\030"
-    "\001 \001(\0162\014.caffe.Phase\022\021\n\tmin_level\030\002 \001(\005\022\021"
-    "\n\tmax_level\030\003 \001(\005\022\r\n\005stage\030\004 \003(\t\022\021\n\tnot_"
-    "stage\030\005 \003(\t\"\243\001\n\tParamSpec\022\014\n\004name\030\001 \001(\t\022"
-    "1\n\nshare_mode\030\002 \001(\0162\035.caffe.ParamSpec.Di"
-    "mCheckMode\022\022\n\007lr_mult\030\003 \001(\002:\0011\022\025\n\ndecay_"
-    "mult\030\004 \001(\002:\0011\"*\n\014DimCheckMode\022\n\n\006STRICT\020"
-    "\000\022\016\n\nPERMISSIVE\020\001\"\335\025\n\016LayerParameter\022\014\n\004"
-    "name\030\001 \001(\t\022\014\n\004type\030\002 \001(\t\022\016\n\006bottom\030\003 \003(\t"
-    "\022\013\n\003top\030\004 \003(\t\022\033\n\005phase\030\n \001(\0162\014.caffe.Pha"
-    "se\022\023\n\013loss_weight\030\005 \003(\002\022\037\n\005param\030\006 \003(\0132\020"
-    ".caffe.ParamSpec\022\037\n\005blobs\030\007 \003(\0132\020.caffe."
-    "BlobProto\022\026\n\016propagate_down\030\013 \003(\010\022$\n\007inc"
-    "lude\030\010 \003(\0132\023.caffe.NetStateRule\022$\n\007exclu"
-    "de\030\t \003(\0132\023.caffe.NetStateRule\0227\n\017transfo"
-    "rm_param\030d \001(\0132\036.caffe.TransformationPar"
-    "ameter\022(\n\nloss_param\030e \001(\0132\024.caffe.LossP"
-    "arameter\0220\n\016accuracy_param\030f \001(\0132\030.caffe"
-    ".AccuracyParameter\022,\n\014argmax_param\030g \001(\013"
-    "2\026.caffe.ArgMaxParameter\0224\n\020batch_norm_p"
-    "aram\030\213\001 \001(\0132\031.caffe.BatchNormParameter\022)"
-    "\n\nbias_param\030\215\001 \001(\0132\024.caffe.BiasParamete"
-    "r\022,\n\014concat_param\030h \001(\0132\026.caffe.ConcatPa"
-    "rameter\022\?\n\026contrastive_loss_param\030i \001(\0132"
-    "\037.caffe.ContrastiveLossParameter\0226\n\021conv"
-    "olution_param\030j \001(\0132\033.caffe.ConvolutionP"
-    "arameter\022)\n\ncrop_param\030\220\001 \001(\0132\024.caffe.Cr"
-    "opParameter\022(\n\ndata_param\030k \001(\0132\024.caffe."
-    "DataParameter\022@\n\026detection_output_param\030"
-    "\223\001 \001(\0132\037.caffe.DetectionOutputParameter\022"
-    ".\n\rdropout_param\030l \001(\0132\027.caffe.DropoutPa"
-    "rameter\0223\n\020dummy_data_param\030m \001(\0132\031.caff"
-    "e.DummyDataParameter\022.\n\reltwise_param\030n "
-    "\001(\0132\027.caffe.EltwiseParameter\022\'\n\telu_para"
-    "m\030\214\001 \001(\0132\023.caffe.ELUParameter\022+\n\013embed_p"
-    "aram\030\211\001 \001(\0132\025.caffe.EmbedParameter\022&\n\tex"
-    "p_param\030o \001(\0132\023.caffe.ExpParameter\022/\n\rfl"
-    "atten_param\030\207\001 \001(\0132\027.caffe.FlattenParame"
-    "ter\0221\n\017hdf5_data_param\030p \001(\0132\030.caffe.HDF"
-    "5DataParameter\0225\n\021hdf5_output_param\030q \001("
-    "\0132\032.caffe.HDF5OutputParameter\0223\n\020hinge_l"
-    "oss_param\030r \001(\0132\031.caffe.HingeLossParamet"
-    "er\0223\n\020image_data_param\030s \001(\0132\031.caffe.Ima"
-    "geDataParameter\0229\n\023infogain_loss_param\030t"
-    " \001(\0132\034.caffe.InfogainLossParameter\0229\n\023in"
-    "ner_product_param\030u \001(\0132\034.caffe.InnerPro"
-    "ductParameter\022+\n\013input_param\030\217\001 \001(\0132\025.ca"
-    "ffe.InputParameter\022\'\n\tlog_param\030\206\001 \001(\0132\023"
-    ".caffe.LogParameter\022&\n\tlrn_param\030v \001(\0132\023"
-    ".caffe.LRNParameter\0225\n\021memory_data_param"
-    "\030w \001(\0132\032.caffe.MemoryDataParameter\022&\n\tmv"
-    "n_param\030x \001(\0132\023.caffe.MVNParameter\0222\n\nno"
-    "rm_param\030\225\001 \001(\0132\035.caffe.NormalizeBBoxPar"
-    "ameter\022/\n\rpermute_param\030\224\001 \001(\0132\027.caffe.P"
-    "ermuteParameter\0223\n\017parameter_param\030\221\001 \001("
-    "\0132\031.caffe.ParameterParameter\022.\n\rpooling_"
-    "param\030y \001(\0132\027.caffe.PoolingParameter\022*\n\013"
-    "power_param\030z \001(\0132\025.caffe.PowerParameter"
-    "\022+\n\013prelu_param\030\203\001 \001(\0132\025.caffe.PReLUPara"
-    "meter\0222\n\017prior_box_param\030\226\001 \001(\0132\030.caffe."
-    "PriorBoxParameter\022-\n\014python_param\030\202\001 \001(\013"
-    "2\026.caffe.PythonParameter\0223\n\017recurrent_pa"
-    "ram\030\222\001 \001(\0132\031.caffe.RecurrentParameter\0223\n"
-    "\017reduction_param\030\210\001 \001(\0132\031.caffe.Reductio"
-    "nParameter\022(\n\nrelu_param\030{ \001(\0132\024.caffe.R"
-    "eLUParameter\022/\n\rreshape_param\030\205\001 \001(\0132\027.c"
-    "affe.ReshapeParameter\022+\n\013scale_param\030\216\001 "
-    "\001(\0132\025.caffe.ScaleParameter\022.\n\rsigmoid_pa"
-    "ram\030| \001(\0132\027.caffe.SigmoidParameter\022.\n\rso"
-    "ftmax_param\030} \001(\0132\027.caffe.SoftmaxParamet"
-    "er\022\'\n\tspp_param\030\204\001 \001(\0132\023.caffe.SPPParame"
-    "ter\022*\n\013slice_param\030~ \001(\0132\025.caffe.SlicePa"
-    "rameter\022(\n\ntanh_param\030\177 \001(\0132\024.caffe.TanH"
-    "Parameter\0223\n\017threshold_param\030\200\001 \001(\0132\031.ca"
-    "ffe.ThresholdParameter\022)\n\ntile_param\030\212\001 "
-    "\001(\0132\024.caffe.TileParameter\0226\n\021window_data"
-    "_param\030\201\001 \001(\0132\032.caffe.WindowDataParamete"
-    "r\"\266\001\n\027TransformationParameter\022\020\n\005scale\030\001"
-    " \001(\002:\0011\022\025\n\006mirror\030\002 \001(\010:\005false\022\024\n\tcrop_s"
-    "ize\030\003 \001(\r:\0010\022\021\n\tmean_file\030\004 \001(\t\022\022\n\nmean_"
-    "value\030\005 \003(\002\022\032\n\013force_color\030\006 \001(\010:\005false\022"
-    "\031\n\nforce_gray\030\007 \001(\010:\005false\"\302\001\n\rLossParam"
-    "eter\022\024\n\014ignore_label\030\001 \001(\005\022D\n\rnormalizat"
-    "ion\030\003 \001(\0162&.caffe.LossParameter.Normaliz"
-    "ationMode:\005VALID\022\021\n\tnormalize\030\002 \001(\010\"B\n\021N"
-    "ormalizationMode\022\010\n\004FULL\020\000\022\t\n\005VALID\020\001\022\016\n"
-    "\nBATCH_SIZE\020\002\022\010\n\004NONE\020\003\"L\n\021AccuracyParam"
-    "eter\022\020\n\005top_k\030\001 \001(\r:\0011\022\017\n\004axis\030\002 \001(\005:\0011\022"
-    "\024\n\014ignore_label\030\003 \001(\005\"M\n\017ArgMaxParameter"
-    "\022\032\n\013out_max_val\030\001 \001(\010:\005false\022\020\n\005top_k\030\002 "
-    "\001(\r:\0011\022\014\n\004axis\030\003 \001(\005\"9\n\017ConcatParameter\022"
-    "\017\n\004axis\030\002 \001(\005:\0011\022\025\n\nconcat_dim\030\001 \001(\r:\0011\""
-    "j\n\022BatchNormParameter\022\030\n\020use_global_stat"
-    "s\030\001 \001(\010\022&\n\027moving_average_fraction\030\002 \001(\002"
-    ":\0050.999\022\022\n\003eps\030\003 \001(\002:\0051e-05\"]\n\rBiasParam"
-    "eter\022\017\n\004axis\030\001 \001(\005:\0011\022\023\n\010num_axes\030\002 \001(\005:"
-    "\0011\022&\n\006filler\030\003 \001(\0132\026.caffe.FillerParamet"
-    "er\"L\n\030ContrastiveLossParameter\022\021\n\006margin"
-    "\030\001 \001(\002:\0011\022\035\n\016legacy_version\030\002 \001(\010:\005false"
-    "\"\374\003\n\024ConvolutionParameter\022\022\n\nnum_output\030"
-    "\001 \001(\r\022\027\n\tbias_term\030\002 \001(\010:\004true\022\013\n\003pad\030\003 "
-    "\003(\r\022\023\n\013kernel_size\030\004 \003(\r\022\016\n\006stride\030\006 \003(\r"
-    "\022\020\n\010dilation\030\022 \003(\r\022\020\n\005pad_h\030\t \001(\r:\0010\022\020\n\005"
-    "pad_w\030\n \001(\r:\0010\022\020\n\010kernel_h\030\013 \001(\r\022\020\n\010kern"
-    "el_w\030\014 \001(\r\022\020\n\010stride_h\030\r \001(\r\022\020\n\010stride_w"
-    "\030\016 \001(\r\022\020\n\005group\030\005 \001(\r:\0011\022-\n\rweight_fille"
-    "r\030\007 \001(\0132\026.caffe.FillerParameter\022+\n\013bias_"
-    "filler\030\010 \001(\0132\026.caffe.FillerParameter\022;\n\006"
-    "engine\030\017 \001(\0162\".caffe.ConvolutionParamete"
-    "r.Engine:\007DEFAULT\022\017\n\004axis\030\020 \001(\005:\0011\022\036\n\017fo"
-    "rce_nd_im2col\030\021 \001(\010:\005false\"+\n\006Engine\022\013\n\007"
-    "DEFAULT\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"0\n\rCropP"
-    "arameter\022\017\n\004axis\030\001 \001(\005:\0012\022\016\n\006offset\030\002 \003("
-    "\r\"\244\002\n\rDataParameter\022\016\n\006source\030\001 \001(\t\022\022\n\nb"
-    "atch_size\030\004 \001(\r\022\024\n\trand_skip\030\007 \001(\r:\0010\0221\n"
-    "\007backend\030\010 \001(\0162\027.caffe.DataParameter.DB:"
-    "\007LEVELDB\022\020\n\005scale\030\002 \001(\002:\0011\022\021\n\tmean_file\030"
-    "\003 \001(\t\022\024\n\tcrop_size\030\005 \001(\r:\0010\022\025\n\006mirror\030\006 "
-    "\001(\010:\005false\022\"\n\023force_encoded_color\030\t \001(\010:"
-    "\005false\022\023\n\010prefetch\030\n \001(\r:\0014\"\033\n\002DB\022\013\n\007LEV"
-    "ELDB\020\000\022\010\n\004LMDB\020\001\"[\n\036NonMaximumSuppressio"
-    "nParameter\022\032\n\rnms_threshold\030\001 \001(\002:\0030.3\022\r"
-    "\n\005top_k\030\002 \001(\005\022\016\n\003eta\030\003 \001(\002:\0011\"\252\001\n\023SaveOu"
-    "tputParameter\022\030\n\020output_directory\030\001 \001(\t\022"
-    "\032\n\022output_name_prefix\030\002 \001(\t\022\025\n\routput_fo"
-    "rmat\030\003 \001(\t\022\026\n\016label_map_file\030\004 \001(\t\022\026\n\016na"
-    "me_size_file\030\005 \001(\t\022\026\n\016num_test_image\030\006 \001"
-    "(\r\".\n\020DropoutParameter\022\032\n\rdropout_ratio\030"
-    "\001 \001(\002:\0030.5\"\240\001\n\022DummyDataParameter\022+\n\013dat"
-    "a_filler\030\001 \003(\0132\026.caffe.FillerParameter\022\037"
-    "\n\005shape\030\006 \003(\0132\020.caffe.BlobShape\022\013\n\003num\030\002"
-    " \003(\r\022\020\n\010channels\030\003 \003(\r\022\016\n\006height\030\004 \003(\r\022\r"
-    "\n\005width\030\005 \003(\r\"\245\001\n\020EltwiseParameter\0229\n\top"
-    "eration\030\001 \001(\0162!.caffe.EltwiseParameter.E"
-    "ltwiseOp:\003SUM\022\r\n\005coeff\030\002 \003(\002\022\036\n\020stable_p"
-    "rod_grad\030\003 \001(\010:\004true\"\'\n\tEltwiseOp\022\010\n\004PRO"
-    "D\020\000\022\007\n\003SUM\020\001\022\007\n\003MAX\020\002\" \n\014ELUParameter\022\020\n"
-    "\005alpha\030\001 \001(\002:\0011\"\254\001\n\016EmbedParameter\022\022\n\nnu"
-    "m_output\030\001 \001(\r\022\021\n\tinput_dim\030\002 \001(\r\022\027\n\tbia"
-    "s_term\030\003 \001(\010:\004true\022-\n\rweight_filler\030\004 \001("
-    "\0132\026.caffe.FillerParameter\022+\n\013bias_filler"
-    "\030\005 \001(\0132\026.caffe.FillerParameter\"D\n\014ExpPar"
-    "ameter\022\020\n\004base\030\001 \001(\002:\002-1\022\020\n\005scale\030\002 \001(\002:"
-    "\0011\022\020\n\005shift\030\003 \001(\002:\0010\"9\n\020FlattenParameter"
-    "\022\017\n\004axis\030\001 \001(\005:\0011\022\024\n\010end_axis\030\002 \001(\005:\002-1\""
-    "O\n\021HDF5DataParameter\022\016\n\006source\030\001 \001(\t\022\022\n\n"
-    "batch_size\030\002 \001(\r\022\026\n\007shuffle\030\003 \001(\010:\005false"
-    "\"(\n\023HDF5OutputParameter\022\021\n\tfile_name\030\001 \001"
-    "(\t\"^\n\022HingeLossParameter\0220\n\004norm\030\001 \001(\0162\036"
-    ".caffe.HingeLossParameter.Norm:\002L1\"\026\n\004No"
-    "rm\022\006\n\002L1\020\001\022\006\n\002L2\020\002\"\227\002\n\022ImageDataParamete"
-    "r\022\016\n\006source\030\001 \001(\t\022\025\n\nbatch_size\030\004 \001(\r:\0011"
-    "\022\024\n\trand_skip\030\007 \001(\r:\0010\022\026\n\007shuffle\030\010 \001(\010:"
-    "\005false\022\025\n\nnew_height\030\t \001(\r:\0010\022\024\n\tnew_wid"
-    "th\030\n \001(\r:\0010\022\026\n\010is_color\030\013 \001(\010:\004true\022\020\n\005s"
-    "cale\030\002 \001(\002:\0011\022\021\n\tmean_file\030\003 \001(\t\022\024\n\tcrop"
-    "_size\030\005 \001(\r:\0010\022\025\n\006mirror\030\006 \001(\010:\005false\022\025\n"
-    "\013root_folder\030\014 \001(\t:\000\"\'\n\025InfogainLossPara"
-    "meter\022\016\n\006source\030\001 \001(\t\"\313\001\n\025InnerProductPa"
-    "rameter\022\022\n\nnum_output\030\001 \001(\r\022\027\n\tbias_term"
-    "\030\002 \001(\010:\004true\022-\n\rweight_filler\030\003 \001(\0132\026.ca"
-    "ffe.FillerParameter\022+\n\013bias_filler\030\004 \001(\013"
-    "2\026.caffe.FillerParameter\022\017\n\004axis\030\005 \001(\005:\001"
-    "1\022\030\n\ttranspose\030\006 \001(\010:\005false\"1\n\016InputPara"
-    "meter\022\037\n\005shape\030\001 \003(\0132\020.caffe.BlobShape\"D"
-    "\n\014LogParameter\022\020\n\004base\030\001 \001(\002:\002-1\022\020\n\005scal"
-    "e\030\002 \001(\002:\0011\022\020\n\005shift\030\003 \001(\002:\0010\"\270\002\n\014LRNPara"
-    "meter\022\025\n\nlocal_size\030\001 \001(\r:\0015\022\020\n\005alpha\030\002 "
-    "\001(\002:\0011\022\022\n\004beta\030\003 \001(\002:\0040.75\022D\n\013norm_regio"
-    "n\030\004 \001(\0162\036.caffe.LRNParameter.NormRegion:"
-    "\017ACROSS_CHANNELS\022\014\n\001k\030\005 \001(\002:\0011\0223\n\006engine"
-    "\030\006 \001(\0162\032.caffe.LRNParameter.Engine:\007DEFA"
-    "ULT\"5\n\nNormRegion\022\023\n\017ACROSS_CHANNELS\020\000\022\022"
-    "\n\016WITHIN_CHANNEL\020\001\"+\n\006Engine\022\013\n\007DEFAULT\020"
-    "\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"Z\n\023MemoryDataPar"
-    "ameter\022\022\n\nbatch_size\030\001 \001(\r\022\020\n\010channels\030\002"
-    " \001(\r\022\016\n\006height\030\003 \001(\r\022\r\n\005width\030\004 \001(\r\"d\n\014M"
-    "VNParameter\022 \n\022normalize_variance\030\001 \001(\010:"
-    "\004true\022\036\n\017across_channels\030\002 \001(\010:\005false\022\022\n"
-    "\003eps\030\003 \001(\002:\0051e-09\"5\n\022ParameterParameter\022"
-    "\037\n\005shape\030\001 \001(\0132\020.caffe.BlobShape\"\242\003\n\020Poo"
-    "lingParameter\0225\n\004pool\030\001 \001(\0162\".caffe.Pool"
-    "ingParameter.PoolMethod:\003MAX\022\016\n\003pad\030\004 \001("
-    "\r:\0010\022\020\n\005pad_h\030\t \001(\r:\0010\022\020\n\005pad_w\030\n \001(\r:\0010"
-    "\022\023\n\013kernel_size\030\002 \001(\r\022\020\n\010kernel_h\030\005 \001(\r\022"
-    "\020\n\010kernel_w\030\006 \001(\r\022\021\n\006stride\030\003 \001(\r:\0011\022\020\n\010"
-    "stride_h\030\007 \001(\r\022\020\n\010stride_w\030\010 \001(\r\0227\n\006engi"
-    "ne\030\013 \001(\0162\036.caffe.PoolingParameter.Engine"
-    ":\007DEFAULT\022\035\n\016global_pooling\030\014 \001(\010:\005false"
-    "\".\n\nPoolMethod\022\007\n\003MAX\020\000\022\007\n\003AVE\020\001\022\016\n\nSTOC"
-    "HASTIC\020\002\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n\005CAFFE"
-    "\020\001\022\t\n\005CUDNN\020\002\"F\n\016PowerParameter\022\020\n\005power"
-    "\030\001 \001(\002:\0011\022\020\n\005scale\030\002 \001(\002:\0011\022\020\n\005shift\030\003 \001"
-    "(\002:\0010\"g\n\017PythonParameter\022\016\n\006module\030\001 \001(\t"
-    "\022\r\n\005layer\030\002 \001(\t\022\023\n\tparam_str\030\003 \001(\t:\000\022 \n\021"
-    "share_in_parallel\030\004 \001(\010:\005false\"\300\001\n\022Recur"
-    "rentParameter\022\025\n\nnum_output\030\001 \001(\r:\0010\022-\n\r"
-    "weight_filler\030\002 \001(\0132\026.caffe.FillerParame"
-    "ter\022+\n\013bias_filler\030\003 \001(\0132\026.caffe.FillerP"
-    "arameter\022\031\n\ndebug_info\030\004 \001(\010:\005false\022\034\n\re"
-    "xpose_hidden\030\005 \001(\010:\005false\"\255\001\n\022ReductionP"
-    "arameter\022=\n\toperation\030\001 \001(\0162%.caffe.Redu"
-    "ctionParameter.ReductionOp:\003SUM\022\017\n\004axis\030"
-    "\002 \001(\005:\0010\022\020\n\005coeff\030\003 \001(\002:\0011\"5\n\013ReductionO"
-    "p\022\007\n\003SUM\020\001\022\010\n\004ASUM\020\002\022\t\n\005SUMSQ\020\003\022\010\n\004MEAN\020"
-    "\004\"\215\001\n\rReLUParameter\022\031\n\016negative_slope\030\001 "
-    "\001(\002:\0010\0224\n\006engine\030\002 \001(\0162\033.caffe.ReLUParam"
-    "eter.Engine:\007DEFAULT\"+\n\006Engine\022\013\n\007DEFAUL"
-    "T\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"Z\n\020ReshapePara"
-    "meter\022\037\n\005shape\030\001 \001(\0132\020.caffe.BlobShape\022\017"
-    "\n\004axis\030\002 \001(\005:\0010\022\024\n\010num_axes\030\003 \001(\005:\002-1\"\245\001"
-    "\n\016ScaleParameter\022\017\n\004axis\030\001 \001(\005:\0011\022\023\n\010num"
-    "_axes\030\002 \001(\005:\0011\022&\n\006filler\030\003 \001(\0132\026.caffe.F"
-    "illerParameter\022\030\n\tbias_term\030\004 \001(\010:\005false"
-    "\022+\n\013bias_filler\030\005 \001(\0132\026.caffe.FillerPara"
-    "meter\"x\n\020SigmoidParameter\0227\n\006engine\030\001 \001("
-    "\0162\036.caffe.SigmoidParameter.Engine:\007DEFAU"
-    "LT\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n\005CAFFE\020\001\022\t\n\005"
-    "CUDNN\020\002\"L\n\016SliceParameter\022\017\n\004axis\030\003 \001(\005:"
-    "\0011\022\023\n\013slice_point\030\002 \003(\r\022\024\n\tslice_dim\030\001 \001"
-    "(\r:\0011\"\211\001\n\020SoftmaxParameter\0227\n\006engine\030\001 \001"
-    "(\0162\036.caffe.SoftmaxParameter.Engine:\007DEFA"
-    "ULT\022\017\n\004axis\030\002 \001(\005:\0011\"+\n\006Engine\022\013\n\007DEFAUL"
-    "T\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"r\n\rTanHParamet"
-    "er\0224\n\006engine\030\001 \001(\0162\033.caffe.TanHParameter"
-    ".Engine:\007DEFAULT\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022"
-    "\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"/\n\rTileParameter\022\017"
-    "\n\004axis\030\001 \001(\005:\0011\022\r\n\005tiles\030\002 \001(\005\"*\n\022Thresh"
-    "oldParameter\022\024\n\tthreshold\030\001 \001(\002:\0010\"\301\002\n\023W"
-    "indowDataParameter\022\016\n\006source\030\001 \001(\t\022\020\n\005sc"
-    "ale\030\002 \001(\002:\0011\022\021\n\tmean_file\030\003 \001(\t\022\022\n\nbatch"
-    "_size\030\004 \001(\r\022\024\n\tcrop_size\030\005 \001(\r:\0010\022\025\n\006mir"
-    "ror\030\006 \001(\010:\005false\022\031\n\014fg_threshold\030\007 \001(\002:\003"
-    "0.5\022\031\n\014bg_threshold\030\010 \001(\002:\0030.5\022\031\n\013fg_fra"
-    "ction\030\t \001(\002:\0040.25\022\026\n\013context_pad\030\n \001(\r:\001"
-    "0\022\027\n\tcrop_mode\030\013 \001(\t:\004warp\022\033\n\014cache_imag"
-    "es\030\014 \001(\010:\005false\022\025\n\013root_folder\030\r \001(\t:\000\"\353"
-    "\001\n\014SPPParameter\022\026\n\016pyramid_height\030\001 \001(\r\022"
-    "1\n\004pool\030\002 \001(\0162\036.caffe.SPPParameter.PoolM"
-    "ethod:\003MAX\0223\n\006engine\030\006 \001(\0162\032.caffe.SPPPa"
-    "rameter.Engine:\007DEFAULT\".\n\nPoolMethod\022\007\n"
-    "\003MAX\020\000\022\007\n\003AVE\020\001\022\016\n\nSTOCHASTIC\020\002\"+\n\006Engin"
-    "e\022\013\n\007DEFAULT\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"\340\023\n"
-    "\020V1LayerParameter\022\016\n\006bottom\030\002 \003(\t\022\013\n\003top"
-    "\030\003 \003(\t\022\014\n\004name\030\004 \001(\t\022$\n\007include\030  \003(\0132\023."
-    "caffe.NetStateRule\022$\n\007exclude\030! \003(\0132\023.ca"
-    "ffe.NetStateRule\022/\n\004type\030\005 \001(\0162!.caffe.V"
-    "1LayerParameter.LayerType\022\037\n\005blobs\030\006 \003(\013"
-    "2\020.caffe.BlobProto\022\016\n\005param\030\351\007 \003(\t\022>\n\017bl"
-    "ob_share_mode\030\352\007 \003(\0162$.caffe.V1LayerPara"
-    "meter.DimCheckMode\022\020\n\010blobs_lr\030\007 \003(\002\022\024\n\014"
-    "weight_decay\030\010 \003(\002\022\023\n\013loss_weight\030# \003(\002\022"
-    "0\n\016accuracy_param\030\033 \001(\0132\030.caffe.Accuracy"
-    "Parameter\022,\n\014argmax_param\030\027 \001(\0132\026.caffe."
-    "ArgMaxParameter\022,\n\014concat_param\030\t \001(\0132\026."
-    "caffe.ConcatParameter\022\?\n\026contrastive_los"
-    "s_param\030( \001(\0132\037.caffe.ContrastiveLossPar"
-    "ameter\0226\n\021convolution_param\030\n \001(\0132\033.caff"
-    "e.ConvolutionParameter\022(\n\ndata_param\030\013 \001"
-    "(\0132\024.caffe.DataParameter\022.\n\rdropout_para"
-    "m\030\014 \001(\0132\027.caffe.DropoutParameter\0223\n\020dumm"
-    "y_data_param\030\032 \001(\0132\031.caffe.DummyDataPara"
-    "meter\022.\n\reltwise_param\030\030 \001(\0132\027.caffe.Elt"
-    "wiseParameter\022&\n\texp_param\030) \001(\0132\023.caffe"
-    ".ExpParameter\0221\n\017hdf5_data_param\030\r \001(\0132\030"
-    ".caffe.HDF5DataParameter\0225\n\021hdf5_output_"
-    "param\030\016 \001(\0132\032.caffe.HDF5OutputParameter\022"
-    "3\n\020hinge_loss_param\030\035 \001(\0132\031.caffe.HingeL"
-    "ossParameter\0223\n\020image_data_param\030\017 \001(\0132\031"
-    ".caffe.ImageDataParameter\0229\n\023infogain_lo"
-    "ss_param\030\020 \001(\0132\034.caffe.InfogainLossParam"
-    "eter\0229\n\023inner_product_param\030\021 \001(\0132\034.caff"
-    "e.InnerProductParameter\022&\n\tlrn_param\030\022 \001"
-    "(\0132\023.caffe.LRNParameter\0225\n\021memory_data_p"
-    "aram\030\026 \001(\0132\032.caffe.MemoryDataParameter\022&"
-    "\n\tmvn_param\030\" \001(\0132\023.caffe.MVNParameter\022."
-    "\n\rpooling_param\030\023 \001(\0132\027.caffe.PoolingPar"
-    "ameter\022*\n\013power_param\030\025 \001(\0132\025.caffe.Powe"
-    "rParameter\022(\n\nrelu_param\030\036 \001(\0132\024.caffe.R"
-    "eLUParameter\022.\n\rsigmoid_param\030& \001(\0132\027.ca"
-    "ffe.SigmoidParameter\022.\n\rsoftmax_param\030\' "
-    "\001(\0132\027.caffe.SoftmaxParameter\022*\n\013slice_pa"
-    "ram\030\037 \001(\0132\025.caffe.SliceParameter\022(\n\ntanh"
-    "_param\030% \001(\0132\024.caffe.TanHParameter\0222\n\017th"
-    "reshold_param\030\031 \001(\0132\031.caffe.ThresholdPar"
-    "ameter\0225\n\021window_data_param\030\024 \001(\0132\032.caff"
-    "e.WindowDataParameter\0227\n\017transform_param"
-    "\030$ \001(\0132\036.caffe.TransformationParameter\022("
-    "\n\nloss_param\030* \001(\0132\024.caffe.LossParameter"
-    "\022&\n\005layer\030\001 \001(\0132\027.caffe.V0LayerParameter"
-    "\"\330\004\n\tLayerType\022\010\n\004NONE\020\000\022\n\n\006ABSVAL\020#\022\014\n\010"
-    "ACCURACY\020\001\022\n\n\006ARGMAX\020\036\022\010\n\004BNLL\020\002\022\n\n\006CONC"
-    "AT\020\003\022\024\n\020CONTRASTIVE_LOSS\020%\022\017\n\013CONVOLUTIO"
-    "N\020\004\022\010\n\004DATA\020\005\022\021\n\rDECONVOLUTION\020\'\022\013\n\007DROP"
-    "OUT\020\006\022\016\n\nDUMMY_DATA\020 \022\022\n\016EUCLIDEAN_LOSS\020"
-    "\007\022\013\n\007ELTWISE\020\031\022\007\n\003EXP\020&\022\013\n\007FLATTEN\020\010\022\r\n\t"
-    "HDF5_DATA\020\t\022\017\n\013HDF5_OUTPUT\020\n\022\016\n\nHINGE_LO"
-    "SS\020\034\022\n\n\006IM2COL\020\013\022\016\n\nIMAGE_DATA\020\014\022\021\n\rINFO"
-    "GAIN_LOSS\020\r\022\021\n\rINNER_PRODUCT\020\016\022\007\n\003LRN\020\017\022"
-    "\017\n\013MEMORY_DATA\020\035\022\035\n\031MULTINOMIAL_LOGISTIC"
-    "_LOSS\020\020\022\007\n\003MVN\020\"\022\013\n\007POOLING\020\021\022\t\n\005POWER\020\032"
-    "\022\010\n\004RELU\020\022\022\013\n\007SIGMOID\020\023\022\036\n\032SIGMOID_CROSS"
-    "_ENTROPY_LOSS\020\033\022\013\n\007SILENCE\020$\022\013\n\007SOFTMAX\020"
-    "\024\022\020\n\014SOFTMAX_LOSS\020\025\022\t\n\005SPLIT\020\026\022\t\n\005SLICE\020"
-    "!\022\010\n\004TANH\020\027\022\017\n\013WINDOW_DATA\020\030\022\r\n\tTHRESHOL"
-    "D\020\037\"*\n\014DimCheckMode\022\n\n\006STRICT\020\000\022\016\n\nPERMI"
-    "SSIVE\020\001\"\375\007\n\020V0LayerParameter\022\014\n\004name\030\001 \001"
-    "(\t\022\014\n\004type\030\002 \001(\t\022\022\n\nnum_output\030\003 \001(\r\022\026\n\010"
-    "biasterm\030\004 \001(\010:\004true\022-\n\rweight_filler\030\005 "
+    "\001(\002:\0030.5\022\"\n\023additional_y_offset\030\016 \001(\010:\005f"
+    "alse\"\'\n\010CodeType\022\n\n\006CORNER\020\001\022\017\n\013CENTER_S"
+    "IZE\020\002\"\375\002\n\030DetectionOutputParameter\022\023\n\013nu"
+    "m_classes\030\001 \001(\r\022\034\n\016share_location\030\002 \001(\010:"
+    "\004true\022\036\n\023background_label_id\030\003 \001(\005:\0010\0228\n"
+    "\tnms_param\030\004 \001(\0132%.caffe.NonMaximumSuppr"
+    "essionParameter\0225\n\021save_output_param\030\005 \001"
+    "(\0132\032.caffe.SaveOutputParameter\022<\n\tcode_t"
+    "ype\030\006 \001(\0162!.caffe.PriorBoxParameter.Code"
+    "Type:\006CORNER\022)\n\032variance_encoded_in_targ"
+    "et\030\010 \001(\010:\005false\022\026\n\nkeep_top_k\030\007 \001(\005:\002-1\022"
+    "\034\n\024confidence_threshold\030\t \001(\002\"\201\001\n\005Datum\022"
+    "\020\n\010channels\030\001 \001(\005\022\016\n\006height\030\002 \001(\005\022\r\n\005wid"
+    "th\030\003 \001(\005\022\014\n\004data\030\004 \001(\014\022\r\n\005label\030\005 \001(\005\022\022\n"
+    "\nfloat_data\030\006 \003(\002\022\026\n\007encoded\030\007 \001(\010:\005fals"
+    "e\"\212\002\n\017FillerParameter\022\026\n\004type\030\001 \001(\t:\010con"
+    "stant\022\020\n\005value\030\002 \001(\002:\0010\022\016\n\003min\030\003 \001(\002:\0010\022"
+    "\016\n\003max\030\004 \001(\002:\0011\022\017\n\004mean\030\005 \001(\002:\0010\022\016\n\003std\030"
+    "\006 \001(\002:\0011\022\022\n\006sparse\030\007 \001(\005:\002-1\022B\n\rvariance"
+    "_norm\030\010 \001(\0162#.caffe.FillerParameter.Vari"
+    "anceNorm:\006FAN_IN\"4\n\014VarianceNorm\022\n\n\006FAN_"
+    "IN\020\000\022\013\n\007FAN_OUT\020\001\022\013\n\007AVERAGE\020\002\"\216\002\n\014NetPa"
+    "rameter\022\014\n\004name\030\001 \001(\t\022\r\n\005input\030\003 \003(\t\022%\n\013"
+    "input_shape\030\010 \003(\0132\020.caffe.BlobShape\022\021\n\ti"
+    "nput_dim\030\004 \003(\005\022\035\n\016force_backward\030\005 \001(\010:\005"
+    "false\022\036\n\005state\030\006 \001(\0132\017.caffe.NetState\022\031\n"
+    "\ndebug_info\030\007 \001(\010:\005false\022$\n\005layer\030d \003(\0132"
+    "\025.caffe.LayerParameter\022\'\n\006layers\030\002 \003(\0132\027"
+    ".caffe.V1LayerParameter\"\242\n\n\017SolverParame"
+    "ter\022\013\n\003net\030\030 \001(\t\022&\n\tnet_param\030\031 \001(\0132\023.ca"
+    "ffe.NetParameter\022\021\n\ttrain_net\030\001 \001(\t\022\020\n\010t"
+    "est_net\030\002 \003(\t\022,\n\017train_net_param\030\025 \001(\0132\023"
+    ".caffe.NetParameter\022+\n\016test_net_param\030\026 "
+    "\003(\0132\023.caffe.NetParameter\022$\n\013train_state\030"
+    "\032 \001(\0132\017.caffe.NetState\022#\n\ntest_state\030\033 \003"
+    "(\0132\017.caffe.NetState\022\021\n\ttest_iter\030\003 \003(\005\022\030"
+    "\n\rtest_interval\030\004 \001(\005:\0010\022 \n\021test_compute"
+    "_loss\030\023 \001(\010:\005false\022!\n\023test_initializatio"
+    "n\030  \001(\010:\004true\022\017\n\007base_lr\030\005 \001(\002\022\017\n\007displa"
+    "y\030\006 \001(\005\022\027\n\014average_loss\030! \001(\005:\0011\022\020\n\010max_"
+    "iter\030\007 \001(\005\022\024\n\titer_size\030$ \001(\005:\0011\022\021\n\tlr_p"
+    "olicy\030\010 \001(\t\022\r\n\005gamma\030\t \001(\002\022\r\n\005power\030\n \001("
+    "\002\022\020\n\010momentum\030\013 \001(\002\022\024\n\014weight_decay\030\014 \001("
+    "\002\022\037\n\023regularization_type\030\035 \001(\t:\002L2\022\020\n\010st"
+    "epsize\030\r \001(\005\022\021\n\tstepvalue\030\" \003(\005\022\032\n\016clip_"
+    "gradients\030# \001(\002:\002-1\022\023\n\010snapshot\030\016 \001(\005:\0010"
+    "\022\027\n\017snapshot_prefix\030\017 \001(\t\022\034\n\rsnapshot_di"
+    "ff\030\020 \001(\010:\005false\022K\n\017snapshot_format\030% \001(\016"
+    "2%.caffe.SolverParameter.SnapshotFormat:"
+    "\013BINARYPROTO\022;\n\013solver_mode\030\021 \001(\0162!.caff"
+    "e.SolverParameter.SolverMode:\003GPU\022\024\n\tdev"
+    "ice_id\030\022 \001(\005:\0010\022\027\n\013random_seed\030\024 \001(\003:\002-1"
+    "\022\021\n\004type\030( \001(\t:\003SGD\022\024\n\005delta\030\037 \001(\002:\0051e-0"
+    "8\022\030\n\tmomentum2\030\' \001(\002:\0050.999\022\027\n\trms_decay"
+    "\030& \001(\002:\0040.99\022\031\n\ndebug_info\030\027 \001(\010:\005false\022"
+    "\"\n\024snapshot_after_train\030\034 \001(\010:\004true\022;\n\013s"
+    "olver_type\030\036 \001(\0162!.caffe.SolverParameter"
+    ".SolverType:\003SGD\"+\n\016SnapshotFormat\022\010\n\004HD"
+    "F5\020\000\022\017\n\013BINARYPROTO\020\001\"\036\n\nSolverMode\022\007\n\003C"
+    "PU\020\000\022\007\n\003GPU\020\001\"U\n\nSolverType\022\007\n\003SGD\020\000\022\014\n\010"
+    "NESTEROV\020\001\022\013\n\007ADAGRAD\020\002\022\013\n\007RMSPROP\020\003\022\014\n\010"
+    "ADADELTA\020\004\022\010\n\004ADAM\020\005\"l\n\013SolverState\022\014\n\004i"
+    "ter\030\001 \001(\005\022\023\n\013learned_net\030\002 \001(\t\022!\n\007histor"
+    "y\030\003 \003(\0132\020.caffe.BlobProto\022\027\n\014current_ste"
+    "p\030\004 \001(\005:\0010\"N\n\010NetState\022!\n\005phase\030\001 \001(\0162\014."
+    "caffe.Phase:\004TEST\022\020\n\005level\030\002 \001(\005:\0010\022\r\n\005s"
+    "tage\030\003 \003(\t\"s\n\014NetStateRule\022\033\n\005phase\030\001 \001("
+    "\0162\014.caffe.Phase\022\021\n\tmin_level\030\002 \001(\005\022\021\n\tma"
+    "x_level\030\003 \001(\005\022\r\n\005stage\030\004 \003(\t\022\021\n\tnot_stag"
+    "e\030\005 \003(\t\"\243\001\n\tParamSpec\022\014\n\004name\030\001 \001(\t\0221\n\ns"
+    "hare_mode\030\002 \001(\0162\035.caffe.ParamSpec.DimChe"
+    "ckMode\022\022\n\007lr_mult\030\003 \001(\002:\0011\022\025\n\ndecay_mult"
+    "\030\004 \001(\002:\0011\"*\n\014DimCheckMode\022\n\n\006STRICT\020\000\022\016\n"
+    "\nPERMISSIVE\020\001\"\335\025\n\016LayerParameter\022\014\n\004name"
+    "\030\001 \001(\t\022\014\n\004type\030\002 \001(\t\022\016\n\006bottom\030\003 \003(\t\022\013\n\003"
+    "top\030\004 \003(\t\022\033\n\005phase\030\n \001(\0162\014.caffe.Phase\022\023"
+    "\n\013loss_weight\030\005 \003(\002\022\037\n\005param\030\006 \003(\0132\020.caf"
+    "fe.ParamSpec\022\037\n\005blobs\030\007 \003(\0132\020.caffe.Blob"
+    "Proto\022\026\n\016propagate_down\030\013 \003(\010\022$\n\007include"
+    "\030\010 \003(\0132\023.caffe.NetStateRule\022$\n\007exclude\030\t"
+    " \003(\0132\023.caffe.NetStateRule\0227\n\017transform_p"
+    "aram\030d \001(\0132\036.caffe.TransformationParamet"
+    "er\022(\n\nloss_param\030e \001(\0132\024.caffe.LossParam"
+    "eter\0220\n\016accuracy_param\030f \001(\0132\030.caffe.Acc"
+    "uracyParameter\022,\n\014argmax_param\030g \001(\0132\026.c"
+    "affe.ArgMaxParameter\0224\n\020batch_norm_param"
+    "\030\213\001 \001(\0132\031.caffe.BatchNormParameter\022)\n\nbi"
+    "as_param\030\215\001 \001(\0132\024.caffe.BiasParameter\022,\n"
+    "\014concat_param\030h \001(\0132\026.caffe.ConcatParame"
+    "ter\022\?\n\026contrastive_loss_param\030i \001(\0132\037.ca"
+    "ffe.ContrastiveLossParameter\0226\n\021convolut"
+    "ion_param\030j \001(\0132\033.caffe.ConvolutionParam"
+    "eter\022)\n\ncrop_param\030\220\001 \001(\0132\024.caffe.CropPa"
+    "rameter\022(\n\ndata_param\030k \001(\0132\024.caffe.Data"
+    "Parameter\022@\n\026detection_output_param\030\223\001 \001"
+    "(\0132\037.caffe.DetectionOutputParameter\022.\n\rd"
+    "ropout_param\030l \001(\0132\027.caffe.DropoutParame"
+    "ter\0223\n\020dummy_data_param\030m \001(\0132\031.caffe.Du"
+    "mmyDataParameter\022.\n\reltwise_param\030n \001(\0132"
+    "\027.caffe.EltwiseParameter\022\'\n\telu_param\030\214\001"
+    " \001(\0132\023.caffe.ELUParameter\022+\n\013embed_param"
+    "\030\211\001 \001(\0132\025.caffe.EmbedParameter\022&\n\texp_pa"
+    "ram\030o \001(\0132\023.caffe.ExpParameter\022/\n\rflatte"
+    "n_param\030\207\001 \001(\0132\027.caffe.FlattenParameter\022"
+    "1\n\017hdf5_data_param\030p \001(\0132\030.caffe.HDF5Dat"
+    "aParameter\0225\n\021hdf5_output_param\030q \001(\0132\032."
+    "caffe.HDF5OutputParameter\0223\n\020hinge_loss_"
+    "param\030r \001(\0132\031.caffe.HingeLossParameter\0223"
+    "\n\020image_data_param\030s \001(\0132\031.caffe.ImageDa"
+    "taParameter\0229\n\023infogain_loss_param\030t \001(\013"
+    "2\034.caffe.InfogainLossParameter\0229\n\023inner_"
+    "product_param\030u \001(\0132\034.caffe.InnerProduct"
+    "Parameter\022+\n\013input_param\030\217\001 \001(\0132\025.caffe."
+    "InputParameter\022\'\n\tlog_param\030\206\001 \001(\0132\023.caf"
+    "fe.LogParameter\022&\n\tlrn_param\030v \001(\0132\023.caf"
+    "fe.LRNParameter\0225\n\021memory_data_param\030w \001"
+    "(\0132\032.caffe.MemoryDataParameter\022&\n\tmvn_pa"
+    "ram\030x \001(\0132\023.caffe.MVNParameter\0222\n\nnorm_p"
+    "aram\030\225\001 \001(\0132\035.caffe.NormalizeBBoxParamet"
+    "er\022/\n\rpermute_param\030\224\001 \001(\0132\027.caffe.Permu"
+    "teParameter\0223\n\017parameter_param\030\221\001 \001(\0132\031."
+    "caffe.ParameterParameter\022.\n\rpooling_para"
+    "m\030y \001(\0132\027.caffe.PoolingParameter\022*\n\013powe"
+    "r_param\030z \001(\0132\025.caffe.PowerParameter\022+\n\013"
+    "prelu_param\030\203\001 \001(\0132\025.caffe.PReLUParamete"
+    "r\0222\n\017prior_box_param\030\226\001 \001(\0132\030.caffe.Prio"
+    "rBoxParameter\022-\n\014python_param\030\202\001 \001(\0132\026.c"
+    "affe.PythonParameter\0223\n\017recurrent_param\030"
+    "\222\001 \001(\0132\031.caffe.RecurrentParameter\0223\n\017red"
+    "uction_param\030\210\001 \001(\0132\031.caffe.ReductionPar"
+    "ameter\022(\n\nrelu_param\030{ \001(\0132\024.caffe.ReLUP"
+    "arameter\022/\n\rreshape_param\030\205\001 \001(\0132\027.caffe"
+    ".ReshapeParameter\022+\n\013scale_param\030\216\001 \001(\0132"
+    "\025.caffe.ScaleParameter\022.\n\rsigmoid_param\030"
+    "| \001(\0132\027.caffe.SigmoidParameter\022.\n\rsoftma"
+    "x_param\030} \001(\0132\027.caffe.SoftmaxParameter\022\'"
+    "\n\tspp_param\030\204\001 \001(\0132\023.caffe.SPPParameter\022"
+    "*\n\013slice_param\030~ \001(\0132\025.caffe.SliceParame"
+    "ter\022(\n\ntanh_param\030\177 \001(\0132\024.caffe.TanHPara"
+    "meter\0223\n\017threshold_param\030\200\001 \001(\0132\031.caffe."
+    "ThresholdParameter\022)\n\ntile_param\030\212\001 \001(\0132"
+    "\024.caffe.TileParameter\0226\n\021window_data_par"
+    "am\030\201\001 \001(\0132\032.caffe.WindowDataParameter\"\266\001"
+    "\n\027TransformationParameter\022\020\n\005scale\030\001 \001(\002"
+    ":\0011\022\025\n\006mirror\030\002 \001(\010:\005false\022\024\n\tcrop_size\030"
+    "\003 \001(\r:\0010\022\021\n\tmean_file\030\004 \001(\t\022\022\n\nmean_valu"
+    "e\030\005 \003(\002\022\032\n\013force_color\030\006 \001(\010:\005false\022\031\n\nf"
+    "orce_gray\030\007 \001(\010:\005false\"\302\001\n\rLossParameter"
+    "\022\024\n\014ignore_label\030\001 \001(\005\022D\n\rnormalization\030"
+    "\003 \001(\0162&.caffe.LossParameter.Normalizatio"
+    "nMode:\005VALID\022\021\n\tnormalize\030\002 \001(\010\"B\n\021Norma"
+    "lizationMode\022\010\n\004FULL\020\000\022\t\n\005VALID\020\001\022\016\n\nBAT"
+    "CH_SIZE\020\002\022\010\n\004NONE\020\003\"L\n\021AccuracyParameter"
+    "\022\020\n\005top_k\030\001 \001(\r:\0011\022\017\n\004axis\030\002 \001(\005:\0011\022\024\n\014i"
+    "gnore_label\030\003 \001(\005\"M\n\017ArgMaxParameter\022\032\n\013"
+    "out_max_val\030\001 \001(\010:\005false\022\020\n\005top_k\030\002 \001(\r:"
+    "\0011\022\014\n\004axis\030\003 \001(\005\"9\n\017ConcatParameter\022\017\n\004a"
+    "xis\030\002 \001(\005:\0011\022\025\n\nconcat_dim\030\001 \001(\r:\0011\"j\n\022B"
+    "atchNormParameter\022\030\n\020use_global_stats\030\001 "
+    "\001(\010\022&\n\027moving_average_fraction\030\002 \001(\002:\0050."
+    "999\022\022\n\003eps\030\003 \001(\002:\0051e-05\"]\n\rBiasParameter"
+    "\022\017\n\004axis\030\001 \001(\005:\0011\022\023\n\010num_axes\030\002 \001(\005:\0011\022&"
+    "\n\006filler\030\003 \001(\0132\026.caffe.FillerParameter\"L"
+    "\n\030ContrastiveLossParameter\022\021\n\006margin\030\001 \001"
+    "(\002:\0011\022\035\n\016legacy_version\030\002 \001(\010:\005false\"\374\003\n"
+    "\024ConvolutionParameter\022\022\n\nnum_output\030\001 \001("
+    "\r\022\027\n\tbias_term\030\002 \001(\010:\004true\022\013\n\003pad\030\003 \003(\r\022"
+    "\023\n\013kernel_size\030\004 \003(\r\022\016\n\006stride\030\006 \003(\r\022\020\n\010"
+    "dilation\030\022 \003(\r\022\020\n\005pad_h\030\t \001(\r:\0010\022\020\n\005pad_"
+    "w\030\n \001(\r:\0010\022\020\n\010kernel_h\030\013 \001(\r\022\020\n\010kernel_w"
+    "\030\014 \001(\r\022\020\n\010stride_h\030\r \001(\r\022\020\n\010stride_w\030\016 \001"
+    "(\r\022\020\n\005group\030\005 \001(\r:\0011\022-\n\rweight_filler\030\007 "
     "\001(\0132\026.caffe.FillerParameter\022+\n\013bias_fill"
-    "er\030\006 \001(\0132\026.caffe.FillerParameter\022\016\n\003pad\030"
-    "\007 \001(\r:\0010\022\022\n\nkernelsize\030\010 \001(\r\022\020\n\005group\030\t "
-    "\001(\r:\0011\022\021\n\006stride\030\n \001(\r:\0011\0225\n\004pool\030\013 \001(\0162"
-    "\".caffe.V0LayerParameter.PoolMethod:\003MAX"
-    "\022\032\n\rdropout_ratio\030\014 \001(\002:\0030.5\022\025\n\nlocal_si"
-    "ze\030\r \001(\r:\0015\022\020\n\005alpha\030\016 \001(\002:\0011\022\022\n\004beta\030\017 "
-    "\001(\002:\0040.75\022\014\n\001k\030\026 \001(\002:\0011\022\016\n\006source\030\020 \001(\t\022"
-    "\020\n\005scale\030\021 \001(\002:\0011\022\020\n\010meanfile\030\022 \001(\t\022\021\n\tb"
-    "atchsize\030\023 \001(\r\022\023\n\010cropsize\030\024 \001(\r:\0010\022\025\n\006m"
-    "irror\030\025 \001(\010:\005false\022\037\n\005blobs\0302 \003(\0132\020.caff"
-    "e.BlobProto\022\020\n\010blobs_lr\0303 \003(\002\022\024\n\014weight_"
-    "decay\0304 \003(\002\022\024\n\trand_skip\0305 \001(\r:\0010\022\035\n\020det"
-    "_fg_threshold\0306 \001(\002:\0030.5\022\035\n\020det_bg_thres"
-    "hold\0307 \001(\002:\0030.5\022\035\n\017det_fg_fraction\0308 \001(\002"
-    ":\0040.25\022\032\n\017det_context_pad\030: \001(\r:\0010\022\033\n\rde"
-    "t_crop_mode\030; \001(\t:\004warp\022\022\n\007new_num\030< \001(\005"
-    ":\0010\022\027\n\014new_channels\030= \001(\005:\0010\022\025\n\nnew_heig"
-    "ht\030> \001(\005:\0010\022\024\n\tnew_width\030\? \001(\005:\0010\022\035\n\016shu"
-    "ffle_images\030@ \001(\010:\005false\022\025\n\nconcat_dim\030A"
-    " \001(\r:\0011\0226\n\021hdf5_output_param\030\351\007 \001(\0132\032.ca"
-    "ffe.HDF5OutputParameter\".\n\nPoolMethod\022\007\n"
-    "\003MAX\020\000\022\007\n\003AVE\020\001\022\016\n\nSTOCHASTIC\020\002\"W\n\016PReLU"
-    "Parameter\022&\n\006filler\030\001 \001(\0132\026.caffe.Filler"
-    "Parameter\022\035\n\016channel_shared\030\002 \001(\010:\005false"
-    "\"\207\001\n\016NormalizedBBox\022\014\n\004xmin\030\001 \001(\002\022\014\n\004ymi"
-    "n\030\002 \001(\002\022\014\n\004xmax\030\003 \001(\002\022\014\n\004ymax\030\004 \001(\002\022\r\n\005l"
-    "abel\030\005 \001(\005\022\021\n\tdifficult\030\006 \001(\010\022\r\n\005score\030\007"
-    " \001(\002\022\014\n\004size\030\010 \001(\002*=\n\004Type\022\n\n\006DOUBLE\020\000\022\t"
-    "\n\005FLOAT\020\001\022\013\n\007FLOAT16\020\002\022\007\n\003INT\020\003\022\010\n\004UINT\020"
-    "\004*\034\n\005Phase\022\t\n\005TRAIN\020\000\022\010\n\004TEST\020\001", 16991);
+    "er\030\010 \001(\0132\026.caffe.FillerParameter\022;\n\006engi"
+    "ne\030\017 \001(\0162\".caffe.ConvolutionParameter.En"
+    "gine:\007DEFAULT\022\017\n\004axis\030\020 \001(\005:\0011\022\036\n\017force_"
+    "nd_im2col\030\021 \001(\010:\005false\"+\n\006Engine\022\013\n\007DEFA"
+    "ULT\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"0\n\rCropParam"
+    "eter\022\017\n\004axis\030\001 \001(\005:\0012\022\016\n\006offset\030\002 \003(\r\"\244\002"
+    "\n\rDataParameter\022\016\n\006source\030\001 \001(\t\022\022\n\nbatch"
+    "_size\030\004 \001(\r\022\024\n\trand_skip\030\007 \001(\r:\0010\0221\n\007bac"
+    "kend\030\010 \001(\0162\027.caffe.DataParameter.DB:\007LEV"
+    "ELDB\022\020\n\005scale\030\002 \001(\002:\0011\022\021\n\tmean_file\030\003 \001("
+    "\t\022\024\n\tcrop_size\030\005 \001(\r:\0010\022\025\n\006mirror\030\006 \001(\010:"
+    "\005false\022\"\n\023force_encoded_color\030\t \001(\010:\005fal"
+    "se\022\023\n\010prefetch\030\n \001(\r:\0014\"\033\n\002DB\022\013\n\007LEVELDB"
+    "\020\000\022\010\n\004LMDB\020\001\"[\n\036NonMaximumSuppressionPar"
+    "ameter\022\032\n\rnms_threshold\030\001 \001(\002:\0030.3\022\r\n\005to"
+    "p_k\030\002 \001(\005\022\016\n\003eta\030\003 \001(\002:\0011\"\252\001\n\023SaveOutput"
+    "Parameter\022\030\n\020output_directory\030\001 \001(\t\022\032\n\022o"
+    "utput_name_prefix\030\002 \001(\t\022\025\n\routput_format"
+    "\030\003 \001(\t\022\026\n\016label_map_file\030\004 \001(\t\022\026\n\016name_s"
+    "ize_file\030\005 \001(\t\022\026\n\016num_test_image\030\006 \001(\r\"."
+    "\n\020DropoutParameter\022\032\n\rdropout_ratio\030\001 \001("
+    "\002:\0030.5\"\240\001\n\022DummyDataParameter\022+\n\013data_fi"
+    "ller\030\001 \003(\0132\026.caffe.FillerParameter\022\037\n\005sh"
+    "ape\030\006 \003(\0132\020.caffe.BlobShape\022\013\n\003num\030\002 \003(\r"
+    "\022\020\n\010channels\030\003 \003(\r\022\016\n\006height\030\004 \003(\r\022\r\n\005wi"
+    "dth\030\005 \003(\r\"\245\001\n\020EltwiseParameter\0229\n\toperat"
+    "ion\030\001 \001(\0162!.caffe.EltwiseParameter.Eltwi"
+    "seOp:\003SUM\022\r\n\005coeff\030\002 \003(\002\022\036\n\020stable_prod_"
+    "grad\030\003 \001(\010:\004true\"\'\n\tEltwiseOp\022\010\n\004PROD\020\000\022"
+    "\007\n\003SUM\020\001\022\007\n\003MAX\020\002\" \n\014ELUParameter\022\020\n\005alp"
+    "ha\030\001 \001(\002:\0011\"\254\001\n\016EmbedParameter\022\022\n\nnum_ou"
+    "tput\030\001 \001(\r\022\021\n\tinput_dim\030\002 \001(\r\022\027\n\tbias_te"
+    "rm\030\003 \001(\010:\004true\022-\n\rweight_filler\030\004 \001(\0132\026."
+    "caffe.FillerParameter\022+\n\013bias_filler\030\005 \001"
+    "(\0132\026.caffe.FillerParameter\"D\n\014ExpParamet"
+    "er\022\020\n\004base\030\001 \001(\002:\002-1\022\020\n\005scale\030\002 \001(\002:\0011\022\020"
+    "\n\005shift\030\003 \001(\002:\0010\"9\n\020FlattenParameter\022\017\n\004"
+    "axis\030\001 \001(\005:\0011\022\024\n\010end_axis\030\002 \001(\005:\002-1\"O\n\021H"
+    "DF5DataParameter\022\016\n\006source\030\001 \001(\t\022\022\n\nbatc"
+    "h_size\030\002 \001(\r\022\026\n\007shuffle\030\003 \001(\010:\005false\"(\n\023"
+    "HDF5OutputParameter\022\021\n\tfile_name\030\001 \001(\t\"^"
+    "\n\022HingeLossParameter\0220\n\004norm\030\001 \001(\0162\036.caf"
+    "fe.HingeLossParameter.Norm:\002L1\"\026\n\004Norm\022\006"
+    "\n\002L1\020\001\022\006\n\002L2\020\002\"\227\002\n\022ImageDataParameter\022\016\n"
+    "\006source\030\001 \001(\t\022\025\n\nbatch_size\030\004 \001(\r:\0011\022\024\n\t"
+    "rand_skip\030\007 \001(\r:\0010\022\026\n\007shuffle\030\010 \001(\010:\005fal"
+    "se\022\025\n\nnew_height\030\t \001(\r:\0010\022\024\n\tnew_width\030\n"
+    " \001(\r:\0010\022\026\n\010is_color\030\013 \001(\010:\004true\022\020\n\005scale"
+    "\030\002 \001(\002:\0011\022\021\n\tmean_file\030\003 \001(\t\022\024\n\tcrop_siz"
+    "e\030\005 \001(\r:\0010\022\025\n\006mirror\030\006 \001(\010:\005false\022\025\n\013roo"
+    "t_folder\030\014 \001(\t:\000\"\'\n\025InfogainLossParamete"
+    "r\022\016\n\006source\030\001 \001(\t\"\313\001\n\025InnerProductParame"
+    "ter\022\022\n\nnum_output\030\001 \001(\r\022\027\n\tbias_term\030\002 \001"
+    "(\010:\004true\022-\n\rweight_filler\030\003 \001(\0132\026.caffe."
+    "FillerParameter\022+\n\013bias_filler\030\004 \001(\0132\026.c"
+    "affe.FillerParameter\022\017\n\004axis\030\005 \001(\005:\0011\022\030\n"
+    "\ttranspose\030\006 \001(\010:\005false\"1\n\016InputParamete"
+    "r\022\037\n\005shape\030\001 \003(\0132\020.caffe.BlobShape\"D\n\014Lo"
+    "gParameter\022\020\n\004base\030\001 \001(\002:\002-1\022\020\n\005scale\030\002 "
+    "\001(\002:\0011\022\020\n\005shift\030\003 \001(\002:\0010\"\270\002\n\014LRNParamete"
+    "r\022\025\n\nlocal_size\030\001 \001(\r:\0015\022\020\n\005alpha\030\002 \001(\002:"
+    "\0011\022\022\n\004beta\030\003 \001(\002:\0040.75\022D\n\013norm_region\030\004 "
+    "\001(\0162\036.caffe.LRNParameter.NormRegion:\017ACR"
+    "OSS_CHANNELS\022\014\n\001k\030\005 \001(\002:\0011\0223\n\006engine\030\006 \001"
+    "(\0162\032.caffe.LRNParameter.Engine:\007DEFAULT\""
+    "5\n\nNormRegion\022\023\n\017ACROSS_CHANNELS\020\000\022\022\n\016WI"
+    "THIN_CHANNEL\020\001\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n"
+    "\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"Z\n\023MemoryDataParamet"
+    "er\022\022\n\nbatch_size\030\001 \001(\r\022\020\n\010channels\030\002 \001(\r"
+    "\022\016\n\006height\030\003 \001(\r\022\r\n\005width\030\004 \001(\r\"d\n\014MVNPa"
+    "rameter\022 \n\022normalize_variance\030\001 \001(\010:\004tru"
+    "e\022\036\n\017across_channels\030\002 \001(\010:\005false\022\022\n\003eps"
+    "\030\003 \001(\002:\0051e-09\"5\n\022ParameterParameter\022\037\n\005s"
+    "hape\030\001 \001(\0132\020.caffe.BlobShape\"\242\003\n\020Pooling"
+    "Parameter\0225\n\004pool\030\001 \001(\0162\".caffe.PoolingP"
+    "arameter.PoolMethod:\003MAX\022\016\n\003pad\030\004 \001(\r:\0010"
+    "\022\020\n\005pad_h\030\t \001(\r:\0010\022\020\n\005pad_w\030\n \001(\r:\0010\022\023\n\013"
+    "kernel_size\030\002 \001(\r\022\020\n\010kernel_h\030\005 \001(\r\022\020\n\010k"
+    "ernel_w\030\006 \001(\r\022\021\n\006stride\030\003 \001(\r:\0011\022\020\n\010stri"
+    "de_h\030\007 \001(\r\022\020\n\010stride_w\030\010 \001(\r\0227\n\006engine\030\013"
+    " \001(\0162\036.caffe.PoolingParameter.Engine:\007DE"
+    "FAULT\022\035\n\016global_pooling\030\014 \001(\010:\005false\".\n\n"
+    "PoolMethod\022\007\n\003MAX\020\000\022\007\n\003AVE\020\001\022\016\n\nSTOCHAST"
+    "IC\020\002\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n\005CAFFE\020\001\022\t"
+    "\n\005CUDNN\020\002\"F\n\016PowerParameter\022\020\n\005power\030\001 \001"
+    "(\002:\0011\022\020\n\005scale\030\002 \001(\002:\0011\022\020\n\005shift\030\003 \001(\002:\001"
+    "0\"g\n\017PythonParameter\022\016\n\006module\030\001 \001(\t\022\r\n\005"
+    "layer\030\002 \001(\t\022\023\n\tparam_str\030\003 \001(\t:\000\022 \n\021shar"
+    "e_in_parallel\030\004 \001(\010:\005false\"\300\001\n\022Recurrent"
+    "Parameter\022\025\n\nnum_output\030\001 \001(\r:\0010\022-\n\rweig"
+    "ht_filler\030\002 \001(\0132\026.caffe.FillerParameter\022"
+    "+\n\013bias_filler\030\003 \001(\0132\026.caffe.FillerParam"
+    "eter\022\031\n\ndebug_info\030\004 \001(\010:\005false\022\034\n\rexpos"
+    "e_hidden\030\005 \001(\010:\005false\"\255\001\n\022ReductionParam"
+    "eter\022=\n\toperation\030\001 \001(\0162%.caffe.Reductio"
+    "nParameter.ReductionOp:\003SUM\022\017\n\004axis\030\002 \001("
+    "\005:\0010\022\020\n\005coeff\030\003 \001(\002:\0011\"5\n\013ReductionOp\022\007\n"
+    "\003SUM\020\001\022\010\n\004ASUM\020\002\022\t\n\005SUMSQ\020\003\022\010\n\004MEAN\020\004\"\215\001"
+    "\n\rReLUParameter\022\031\n\016negative_slope\030\001 \001(\002:"
+    "\0010\0224\n\006engine\030\002 \001(\0162\033.caffe.ReLUParameter"
+    ".Engine:\007DEFAULT\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022"
+    "\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"Z\n\020ReshapeParamete"
+    "r\022\037\n\005shape\030\001 \001(\0132\020.caffe.BlobShape\022\017\n\004ax"
+    "is\030\002 \001(\005:\0010\022\024\n\010num_axes\030\003 \001(\005:\002-1\"\245\001\n\016Sc"
+    "aleParameter\022\017\n\004axis\030\001 \001(\005:\0011\022\023\n\010num_axe"
+    "s\030\002 \001(\005:\0011\022&\n\006filler\030\003 \001(\0132\026.caffe.Fille"
+    "rParameter\022\030\n\tbias_term\030\004 \001(\010:\005false\022+\n\013"
+    "bias_filler\030\005 \001(\0132\026.caffe.FillerParamete"
+    "r\"x\n\020SigmoidParameter\0227\n\006engine\030\001 \001(\0162\036."
+    "caffe.SigmoidParameter.Engine:\007DEFAULT\"+"
+    "\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDN"
+    "N\020\002\"L\n\016SliceParameter\022\017\n\004axis\030\003 \001(\005:\0011\022\023"
+    "\n\013slice_point\030\002 \003(\r\022\024\n\tslice_dim\030\001 \001(\r:\001"
+    "1\"\211\001\n\020SoftmaxParameter\0227\n\006engine\030\001 \001(\0162\036"
+    ".caffe.SoftmaxParameter.Engine:\007DEFAULT\022"
+    "\017\n\004axis\030\002 \001(\005:\0011\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022"
+    "\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"r\n\rTanHParameter\0224"
+    "\n\006engine\030\001 \001(\0162\033.caffe.TanHParameter.Eng"
+    "ine:\007DEFAULT\"+\n\006Engine\022\013\n\007DEFAULT\020\000\022\t\n\005C"
+    "AFFE\020\001\022\t\n\005CUDNN\020\002\"/\n\rTileParameter\022\017\n\004ax"
+    "is\030\001 \001(\005:\0011\022\r\n\005tiles\030\002 \001(\005\"*\n\022ThresholdP"
+    "arameter\022\024\n\tthreshold\030\001 \001(\002:\0010\"\301\002\n\023Windo"
+    "wDataParameter\022\016\n\006source\030\001 \001(\t\022\020\n\005scale\030"
+    "\002 \001(\002:\0011\022\021\n\tmean_file\030\003 \001(\t\022\022\n\nbatch_siz"
+    "e\030\004 \001(\r\022\024\n\tcrop_size\030\005 \001(\r:\0010\022\025\n\006mirror\030"
+    "\006 \001(\010:\005false\022\031\n\014fg_threshold\030\007 \001(\002:\0030.5\022"
+    "\031\n\014bg_threshold\030\010 \001(\002:\0030.5\022\031\n\013fg_fractio"
+    "n\030\t \001(\002:\0040.25\022\026\n\013context_pad\030\n \001(\r:\0010\022\027\n"
+    "\tcrop_mode\030\013 \001(\t:\004warp\022\033\n\014cache_images\030\014"
+    " \001(\010:\005false\022\025\n\013root_folder\030\r \001(\t:\000\"\353\001\n\014S"
+    "PPParameter\022\026\n\016pyramid_height\030\001 \001(\r\0221\n\004p"
+    "ool\030\002 \001(\0162\036.caffe.SPPParameter.PoolMetho"
+    "d:\003MAX\0223\n\006engine\030\006 \001(\0162\032.caffe.SPPParame"
+    "ter.Engine:\007DEFAULT\".\n\nPoolMethod\022\007\n\003MAX"
+    "\020\000\022\007\n\003AVE\020\001\022\016\n\nSTOCHASTIC\020\002\"+\n\006Engine\022\013\n"
+    "\007DEFAULT\020\000\022\t\n\005CAFFE\020\001\022\t\n\005CUDNN\020\002\"\340\023\n\020V1L"
+    "ayerParameter\022\016\n\006bottom\030\002 \003(\t\022\013\n\003top\030\003 \003"
+    "(\t\022\014\n\004name\030\004 \001(\t\022$\n\007include\030  \003(\0132\023.caff"
+    "e.NetStateRule\022$\n\007exclude\030! \003(\0132\023.caffe."
+    "NetStateRule\022/\n\004type\030\005 \001(\0162!.caffe.V1Lay"
+    "erParameter.LayerType\022\037\n\005blobs\030\006 \003(\0132\020.c"
+    "affe.BlobProto\022\016\n\005param\030\351\007 \003(\t\022>\n\017blob_s"
+    "hare_mode\030\352\007 \003(\0162$.caffe.V1LayerParamete"
+    "r.DimCheckMode\022\020\n\010blobs_lr\030\007 \003(\002\022\024\n\014weig"
+    "ht_decay\030\010 \003(\002\022\023\n\013loss_weight\030# \003(\002\0220\n\016a"
+    "ccuracy_param\030\033 \001(\0132\030.caffe.AccuracyPara"
+    "meter\022,\n\014argmax_param\030\027 \001(\0132\026.caffe.ArgM"
+    "axParameter\022,\n\014concat_param\030\t \001(\0132\026.caff"
+    "e.ConcatParameter\022\?\n\026contrastive_loss_pa"
+    "ram\030( \001(\0132\037.caffe.ContrastiveLossParamet"
+    "er\0226\n\021convolution_param\030\n \001(\0132\033.caffe.Co"
+    "nvolutionParameter\022(\n\ndata_param\030\013 \001(\0132\024"
+    ".caffe.DataParameter\022.\n\rdropout_param\030\014 "
+    "\001(\0132\027.caffe.DropoutParameter\0223\n\020dummy_da"
+    "ta_param\030\032 \001(\0132\031.caffe.DummyDataParamete"
+    "r\022.\n\reltwise_param\030\030 \001(\0132\027.caffe.Eltwise"
+    "Parameter\022&\n\texp_param\030) \001(\0132\023.caffe.Exp"
+    "Parameter\0221\n\017hdf5_data_param\030\r \001(\0132\030.caf"
+    "fe.HDF5DataParameter\0225\n\021hdf5_output_para"
+    "m\030\016 \001(\0132\032.caffe.HDF5OutputParameter\0223\n\020h"
+    "inge_loss_param\030\035 \001(\0132\031.caffe.HingeLossP"
+    "arameter\0223\n\020image_data_param\030\017 \001(\0132\031.caf"
+    "fe.ImageDataParameter\0229\n\023infogain_loss_p"
+    "aram\030\020 \001(\0132\034.caffe.InfogainLossParameter"
+    "\0229\n\023inner_product_param\030\021 \001(\0132\034.caffe.In"
+    "nerProductParameter\022&\n\tlrn_param\030\022 \001(\0132\023"
+    ".caffe.LRNParameter\0225\n\021memory_data_param"
+    "\030\026 \001(\0132\032.caffe.MemoryDataParameter\022&\n\tmv"
+    "n_param\030\" \001(\0132\023.caffe.MVNParameter\022.\n\rpo"
+    "oling_param\030\023 \001(\0132\027.caffe.PoolingParamet"
+    "er\022*\n\013power_param\030\025 \001(\0132\025.caffe.PowerPar"
+    "ameter\022(\n\nrelu_param\030\036 \001(\0132\024.caffe.ReLUP"
+    "arameter\022.\n\rsigmoid_param\030& \001(\0132\027.caffe."
+    "SigmoidParameter\022.\n\rsoftmax_param\030\' \001(\0132"
+    "\027.caffe.SoftmaxParameter\022*\n\013slice_param\030"
+    "\037 \001(\0132\025.caffe.SliceParameter\022(\n\ntanh_par"
+    "am\030% \001(\0132\024.caffe.TanHParameter\0222\n\017thresh"
+    "old_param\030\031 \001(\0132\031.caffe.ThresholdParamet"
+    "er\0225\n\021window_data_param\030\024 \001(\0132\032.caffe.Wi"
+    "ndowDataParameter\0227\n\017transform_param\030$ \001"
+    "(\0132\036.caffe.TransformationParameter\022(\n\nlo"
+    "ss_param\030* \001(\0132\024.caffe.LossParameter\022&\n\005"
+    "layer\030\001 \001(\0132\027.caffe.V0LayerParameter\"\330\004\n"
+    "\tLayerType\022\010\n\004NONE\020\000\022\n\n\006ABSVAL\020#\022\014\n\010ACCU"
+    "RACY\020\001\022\n\n\006ARGMAX\020\036\022\010\n\004BNLL\020\002\022\n\n\006CONCAT\020\003"
+    "\022\024\n\020CONTRASTIVE_LOSS\020%\022\017\n\013CONVOLUTION\020\004\022"
+    "\010\n\004DATA\020\005\022\021\n\rDECONVOLUTION\020\'\022\013\n\007DROPOUT\020"
+    "\006\022\016\n\nDUMMY_DATA\020 \022\022\n\016EUCLIDEAN_LOSS\020\007\022\013\n"
+    "\007ELTWISE\020\031\022\007\n\003EXP\020&\022\013\n\007FLATTEN\020\010\022\r\n\tHDF5"
+    "_DATA\020\t\022\017\n\013HDF5_OUTPUT\020\n\022\016\n\nHINGE_LOSS\020\034"
+    "\022\n\n\006IM2COL\020\013\022\016\n\nIMAGE_DATA\020\014\022\021\n\rINFOGAIN"
+    "_LOSS\020\r\022\021\n\rINNER_PRODUCT\020\016\022\007\n\003LRN\020\017\022\017\n\013M"
+    "EMORY_DATA\020\035\022\035\n\031MULTINOMIAL_LOGISTIC_LOS"
+    "S\020\020\022\007\n\003MVN\020\"\022\013\n\007POOLING\020\021\022\t\n\005POWER\020\032\022\010\n\004"
+    "RELU\020\022\022\013\n\007SIGMOID\020\023\022\036\n\032SIGMOID_CROSS_ENT"
+    "ROPY_LOSS\020\033\022\013\n\007SILENCE\020$\022\013\n\007SOFTMAX\020\024\022\020\n"
+    "\014SOFTMAX_LOSS\020\025\022\t\n\005SPLIT\020\026\022\t\n\005SLICE\020!\022\010\n"
+    "\004TANH\020\027\022\017\n\013WINDOW_DATA\020\030\022\r\n\tTHRESHOLD\020\037\""
+    "*\n\014DimCheckMode\022\n\n\006STRICT\020\000\022\016\n\nPERMISSIV"
+    "E\020\001\"\375\007\n\020V0LayerParameter\022\014\n\004name\030\001 \001(\t\022\014"
+    "\n\004type\030\002 \001(\t\022\022\n\nnum_output\030\003 \001(\r\022\026\n\010bias"
+    "term\030\004 \001(\010:\004true\022-\n\rweight_filler\030\005 \001(\0132"
+    "\026.caffe.FillerParameter\022+\n\013bias_filler\030\006"
+    " \001(\0132\026.caffe.FillerParameter\022\016\n\003pad\030\007 \001("
+    "\r:\0010\022\022\n\nkernelsize\030\010 \001(\r\022\020\n\005group\030\t \001(\r:"
+    "\0011\022\021\n\006stride\030\n \001(\r:\0011\0225\n\004pool\030\013 \001(\0162\".ca"
+    "ffe.V0LayerParameter.PoolMethod:\003MAX\022\032\n\r"
+    "dropout_ratio\030\014 \001(\002:\0030.5\022\025\n\nlocal_size\030\r"
+    " \001(\r:\0015\022\020\n\005alpha\030\016 \001(\002:\0011\022\022\n\004beta\030\017 \001(\002:"
+    "\0040.75\022\014\n\001k\030\026 \001(\002:\0011\022\016\n\006source\030\020 \001(\t\022\020\n\005s"
+    "cale\030\021 \001(\002:\0011\022\020\n\010meanfile\030\022 \001(\t\022\021\n\tbatch"
+    "size\030\023 \001(\r\022\023\n\010cropsize\030\024 \001(\r:\0010\022\025\n\006mirro"
+    "r\030\025 \001(\010:\005false\022\037\n\005blobs\0302 \003(\0132\020.caffe.Bl"
+    "obProto\022\020\n\010blobs_lr\0303 \003(\002\022\024\n\014weight_deca"
+    "y\0304 \003(\002\022\024\n\trand_skip\0305 \001(\r:\0010\022\035\n\020det_fg_"
+    "threshold\0306 \001(\002:\0030.5\022\035\n\020det_bg_threshold"
+    "\0307 \001(\002:\0030.5\022\035\n\017det_fg_fraction\0308 \001(\002:\0040."
+    "25\022\032\n\017det_context_pad\030: \001(\r:\0010\022\033\n\rdet_cr"
+    "op_mode\030; \001(\t:\004warp\022\022\n\007new_num\030< \001(\005:\0010\022"
+    "\027\n\014new_channels\030= \001(\005:\0010\022\025\n\nnew_height\030>"
+    " \001(\005:\0010\022\024\n\tnew_width\030\? \001(\005:\0010\022\035\n\016shuffle"
+    "_images\030@ \001(\010:\005false\022\025\n\nconcat_dim\030A \001(\r"
+    ":\0011\0226\n\021hdf5_output_param\030\351\007 \001(\0132\032.caffe."
+    "HDF5OutputParameter\".\n\nPoolMethod\022\007\n\003MAX"
+    "\020\000\022\007\n\003AVE\020\001\022\016\n\nSTOCHASTIC\020\002\"W\n\016PReLUPara"
+    "meter\022&\n\006filler\030\001 \001(\0132\026.caffe.FillerPara"
+    "meter\022\035\n\016channel_shared\030\002 \001(\010:\005false\"\207\001\n"
+    "\016NormalizedBBox\022\014\n\004xmin\030\001 \001(\002\022\014\n\004ymin\030\002 "
+    "\001(\002\022\014\n\004xmax\030\003 \001(\002\022\014\n\004ymax\030\004 \001(\002\022\r\n\005label"
+    "\030\005 \001(\005\022\021\n\tdifficult\030\006 \001(\010\022\r\n\005score\030\007 \001(\002"
+    "\022\014\n\004size\030\010 \001(\002*=\n\004Type\022\n\n\006DOUBLE\020\000\022\t\n\005FL"
+    "OAT\020\001\022\013\n\007FLOAT16\020\002\022\007\n\003INT\020\003\022\010\n\004UINT\020\004*\034\n"
+    "\005Phase\022\t\n\005TRAIN\020\000\022\010\n\004TEST\020\001", 17027);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "caffe.proto", &protobuf_RegisterTypes);
   ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_caffe_2eproto);
@@ -5141,6 +5143,7 @@ const int PriorBoxParameter::kStepFieldNumber;
 const int PriorBoxParameter::kStepHFieldNumber;
 const int PriorBoxParameter::kStepWFieldNumber;
 const int PriorBoxParameter::kOffsetFieldNumber;
+const int PriorBoxParameter::kAdditionalYOffsetFieldNumber;
 #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 PriorBoxParameter::PriorBoxParameter()
@@ -5163,8 +5166,8 @@ PriorBoxParameter::PriorBoxParameter(const PriorBoxParameter& from)
 
 void PriorBoxParameter::SharedCtor() {
   _cached_size_ = 0;
-  ::memset(&min_size_, 0, reinterpret_cast<char*>(&step_w_) -
-    reinterpret_cast<char*>(&min_size_) + sizeof(step_w_));
+  ::memset(&min_size_, 0, reinterpret_cast<char*>(&additional_y_offset_) -
+    reinterpret_cast<char*>(&min_size_) + sizeof(additional_y_offset_));
   flip_ = true;
   clip_ = true;
   offset_ = 0.5f;
@@ -5226,8 +5229,8 @@ void PriorBoxParameter::Clear() {
     flip_ = true;
     clip_ = true;
   }
-  if (_has_bits_[8 / 32] & 7936u) {
-    ZR_(img_w_, step_w_);
+  if (_has_bits_[8 / 32] & 16128u) {
+    ZR_(img_w_, additional_y_offset_);
     offset_ = 0.5f;
   }
 
@@ -5450,6 +5453,21 @@ bool PriorBoxParameter::MergePartialFromCodedStream(
         } else {
           goto handle_unusual;
         }
+        if (input->ExpectTag(112)) goto parse_additional_y_offset;
+        break;
+      }
+
+      // optional bool additional_y_offset = 14 [default = false];
+      case 14: {
+        if (tag == 112) {
+         parse_additional_y_offset:
+          set_has_additional_y_offset();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &additional_y_offset_)));
+        } else {
+          goto handle_unusual;
+        }
         if (input->ExpectAtEnd()) goto success;
         break;
       }
@@ -5546,6 +5564,11 @@ void PriorBoxParameter::SerializeWithCachedSizes(
     ::google::protobuf::internal::WireFormatLite::WriteFloat(13, this->offset(), output);
   }
 
+  // optional bool additional_y_offset = 14 [default = false];
+  if (has_additional_y_offset()) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(14, this->additional_y_offset(), output);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
         unknown_fields(), output);
@@ -5624,6 +5647,11 @@ void PriorBoxParameter::SerializeWithCachedSizes(
     target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(13, this->offset(), target);
   }
 
+  // optional bool additional_y_offset = 14 [default = false];
+  if (has_additional_y_offset()) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(14, this->additional_y_offset(), target);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
         unknown_fields(), target);
@@ -5672,7 +5700,7 @@ size_t PriorBoxParameter::ByteSizeLong() const {
     }
 
   }
-  if (_has_bits_[8 / 32] & 7936u) {
+  if (_has_bits_[8 / 32] & 16128u) {
     // optional uint32 img_w = 9;
     if (has_img_w()) {
       total_size += 1 +
@@ -5700,6 +5728,11 @@ size_t PriorBoxParameter::ByteSizeLong() const {
       total_size += 1 + 4;
     }
 
+    // optional bool additional_y_offset = 14 [default = false];
+    if (has_additional_y_offset()) {
+      total_size += 1 + 1;
+    }
+
   }
   // repeated float aspect_ratio = 3;
   {
@@ -5797,6 +5830,9 @@ void PriorBoxParameter::UnsafeMergeFrom(const PriorBoxParameter& from) {
     if (from.has_offset()) {
       set_offset(from.offset());
     }
+    if (from.has_additional_y_offset()) {
+      set_additional_y_offset(from.additional_y_offset());
+    }
   }
   if (from._internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::UnknownFieldSet::MergeToInternalMetdata(
@@ -5841,6 +5877,7 @@ void PriorBoxParameter::InternalSwap(PriorBoxParameter* other) {
   std::swap(step_h_, other->step_h_);
   std::swap(step_w_, other->step_w_);
   std::swap(offset_, other->offset_);
+  std::swap(additional_y_offset_, other->additional_y_offset_);
   std::swap(_has_bits_[0], other->_has_bits_[0]);
   _internal_metadata_.Swap(&other->_internal_metadata_);
   std::swap(_cached_size_, other->_cached_size_);
@@ -6181,6 +6218,30 @@ void PriorBoxParameter::set_offset(float value) {
   // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.offset)
 }
 
+// optional bool additional_y_offset = 14 [default = false];
+bool PriorBoxParameter::has_additional_y_offset() const {
+  return (_has_bits_[0] & 0x00002000u) != 0;
+}
+void PriorBoxParameter::set_has_additional_y_offset() {
+  _has_bits_[0] |= 0x00002000u;
+}
+void PriorBoxParameter::clear_has_additional_y_offset() {
+  _has_bits_[0] &= ~0x00002000u;
+}
+void PriorBoxParameter::clear_additional_y_offset() {
+  additional_y_offset_ = false;
+  clear_has_additional_y_offset();
+}
+bool PriorBoxParameter::additional_y_offset() const {
+  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.additional_y_offset)
+  return additional_y_offset_;
+}
+void PriorBoxParameter::set_additional_y_offset(bool value) {
+  set_has_additional_y_offset();
+  additional_y_offset_ = value;
+  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.additional_y_offset)
+}
+
 inline const PriorBoxParameter* PriorBoxParameter::internal_default_instance() {
   return &PriorBoxParameter_default_instance_.get();
 }
index f1b85f0..3c86e09 100644 (file)
@@ -1537,6 +1537,13 @@ class PriorBoxParameter : public ::google::protobuf::Message /* @@protoc_inserti
   float offset() const;
   void set_offset(float value);
 
+  // optional bool additional_y_offset = 14 [default = false];
+  bool has_additional_y_offset() const;
+  void clear_additional_y_offset();
+  static const int kAdditionalYOffsetFieldNumber = 14;
+  bool additional_y_offset() const;
+  void set_additional_y_offset(bool value);
+
   // @@protoc_insertion_point(class_scope:caffe.PriorBoxParameter)
  private:
   inline void set_has_min_size();
@@ -1561,6 +1568,8 @@ class PriorBoxParameter : public ::google::protobuf::Message /* @@protoc_inserti
   inline void clear_has_step_w();
   inline void set_has_offset();
   inline void clear_has_offset();
+  inline void set_has_additional_y_offset();
+  inline void clear_has_additional_y_offset();
 
   ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
   ::google::protobuf::internal::HasBits<1> _has_bits_;
@@ -1575,6 +1584,7 @@ class PriorBoxParameter : public ::google::protobuf::Message /* @@protoc_inserti
   float step_;
   float step_h_;
   float step_w_;
+  bool additional_y_offset_;
   bool flip_;
   bool clip_;
   float offset_;
@@ -13635,6 +13645,30 @@ inline void PriorBoxParameter::set_offset(float value) {
   // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.offset)
 }
 
+// optional bool additional_y_offset = 14 [default = false];
+inline bool PriorBoxParameter::has_additional_y_offset() const {
+  return (_has_bits_[0] & 0x00002000u) != 0;
+}
+inline void PriorBoxParameter::set_has_additional_y_offset() {
+  _has_bits_[0] |= 0x00002000u;
+}
+inline void PriorBoxParameter::clear_has_additional_y_offset() {
+  _has_bits_[0] &= ~0x00002000u;
+}
+inline void PriorBoxParameter::clear_additional_y_offset() {
+  additional_y_offset_ = false;
+  clear_has_additional_y_offset();
+}
+inline bool PriorBoxParameter::additional_y_offset() const {
+  // @@protoc_insertion_point(field_get:caffe.PriorBoxParameter.additional_y_offset)
+  return additional_y_offset_;
+}
+inline void PriorBoxParameter::set_additional_y_offset(bool value) {
+  set_has_additional_y_offset();
+  additional_y_offset_ = value;
+  // @@protoc_insertion_point(field_set:caffe.PriorBoxParameter.additional_y_offset)
+}
+
 inline const PriorBoxParameter* PriorBoxParameter::internal_default_instance() {
   return &PriorBoxParameter_default_instance_.get();
 }
index abe4bef..77d5eb1 100644 (file)
@@ -145,6 +145,8 @@ message PriorBoxParameter {
   optional float step_w = 12;
   // Offset to the top left corner of each cell.
   optional float offset = 13 [default = 0.5];
+  // If true, two additional boxes for each center will be generated. Their centers will be shifted by y coordinate.
+  optional bool additional_y_offset = 14 [default = false];
 }
 
 // Message that store parameters used by DetectionOutputLayer
index 75831d0..3f74472 100644 (file)
@@ -216,6 +216,14 @@ public:
           _stepY = 0;
           _stepX = 0;
         }
+        if(params.has("additional_y_offset"))
+        {
+          _additional_y_offset = getParameter<bool>(params, "additional_y_offset");
+          if(_additional_y_offset)
+            _numPriors *= 2;
+        }
+        else
+          _additional_y_offset = false;
     }
 
     bool getMemoryShapes(const std::vector<MatShape> &inputs,
@@ -289,6 +297,19 @@ public:
                 // ymax
                 outputPtr[idx++] = (center_y + _boxHeight / 2.) / _imageHeight;
 
+                if(_additional_y_offset)
+                {
+                  float center_y_offset_1 = (h + 1.0) * stepY;
+                  // xmin
+                  outputPtr[idx++] = (center_x - _boxWidth / 2.) / _imageWidth;
+                  // ymin
+                  outputPtr[idx++] = (center_y_offset_1 - _boxHeight / 2.) / _imageHeight;
+                  // xmax
+                  outputPtr[idx++] = (center_x + _boxWidth / 2.) / _imageWidth;
+                  // ymax
+                  outputPtr[idx++] = (center_y_offset_1 + _boxHeight / 2.) / _imageHeight;
+                }
+
                 if (_maxSize > 0)
                 {
                     // second prior: aspect_ratio = 1, size = sqrt(min_size * max_size)
@@ -301,6 +322,19 @@ public:
                     outputPtr[idx++] = (center_x + _boxWidth / 2.) / _imageWidth;
                     // ymax
                     outputPtr[idx++] = (center_y + _boxHeight / 2.) / _imageHeight;
+
+                    if(_additional_y_offset)
+                    {
+                      float center_y_offset_1 = (h + 1.0) * stepY;
+                      // xmin
+                      outputPtr[idx++] = (center_x - _boxWidth / 2.) / _imageWidth;
+                      // ymin
+                      outputPtr[idx++] = (center_y_offset_1 - _boxHeight / 2.) / _imageHeight;
+                      // xmax
+                      outputPtr[idx++] = (center_x + _boxWidth / 2.) / _imageWidth;
+                      // ymax
+                      outputPtr[idx++] = (center_y_offset_1 + _boxHeight / 2.) / _imageHeight;
+                    }
                 }
 
                 // rest of priors
@@ -319,6 +353,18 @@ public:
                     outputPtr[idx++] = (center_x + _boxWidth / 2.) / _imageWidth;
                     // ymax
                     outputPtr[idx++] = (center_y + _boxHeight / 2.) / _imageHeight;
+                    if(_additional_y_offset)
+                    {
+                      float center_y_offset_1 = (h + 1.0) * stepY;
+                      // xmin
+                      outputPtr[idx++] = (center_x - _boxWidth / 2.) / _imageWidth;
+                      // ymin
+                      outputPtr[idx++] = (center_y_offset_1 - _boxHeight / 2.) / _imageHeight;
+                      // xmax
+                      outputPtr[idx++] = (center_x + _boxWidth / 2.) / _imageWidth;
+                      // ymax
+                      outputPtr[idx++] = (center_y_offset_1 + _boxHeight / 2.) / _imageHeight;
+                    }
                 }
             }
         }
@@ -385,6 +431,7 @@ public:
 
     bool _flip;
     bool _clip;
+    bool _additional_y_offset;
 
     size_t _numPriors;