|
1 |
| -# pip install opencv-python |
2 |
| -from tensorflow.keras.models import Sequential |
3 |
| -from tensorflow.keras.layers.core import Flatten, Dense, Dropout |
4 |
| -from tensorflow.keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D |
5 |
| -from tensorflow.keras.optimizers import SGD |
6 |
| -from tensorflow.keras import backend as K |
| 1 | +from tensorflow.keras.applications.vgg16 import VGG16 |
7 | 2 | import cv2
|
8 | 3 | import numpy as np
|
9 |
| -import os |
10 |
| - |
11 |
| -# get weights from https://drive.google.com/file/d/0Bz7KyqmuGsilT0J5dmRCM0ROVHc |
12 |
| -K.set_image_dim_ordering('th') |
13 |
| - |
14 |
| - |
15 |
| -def VGG_16(weights_path=None): |
16 |
| - model = Sequential() |
17 |
| - model.add(ZeroPadding2D((1, 1), input_shape=(3, 224, 224))) |
18 |
| - model.add(Convolution2D(64, 3, 3, activation='relu')) |
19 |
| - model.add(ZeroPadding2D((1, 1))) |
20 |
| - model.add(Convolution2D(64, 3, 3, activation='relu')) |
21 |
| - model.add(MaxPooling2D((2, 2), strides=(2, 2))) |
22 |
| - |
23 |
| - model.add(ZeroPadding2D((1, 1))) |
24 |
| - model.add(Convolution2D(128, 3, 3, activation='relu')) |
25 |
| - model.add(ZeroPadding2D((1, 1))) |
26 |
| - model.add(Convolution2D(128, 3, 3, activation='relu')) |
27 |
| - model.add(MaxPooling2D((2, 2), strides=(2, 2))) |
28 |
| - |
29 |
| - model.add(ZeroPadding2D((1, 1))) |
30 |
| - model.add(Convolution2D(256, 3, 3, activation='relu')) |
31 |
| - model.add(ZeroPadding2D((1, 1))) |
32 |
| - model.add(Convolution2D(256, 3, 3, activation='relu')) |
33 |
| - model.add(ZeroPadding2D((1, 1))) |
34 |
| - model.add(Convolution2D(256, 3, 3, activation='relu')) |
35 |
| - model.add(MaxPooling2D((2, 2), strides=(2, 2))) |
36 |
| - |
37 |
| - model.add(ZeroPadding2D((1, 1))) |
38 |
| - model.add(Convolution2D(512, 3, 3, activation='relu')) |
39 |
| - model.add(ZeroPadding2D((1, 1))) |
40 |
| - model.add(Convolution2D(512, 3, 3, activation='relu')) |
41 |
| - model.add(ZeroPadding2D((1, 1))) |
42 |
| - model.add(Convolution2D(512, 3, 3, activation='relu')) |
43 |
| - model.add(MaxPooling2D((2, 2), strides=(2, 2))) |
44 |
| - |
45 |
| - model.add(ZeroPadding2D((1, 1))) |
46 |
| - model.add(Convolution2D(512, 3, 3, activation='relu')) |
47 |
| - model.add(ZeroPadding2D((1, 1))) |
48 |
| - model.add(Convolution2D(512, 3, 3, activation='relu')) |
49 |
| - model.add(ZeroPadding2D((1, 1))) |
50 |
| - model.add(Convolution2D(512, 3, 3, activation='relu')) |
51 |
| - model.add(MaxPooling2D((2, 2), strides=(2, 2))) |
52 |
| - |
53 |
| - model.add(Flatten()) |
54 |
| - model.add(Dense(4096, activation='relu')) |
55 |
| - model.add(Dropout(0.5)) |
56 |
| - model.add(Dense(4096, activation='relu')) |
57 |
| - model.add(Dropout(0.5)) |
58 |
| - model.add(Dense(1000, activation='softmax')) |
59 |
| - |
60 |
| - if weights_path: |
61 |
| - model.load_weights(weights_path) |
62 |
| - |
63 |
| - return model |
64 |
| - |
65 | 4 |
|
66 | 5 | if __name__ == "__main__":
|
67 |
| - model = VGG_16() |
| 6 | + model = VGG16() |
68 | 7 | model.summary()
|
69 |
| - # Test pretrained model if weights exist |
70 |
| - if os.path.exists("vgg16_weights.h5"): |
71 |
| - im = cv2.resize(cv2.imread('elephant.jpg'), |
72 |
| - (224, 224)).astype(np.float32) |
73 |
| - im[:, :, 0] -= 103.939 |
74 |
| - im[:, :, 1] -= 116.779 |
75 |
| - im[:, :, 2] -= 123.68 |
76 |
| - im = im.transpose((2, 0, 1)) |
77 |
| - im = np.expand_dims(im, axis=0) |
78 |
| - model = VGG_16('vgg16_weights.h5') |
79 |
| - sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) |
80 |
| - model.compile(optimizer=sgd, loss='categorical_crossentropy') |
81 |
| - out = model.predict(im) |
82 |
| - print(np.argmax(out)) |
| 8 | + im = cv2.resize(cv2.imread('elephant.jpg'), |
| 9 | + (224, 224)).astype(np.float32) |
| 10 | + im[:, :, 0] -= 103.939 |
| 11 | + im[:, :, 1] -= 116.779 |
| 12 | + im[:, :, 2] -= 123.68 |
| 13 | + out = model.predict(im) |
| 14 | + print(np.argmax(out)) |
0 commit comments