add NetParameter required version number as breaking change for
authorJeff Donahue <jeff.donahue@gmail.com>
Mon, 24 Mar 2014 04:53:59 +0000 (21:53 -0700)
committerJeff Donahue <jeff.donahue@gmail.com>
Fri, 28 Mar 2014 06:42:29 +0000 (23:42 -0700)
V0NetParameter

22 files changed:
examples/cifar10/cifar10_full.prototxt
examples/cifar10/cifar10_full_test.prototxt
examples/cifar10/cifar10_full_train.prototxt
examples/cifar10/cifar10_quick.prototxt
examples/cifar10/cifar10_quick_test.prototxt
examples/cifar10/cifar10_quick_train.prototxt
examples/feature_extraction/imagenet_val.prototxt
examples/imagenet/imagenet_deploy.prototxt
examples/imagenet/imagenet_train.prototxt
examples/imagenet/imagenet_val.prototxt
examples/imagenet/resume_training.sh
examples/lenet/lenet.prototxt
examples/lenet/lenet_test.prototxt
examples/lenet/lenet_train.prototxt
examples/pascal-finetuning/pascal_finetune_train.prototxt
examples/pascal-finetuning/pascal_finetune_val.prototxt
src/caffe/net.cpp
src/caffe/proto/caffe.proto
src/caffe/test/test_net.cpp
src/caffe/test/test_split_layer.cpp
src/caffe/test/test_upgrade_proto.cpp
src/caffe/util/upgrade_proto.cpp

index 237a7a0..1255931 100644 (file)
@@ -1,3 +1,4 @@
+version: 1
 name: "CIFAR10_full_deploy"
 # N.B. input image must be in CIFAR-10 format
 # as described at http://www.cs.toronto.edu/~kriz/cifar.html
index ada373a..aff9938 100644 (file)
@@ -1,3 +1,4 @@
+version: 1
 name: "CIFAR10_full_test"
 layers {
   name: "cifar"
index 56c9306..2f50bda 100644 (file)
@@ -1,3 +1,4 @@
+version: 1
 name: "CIFAR10_full_train"
 layers {
   name: "cifar"
index 505158f..ec8c5b2 100644 (file)
@@ -1,4 +1,7 @@
+version: 1
 name: "CIFAR10_quick_test"
+# N.B. input image must be in CIFAR-10 format
+# as described at http://www.cs.toronto.edu/~kriz/cifar.html
 input: "data"
 input_dim: 1
 input_dim: 3
index a154b9a..fb34844 100644 (file)
@@ -1,3 +1,5 @@
+# quick config
+version: 1
 name: "CIFAR10_quick_test"
 layers {
   name: "cifar"
index de5b6c3..62b45bf 100644 (file)
@@ -1,3 +1,5 @@
+# quick config
+version: 1
 name: "CIFAR10_quick_train"
 layers {
   name: "cifar"
index 2f1ead7..5561fe4 100644 (file)
@@ -1,3 +1,4 @@
+version: 1
 name: "CaffeNet"
 layers {
   name: "data"
index 2b3b403..6f5d0ca 100755 (executable)
@@ -3,6 +3,6 @@
 TOOLS=../../build/tools
 
 GLOG_logtostderr=1 $TOOLS/train_net.bin \
-    imagenet_solver.prototxt caffe_imagenet_train_10000.solverstate
+    imagenet_solver.prototxt caffe_imagenet_train_310000.solverstate
 
 echo "Done."
index 491fad1..d4506a1 100644 (file)
@@ -1,9 +1,11 @@
+version: 1
 name: "LeNet"
 input: "data"
 input_dim: 64
 input_dim: 1
 input_dim: 28
 input_dim: 28
+# N.B. input should be 0/1 = mnist raw data scaled by 0.00390625
 layers {
   name: "conv1"
   type: CONVOLUTION
index 3b59b75..5025ba4 100644 (file)
@@ -1,3 +1,4 @@
+version: 1
 name: "LeNet-test"
 layers {
   name: "mnist"
index e8a1e74..12637bd 100644 (file)
@@ -1,3 +1,4 @@
+version: 1
 name: "LeNet"
 layers {
   name: "mnist"
index 405cf1b..580f924 100644 (file)
@@ -18,6 +18,8 @@ using std::pair;
 using std::map;
 using std::set;
 
+const int kNetParameterVersionNumber = 1;
+
 namespace caffe {
 
 template <typename Dtype>
@@ -325,6 +327,7 @@ void Net<Dtype>::ReadParamsFromTextFile(const string& param_file,
           << "V0NetParameter to NetParameter (see above); continuing anyway.";
     }
   }
+  CHECK_EQ(param->version(), kNetParameterVersionNumber);
 }
 
 template <typename Dtype>
@@ -345,6 +348,7 @@ void Net<Dtype>::ReadParamsFromBinaryFile(const string& param_file,
           << "V0NetParameter to NetParameter (see above); continuing anyway.";
     }
   }
+  CHECK_EQ(param->version(), kNetParameterVersionNumber);
 }
 
 template <typename Dtype>
index 34d59f9..a9cfa84 100644 (file)
@@ -39,18 +39,22 @@ message FillerParameter {
 }
 
 message NetParameter {
-  optional string name = 1; // consider giving the network a name
+  // The NetParameter version number; currently only version 1 is supported.
+  // (The version number should only be bumped for breaking changes, which
+  // ideally should never happen.)
+  required int32 version = 1 [default = 1];
+  optional string name = 2; // consider giving the network a name
   // 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;
+  repeated LayerParameter layers = 5; // a bunch of layers.
   // 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];
+  optional bool force_backward = 6 [default = false];
 }
 
 message SolverParameter {
index 4c7f0e7..025b3fa 100644 (file)
@@ -44,6 +44,7 @@ class NetTest : public ::testing::Test {
     delete db;
 
     const string& proto_prefix =
+        "version: 1 "
         "name: 'TestNetwork' "
         "layers: { "
         "  name: 'data' "
index 3c17b0e..45b06de 100644 (file)
@@ -186,6 +186,7 @@ TYPED_TEST_CASE(SplitLayerInsertionTest, InsertionDtypes);
 
 TYPED_TEST(SplitLayerInsertionTest, TestNoInsertion1) {
   const string& input_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
@@ -210,6 +211,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestNoInsertion1) {
 
 TYPED_TEST(SplitLayerInsertionTest, TestNoInsertion2) {
   const string& input_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
@@ -247,6 +249,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestNoInsertion2) {
 
 TYPED_TEST(SplitLayerInsertionTest, TestNoInsertionImageNet) {
   const string& input_proto =
+      "version: 1 "
       "name: 'CaffeNet' "
       "layers { "
       "  name: 'data' "
@@ -568,6 +571,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestNoInsertionImageNet) {
 
 TYPED_TEST(SplitLayerInsertionTest, TestNoInsertionWithInPlace) {
   const string& input_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
@@ -598,6 +602,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestNoInsertionWithInPlace) {
 
 TYPED_TEST(SplitLayerInsertionTest, TestInsertion) {
   const string& input_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
@@ -636,6 +641,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestInsertion) {
       "  bottom: 'innerprod3' "
       "} ";
   const string& expected_output_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
@@ -693,6 +699,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestInsertion) {
 
 TYPED_TEST(SplitLayerInsertionTest, TestInsertionTwoTop) {
   const string& input_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
@@ -737,6 +744,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestInsertionTwoTop) {
       "  bottom: 'innerprod4' "
       "} ";
   const string& expected_output_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
@@ -799,6 +807,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestInsertionTwoTop) {
 
 TYPED_TEST(SplitLayerInsertionTest, TestInputInsertion) {
   const string& input_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "input: 'data' "
       "input_dim: 10 "
@@ -824,6 +833,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestInputInsertion) {
       "  bottom: 'innerprod2' "
       "} ";
   const string& expected_output_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "input: 'data' "
       "input_dim: 10 "
@@ -860,6 +870,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestInputInsertion) {
 
 TYPED_TEST(SplitLayerInsertionTest, TestWithInPlace) {
   const string& input_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
@@ -898,6 +909,7 @@ TYPED_TEST(SplitLayerInsertionTest, TestWithInPlace) {
       "  bottom: 'data' "
       "} ";
   const string& expected_output_proto =
+      "version: 1 "
       "name: 'TestNetwork' "
       "layers: { "
       "  name: 'data' "
index 8203406..f36a4da 100644 (file)
@@ -1193,6 +1193,7 @@ TYPED_TEST(V0UpgradeTest, TestSimple) {
       "  bottom: 'label' "
       "} ";
   const string& expected_output_proto =
+      "version: 1 "
       "name: 'CaffeNet' "
       "layers { "
       "  name: 'data' "
@@ -1513,6 +1514,7 @@ TYPED_TEST(V0UpgradeTest, TestAllParams) {
       "  } "
       "} ";
   const string& expected_output_proto =
+      "version: 1 "
       "name: 'CaffeNet' "
       "input: 'input_data' "
       "input_dim: 64 "
@@ -2107,6 +2109,7 @@ TYPED_TEST(V0UpgradeTest, TestImageNet) {
       "  bottom: 'label' "
       "} ";
   const string& expected_output_proto =
+      "version: 1 "
       "name: 'CaffeNet' "
       "layers { "
       "  name: 'data' "
index 48813d8..fb86f0e 100644 (file)
@@ -25,6 +25,7 @@ bool UpgradeV0Net(const V0NetParameter& v0_net_param_padding_layers,
   // Now upgrade layer parameters.
   bool is_fully_compatible = true;
   net_param->Clear();
+  net_param->set_version(1);
   if (v0_net_param.has_name()) {
     net_param->set_name(v0_net_param.name());
   }