VGG16
from keras.models import Sequential
from keras.layers import Activation, Dense, Dropout, Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPool2D
from keras.utils.np_utils import to_categorical
from keras.optimizers import Adagrad
from keras.optimizers import Adam
from keras.utils import plot_model
import numpy as np
from PIL import Image
import json
import os
xsize=128
ysize=128
classnum=15
train_path="../../data/football/train"
test_path="../../data/football/test"
jsondata=open("./class.json","r")
classdict=json.load(jsondata)
def VGG16_keras(X,Y):
dout=0.2
lr=0.001
batch_size=100
nb_epoch=1000
validation_split=0.1
model = Sequential()
model.add(Conv2D(64,3, input_shape=(xsize,ysize,3)))
model.add(Activation("relu"))
model.add(Conv2D(64,3))
model.add(Activation("relu"))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Conv2D(128,3))
model.add(Activation("relu"))
model.add(Conv2D(128,3))
model.add(Activation("relu"))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Conv2D(256,3))
model.add(Activation("relu"))
model.add(Conv2D(256,3))
model.add(Activation("relu"))
model.add(Conv2D(256,3))
model.add(Activation("relu"))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Conv2D(512,3))
model.add(Activation("relu"))
model.add(Conv2D(512,3))
model.add(Activation("relu"))
model.add(Conv2D(512,3))
model.add(Activation("relu"))
model.add(MaxPool2D(pool_size=(2,2)))
"""
model.add(Conv2D(512,3))
model.add(Activation("relu"))
model.add(Conv2D(512,3))
model.add(Activation("relu"))
model.add(Conv2D(512,3))
model.add(Activation("relu"))
model.add(MaxPool2D(pool_size=(2,2)))
"""
model.add(Flatten())
model.add(Dense(512))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(128))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(64))
model.add(Activation("relu"))
model.add(Dropout(0.5))
model.add(Dense(classnum))
model.add(Activation("softmax"))
model.compile(loss="categorical_crossentropy", optimizer=Adam(lr=lr), metrics=["accuracy"])
plot_model(model, to_file='footballl_cnn.png',show_shapes=True)
model.summary()
model.fit(X, Y, nb_epoch=nb_epoch, batch_size=batch_size, validation_split=validation_split)
return model
def imgconverter_PIL(target_path):
image_list = []
label_list = []
for class_name in os.listdir(target_path):
try:
label = classdict[class_name]
except:
print("class is not defined in class.json")
exit()
dataset_path = target_path + "/" + class_name
for file_name in sorted(os.listdir(dataset_path)):
file_path = dataset_path + "/" + file_name
image = np.array(Image.open(file_path).resize((xsize, ysize)))
image_list.append(image / 255.)
label_list.append(label)
return image_list,label_list
def traintest():
train_image_list,train_label_list=imgconverter_PIL(train_path)
X = np.array(train_image_list)
print(X.shape)
Y = to_categorical(train_label_list)
print(Y.shape)
model=VGG16_keras(X,Y)
test_image_list,test_label_list=imgconverter_PIL(test_path)
total=0
ok_count=0
for img,lbl in zip(test_image_list,test_label_list):
result = model.predict_classes(np.array([img]))
print("Collet label:", lbl, " | ","predict:", result[0])
total += 1.
if lbl == result:
ok_count += 1.
print("accuracy: ", ok_count / total * 100, "%")
if __name__=="__main__":
traintest()