From d3126f2f061c7a36461e58df8eed550877a1ecc4 Mon Sep 17 00:00:00 2001 From: Evan Shelhamer Date: Sun, 21 Sep 2014 09:52:51 -0700 Subject: [PATCH 1/3] include WindowDataLayer in data param upgrade --- src/caffe/util/upgrade_proto.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/caffe/util/upgrade_proto.cpp b/src/caffe/util/upgrade_proto.cpp index c3d854c0595..c69c58eb340 100644 --- a/src/caffe/util/upgrade_proto.cpp +++ b/src/caffe/util/upgrade_proto.cpp @@ -522,6 +522,13 @@ bool NetNeedsDataUpgrade(const NetParameter& net_param) { if (layer_param.has_crop_size()) { return true; } if (layer_param.has_mirror()) { return true; } } + if (net_param.layers(i).type() == LayerParameter_LayerType_WINDOW_DATA) { + WindowDataParameter layer_param = net_param.layers(i).window_data_param(); + if (layer_param.has_scale()) { return true; } + if (layer_param.has_mean_file()) { return true; } + if (layer_param.has_crop_size()) { return true; } + if (layer_param.has_mirror()) { return true; } + } } return false; } @@ -556,6 +563,7 @@ void UpgradeNetDataTransformation(NetParameter* net_param) { for (int i = 0; i < net_param->layers_size(); ++i) { CONVERT_LAYER_TRANSFORM_PARAM(DATA, Data, data); CONVERT_LAYER_TRANSFORM_PARAM(IMAGE_DATA, ImageData, image_data); + CONVERT_LAYER_TRANSFORM_PARAM(WINDOW_DATA, WindowData, window_data); } } From 6435b7e103e4bfe9fb683bb81390ed40fa85a418 Mon Sep 17 00:00:00 2001 From: Evan Shelhamer Date: Sun, 21 Sep 2014 10:29:39 -0700 Subject: [PATCH 2/3] load transform params in window data layer --- src/caffe/layers/window_data_layer.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/caffe/layers/window_data_layer.cpp b/src/caffe/layers/window_data_layer.cpp index a24d7de3daa..afb430468cc 100644 --- a/src/caffe/layers/window_data_layer.cpp +++ b/src/caffe/layers/window_data_layer.cpp @@ -55,8 +55,8 @@ void WindowDataLayer::DataLayerSetUp(const vector*>& bottom, << this->layer_param_.window_data_param().fg_fraction(); const bool prefetch_needs_rand = - this->layer_param_.window_data_param().mirror() || - this->layer_param_.window_data_param().crop_size(); + this->transform_param_.mirror() || + this->transform_param_.crop_size(); if (prefetch_needs_rand) { const unsigned int prefetch_rng_seed = caffe_rng_rand(); prefetch_rng_.reset(new Caffe::RNG(prefetch_rng_seed)); @@ -149,7 +149,7 @@ void WindowDataLayer::DataLayerSetUp(const vector*>& bottom, << this->layer_param_.window_data_param().crop_mode(); // image - int crop_size = this->layer_param_.window_data_param().crop_size(); + const int crop_size = this->transform_param_.crop_size(); CHECK_GT(crop_size, 0); const int batch_size = this->layer_param_.window_data_param().batch_size(); (*top)[0]->Reshape(batch_size, channels, crop_size, crop_size); @@ -187,9 +187,9 @@ void WindowDataLayer::InternalThreadEntry() { Dtype* top_label = this->prefetch_label_.mutable_cpu_data(); const Dtype scale = this->layer_param_.window_data_param().scale(); const int batch_size = this->layer_param_.window_data_param().batch_size(); - const int crop_size = this->layer_param_.window_data_param().crop_size(); const int context_pad = this->layer_param_.window_data_param().context_pad(); - const bool mirror = this->layer_param_.window_data_param().mirror(); + const int crop_size = this->transform_param_.crop_size(); + const bool mirror = this->transform_param_.mirror(); const float fg_fraction = this->layer_param_.window_data_param().fg_fraction(); const Dtype* mean = this->data_mean_.cpu_data(); From 28800ef7789a5bdbb5cd7ee38a38c7b233ef5961 Mon Sep 17 00:00:00 2001 From: Evan Shelhamer Date: Sun, 21 Sep 2014 11:38:20 -0700 Subject: [PATCH 3/3] define up-to-date all-in-one model for pascal finetuning --- .../pascal_finetune_solver.prototxt | 3 +- .../pascal_finetune_train.prototxt | 321 ------------------ ...=> pascal_finetune_trainval_test.prototxt} | 43 ++- 3 files changed, 34 insertions(+), 333 deletions(-) delete mode 100644 examples/finetune_pascal_detection/pascal_finetune_train.prototxt rename examples/finetune_pascal_detection/{pascal_finetune_val.prototxt => pascal_finetune_trainval_test.prototxt} (89%) diff --git a/examples/finetune_pascal_detection/pascal_finetune_solver.prototxt b/examples/finetune_pascal_detection/pascal_finetune_solver.prototxt index 83f5abdf891..829b2005921 100644 --- a/examples/finetune_pascal_detection/pascal_finetune_solver.prototxt +++ b/examples/finetune_pascal_detection/pascal_finetune_solver.prototxt @@ -1,5 +1,4 @@ -train_net: "examples/finetune_pascal_detection/pascal_finetune_train.prototxt" -test_net: "examples/finetune_pascal_detection/pascal_finetune_val.prototxt" +net: "examples/finetune_pascal_detection/pascal_finetune_trainval_test.prototxt" test_iter: 100 test_interval: 1000 base_lr: 0.001 diff --git a/examples/finetune_pascal_detection/pascal_finetune_train.prototxt b/examples/finetune_pascal_detection/pascal_finetune_train.prototxt deleted file mode 100644 index ae7ee4ccf88..00000000000 --- a/examples/finetune_pascal_detection/pascal_finetune_train.prototxt +++ /dev/null @@ -1,321 +0,0 @@ -name: "CaffeNet" -layers { - name: "data" - type: WINDOW_DATA - top: "data" - top: "label" - window_data_param { - source: "examples/finetune_pascal_detection/window_file_2007_trainval.txt" - mean_file: "data/ilsvrc12/imagenet_mean.binaryproto" - batch_size: 128 - crop_size: 227 - mirror: true - fg_threshold: 0.5 - bg_threshold: 0.5 - fg_fraction: 0.25 - context_pad: 16 - crop_mode: "warp" - } -} -layers { - name: "conv1" - type: CONVOLUTION - bottom: "data" - top: "conv1" - blobs_lr: 1 - blobs_lr: 2 - weight_decay: 1 - weight_decay: 0 - convolution_param { - num_output: 96 - kernel_size: 11 - stride: 4 - weight_filler { - type: "gaussian" - std: 0.01 - } - bias_filler { - type: "constant" - value: 0 - } - } -} -layers { - name: "relu1" - type: RELU - bottom: "conv1" - top: "conv1" -} -layers { - name: "pool1" - type: POOLING - bottom: "conv1" - top: "pool1" - pooling_param { - pool: MAX - kernel_size: 3 - stride: 2 - } -} -layers { - name: "norm1" - type: LRN - bottom: "pool1" - top: "norm1" - lrn_param { - local_size: 5 - alpha: 0.0001 - beta: 0.75 - } -} -layers { - name: "conv2" - type: CONVOLUTION - bottom: "norm1" - top: "conv2" - blobs_lr: 1 - blobs_lr: 2 - weight_decay: 1 - weight_decay: 0 - convolution_param { - num_output: 256 - pad: 2 - kernel_size: 5 - group: 2 - weight_filler { - type: "gaussian" - std: 0.01 - } - bias_filler { - type: "constant" - value: 1 - } - } -} -layers { - name: "relu2" - type: RELU - bottom: "conv2" - top: "conv2" -} -layers { - name: "pool2" - type: POOLING - bottom: "conv2" - top: "pool2" - pooling_param { - pool: MAX - kernel_size: 3 - stride: 2 - } -} -layers { - name: "norm2" - type: LRN - bottom: "pool2" - top: "norm2" - lrn_param { - local_size: 5 - alpha: 0.0001 - beta: 0.75 - } -} -layers { - name: "conv3" - type: CONVOLUTION - bottom: "norm2" - top: "conv3" - blobs_lr: 1 - blobs_lr: 2 - weight_decay: 1 - weight_decay: 0 - convolution_param { - num_output: 384 - pad: 1 - kernel_size: 3 - weight_filler { - type: "gaussian" - std: 0.01 - } - bias_filler { - type: "constant" - value: 0 - } - } -} -layers { - name: "relu3" - type: RELU - bottom: "conv3" - top: "conv3" -} -layers { - name: "conv4" - type: CONVOLUTION - bottom: "conv3" - top: "conv4" - blobs_lr: 1 - blobs_lr: 2 - weight_decay: 1 - weight_decay: 0 - convolution_param { - num_output: 384 - pad: 1 - kernel_size: 3 - group: 2 - weight_filler { - type: "gaussian" - std: 0.01 - } - bias_filler { - type: "constant" - value: 1 - } - } -} -layers { - name: "relu4" - type: RELU - bottom: "conv4" - top: "conv4" -} -layers { - name: "conv5" - type: CONVOLUTION - bottom: "conv4" - top: "conv5" - blobs_lr: 1 - blobs_lr: 2 - weight_decay: 1 - weight_decay: 0 - convolution_param { - num_output: 256 - pad: 1 - kernel_size: 3 - group: 2 - weight_filler { - type: "gaussian" - std: 0.01 - } - bias_filler { - type: "constant" - value: 1 - } - } -} -layers { - name: "relu5" - type: RELU - bottom: "conv5" - top: "conv5" -} -layers { - name: "pool5" - type: POOLING - bottom: "conv5" - top: "pool5" - pooling_param { - pool: MAX - kernel_size: 3 - stride: 2 - } -} -layers { - name: "fc6" - type: INNER_PRODUCT - bottom: "pool5" - top: "fc6" - blobs_lr: 1 - blobs_lr: 2 - weight_decay: 1 - weight_decay: 0 - inner_product_param { - num_output: 4096 - weight_filler { - type: "gaussian" - std: 0.005 - } - bias_filler { - type: "constant" - value: 1 - } - } -} -layers { - name: "relu6" - type: RELU - bottom: "fc6" - top: "fc6" -} -layers { - name: "drop6" - type: DROPOUT - bottom: "fc6" - top: "fc6" - dropout_param { - dropout_ratio: 0.5 - } -} -layers { - name: "fc7" - type: INNER_PRODUCT - bottom: "fc6" - top: "fc7" - blobs_lr: 1 - blobs_lr: 2 - weight_decay: 1 - weight_decay: 0 - inner_product_param { - num_output: 4096 - weight_filler { - type: "gaussian" - std: 0.005 - } - bias_filler { - type: "constant" - value: 1 - } - } -} -layers { - name: "relu7" - type: RELU - bottom: "fc7" - top: "fc7" -} -layers { - name: "drop7" - type: DROPOUT - bottom: "fc7" - top: "fc7" - dropout_param { - dropout_ratio: 0.5 - } -} -layers { - name: "fc8_pascal" - type: INNER_PRODUCT - bottom: "fc7" - top: "fc8_pascal" - blobs_lr: 10 - blobs_lr: 20 - weight_decay: 1 - weight_decay: 0 - inner_product_param { - num_output: 21 - weight_filler { - type: "gaussian" - std: 0.01 - } - bias_filler { - type: "constant" - value: 0 - } - } -} -layers { - name: "loss" - type: SOFTMAX_LOSS - bottom: "fc8_pascal" - bottom: "label" -} diff --git a/examples/finetune_pascal_detection/pascal_finetune_val.prototxt b/examples/finetune_pascal_detection/pascal_finetune_trainval_test.prototxt similarity index 89% rename from examples/finetune_pascal_detection/pascal_finetune_val.prototxt rename to examples/finetune_pascal_detection/pascal_finetune_trainval_test.prototxt index 30dd164c4fa..5cd605bbf11 100644 --- a/examples/finetune_pascal_detection/pascal_finetune_val.prototxt +++ b/examples/finetune_pascal_detection/pascal_finetune_trainval_test.prototxt @@ -5,17 +5,41 @@ layers { top: "data" top: "label" window_data_param { - source: "examples/finetune_pascal_detection/window_file_2007_test.txt" - mean_file: "data/ilsvrc12/imagenet_mean.binaryproto" + source: "examples/finetune_pascal_detection/window_file_2007_trainval.txt" batch_size: 128 - crop_size: 227 + fg_threshold: 0.5 + bg_threshold: 0.5 + fg_fraction: 0.25 + context_pad: 16 + crop_mode: "warp" + } + transform_param { mirror: true + crop_size: 227 + mean_file: "data/ilsvrc12/imagenet_mean.binaryproto" + } + include: { phase: TRAIN } +} +layers { + name: "data" + type: WINDOW_DATA + top: "data" + top: "label" + window_data_param { + source: "examples/finetune_pascal_detection/window_file_2007_test.txt" + batch_size: 128 fg_threshold: 0.5 bg_threshold: 0.5 fg_fraction: 0.25 context_pad: 16 crop_mode: "warp" } + transform_param { + mirror: true + crop_size: 227 + mean_file: "data/ilsvrc12/imagenet_mean.binaryproto" + } + include: { phase: TEST } } layers { name: "conv1" @@ -314,17 +338,16 @@ layers { } } layers { - name: "accuracy" - type: ACCURACY + name: "loss" + type: SOFTMAX_LOSS bottom: "fc8_pascal" bottom: "label" - top: "accuracy" } layers { - name: "prob" - type: SOFTMAX_LOSS + name: "accuracy" + type: ACCURACY bottom: "fc8_pascal" bottom: "label" - top: "loss" + top: "accuracy" + include { phase: TEST } } -