Esse commit está contido em:
Charlie Hewitt
2017-12-20 16:42:20 +00:00
commit 3b4ca01197
7 arquivos alterados com 105 adições e 40 exclusões
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
BIN
Ver Arquivo
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
BIN
Ver Arquivo
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo normal → Arquivo executável
+104 -40
Ver Arquivo
@@ -1,10 +1,12 @@
#! /usr/local/bin/python3
import csv
import os
from math import floor
import numpy as np
from keras.callbacks import LearningRateScheduler, ModelCheckpoint
from keras.layers import Activation, AveragePooling2D, BatchNormalization, Conv2D, Conv3D, Dense, Dropout, Flatten, GaussianDropout, MaxPooling2D, MaxPooling3D
from keras.layers import Activation, AveragePooling2D, BatchNormalization, Conv2D, Conv3D, Dense, Dropout, Flatten, GaussianDropout, GlobalAveragePooling2D, MaxPooling2D, MaxPooling3D, SeparableConv2D
from keras.models import Sequential, load_model, model_from_json
from keras.optimizers import SGD, Adam
from keras.preprocessing import image
@@ -16,7 +18,7 @@ CLASSIFY = 0
REGRESS = 1
# OTPIONS #
BATCH_SIZE = 200
BATCH_SIZE = 250 # VGG: 400 MOB: 250
EPOCHS = 24
IMAGE_SIZE = 128
@@ -105,10 +107,83 @@ def process_data(C_or_R, paths, labels):
return paths_out, labels_out, weights
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(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(64, (3, 3), 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(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(128, (3, 3), strides=(2, 2), 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(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(256, (3, 3), 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(BatchNormalization())
model.add(Activation('relu'))
model.add(SeparableConv2D(512, (3, 3), strides=(2, 2), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(GaussianDropout(0.2))
# FLATTEN
model.add(GlobalAveragePooling2D())
# DENSE 1
model.add(Dense(1024, use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
# DENSE 2
model.add(Dense(1024, use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
# OUTPUT
if C_or_R == CLASSIFY:
model.add(Dense(8, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
else:
model.add(Dense(2, activation='linear'))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
def vgg_style_model(C_or_R):
model = Sequential()
# CONV BLOCK 1
model.add(Conv2D(32, (3, 3), input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3), padding='same', use_bias=False))
model.add(Conv2D(16, (3, 3), input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(16, (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 2
model.add(Conv2D(32, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3), padding='same', use_bias=False))
@@ -116,46 +191,37 @@ def vgg_style_model(C_or_R):
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(GaussianDropout(0.2))
# CONV BLOCK 2
model.add(Conv2D(64, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(64, (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 3
model.add(Conv2D(128, (3, 3), padding='same', use_bias=False))
model.add(Conv2D(64, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(128, (3, 3), padding='same', use_bias=False))
model.add(Conv2D(64, (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 4
model.add(Conv2D(256, (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(Conv2D(256, (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(512, (3, 3), padding='same', use_bias=False))
# model.add(BatchNormalization())
# model.add(Activation('relu'))
# model.add(Conv2D(512, (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))
model.add(Conv2D(128, (3, 3), padding='same', use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
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))
# FLATTEN
model.add(Flatten())
# DENSE 1
model.add(Dense(2048, use_bias=False))
model.add(Dense(1024, use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
@@ -203,12 +269,12 @@ def alexnet_style_model(C_or_R):
# FLATTEN
model.add(Flatten())
# DENSE 1
model.add(Dense(2048, use_bias=False))
model.add(Dense(1024, use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
# DENSE 2
model.add(Dense(2048, use_bias=False))
model.add(Dense(1024, use_bias=False))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
@@ -233,9 +299,9 @@ def regressor_from_classifier(model):
return model
def eval(C_or_R):
def eval(name, C_or_R):
# model = base_model(C_or_R, 256)
model = load_model('1/AFF_NET_C_O.h5')
model = load_model(name)
# for layer in model.layers:
# if type(layer) is Dropout:
# model.layers.remove(layer)
@@ -248,17 +314,12 @@ def eval(C_or_R):
def load_and_save():
# with open ('.', 'r') as json:
# data = ''.join(json.readlines())
# model = model_from_json(data)
# model = load_model('AFF_NET_R_WIP.h5')
model = base_model(REGRESS)
# model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.load_weights('AFF_NET_R_WIP.h5')
model = vgg_style_model(CLASSIFY)
model.load_weights('M_VGG/C_T.h5')
for layer in model.layers:
if type(layer) is Dropout:
if type(layer) is Dropout or type(layer) is GaussianDropout:
model.layers.remove(layer)
model.save('AFF_NET_R_O.h5')
model.save('M_VGG/C_T_S.h5')
def train(C_or_R, model, name):
@@ -300,5 +361,8 @@ def train(C_or_R, model, name):
if __name__ == '__main__':
train(CLASSIFY, vgg_style_model(CLASSIFY), 'VGG/C')
# train(CLASSIFY, alexnet_style_model(CLASSIFY), 'ALEX/C')
# 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')