-
-
Save soulspirit1229/db9e2cb019dfd3c6a5244c40748d9940 to your computer and use it in GitHub Desktop.
VGG-16 pre-trained model for Keras
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ##VGG16 model for Keras | |
| This is the [Keras](http://keras.io/) model of the 16-layer network used by the VGG team in the ILSVRC-2014 competition. | |
| It has been obtained by directly converting the [Caffe model](https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-readme-md) provived by the authors. | |
| Details about the network architecture can be found in the following arXiv paper: | |
| Very Deep Convolutional Networks for Large-Scale Image Recognition | |
| K. Simonyan, A. Zisserman | |
| arXiv:1409.1556 | |
| In the paper, the VGG-16 model is denoted as configuration `D`. It achieves 7.5% top-5 error on ILSVRC-2012-val, 7.4% top-5 error on ILSVRC-2012-test. | |
| Please cite the paper if you use the models. | |
| ###Contents: | |
| model and usage demo: see `vgg-16_keras.py` | |
| weights: [vgg16_weights.h5](https://drive.google.com/file/d/0Bz7KyqmuGsilT0J5dmRCM0ROVHc/view?usp=sharing) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from keras.models import Sequential | |
| from keras.layers.core import Flatten, Dense, Dropout | |
| from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D | |
| from keras.optimizers import SGD | |
| import cv2, numpy as np | |
| def VGG_16(weights_path=None): | |
| model = Sequential() | |
| model.add(ZeroPadding2D((1,1),input_shape=(3,224,224))) | |
| model.add(Convolution2D(64, 3, 3, activation='relu')) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(64, 3, 3, activation='relu')) | |
| model.add(MaxPooling2D((2,2), strides=(2,2))) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(128, 3, 3, activation='relu')) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(128, 3, 3, activation='relu')) | |
| model.add(MaxPooling2D((2,2), strides=(2,2))) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(256, 3, 3, activation='relu')) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(256, 3, 3, activation='relu')) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(256, 3, 3, activation='relu')) | |
| model.add(MaxPooling2D((2,2), strides=(2,2))) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(512, 3, 3, activation='relu')) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(512, 3, 3, activation='relu')) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(512, 3, 3, activation='relu')) | |
| model.add(MaxPooling2D((2,2), strides=(2,2))) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(512, 3, 3, activation='relu')) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(512, 3, 3, activation='relu')) | |
| model.add(ZeroPadding2D((1,1))) | |
| model.add(Convolution2D(512, 3, 3, activation='relu')) | |
| model.add(MaxPooling2D((2,2), strides=(2,2))) | |
| model.add(Flatten()) | |
| model.add(Dense(4096, activation='relu')) | |
| model.add(Dropout(0.5)) | |
| model.add(Dense(4096, activation='relu')) | |
| model.add(Dropout(0.5)) | |
| model.add(Dense(1000, activation='softmax')) | |
| if weights_path: | |
| model.load_weights(weights_path) | |
| return model | |
| if __name__ == "__main__": | |
| im = cv2.resize(cv2.imread('cat.jpg'), (224, 224)).astype(np.float32) | |
| im[:,:,0] -= 103.939 | |
| im[:,:,1] -= 116.779 | |
| im[:,:,2] -= 123.68 | |
| im = im.transpose((2,0,1)) | |
| im = np.expand_dims(im, axis=0) | |
| # Test pretrained model | |
| model = VGG_16('vgg16_weights.h5') | |
| sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) | |
| model.compile(optimizer=sgd, loss='categorical_crossentropy') | |
| out = model.predict(im) | |
| print np.argmax(out) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment