Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
ILSVRC-2014 model (VGG team) with 19 weight layers

##Information

name: 19-layer model from the arXiv paper: "Very Deep Convolutional Networks for Large-Scale Image Recognition"

caffemodel: VGG_ILSVRC_19_layers

caffemodel_url: http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_19_layers.caffemodel

license: see http://www.robots.ox.ac.uk/~vgg/research/very_deep/

caffe_version: trained using a custom Caffe-based framework

gist_id: 3785162f95cd2d5fee77

Description

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:

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].

Caffe compatibility

The models are currently supported by the dev branch of Caffe, but are not yet compatible with master. An example of how to use the models in Matlab can be found in matlab/caffe/matcaffe_demo_vgg.m

ILSVRC-2012 performance

Using dense single-scale evaluation (the smallest image side rescaled to 384), the top-5 classification error on the validation set of ILSVRC-2012 is 8.0% (see Table 3 in the arXiv paper).

Using dense multi-scale evaluation (the smallest image side rescaled to 256, 384, and 512), the top-5 classification error is 7.5% on the validation set and 7.3% on the test set of ILSVRC-2012 (see Tables 4 and 6 in the arXiv paper).

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
}
@sunbaigui

This comment has been minimized.

Show comment Hide comment
@sunbaigui

sunbaigui Oct 11, 2014

It's a great work!
Could you kindly paste on the train_val prototext?

It's a great work!
Could you kindly paste on the train_val prototext?

@lukeyeager

This comment has been minimized.

Show comment Hide comment
@lukeyeager

lukeyeager Oct 14, 2014

I second that. Do y'all have your train_val and solver posted anywhere?

I second that. Do y'all have your train_val and solver posted anywhere?

@EvanWeiner

This comment has been minimized.

Show comment Hide comment
@EvanWeiner

EvanWeiner Oct 19, 2014

How to do this in python? : "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]."

I saw the Matlab script but I can't fully grasp it's conversion to Python. Would appreciate if some kind soul could post how to do this in Python in the comments here, in a GIST or a PR to Caffe. Thank you.

How to do this in python? : "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]."

I saw the Matlab script but I can't fully grasp it's conversion to Python. Would appreciate if some kind soul could post how to do this in Python in the comments here, in a GIST or a PR to Caffe. Thank you.

@dgolden1

This comment has been minimized.

Show comment Hide comment
@dgolden1

dgolden1 Oct 24, 2014

Karen, thank you very much for posting this. Could you please elaborate on what features of the dev branch are required to run this model that are not currently available in master? I don't see any novel layers or protobuffer references here that aren't currently in master (as of this writing, Oct 23, 2014)

Karen, thank you very much for posting this. Could you please elaborate on what features of the dev branch are required to run this model that are not currently available in master? I don't see any novel layers or protobuffer references here that aren't currently in master (as of this writing, Oct 23, 2014)

@roseperrone

This comment has been minimized.

Show comment Hide comment
@roseperrone

roseperrone Dec 3, 2014

I third the request for the train_val and solver!

I third the request for the train_val and solver!

@sbrugman

This comment has been minimized.

Show comment Hide comment
@sbrugman

sbrugman May 25, 2015

That makes four of us.

That makes four of us.

@noboomu

This comment has been minimized.

Show comment Hide comment
@noboomu

noboomu May 27, 2015

5 :)

noboomu commented May 27, 2015

5 :)

@darkseed

This comment has been minimized.

Show comment Hide comment
@darkseed

darkseed Jun 25, 2015

6

6

@cuihenggang

This comment has been minimized.

Show comment Hide comment
@cuihenggang

cuihenggang Jul 6, 2015

7

7

@stardust2602

This comment has been minimized.

Show comment Hide comment
@stardust2602

stardust2602 Jul 7, 2015

8

@jongsony

This comment has been minimized.

Show comment Hide comment
@jongsony

jongsony Jul 17, 2015

9

9

@adithyamurali

This comment has been minimized.

Show comment Hide comment
@adithyamurali

adithyamurali Jul 23, 2015

10!

10!

@xuguozhi

This comment has been minimized.

Show comment Hide comment
@xuguozhi

xuguozhi Jul 25, 2015

11!

11!

@graphific

This comment has been minimized.

Show comment Hide comment
@graphific

graphific Aug 20, 2015

by popular request, a fitting train_val.prototxt

by popular request, a fitting train_val.prototxt

@inovatek

This comment has been minimized.

Show comment Hide comment
@inovatek

inovatek Sep 11, 2015

Hello

How to implement the model on the Mester Branch ?

There are currently no Dev Branch.

Thank you very much !

Hello

How to implement the model on the Mester Branch ?

There are currently no Dev Branch.

Thank you very much !

@LiberiFatali

This comment has been minimized.

Show comment Hide comment
@LiberiFatali

LiberiFatali Sep 16, 2015

It woks fine with master.

It woks fine with master.

@mlagunas

This comment has been minimized.

Show comment Hide comment
@mlagunas

mlagunas Mar 14, 2016

Hello,

I'm really new on this topic (Deep Learning and CNN), I have just started my bachelor project. I am wondering if there is a way to see the name of the classes which the CNN can classify. Sorry in advance if the question sounds really stupid.
Maybe it can help with the answer: I am using Torch and loadcaffe to load the pre-trained net.

Kind regards!

Hello,

I'm really new on this topic (Deep Learning and CNN), I have just started my bachelor project. I am wondering if there is a way to see the name of the classes which the CNN can classify. Sorry in advance if the question sounds really stupid.
Maybe it can help with the answer: I am using Torch and loadcaffe to load the pre-trained net.

Kind regards!

@leonardt

This comment has been minimized.

Show comment Hide comment
@leonardt

leonardt Mar 16, 2016

@mlagunas checkout this tutorial specifically cell 9 where they load the set of labels to see what the net predicted.

@mlagunas checkout this tutorial specifically cell 9 where they load the set of labels to see what the net predicted.

@alexkarargyris

This comment has been minimized.

Show comment Hide comment
@alexkarargyris

alexkarargyris Mar 22, 2016

Can we use this model with Nvidia's DIGITS? I am trying load it but I get an error when I start running the classifier:

ERROR: must specify a loss layer

Can we use this model with Nvidia's DIGITS? I am trying load it but I get an error when I start running the classifier:

ERROR: must specify a loss layer

@pherrusa7

This comment has been minimized.

Show comment Hide comment
@pherrusa7

pherrusa7 Apr 29, 2016

@graphific Thanks for posting the train_val.prototxt!
@ksimonyan Thanks for posting the trained model and the VGG_ILSVRC_19_layers_deploy.prototxt

If I understood correctly, both .prototxt files look like deprecated in the new version of caffe. All layers should be defined as lower-case instead of upper-case. Also some types of layers are not supported any more by caffe.

I did the required changes to the train_val to work. If somebody needs it, let me know

Thanks!

@graphific Thanks for posting the train_val.prototxt!
@ksimonyan Thanks for posting the trained model and the VGG_ILSVRC_19_layers_deploy.prototxt

If I understood correctly, both .prototxt files look like deprecated in the new version of caffe. All layers should be defined as lower-case instead of upper-case. Also some types of layers are not supported any more by caffe.

I did the required changes to the train_val to work. If somebody needs it, let me know

Thanks!

@yinnonsanders

This comment has been minimized.

Show comment Hide comment
@yinnonsanders

yinnonsanders May 2, 2016

@pherrusa7
I would appreciate having the modified train_val

@pherrusa7
I would appreciate having the modified train_val

@jacor-

This comment has been minimized.

Show comment Hide comment
@jacor-

jacor- May 6, 2016

I have been trying to use this network with a new version of Caffe and I cannot make it work.
@pherrusa7, could you share that modified train_val file? It would be awesome to be able to take a look into it.

jacor- commented May 6, 2016

I have been trying to use this network with a new version of Caffe and I cannot make it work.
@pherrusa7, could you share that modified train_val file? It would be awesome to be able to take a look into it.

@ambitiousank

This comment has been minimized.

Show comment Hide comment
@ambitiousank

ambitiousank May 7, 2016

@pherrusa7 I would like the modified train_val and solver file... Thanks in advance...

@pherrusa7 I would like the modified train_val and solver file... Thanks in advance...

@kevinfang1028

This comment has been minimized.

Show comment Hide comment
@kevinfang1028

kevinfang1028 May 8, 2016

@pherrusa7
I would like to have modified train_val and solver files. Thank you very much!

@pherrusa7
I would like to have modified train_val and solver files. Thank you very much!

@pherrusa7

This comment has been minimized.

Show comment Hide comment
@pherrusa7

pherrusa7 May 17, 2016

Hi @yinnonsanders @jacor @ambitiousank @kevinfang1028

Here you can find the train_val and solver: Caffe-Utilities

In the readme file you can also see the command I used to get it work. I hope will be helpful :)

pherrusa7 commented May 17, 2016

Hi @yinnonsanders @jacor @ambitiousank @kevinfang1028

Here you can find the train_val and solver: Caffe-Utilities

In the readme file you can also see the command I used to get it work. I hope will be helpful :)

@vlnguyen92

This comment has been minimized.

Show comment Hide comment
@vlnguyen92

vlnguyen92 Jul 11, 2016

@pherrusa7: Have you tried the TEST phase yet (using a pretrained model)? I can't get it to work.

@pherrusa7: Have you tried the TEST phase yet (using a pretrained model)? I can't get it to work.

@gongbaochicken

This comment has been minimized.

Show comment Hide comment
@gongbaochicken

gongbaochicken Aug 9, 2016

Great job!!!

Great job!!!

@gailysun

This comment has been minimized.

Show comment Hide comment
@gailysun

gailysun Aug 10, 2016

Great!!

Great!!

@Sunnydreamrain

This comment has been minimized.

Show comment Hide comment
@Sunnydreamrain

Sunnydreamrain Aug 25, 2016

Have anyone got the test accuracy reported? I can only get 73.034% TOP1 accuracy and 91.654% TOP5 accuracy. It is close, but still not exactly the result. Especially for the TOP1 accuracy, reported is 25.5% error rate which is 74.5% accuracy. It is 1.5% lower.
Any advice?

Have anyone got the test accuracy reported? I can only get 73.034% TOP1 accuracy and 91.654% TOP5 accuracy. It is close, but still not exactly the result. Especially for the TOP1 accuracy, reported is 25.5% error rate which is 74.5% accuracy. It is 1.5% lower.
Any advice?

@pherrusa7

This comment has been minimized.

Show comment Hide comment
@pherrusa7

pherrusa7 Sep 15, 2016

@vlnguyen92: Sorry for the delay. Yes, I did. If you did not get it yet, you can follow this step-by-step approach to TEST your model that I made months ago (caffeUsers). I hope it will be helpful.

@vlnguyen92: Sorry for the delay. Yes, I did. If you did not get it yet, you can follow this step-by-step approach to TEST your model that I made months ago (caffeUsers). I hope it will be helpful.

@mrgloom

This comment has been minimized.

Show comment Hide comment
@mrgloom

mrgloom Sep 18, 2016

Here is working example of VGG-19 that I have trained using NVIDIA DIGITS with Caffe backend.
https://github.com/mrgloom/kaggle-dogs-vs-cats-solution/tree/master/learning_from_scratch/Models/VGG-19

mrgloom commented Sep 18, 2016

Here is working example of VGG-19 that I have trained using NVIDIA DIGITS with Caffe backend.
https://github.com/mrgloom/kaggle-dogs-vs-cats-solution/tree/master/learning_from_scratch/Models/VGG-19

@soulslicer

This comment has been minimized.

Show comment Hide comment
@soulslicer

soulslicer May 8, 2018

Hi all, in the paper, there was also a simplified VGG 11:

https://arxiv.org/pdf/1409.1556.pdf

Is this network and its weights available anywhere??

Hi all, in the paper, there was also a simplified VGG 11:

https://arxiv.org/pdf/1409.1556.pdf

Is this network and its weights available anywhere??

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment