updates
Esse commit está contido em:
Arquivo binário não exibido.
|
Depois Largura: | Altura: | Tamanho: 444 KiB |
Arquivo normal → Arquivo executável
+24
-23
@@ -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
@@ -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')
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário