diff --git a/data/download_models.sh b/data/download_models.sh index d9618ee..f01772e 100755 --- a/data/download_models.sh +++ b/data/download_models.sh @@ -5,8 +5,11 @@ cd "$(dirname "${BASH_SOURCE[0]}")" || (echo "Could not change dir" && exit 1) pwd for modeldir in models/*; do - pushd "$modeldir" + if ! pushd "$modeldir" &>/dev/null; then + continue + fi + wget --continue -i weights_url -N - popd + popd || exit 1 done diff --git a/data/models/README.md b/data/models/README.md new file mode 100644 index 0000000..a8d3b8e --- /dev/null +++ b/data/models/README.md @@ -0,0 +1,53 @@ +# FMRI example models + +The following sections describe the models included in this repository, +with attribution. The repository also includes deinplaced versions of +the models, where relevant. + +## alexnet + +AlexNet trained on ILSVRC 2012, almost exactly as described in ImageNet +classification with deep convolutional neural networks by Krizhevsky et +al. in NIPS 2012. (Trained by Evan Shelhamer @shelhamer) + +## caffenet + +AlexNet trained on ILSVRC 2012, with a minor variation from the version +as described in ImageNet classification with deep convolutional neural +networks by Krizhevsky et al. in NIPS 2012. (Trained by Jeff Donahue +@jeffdonahue) + +## vgg-16 + +The model is an improved version of the 16-layer model used by the VGG +team in the ILSVRC-2014 competition. The details can be found in the +following [arXiv paper](http://arxiv.org/pdf/1409.1556): + + Very Deep Convolutional Networks for Large-Scale Image Recognition + K. Simonyan, A. Zisserman + arXiv:1409.1556 + +Please cite the paper if you use the model. + +In the paper, the model is denoted as the configuration `D` trained with +scale jittering. The input images should be zero-centered by mean pixel +(rather than mean image) subtraction. Namely, the following BGR values +should be subtracted: `[103.939, 116.779, 123.68]`. + + +## vgg-19 + +The model is an improved version of the 19-layer model used by the VGG +team in the ILSVRC-2014 competition. The details can be found in the +following [arXiv paper](http://arxiv.org/pdf/1409.1556): + + Very Deep Convolutional Networks for Large-Scale Image Recognition + K. Simonyan, A. Zisserman + arXiv:1409.1556 + +Please cite the paper if you use the model. + +In the paper, the model is denoted as the configuration `E` trained with +scale jittering. The input images should be zero-centered by mean pixel +(rather than mean image) subtraction. Namely, the following BGR values +should be subtracted: `[103.939, 116.779, 123.68]`. diff --git a/data/models/vgg-16/model-dedup.prototxt b/data/models/vgg-16/model-dedup.prototxt new file mode 100644 index 0000000..22c7c07 --- /dev/null +++ b/data/models/vgg-16/model-dedup.prototxt @@ -0,0 +1,345 @@ +name: "VGG_ILSVRC_16_layers" +layers { + bottom: "data" + top: "conv1_1" + name: "conv1_1" + type: CONVOLUTION + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv1_1" + top: "relu1_1" + name: "relu1_1" + type: RELU +} +layers { + bottom: "relu1_1" + top: "conv1_2" + name: "conv1_2" + type: CONVOLUTION + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv1_2" + top: "relu1_2" + name: "relu1_2" + type: RELU +} +layers { + bottom: "relu1_2" + top: "pool1" + name: "pool1" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool1" + top: "conv2_1" + name: "conv2_1" + type: CONVOLUTION + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv2_1" + top: "relu2_1" + name: "relu2_1" + type: RELU +} +layers { + bottom: "relu2_1" + top: "conv2_2" + name: "conv2_2" + type: CONVOLUTION + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv2_2" + top: "relu2_2" + name: "relu2_2" + type: RELU +} +layers { + bottom: "relu2_2" + top: "pool2" + name: "pool2" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool2" + top: "conv3_1" + name: "conv3_1" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_1" + top: "relu3_1" + name: "relu3_1" + type: RELU +} +layers { + bottom: "relu3_1" + top: "conv3_2" + name: "conv3_2" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_2" + top: "relu3_2" + name: "relu3_2" + type: RELU +} +layers { + bottom: "relu3_2" + top: "conv3_3" + name: "conv3_3" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_3" + top: "relu3_3" + name: "relu3_3" + type: RELU +} +layers { + bottom: "relu3_3" + top: "pool3" + name: "pool3" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool3" + top: "conv4_1" + name: "conv4_1" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_1" + top: "relu4_1" + name: "relu4_1" + type: RELU +} +layers { + bottom: "relu4_1" + top: "conv4_2" + name: "conv4_2" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_2" + top: "relu4_2" + name: "relu4_2" + type: RELU +} +layers { + bottom: "relu4_2" + top: "conv4_3" + name: "conv4_3" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_3" + top: "relu4_3" + name: "relu4_3" + type: RELU +} +layers { + bottom: "relu4_3" + top: "pool4" + name: "pool4" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool4" + top: "conv5_1" + name: "conv5_1" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_1" + top: "relu5_1" + name: "relu5_1" + type: RELU +} +layers { + bottom: "relu5_1" + top: "conv5_2" + name: "conv5_2" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_2" + top: "relu5_2" + name: "relu5_2" + type: RELU +} +layers { + bottom: "relu5_2" + top: "conv5_3" + name: "conv5_3" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_3" + top: "relu5_3" + name: "relu5_3" + type: RELU +} +layers { + bottom: "relu5_3" + top: "pool5" + name: "pool5" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool5" + top: "fc6" + name: "fc6" + type: INNER_PRODUCT + inner_product_param { + num_output: 4096 + } +} +layers { + bottom: "fc6" + top: "relu6" + name: "relu6" + type: RELU +} +layers { + bottom: "relu6" + top: "drop6" + name: "drop6" + type: DROPOUT + dropout_param { + dropout_ratio: 0.5 + } +} +layers { + bottom: "drop6" + top: "fc7" + name: "fc7" + type: INNER_PRODUCT + inner_product_param { + num_output: 4096 + } +} +layers { + bottom: "fc7" + top: "relu7" + name: "relu7" + type: RELU +} +layers { + bottom: "relu7" + top: "drop7" + name: "drop7" + type: DROPOUT + dropout_param { + dropout_ratio: 0.5 + } +} +layers { + bottom: "drop7" + top: "fc8" + name: "fc8" + type: INNER_PRODUCT + inner_product_param { + num_output: 1000 + } +} +layers { + bottom: "fc8" + top: "prob" + name: "prob" + type: SOFTMAX +} +input: "data" +input_dim: 10 +input_dim: 3 +input_dim: 224 +input_dim: 224 diff --git a/data/models/vgg-16/model.prototxt b/data/models/vgg-16/model.prototxt new file mode 100644 index 0000000..0067c9b --- /dev/null +++ b/data/models/vgg-16/model.prototxt @@ -0,0 +1,345 @@ +name: "VGG_ILSVRC_16_layers" +input: "data" +input_dim: 10 +input_dim: 3 +input_dim: 224 +input_dim: 224 +layers { + bottom: "data" + top: "conv1_1" + name: "conv1_1" + type: CONVOLUTION + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv1_1" + top: "conv1_1" + name: "relu1_1" + type: RELU +} +layers { + bottom: "conv1_1" + top: "conv1_2" + name: "conv1_2" + type: CONVOLUTION + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv1_2" + top: "conv1_2" + name: "relu1_2" + type: RELU +} +layers { + bottom: "conv1_2" + top: "pool1" + name: "pool1" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool1" + top: "conv2_1" + name: "conv2_1" + type: CONVOLUTION + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv2_1" + top: "conv2_1" + name: "relu2_1" + type: RELU +} +layers { + bottom: "conv2_1" + top: "conv2_2" + name: "conv2_2" + type: CONVOLUTION + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv2_2" + top: "conv2_2" + name: "relu2_2" + type: RELU +} +layers { + bottom: "conv2_2" + top: "pool2" + name: "pool2" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool2" + top: "conv3_1" + name: "conv3_1" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_1" + top: "conv3_1" + name: "relu3_1" + type: RELU +} +layers { + bottom: "conv3_1" + top: "conv3_2" + name: "conv3_2" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_2" + top: "conv3_2" + name: "relu3_2" + type: RELU +} +layers { + bottom: "conv3_2" + top: "conv3_3" + name: "conv3_3" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_3" + top: "conv3_3" + name: "relu3_3" + type: RELU +} +layers { + bottom: "conv3_3" + top: "pool3" + name: "pool3" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool3" + top: "conv4_1" + name: "conv4_1" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_1" + top: "conv4_1" + name: "relu4_1" + type: RELU +} +layers { + bottom: "conv4_1" + top: "conv4_2" + name: "conv4_2" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_2" + top: "conv4_2" + name: "relu4_2" + type: RELU +} +layers { + bottom: "conv4_2" + top: "conv4_3" + name: "conv4_3" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_3" + top: "conv4_3" + name: "relu4_3" + type: RELU +} +layers { + bottom: "conv4_3" + top: "pool4" + name: "pool4" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool4" + top: "conv5_1" + name: "conv5_1" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_1" + top: "conv5_1" + name: "relu5_1" + type: RELU +} +layers { + bottom: "conv5_1" + top: "conv5_2" + name: "conv5_2" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_2" + top: "conv5_2" + name: "relu5_2" + type: RELU +} +layers { + bottom: "conv5_2" + top: "conv5_3" + name: "conv5_3" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_3" + top: "conv5_3" + name: "relu5_3" + type: RELU +} +layers { + bottom: "conv5_3" + top: "pool5" + name: "pool5" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool5" + top: "fc6" + name: "fc6" + type: INNER_PRODUCT + inner_product_param { + num_output: 4096 + } +} +layers { + bottom: "fc6" + top: "fc6" + name: "relu6" + type: RELU +} +layers { + bottom: "fc6" + top: "fc6" + name: "drop6" + type: DROPOUT + dropout_param { + dropout_ratio: 0.5 + } +} +layers { + bottom: "fc6" + top: "fc7" + name: "fc7" + type: INNER_PRODUCT + inner_product_param { + num_output: 4096 + } +} +layers { + bottom: "fc7" + top: "fc7" + name: "relu7" + type: RELU +} +layers { + bottom: "fc7" + top: "fc7" + name: "drop7" + type: DROPOUT + dropout_param { + dropout_ratio: 0.5 + } +} +layers { + bottom: "fc7" + top: "fc8" + name: "fc8" + type: INNER_PRODUCT + inner_product_param { + num_output: 1000 + } +} +layers { + bottom: "fc8" + top: "prob" + name: "prob" + type: SOFTMAX +} diff --git a/data/models/vgg-16/weights_url b/data/models/vgg-16/weights_url new file mode 100644 index 0000000..5ae12ee --- /dev/null +++ b/data/models/vgg-16/weights_url @@ -0,0 +1 @@ +http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_16_layers.caffemodel diff --git a/data/models/vgg-19/model-dedup.prototxt b/data/models/vgg-19/model-dedup.prototxt new file mode 100644 index 0000000..5104960 --- /dev/null +++ b/data/models/vgg-19/model-dedup.prototxt @@ -0,0 +1,396 @@ +name: "VGG_ILSVRC_19_layers" +layers { + bottom: "data" + top: "conv1_1" + name: "conv1_1" + type: CONVOLUTION + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv1_1" + top: "relu1_1" + name: "relu1_1" + type: RELU +} +layers { + bottom: "relu1_1" + top: "conv1_2" + name: "conv1_2" + type: CONVOLUTION + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv1_2" + top: "relu1_2" + name: "relu1_2" + type: RELU +} +layers { + bottom: "relu1_2" + top: "pool1" + name: "pool1" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool1" + top: "conv2_1" + name: "conv2_1" + type: CONVOLUTION + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv2_1" + top: "relu2_1" + name: "relu2_1" + type: RELU +} +layers { + bottom: "relu2_1" + top: "conv2_2" + name: "conv2_2" + type: CONVOLUTION + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv2_2" + top: "relu2_2" + name: "relu2_2" + type: RELU +} +layers { + bottom: "relu2_2" + top: "pool2" + name: "pool2" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool2" + top: "conv3_1" + name: "conv3_1" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_1" + top: "relu3_1" + name: "relu3_1" + type: RELU +} +layers { + bottom: "relu3_1" + top: "conv3_2" + name: "conv3_2" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_2" + top: "relu3_2" + name: "relu3_2" + type: RELU +} +layers { + bottom: "relu3_2" + top: "conv3_3" + name: "conv3_3" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_3" + top: "relu3_3" + name: "relu3_3" + type: RELU +} +layers { + bottom: "relu3_3" + top: "conv3_4" + name: "conv3_4" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_4" + top: "relu3_4" + name: "relu3_4" + type: RELU +} +layers { + bottom: "relu3_4" + top: "pool3" + name: "pool3" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool3" + top: "conv4_1" + name: "conv4_1" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_1" + top: "relu4_1" + name: "relu4_1" + type: RELU +} +layers { + bottom: "relu4_1" + top: "conv4_2" + name: "conv4_2" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_2" + top: "relu4_2" + name: "relu4_2" + type: RELU +} +layers { + bottom: "relu4_2" + top: "conv4_3" + name: "conv4_3" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_3" + top: "relu4_3" + name: "relu4_3" + type: RELU +} +layers { + bottom: "relu4_3" + top: "conv4_4" + name: "conv4_4" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_4" + top: "relu4_4" + name: "relu4_4" + type: RELU +} +layers { + bottom: "relu4_4" + top: "pool4" + name: "pool4" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool4" + top: "conv5_1" + name: "conv5_1" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_1" + top: "relu5_1" + name: "relu5_1" + type: RELU +} +layers { + bottom: "relu5_1" + top: "conv5_2" + name: "conv5_2" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_2" + top: "relu5_2" + name: "relu5_2" + type: RELU +} +layers { + bottom: "relu5_2" + top: "conv5_3" + name: "conv5_3" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_3" + top: "relu5_3" + name: "relu5_3" + type: RELU +} +layers { + bottom: "relu5_3" + top: "conv5_4" + name: "conv5_4" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_4" + top: "relu5_4" + name: "relu5_4" + type: RELU +} +layers { + bottom: "relu5_4" + top: "pool5" + name: "pool5" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool5" + top: "fc6" + name: "fc6" + type: INNER_PRODUCT + inner_product_param { + num_output: 4096 + } +} +layers { + bottom: "fc6" + top: "relu6" + name: "relu6" + type: RELU +} +layers { + bottom: "relu6" + top: "drop6" + name: "drop6" + type: DROPOUT + dropout_param { + dropout_ratio: 0.5 + } +} +layers { + bottom: "drop6" + top: "fc7" + name: "fc7" + type: INNER_PRODUCT + inner_product_param { + num_output: 4096 + } +} +layers { + bottom: "fc7" + top: "relu7" + name: "relu7" + type: RELU +} +layers { + bottom: "relu7" + top: "drop7" + name: "drop7" + type: DROPOUT + dropout_param { + dropout_ratio: 0.5 + } +} +layers { + bottom: "drop7" + top: "fc8" + name: "fc8" + type: INNER_PRODUCT + inner_product_param { + num_output: 1000 + } +} +layers { + bottom: "fc8" + top: "prob" + name: "prob" + type: SOFTMAX +} +input: "data" +input_dim: 10 +input_dim: 3 +input_dim: 224 +input_dim: 224 diff --git a/data/models/vgg-19/model.prototxt b/data/models/vgg-19/model.prototxt new file mode 100644 index 0000000..f02f876 --- /dev/null +++ b/data/models/vgg-19/model.prototxt @@ -0,0 +1,396 @@ +name: "VGG_ILSVRC_19_layers" +input: "data" +input_dim: 10 +input_dim: 3 +input_dim: 224 +input_dim: 224 +layers { + bottom: "data" + top: "conv1_1" + name: "conv1_1" + type: CONVOLUTION + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv1_1" + top: "conv1_1" + name: "relu1_1" + type: RELU +} +layers { + bottom: "conv1_1" + top: "conv1_2" + name: "conv1_2" + type: CONVOLUTION + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv1_2" + top: "conv1_2" + name: "relu1_2" + type: RELU +} +layers { + bottom: "conv1_2" + top: "pool1" + name: "pool1" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool1" + top: "conv2_1" + name: "conv2_1" + type: CONVOLUTION + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv2_1" + top: "conv2_1" + name: "relu2_1" + type: RELU +} +layers { + bottom: "conv2_1" + top: "conv2_2" + name: "conv2_2" + type: CONVOLUTION + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv2_2" + top: "conv2_2" + name: "relu2_2" + type: RELU +} +layers { + bottom: "conv2_2" + top: "pool2" + name: "pool2" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool2" + top: "conv3_1" + name: "conv3_1" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_1" + top: "conv3_1" + name: "relu3_1" + type: RELU +} +layers { + bottom: "conv3_1" + top: "conv3_2" + name: "conv3_2" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_2" + top: "conv3_2" + name: "relu3_2" + type: RELU +} +layers { + bottom: "conv3_2" + top: "conv3_3" + name: "conv3_3" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_3" + top: "conv3_3" + name: "relu3_3" + type: RELU +} +layers { + bottom: "conv3_3" + top: "conv3_4" + name: "conv3_4" + type: CONVOLUTION + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv3_4" + top: "conv3_4" + name: "relu3_4" + type: RELU +} +layers { + bottom: "conv3_4" + top: "pool3" + name: "pool3" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool3" + top: "conv4_1" + name: "conv4_1" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_1" + top: "conv4_1" + name: "relu4_1" + type: RELU +} +layers { + bottom: "conv4_1" + top: "conv4_2" + name: "conv4_2" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_2" + top: "conv4_2" + name: "relu4_2" + type: RELU +} +layers { + bottom: "conv4_2" + top: "conv4_3" + name: "conv4_3" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_3" + top: "conv4_3" + name: "relu4_3" + type: RELU +} +layers { + bottom: "conv4_3" + top: "conv4_4" + name: "conv4_4" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv4_4" + top: "conv4_4" + name: "relu4_4" + type: RELU +} +layers { + bottom: "conv4_4" + top: "pool4" + name: "pool4" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool4" + top: "conv5_1" + name: "conv5_1" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_1" + top: "conv5_1" + name: "relu5_1" + type: RELU +} +layers { + bottom: "conv5_1" + top: "conv5_2" + name: "conv5_2" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_2" + top: "conv5_2" + name: "relu5_2" + type: RELU +} +layers { + bottom: "conv5_2" + top: "conv5_3" + name: "conv5_3" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_3" + top: "conv5_3" + name: "relu5_3" + type: RELU +} +layers { + bottom: "conv5_3" + top: "conv5_4" + name: "conv5_4" + type: CONVOLUTION + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layers { + bottom: "conv5_4" + top: "conv5_4" + name: "relu5_4" + type: RELU +} +layers { + bottom: "conv5_4" + top: "pool5" + name: "pool5" + type: POOLING + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layers { + bottom: "pool5" + top: "fc6" + name: "fc6" + type: INNER_PRODUCT + inner_product_param { + num_output: 4096 + } +} +layers { + bottom: "fc6" + top: "fc6" + name: "relu6" + type: RELU +} +layers { + bottom: "fc6" + top: "fc6" + name: "drop6" + type: DROPOUT + dropout_param { + dropout_ratio: 0.5 + } +} +layers { + bottom: "fc6" + top: "fc7" + name: "fc7" + type: INNER_PRODUCT + inner_product_param { + num_output: 4096 + } +} +layers { + bottom: "fc7" + top: "fc7" + name: "relu7" + type: RELU +} +layers { + bottom: "fc7" + top: "fc7" + name: "drop7" + type: DROPOUT + dropout_param { + dropout_ratio: 0.5 + } +} +layers { + bottom: "fc7" + top: "fc8" + name: "fc8" + type: INNER_PRODUCT + inner_product_param { + num_output: 1000 + } +} +layers { + bottom: "fc8" + top: "prob" + name: "prob" + type: SOFTMAX +} diff --git a/data/models/vgg-19/weights_url b/data/models/vgg-19/weights_url new file mode 100644 index 0000000..3efbb28 --- /dev/null +++ b/data/models/vgg-19/weights_url @@ -0,0 +1 @@ +http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_19_layers.caffemodel diff --git a/tools/deinplace.py b/tools/deinplace.py index f350da9..52f5972 100755 --- a/tools/deinplace.py +++ b/tools/deinplace.py @@ -33,7 +33,8 @@ def load_net(args): def deinplace(args, net): outputs = {} - for layer in net.layer: + layers = net.layer if net.layer else net.layers + for layer in layers: for idx, bottom in enumerate(layer.bottom): if bottom in outputs and bottom != outputs[bottom]: if args.verbose: