EXAMPLE_SRCS := $(shell find examples -name "*.cpp")
# PROTO_SRCS are the protocol buffer definitions
PROTO_SRCS := $(wildcard src/$(PROJECT)/proto/*.proto)
-# DEPRECATED_PROTO_SRCS are protobuf definitions we no longer officially
-# support, but keep around for upgrades etc.
-DEPRECATED_PROTO_SRCS := $(wildcard src/$(PROJECT)/proto/deprecated/*.proto)
# NONGEN_CXX_SRCS includes all source/header files except those generated
# automatically (e.g., by proto).
NONGEN_CXX_SRCS := $(shell find \
PROTO_GEN_HEADER := ${PROTO_SRCS:.proto=.pb.h}
PROTO_GEN_CC := ${PROTO_SRCS:.proto=.pb.cc}
PROTO_GEN_PY := ${PROTO_SRCS:.proto=_pb2.py}
-# The generated files for deprecated protocol buffers
-DEPRECATED_PROTO_GEN_HEADER := ${DEPRECATED_PROTO_SRCS:.proto=.pb.h}
-DEPRECATED_PROTO_GEN_CC := ${DEPRECATED_PROTO_SRCS:.proto=.pb.cc}
-DEPRECATED_PROTO_GEN_PY := ${DEPRECATED_PROTO_SRCS:.proto=_pb2.py}
# The objects corresponding to the source files
# These objects will be linked into the final shared library, so we
# exclude the tool, example, and test objects.
CXX_OBJS := $(addprefix $(BUILD_DIR)/, ${CXX_SRCS:.cpp=.o})
CU_OBJS := $(addprefix $(BUILD_DIR)/, ${CU_SRCS:.cu=.cuo})
PROTO_OBJS := $(addprefix $(BUILD_DIR)/, ${PROTO_GEN_CC:.cc=.o})
-PROTO_OBJS += $(addprefix $(BUILD_DIR)/, ${DEPRECATED_PROTO_GEN_CC:.cc=.o})
OBJS := $(PROTO_OBJS) $(CXX_OBJS) $(CU_OBJS)
# tool, example, and test objects
TOOL_OBJS := $(addprefix $(BUILD_DIR)/, ${TOOL_SRCS:.cpp=.o})
protoc --proto_path=src --python_out=python $(PROTO_SRCS)
@echo
-proto: $(PROTO_GEN_CC) $(DEPRECATED_PROTO_GEN_CC)
+proto: $(PROTO_GEN_CC)
-$(PROTO_GEN_CC): $(PROTO_SRCS) $(DEPRECATED_PROTO_SRCS)
- protoc --proto_path=src --cpp_out=src $(PROTO_SRCS) $(DEPRECATED_PROTO_SRCS)
+$(PROTO_GEN_CC): $(PROTO_SRCS)
+ protoc --proto_path=src --cpp_out=src $(PROTO_SRCS)
mkdir -p include/$(PROJECT)/proto
cp $(PROTO_GEN_HEADER) include/$(PROJECT)/proto/
- mkdir -p include/$(PROJECT)/proto/deprecated
- cp $(DEPRECATED_PROTO_GEN_HEADER) include/$(PROJECT)/proto/deprecated/
@echo
clean:
#include <string>
#include "caffe/proto/caffe.pb.h"
-#include "caffe/proto/deprecated/caffe_v0_to_v1_bridge.pb.h"
using std::string;
namespace caffe {
+// Return true iff any layer contains parameters specified using
+// deprecated V0LayerParameter.
+bool NetNeedsUpgrade(const NetParameter& net_param);
+
// Perform all necessary transformations to upgrade a V0NetParameter into a
// NetParameter (including upgrading padding layers and LayerParameters).
-bool UpgradeV0Net(const V0NetParameter& v0_net_param, NetParameter* net_param);
+bool UpgradeV0Net(const NetParameter& v0_net_param, NetParameter* net_param);
-// Upgrade V0NetParameter with padding layers to pad-aware conv layers.
+// Upgrade NetParameter with padding layers to pad-aware conv layers.
// For any padding layer, remove it and put its pad parameter in any layers
// taking its top blob as input.
// Error if any of these above layers are not-conv layers.
-void UpgradeV0PaddingLayers(const V0NetParameter& param,
- V0NetParameter* param_upgraded_pad);
+void UpgradeV0PaddingLayers(const NetParameter& param,
+ NetParameter* param_upgraded_pad);
// Upgrade a single V0LayerConnection to the new LayerParameter format.
-bool UpgradeV0LayerConnection(const V0LayerConnection& v0_layer_connection,
- LayerParameter* layer_param);
+bool UpgradeLayerParameter(const LayerParameter& v0_layer_connection,
+ LayerParameter* layer_param);
LayerParameter_LayerType UpgradeV0LayerType(const string& type);
#include "caffe/common.hpp"
#include "caffe/proto/caffe.pb.h"
-#include "caffe/proto/deprecated/caffe_v0_to_v1_bridge.pb.h"
#include "caffe/layer.hpp"
#include "caffe/net.hpp"
#include "caffe/util/io.hpp"
template <typename Dtype>
void Net<Dtype>::ReadParamsFromTextFile(const string& param_file,
NetParameter* param) {
- if (!ReadProtoFromTextFile(param_file, param)) {
- // Failed to parse file as NetParameter; try to parse as a V0NetParameter
- // instead.
- V0NetParameter v0_param;
- CHECK(ReadProtoFromTextFile(param_file, &v0_param))
- << "Failed to parse NetParameter file: " << param_file;
- LOG(ERROR) << "Parsed file as V0NetParameter: " << param_file;
- LOG(ERROR) << "Note that future Caffe releases will not support "
- << "V0NetParameter; use ./build/tools/upgrade_net_proto.bin to upgrade "
- << "this and any other network proto files to the new format.";
- if (!UpgradeV0Net(v0_param, param)) {
+ CHECK(ReadProtoFromTextFile(param_file, param))
+ << "Failed to parse NetParameter file: " << param_file;
+ if (NetNeedsUpgrade(*param)) {
+ // NetParameter was specified using the old style (V0LayerParameter); try to
+ // upgrade it.
+ LOG(ERROR) << "Attempting to upgrade input file specified using deprecated "
+ << "V0LayerParameter: " << param_file;
+ NetParameter original_param(*param);
+ if (!UpgradeV0Net(original_param, param)) {
LOG(ERROR) << "Warning: had one or more problems upgrading "
<< "V0NetParameter to NetParameter (see above); continuing anyway.";
+ } else {
+ LOG(INFO) << "Successfully upgraded file specified using deprecated "
+ << "V0LayerParameter";
}
+ LOG(ERROR) << "Note that future Caffe releases will not support "
+ << "V0NetParameter; use ./build/tools/upgrade_net_proto.bin to upgrade "
+ << "this and any other network proto files to the new format.";
}
}
template <typename Dtype>
void Net<Dtype>::ReadParamsFromBinaryFile(const string& param_file,
NetParameter* param) {
- if (!ReadProtoFromBinaryFile(param_file, param)) {
- // Failed to parse file as NetParameter; try to parse as a V0NetParameter
- // instead.
- V0NetParameter v0_param;
- CHECK(ReadProtoFromBinaryFile(param_file, &v0_param))
- << "Failed to parse NetParameter file: " << param_file;
- LOG(ERROR) << "Parsed file as V0NetParameter: " << param_file;
- LOG(ERROR) << "Note that future Caffe releases will not support "
- << "V0NetParameter; use ./build/tools/upgrade_net_proto.bin to upgrade "
- << "this and any other network proto files to the new format.";
- if (!UpgradeV0Net(v0_param, param)) {
+ CHECK(ReadProtoFromBinaryFile(param_file, param))
+ << "Failed to parse NetParameter file: " << param_file;
+ if (NetNeedsUpgrade(*param)) {
+ // NetParameter was specified using the old style (V0LayerParameter); try to
+ // upgrade it.
+ LOG(ERROR) << "Attempting to upgrade input file specified using deprecated "
+ << "V0LayerParameter: " << param_file;
+ NetParameter original_param(*param);
+ if (!UpgradeV0Net(original_param, param)) {
LOG(ERROR) << "Warning: had one or more problems upgrading "
<< "V0NetParameter to NetParameter (see above); continuing anyway.";
+ } else {
+ LOG(INFO) << "Successfully upgraded file specified using deprecated "
+ << "V0LayerParameter";
}
+ LOG(ERROR) << "Note that future Caffe releases will not support "
+ << "V0NetParameter; use ./build/tools/upgrade_net_proto.bin to upgrade "
+ << "this and any other network proto files to the new format.";
}
}
message NetParameter {
optional string name = 1; // consider giving the network a name
+ repeated LayerParameter layers = 2; // a bunch of layers.
// The input blobs to the network.
- repeated string input = 2;
+ repeated string input = 3;
// The dim of the input blobs. For each input blob there should be four
// values specifying the num, channels, height and width of the input blob.
// Thus, there should be a total of (4 * #input) numbers.
- repeated int32 input_dim = 3;
- repeated LayerParameter layers = 4; // a bunch of layers.
+ repeated int32 input_dim = 4;
// Whether the network will force every layer to carry out backward operation.
// If set False, then whether to carry out backward is determined
// automatically according to the net structure and learning rates.
}
message LayerParameter {
- optional string name = 1; // the layer name
+ repeated string bottom = 2; // the name of the bottom blobs
+ repeated string top = 3; // the name of the top blobs
+ optional string name = 4; // the layer name
// Add new LayerTypes to the enum below in lexicographical order (other than
// starting with NONE), starting with the next available ID in the comment
TANH = 23;
WINDOW_DATA = 24;
}
- optional LayerType type = 2; // the layer type from the enum above
-
- repeated string bottom = 3; // the name of the bottom blobs
- repeated string top = 4; // the name of the top blobs
+ optional LayerType type = 5; // the layer type from the enum above
// The blobs containing the numeric parameters of the layer
- repeated BlobProto blobs = 5;
+ repeated BlobProto blobs = 6;
// The ratio that is multiplied on the global learning rate. If you want to
// set the learning ratio for one blob, you need to set it for all blobs.
- repeated float blobs_lr = 6;
+ repeated float blobs_lr = 7;
// The weight decay that is multiplied on the global weight decay.
- repeated float weight_decay = 7;
+ repeated float weight_decay = 8;
// Parameters for particular layer types.
- optional ConcatParameter concat_param = 8;
- optional ConvolutionParameter convolution_param = 9;
- optional DataParameter data_param = 10;
- optional DropoutParameter dropout_param = 11;
- optional HDF5DataParameter hdf5_data_param = 12;
- optional HDF5OutputParameter hdf5_output_param = 13;
- optional ImageDataParameter image_data_param = 14;
- optional InfogainLossParameter infogain_loss_param = 15;
- optional InnerProductParameter inner_product_param = 16;
- optional LRNParameter lrn_param = 17;
- optional PoolingParameter pooling_param = 18;
- optional WindowDataParameter window_data_param = 19;
+ optional ConcatParameter concat_param = 9;
+ optional ConvolutionParameter convolution_param = 10;
+ optional DataParameter data_param = 11;
+ optional DropoutParameter dropout_param = 12;
+ optional HDF5DataParameter hdf5_data_param = 13;
+ optional HDF5OutputParameter hdf5_output_param = 14;
+ optional ImageDataParameter image_data_param = 15;
+ optional InfogainLossParameter infogain_loss_param = 16;
+ optional InnerProductParameter inner_product_param = 17;
+ optional LRNParameter lrn_param = 18;
+ optional PoolingParameter pooling_param = 19;
+ optional WindowDataParameter window_data_param = 20;
+
+ // The layer parameters specified as a deprecated V0LayerParameter.
+ // This should never be used by any code except to upgrade to the new
+ // LayerParameter specification.
+ optional V0LayerParameter layer = 1;
}
// Message that stores parameters used by ConcatLayer
// square: the tightest square around the window is cropped
optional string crop_mode = 11 [default = "warp"];
}
+
+// DEPRECATED: V0LayerParameter is the old way of specifying layer parameters
+// in Caffe. We keep this message type around for legacy support.
+message V0LayerParameter {
+ optional string name = 1; // the layer name
+ optional string type = 2; // the string to specify the layer type
+
+ // Parameters to specify layers with inner products.
+ optional uint32 num_output = 3; // The number of outputs for the layer
+ optional bool biasterm = 4 [default = true]; // whether to have bias terms
+ optional FillerParameter weight_filler = 5; // The filler for the weight
+ optional FillerParameter bias_filler = 6; // The filler for the bias
+
+ optional uint32 pad = 7 [default = 0]; // The padding size
+ optional uint32 kernelsize = 8; // The kernel size
+ optional uint32 group = 9 [default = 1]; // The group size for group conv
+ optional uint32 stride = 10 [default = 1]; // The stride
+ enum PoolMethod {
+ MAX = 0;
+ AVE = 1;
+ STOCHASTIC = 2;
+ }
+ optional PoolMethod pool = 11 [default = MAX]; // The pooling method
+ optional float dropout_ratio = 12 [default = 0.5]; // dropout ratio
+
+ optional uint32 local_size = 13 [default = 5]; // for local response norm
+ optional float alpha = 14 [default = 1.]; // for local response norm
+ optional float beta = 15 [default = 0.75]; // for local response norm
+
+ // For data layers, specify the data source
+ optional string source = 16;
+ // For data pre-processing, we can do simple scaling and subtracting the
+ // data mean, if provided. Note that the mean subtraction is always carried
+ // out before scaling.
+ optional float scale = 17 [default = 1];
+ optional string meanfile = 18;
+ // For data layers, specify the batch size.
+ optional uint32 batchsize = 19;
+ // For data layers, specify if we would like to randomly crop an image.
+ optional uint32 cropsize = 20 [default = 0];
+ // For data layers, specify if we want to randomly mirror data.
+ optional bool mirror = 21 [default = false];
+
+ // The blobs containing the numeric parameters of the layer
+ repeated BlobProto blobs = 50;
+ // The ratio that is multiplied on the global learning rate. If you want to
+ // set the learning ratio for one blob, you need to set it for all blobs.
+ repeated float blobs_lr = 51;
+ // The weight decay that is multiplied on the global weight decay.
+ repeated float weight_decay = 52;
+
+ // The rand_skip variable is for the data layer to skip a few data points
+ // to avoid all asynchronous sgd clients to start at the same point. The skip
+ // point would be set as rand_skip * rand(0,1). Note that rand_skip should not
+ // be larger than the number of keys in the leveldb.
+ optional uint32 rand_skip = 53 [default = 0];
+
+ // Fields related to detection (det_*)
+ // foreground (object) overlap threshold
+ optional float det_fg_threshold = 54 [default = 0.5];
+ // background (non-object) overlap threshold
+ optional float det_bg_threshold = 55 [default = 0.5];
+ // Fraction of batch that should be foreground objects
+ optional float det_fg_fraction = 56 [default = 0.25];
+
+ // optional bool OBSOLETE_can_clobber = 57 [default = true];
+
+ // Amount of contextual padding to add around a window
+ // (used only by the window_data_layer)
+ optional uint32 det_context_pad = 58 [default = 0];
+
+ // Mode for cropping out a detection window
+ // warp: cropped window is warped to a fixed size and aspect ratio
+ // square: the tightest square around the window is cropped
+ optional string det_crop_mode = 59 [default = "warp"];
+
+ // For ReshapeLayer, one needs to specify the new dimensions.
+ optional int32 new_num = 60 [default = 0];
+ optional int32 new_channels = 61 [default = 0];
+ optional int32 new_height = 62 [default = 0];
+ optional int32 new_width = 63 [default = 0];
+
+ // Whether or not ImageLayer should shuffle the list of files at every epoch.
+ // It will also resize images if new_height or new_width are not zero.
+ optional bool shuffle_images = 64 [default = false];
+
+ // For ConcatLayer, one needs to specify the dimension for concatenation, and
+ // the other dimensions must be the same for all the bottom blobs.
+ // By default it will concatenate blobs along the channels dimension.
+ optional uint32 concat_dim = 65 [default = 1];
+
+ optional HDF5OutputParameter hdf5_output_param = 1001;
+}
+++ /dev/null
-// Copyright 2013 Yangqing Jia
-
-package caffe;
-
-message BlobProto {
- optional int32 num = 1 [default = 0];
- optional int32 channels = 2 [default = 0];
- optional int32 height = 3 [default = 0];
- optional int32 width = 4 [default = 0];
- repeated float data = 5 [packed = true];
- repeated float diff = 6 [packed = true];
-}
-
-// The BlobProtoVector is simply a way to pass multiple blobproto instances
-// around.
-message BlobProtoVector {
- repeated BlobProto blobs = 1;
-}
-
-message Datum {
- optional int32 channels = 1;
- optional int32 height = 2;
- optional int32 width = 3;
- // the actual image data, in bytes
- optional bytes data = 4;
- optional int32 label = 5;
- // Optionally, the datum could also hold float data.
- repeated float float_data = 6;
-}
-
-message FillerParameter {
- // The filler type.
- optional string type = 1 [default = 'constant'];
- optional float value = 2 [default = 0]; // the value in constant filler
- optional float min = 3 [default = 0]; // the min value in uniform filler
- optional float max = 4 [default = 1]; // the max value in uniform filler
- optional float mean = 5 [default = 0]; // the mean value in gaussian filler
- optional float std = 6 [default = 1]; // the std value in gaussian filler
-}
-
-message LayerParameter {
- optional string name = 1; // the layer name
- optional string type = 2; // the string to specify the layer type
-
- // Parameters to specify layers with inner products.
- optional uint32 num_output = 3; // The number of outputs for the layer
- optional bool biasterm = 4 [default = true]; // whether to have bias terms
- optional FillerParameter weight_filler = 5; // The filler for the weight
- optional FillerParameter bias_filler = 6; // The filler for the bias
-
- optional uint32 pad = 7 [default = 0]; // The padding size
- optional uint32 kernelsize = 8; // The kernel size
- optional uint32 group = 9 [default = 1]; // The group size for group conv
- optional uint32 stride = 10 [default = 1]; // The stride
- enum PoolMethod {
- MAX = 0;
- AVE = 1;
- STOCHASTIC = 2;
- }
- optional PoolMethod pool = 11 [default = MAX]; // The pooling method
- optional float dropout_ratio = 12 [default = 0.5]; // dropout ratio
-
- optional uint32 local_size = 13 [default = 5]; // for local response norm
- optional float alpha = 14 [default = 1.]; // for local response norm
- optional float beta = 15 [default = 0.75]; // for local response norm
-
- // For data layers, specify the data source
- optional string source = 16;
- // For data pre-processing, we can do simple scaling and subtracting the
- // data mean, if provided. Note that the mean subtraction is always carried
- // out before scaling.
- optional float scale = 17 [default = 1];
- optional string meanfile = 18;
- // For data layers, specify the batch size.
- optional uint32 batchsize = 19;
- // For data layers, specify if we would like to randomly crop an image.
- optional uint32 cropsize = 20 [default = 0];
- // For data layers, specify if we want to randomly mirror data.
- optional bool mirror = 21 [default = false];
-
- // The blobs containing the numeric parameters of the layer
- repeated BlobProto blobs = 50;
- // The ratio that is multiplied on the global learning rate. If you want to
- // set the learning ratio for one blob, you need to set it for all blobs.
- repeated float blobs_lr = 51;
- // The weight decay that is multiplied on the global weight decay.
- repeated float weight_decay = 52;
-
- // The rand_skip variable is for the data layer to skip a few data points
- // to avoid all asynchronous sgd clients to start at the same point. The skip
- // point would be set as rand_skip * rand(0,1). Note that rand_skip should not
- // be larger than the number of keys in the leveldb.
- optional uint32 rand_skip = 53 [default = 0];
-
- // Fields related to detection (det_*)
- // foreground (object) overlap threshold
- optional float det_fg_threshold = 54 [default = 0.5];
- // background (non-object) overlap threshold
- optional float det_bg_threshold = 55 [default = 0.5];
- // Fraction of batch that should be foreground objects
- optional float det_fg_fraction = 56 [default = 0.25];
-
- // optional bool OBSOLETE_can_clobber = 57 [default = true];
-
- // Amount of contextual padding to add around a window
- // (used only by the window_data_layer)
- optional uint32 det_context_pad = 58 [default = 0];
-
- // Mode for cropping out a detection window
- // warp: cropped window is warped to a fixed size and aspect ratio
- // square: the tightest square around the window is cropped
- optional string det_crop_mode = 59 [default = "warp"];
-
- // For ReshapeLayer, one needs to specify the new dimensions.
- optional int32 new_num = 60 [default = 0];
- optional int32 new_channels = 61 [default = 0];
- optional int32 new_height = 62 [default = 0];
- optional int32 new_width = 63 [default = 0];
-
- // Whether or not ImageLayer should shuffle the list of files at every epoch.
- // It will also resize images if new_height or new_width are not zero.
- optional bool shuffle_images = 64 [default = false];
-
- // For ConcatLayer, one needs to specify the dimension for concatenation, and
- // the other dimensions must be the same for all the bottom blobs.
- // By default it will concatenate blobs along the channels dimension.
- optional uint32 concat_dim = 65 [default = 1];
-}
-
-message LayerConnection {
- optional LayerParameter layer = 1; // the layer parameter
- repeated string bottom = 2; // the name of the bottom blobs
- repeated string top = 3; // the name of the top blobs
-}
-
-message NetParameter {
- optional string name = 1; // consider giving the network a name
- repeated LayerConnection layers = 2; // a bunch of layers.
- // The input blobs to the network.
- repeated string input = 3;
- // The dim of the input blobs. For each input blob there should be four
- // values specifying the num, channels, height and width of the input blob.
- // Thus, there should be a total of (4 * #input) numbers.
- repeated int32 input_dim = 4;
- // Whether the network will force every layer to carry out backward operation.
- // If set False, then whether to carry out backward is determined
- // automatically according to the net structure and learning rates.
- optional bool force_backward = 5 [default = false];
-}
-
-message SolverParameter {
- optional string train_net = 1; // The proto file for the training net.
- optional string test_net = 2; // The proto file for the testing net.
- // The number of iterations for each testing phase.
- optional int32 test_iter = 3 [default = 0];
- // The number of iterations between two testing phases.
- optional int32 test_interval = 4 [default = 0];
- optional float base_lr = 5; // The base learning rate
- // the number of iterations between displaying info. If display = 0, no info
- // will be displayed.
- optional int32 display = 6;
- optional int32 max_iter = 7; // the maximum number of iterations
- optional string lr_policy = 8; // The learning rate decay policy.
- optional float gamma = 9; // The parameter to compute the learning rate.
- optional float power = 10; // The parameter to compute the learning rate.
- optional float momentum = 11; // The momentum value.
- optional float weight_decay = 12; // The weight decay.
- optional int32 stepsize = 13; // the stepsize for learning rate policy "step"
- optional int32 snapshot = 14 [default = 0]; // The snapshot interval
- optional string snapshot_prefix = 15; // The prefix for the snapshot.
- // whether to snapshot diff in the results or not. Snapshotting diff will help
- // debugging but the final protocol buffer size will be much larger.
- optional bool snapshot_diff = 16 [default = false];
- // the mode solver will use: 0 for CPU and 1 for GPU. Use GPU in default.
- optional int32 solver_mode = 17 [default = 1];
- // the device_id will that be used in GPU mode. Use device_id = 0 in default.
- optional int32 device_id = 18 [default = 0];
-}
-
-// A message that stores the solver snapshots
-message SolverState {
- optional int32 iter = 1; // The current iteration
- optional string learned_net = 2; // The file that stores the learned net.
- repeated BlobProto history = 3; // The history for sgd solvers
-}
+++ /dev/null
-// Copyright 2013 Yangqing Jia
-
-import "caffe/proto/caffe.proto";
-
-package caffe;
-
-message V0NetParameter {
- optional string name = 1; // consider giving the network a name
- repeated V0LayerConnection layers = 2; // a bunch of layers.
- // The input blobs to the network.
- repeated string input = 3;
- // The dim of the input blobs. For each input blob there should be four
- // values specifying the num, channels, height and width of the input blob.
- // Thus, there should be a total of (4 * #input) numbers.
- repeated int32 input_dim = 4;
- // Whether the network will force every layer to carry out backward operation.
- // If set False, then whether to carry out backward is determined
- // automatically according to the net structure and learning rates.
- optional bool force_backward = 5 [default = false];
-}
-
-message V0LayerParameter {
- optional string name = 1; // the layer name
- optional string type = 2; // the string to specify the layer type
-
- // Parameters to specify layers with inner products.
- optional uint32 num_output = 3; // The number of outputs for the layer
- optional bool biasterm = 4 [default = true]; // whether to have bias terms
- optional FillerParameter weight_filler = 5; // The filler for the weight
- optional FillerParameter bias_filler = 6; // The filler for the bias
-
- optional uint32 pad = 7 [default = 0]; // The padding size
- optional uint32 kernelsize = 8; // The kernel size
- optional uint32 group = 9 [default = 1]; // The group size for group conv
- optional uint32 stride = 10 [default = 1]; // The stride
- enum PoolMethod {
- MAX = 0;
- AVE = 1;
- STOCHASTIC = 2;
- }
- optional PoolMethod pool = 11 [default = MAX]; // The pooling method
- optional float dropout_ratio = 12 [default = 0.5]; // dropout ratio
-
- optional uint32 local_size = 13 [default = 5]; // for local response norm
- optional float alpha = 14 [default = 1.]; // for local response norm
- optional float beta = 15 [default = 0.75]; // for local response norm
-
- // For data layers, specify the data source
- optional string source = 16;
- // For data pre-processing, we can do simple scaling and subtracting the
- // data mean, if provided. Note that the mean subtraction is always carried
- // out before scaling.
- optional float scale = 17 [default = 1];
- optional string meanfile = 18;
- // For data layers, specify the batch size.
- optional uint32 batchsize = 19;
- // For data layers, specify if we would like to randomly crop an image.
- optional uint32 cropsize = 20 [default = 0];
- // For data layers, specify if we want to randomly mirror data.
- optional bool mirror = 21 [default = false];
-
- // The blobs containing the numeric parameters of the layer
- repeated BlobProto blobs = 50;
- // The ratio that is multiplied on the global learning rate. If you want to
- // set the learning ratio for one blob, you need to set it for all blobs.
- repeated float blobs_lr = 51;
- // The weight decay that is multiplied on the global weight decay.
- repeated float weight_decay = 52;
-
- // The rand_skip variable is for the data layer to skip a few data points
- // to avoid all asynchronous sgd clients to start at the same point. The skip
- // point would be set as rand_skip * rand(0,1). Note that rand_skip should not
- // be larger than the number of keys in the leveldb.
- optional uint32 rand_skip = 53 [default = 0];
-
- // Fields related to detection (det_*)
- // foreground (object) overlap threshold
- optional float det_fg_threshold = 54 [default = 0.5];
- // background (non-object) overlap threshold
- optional float det_bg_threshold = 55 [default = 0.5];
- // Fraction of batch that should be foreground objects
- optional float det_fg_fraction = 56 [default = 0.25];
-
- // optional bool OBSOLETE_can_clobber = 57 [default = true];
-
- // Amount of contextual padding to add around a window
- // (used only by the window_data_layer)
- optional uint32 det_context_pad = 58 [default = 0];
-
- // Mode for cropping out a detection window
- // warp: cropped window is warped to a fixed size and aspect ratio
- // square: the tightest square around the window is cropped
- optional string det_crop_mode = 59 [default = "warp"];
-
- // For ReshapeLayer, one needs to specify the new dimensions.
- optional int32 new_num = 60 [default = 0];
- optional int32 new_channels = 61 [default = 0];
- optional int32 new_height = 62 [default = 0];
- optional int32 new_width = 63 [default = 0];
-
- // Whether or not ImageLayer should shuffle the list of files at every epoch.
- // It will also resize images if new_height or new_width are not zero.
- optional bool shuffle_images = 64 [default = false];
-
- // For ConcatLayer, one needs to specify the dimension for concatenation, and
- // the other dimensions must be the same for all the bottom blobs.
- // By default it will concatenate blobs along the channels dimension.
- optional uint32 concat_dim = 65 [default = 1];
-}
-
-message V0LayerConnection {
- optional V0LayerParameter layer = 1; // the layer parameter
- repeated string bottom = 2; // the name of the bottom blobs
- repeated string top = 3; // the name of the top blobs
-}
// Test that UpgradeV0PaddingLayers called on the proto specified by
// input_param_string results in the proto specified by
// output_param_string.
- V0NetParameter input_param;
+ NetParameter input_param;
CHECK(google::protobuf::TextFormat::ParseFromString(
input_param_string, &input_param));
- V0NetParameter expected_output_param;
+ NetParameter expected_output_param;
CHECK(google::protobuf::TextFormat::ParseFromString(
output_param_string, &expected_output_param));
- V0NetParameter actual_output_param;
+ NetParameter actual_output_param;
UpgradeV0PaddingLayers(input_param, &actual_output_param);
EXPECT_EQ(expected_output_param.DebugString(),
actual_output_param.DebugString());
// Also test idempotence.
- V0NetParameter double_pad_upgrade_param;
+ NetParameter double_pad_upgrade_param;
UpgradeV0PaddingLayers(actual_output_param, &double_pad_upgrade_param);
EXPECT_EQ(actual_output_param.DebugString(),
double_pad_upgrade_param.DebugString());
protected:
void RunV0UpgradeTest(
const string& input_param_string, const string& output_param_string) {
- // Test that UpgradeV0Net called on the V0NetParameter proto specified by
+ // Test that UpgradeV0Net called on the NetParameter proto specified by
// input_param_string results in the NetParameter proto specified by
// output_param_string.
- V0NetParameter input_param;
+ NetParameter input_param;
CHECK(google::protobuf::TextFormat::ParseFromString(
input_param_string, &input_param));
NetParameter expected_output_param;
#include "caffe/common.hpp"
#include "caffe/util/upgrade_proto.hpp"
#include "caffe/proto/caffe.pb.h"
-#include "caffe/proto/deprecated/caffe_v0_to_v1_bridge.pb.h"
using std::map;
using std::string;
namespace caffe {
-bool UpgradeV0Net(const V0NetParameter& v0_net_param_padding_layers,
+bool NetNeedsUpgrade(const NetParameter& net_param) {
+ for (int i = 0; i < net_param.layers_size(); ++i) {
+ if (net_param.layers(i).has_layer()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool UpgradeV0Net(const NetParameter& v0_net_param_padding_layers,
NetParameter* net_param) {
// First upgrade padding layers to padded conv layers.
- V0NetParameter v0_net_param;
+ NetParameter v0_net_param;
UpgradeV0PaddingLayers(v0_net_param_padding_layers, &v0_net_param);
// Now upgrade layer parameters.
bool is_fully_compatible = true;
net_param->set_name(v0_net_param.name());
}
for (int i = 0; i < v0_net_param.layers_size(); ++i) {
- is_fully_compatible &= UpgradeV0LayerConnection(v0_net_param.layers(i),
- net_param->add_layers());
+ is_fully_compatible &= UpgradeLayerParameter(v0_net_param.layers(i),
+ net_param->add_layers());
}
for (int i = 0; i < v0_net_param.input_size(); ++i) {
net_param->add_input(v0_net_param.input(i));
return is_fully_compatible;
}
-void UpgradeV0PaddingLayers(const V0NetParameter& param,
- V0NetParameter* param_upgraded_pad) {
+void UpgradeV0PaddingLayers(const NetParameter& param,
+ NetParameter* param_upgraded_pad) {
// Copy everything other than the layers from the original param.
param_upgraded_pad->Clear();
param_upgraded_pad->CopyFrom(param);
blob_name_to_last_top_idx[blob_name] = -1;
}
for (int i = 0; i < param.layers_size(); ++i) {
- const V0LayerConnection& layer_connection = param.layers(i);
+ const LayerParameter& layer_connection = param.layers(i);
const V0LayerParameter& layer_param = layer_connection.layer();
// Add the layer to the new net, unless it's a padding layer.
if (layer_param.type() != "padding") {
if (top_idx == -1) {
continue;
}
- V0LayerConnection source_layer = param.layers(top_idx);
+ LayerParameter source_layer = param.layers(top_idx);
if (source_layer.layer().type() == "padding") {
// This layer has a padding layer as input -- check that it is a conv
// layer and takes only one input. Also check that the padding layer
}
}
-bool UpgradeV0LayerConnection(const V0LayerConnection& v0_layer_connection,
- LayerParameter* layer_param) {
+bool UpgradeLayerParameter(const LayerParameter& v0_layer_connection,
+ LayerParameter* layer_param) {
bool is_fully_compatible = true;
layer_param->Clear();
for (int i = 0; i < v0_layer_connection.bottom_size(); ++i) {
+++ /dev/null
-// Copyright 2014 BVLC and contributors.
-//
-// This is a script to upgrade "V0" network prototxts to the new format.
-// Usage:
-// upgrade_net_proto v0_net_proto_file_in net_proto_file_out
-
-#include <cstring>
-#include <iostream> // NOLINT(readability/streams)
-#include <fstream> // NOLINT(readability/streams)
-
-#include "caffe/caffe.hpp"
-#include "caffe/util/io.hpp"
-#include "caffe/util/upgrade_proto.hpp"
-
-using std::ofstream;
-
-using namespace caffe; // NOLINT(build/namespaces)
-
-int main(int argc, char** argv) {
- ::google::InitGoogleLogging(argv[0]);
- if (argc != 3) {
- LOG(ERROR) << "Usage: "
- << "upgrade_net_proto v0_net_proto_file_in net_proto_file_out";
- return 0;
- }
-
- bool success = true;
- NetParameter upgraded_net_param;
- bool is_binary = false;
- bool is_already_upgraded = false;
- // First, check whether the input file is already in the new format.
- if (ReadProtoFromTextFile(argv[1], &upgraded_net_param)) {
- is_already_upgraded = true;
- } else if (ReadProtoFromBinaryFile(argv[1], &upgraded_net_param)) {
- is_already_upgraded = true;
- is_binary = true;
- } else {
- V0NetParameter v0_net_param;
- if (ReadProtoFromTextFile(argv[1], &v0_net_param)) {
- LOG(ERROR) << "Successfully parsed file as V0NetParameter prototxt: "
- << argv[1];
- } else if (ReadProtoFromBinaryFile(argv[1], &v0_net_param)) {
- LOG(ERROR) << "Successfully parsed file as V0NetParameter binary proto: "
- << argv[1];
- is_binary = true;
- } else {
- LOG(FATAL) << "Failed to parse input V0NetParameter file: " << argv[1];
- return 1;
- }
- success = UpgradeV0Net(v0_net_param, &upgraded_net_param);
- if (!success) {
- LOG(ERROR) << "Encountered one or more problems upgrading net param "
- << "proto; see above.";
- }
- }
- if (is_already_upgraded) {
- LOG(ERROR) << "File already in V1 proto format: " << argv[1];
- }
- if (is_binary) {
- WriteProtoToBinaryFile(upgraded_net_param, argv[2]);
- } else {
- // TODO(jdonahue): figure out why WriteProtoToTextFile doesn't work
- // (no file is created).
- // WriteProtoToTextFile(upgraded_net_param, argv[2]);
- ofstream output_proto;
- output_proto.open(argv[2]);
- output_proto << upgraded_net_param.DebugString();
- output_proto.close();
- }
- LOG(ERROR) << "Wrote upgraded NetParameter proto to " << argv[2];
- return !success;
-}
--- /dev/null
+// Copyright 2014 BVLC and contributors.
+//
+// This is a script to upgrade "V0" network prototxts to the new format.
+// Usage:
+// upgrade_net_proto_binary v0_net_proto_file_in net_proto_file_out
+
+#include <cstring>
+#include <iostream> // NOLINT(readability/streams)
+#include <fstream> // NOLINT(readability/streams)
+
+#include "caffe/caffe.hpp"
+#include "caffe/util/io.hpp"
+#include "caffe/util/upgrade_proto.hpp"
+
+using std::ofstream;
+
+using namespace caffe; // NOLINT(build/namespaces)
+
+int main(int argc, char** argv) {
+ ::google::InitGoogleLogging(argv[0]);
+ if (argc != 3) {
+ LOG(ERROR) << "Usage: "
+ << "upgrade_net_proto v0_net_proto_file_in net_proto_file_out";
+ return 1;
+ }
+
+ NetParameter net_param;
+ if (!ReadProtoFromBinaryFile(argv[1], &net_param)) {
+ LOG(ERROR) << "Failed to parse input binary file as NetParameter: "
+ << argv[1];
+ return 2;
+ }
+ bool need_upgrade = NetNeedsUpgrade(net_param);
+ bool success = true;
+ if (need_upgrade) {
+ NetParameter v0_net_param(net_param);
+ success = UpgradeV0Net(v0_net_param, &net_param);
+ } else {
+ LOG(ERROR) << "File already in V1 proto format: " << argv[1];
+ }
+
+ WriteProtoToBinaryFile(net_param, argv[2]);
+
+ LOG(ERROR) << "Wrote upgraded NetParameter binary proto to " << argv[2];
+ return !success;
+}
--- /dev/null
+// Copyright 2014 BVLC and contributors.
+//
+// This is a script to upgrade "V0" network prototxts to the new format.
+// Usage:
+// upgrade_net_proto_text v0_net_proto_file_in net_proto_file_out
+
+#include <cstring>
+#include <iostream> // NOLINT(readability/streams)
+#include <fstream> // NOLINT(readability/streams)
+
+#include "caffe/caffe.hpp"
+#include "caffe/util/io.hpp"
+#include "caffe/util/upgrade_proto.hpp"
+
+using std::ofstream;
+
+using namespace caffe; // NOLINT(build/namespaces)
+
+int main(int argc, char** argv) {
+ ::google::InitGoogleLogging(argv[0]);
+ if (argc != 3) {
+ LOG(ERROR) << "Usage: "
+ << "upgrade_net_proto v0_net_proto_file_in net_proto_file_out";
+ return 1;
+ }
+
+ NetParameter net_param;
+ if (!ReadProtoFromTextFile(argv[1], &net_param)) {
+ LOG(ERROR) << "Failed to parse input text file as NetParameter: "
+ << argv[1];
+ return 2;
+ }
+ bool need_upgrade = NetNeedsUpgrade(net_param);
+ bool success = true;
+ if (need_upgrade) {
+ NetParameter v0_net_param(net_param);
+ success = UpgradeV0Net(v0_net_param, &net_param);
+ } else {
+ LOG(ERROR) << "File already in V1 proto format: " << argv[1];
+ }
+
+ // TODO(jdonahue): figure out why WriteProtoToTextFile doesn't work
+ // (no file is created).
+ // WriteProtoToTextFile(upgraded_net_param, argv[2]);
+ ofstream output_proto;
+ output_proto.open(argv[2]);
+ output_proto << net_param.DebugString();
+ output_proto.close();
+
+ LOG(ERROR) << "Wrote upgraded NetParameter text proto to " << argv[2];
+ return !success;
+}