VGG model
Esse commit está contido em:
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo normal → Arquivo executável
+104
-40
@@ -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')
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário