Esse commit está contido em:
Charlie Hewitt
2017-12-20 20:47:16 +00:00
commit b5b2d5a6b8
4 arquivos alterados com 68 adições e 53 exclusões
BIN
Ver Arquivo
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 444 KiB

Ver Arquivo
Arquivo normal → Arquivo executável
+24 -23
Ver Arquivo
@@ -1,3 +1,5 @@
#! /usr/local/bin/python3
import os
import sys
from math import sqrt
@@ -14,6 +16,8 @@ CLASSIFY = 0
REGRESS = 1
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
IMAGE_SIZE = 128
def RMSE(t, p):
return round(sqrt(mean_squared_error(t, p)), 4)
@@ -73,9 +77,9 @@ def get_classifier_predictions(model, paths, labels):
labels_p_r = []
count = 0
for i, path in enumerate(paths):
img = image.load_img(path, target_size=(96, 96))
img = image.load_img(path, target_size=(IMAGE_SIZE, IMAGE_SIZE))
img = image.img_to_array(img) / 255
img = np.array(img).reshape((1, 96, 96, 3))
img = np.array(img).reshape((1, IMAGE_SIZE, IMAGE_SIZE, 3))
labels_t_r.append(labels[i])
labels_t.append(np.argmax(labels[i]))
p = model.predict(img)
@@ -96,9 +100,9 @@ def get_regressor_predictions(model, paths, labels):
arousal_p = []
count = 0
for i, path in enumerate(paths):
img = image.load_img(path, target_size=(96, 96))
img = image.load_img(path, target_size=(IMAGE_SIZE, IMAGE_SIZE))
img = image.img_to_array(img) / 255
img = np.array(img).reshape((1, 96, 96, 3))
img = np.array(img).reshape((1, IMAGE_SIZE, IMAGE_SIZE, 3))
valence_t.append(labels[i][0])
arousal_t.append(labels[i][1])
p = model.predict(img)
@@ -139,24 +143,21 @@ def eval(c_path=None, r_path=None):
print('CCC'.ljust(20), str(CCC(valence_t, valence_p)).ljust(20), CCC(arousal_t, arousal_p))
if __name__ == '__main__':
try:
if len(sys.argv) == 3:
if sys.argv[1] == '-c':
eval(c_path=sys.argv[2])
elif sys.argv[1] == '-r':
eval(r_path=sys.argv[2])
else:
raise Exception()
elif len(sys.argv) == 5:
c_path=None
r_path=None
if sys.argv[1] == '-c':
eval(c_path=sys.argv[2], r_path=sys.argv[4])
elif sys.argv[1] == '-r':
eval(r_path=sys.argv[2], c_path=sys.argv[4])
else:
raise Exception()
if len(sys.argv) == 3:
if sys.argv[1] == '-c':
eval(c_path=sys.argv[2])
elif sys.argv[1] == '-r':
eval(r_path=sys.argv[2])
else:
raise Exception()
elif len(sys.argv) == 5:
c_path=None
r_path=None
if sys.argv[1] == '-c':
eval(c_path=sys.argv[2], r_path=sys.argv[4])
elif sys.argv[1] == '-r':
eval(r_path=sys.argv[2], c_path=sys.argv[4])
else:
raise Exception()
except:
print('Invalid input, must be -c [path] or -r [path] or both')
else:
raise Exception()
+44 -30
Ver Arquivo
@@ -11,14 +11,16 @@ from keras.models import Sequential, load_model, model_from_json
from keras.optimizers import SGD, Adam
from keras.preprocessing import image
from keras.utils.np_utils import to_categorical
from keras.utils import plot_model
from sklearn.utils import class_weight
from keras.applications.mobilenet import DepthwiseConv2D
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
CLASSIFY = 0
REGRESS = 1
# OTPIONS #
BATCH_SIZE = 250 # VGG: 400 MOB: 250
BATCH_SIZE = 400 # VGG/ALEX: 400
EPOCHS = 24
IMAGE_SIZE = 128
@@ -109,46 +111,49 @@ def process_data(C_or_R, paths, labels):
def mobilenet_style_model(C_or_R):
model = Sequential()
# CONV BLOCK 1
model.add(SeparableConv2D(32, (3, 3), input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(32, (3, 3), strides=(2, 2), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 2
model.add(SeparableConv2D(64, (3, 3), padding='same', use_bias=False))
model.add(DepthwiseConv2D(32, (3, 3), padding='same', use_bias=False, input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(64, (3, 3), strides=(2, 2), padding='same', use_bias=False))
model.add(Conv2D(32, (1, 1), strides=(2, 2), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 3
model.add(SeparableConv2D(128, (3, 3), padding='same', use_bias=False))
model.add(DepthwiseConv2D(64, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(128, (3, 3), strides=(2, 2), padding='same', use_bias=False))
model.add(Conv2D(64, (1, 1), strides=(1, 1), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 4
model.add(SeparableConv2D(256, (3, 3), padding='same', use_bias=False))
model.add(DepthwiseConv2D(64, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(256, (3, 3), strides=(2, 2), padding='same', use_bias=False))
model.add(Conv2D(64, (1, 1), strides=(2, 2), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 5
model.add(SeparableConv2D(512, (3, 3), padding='same', use_bias=False))
model.add(DepthwiseConv2D(128, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(512, (3, 3), strides=(2, 2), padding='same', use_bias=False))
model.add(Conv2D(128, (1, 1), strides=(1, 1), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(GaussianDropout(0.2))
model.add(DepthwiseConv2D(128, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(128, (1, 1), strides=(2, 2), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(DepthwiseConv2D(256, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(256, (1, 1), strides=(1, 1), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
# FLATTEN
model.add(GlobalAveragePooling2D())
# DENSE 1
@@ -243,25 +248,31 @@ def vgg_style_model(C_or_R):
def alexnet_style_model(C_or_R):
model = Sequential()
# CONV BLOCK 1
model.add(Conv2D(64, (7, 7), input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3), padding='same', use_bias=False))
model.add(Conv2D(16, (9, 9), input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 2
model.add(Conv2D(128, (5, 5), padding='same', use_bias=False))
model.add(Conv2D(32, (7, 7), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 3
model.add(Conv2D(256, (3, 3), padding='same', use_bias=False))
model.add(Conv2D(64, (5, 5), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 4
model.add(Conv2D(512, (3, 3), padding='same', use_bias=False))
model.add(Conv2D(128, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 5
model.add(Conv2D(128, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
@@ -321,6 +332,8 @@ def load_and_save():
model.layers.remove(layer)
model.save('M_VGG/C_T_S.h5')
def visualise(model, name):
plot_model(model, to_file=name+'.png', show_shapes=True, show_layer_names=False)
def train(C_or_R, model, name):
print('** LOADING DATA **')
@@ -364,5 +377,6 @@ if __name__ == '__main__':
# load_and_save()
# eval('M_VGG/C_T_S.h5', CLASSIFY)
# train(CLASSIFY, vgg_style_model(CLASSIFY), 'M_VGG/C')
# train(CLASSIFY, alexnet_style_model(CLASSIFY), 'M_ALEX/C')
train(CLASSIFY, mobilenet_style_model(CLASSIFY), 'M_MOB/C')
train(CLASSIFY, alexnet_style_model(CLASSIFY), 'M_ALEX/C')
# train(CLASSIFY, mobilenet_style_model(CLASSIFY), 'M_MOB/C')
# visualise(vgg_style_model(CLASSIFY), 'M_VGG/C')