Skip to content

Commit

Permalink
megaage-asian
Browse files Browse the repository at this point in the history
  • Loading branch information
b02901145 committed Aug 6, 2018
1 parent 9fc5c03 commit b8dfb83
Show file tree
Hide file tree
Showing 80 changed files with 14,926 additions and 0 deletions.
73 changes: 73 additions & 0 deletions MobileNet_and_DenseNet/CA_D.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import numpy as np
import sys
import logging
import csv
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
from TYY_utils import mk_dir, load_data_npz
from TYY_model import TYY_DenseNet_reg

def MAE(a,b):
mae = np.sum(np.absolute(a-b))
mae/=len(b)
return mae

'''''''''''''''''''''''''''''''''''''''''''''
file name
'''''''''''''''''''''''''''''''''''''''''''''
test_file = sys.argv[1]
netType = int(sys.argv[2])

logging.debug("Loading testing data...")
image2, age2, image_size = load_data_npz(test_file)

if netType == 3:
N_densenet = 3
depth_densenet = 3*N_densenet+4
model_file = 'megaage_models/DenseNet/batch_size_50/densenet_reg_%d_64/densenet_reg_%d_64.h5'%(depth_densenet, depth_densenet)
model = TYY_DenseNet_reg(image_size,depth_densenet)()
mk_dir('Results_csv')
save_name = 'Results_csv/densenet_reg_%d_%d.csv' % (depth_densenet, image_size)

elif netType == 4:
N_densenet = 5
depth_densenet = 3*N_densenet+4
model_file = 'megaage_models/DenseNet/batch_size_50/densenet_reg_%d_64/densenet_reg_%d_64.h5'%(depth_densenet, depth_densenet)
model = TYY_DenseNet_reg(image_size,depth_densenet)()
mk_dir('Results_csv')
save_name = 'Results_csv/densenet_reg_%d_%d.csv' % (depth_densenet, image_size)


'''''''''''''''''''''''''''''''''''''''''''''
load data
'''''''''''''''''''''''''''''''''''''''''''''
logging.debug("Loading model file...")
model.load_weights(model_file)

age_p=model.predict(image2)

'''''''''''''''''''''''''''''''''''''''''''''
prediction
'''''''''''''''''''''''''''''''''''''''''''''
pred=[['MAE'],[str(MAE(age2,age_p[:,0]))],['CA3','CA5'],['0','0'],['ID','age','age_p','error']]
CA3=0
CA5=0
for i in range(0,len(image2)):
error=np.absolute(age2[i]-age_p[i,0])
if error<=3:
CA3+=1
if error<=5:
CA5+=1
temp = [str(i), str(age2[i]), str(age_p[i,0]), str(error)]
pred.append(temp)

CA3/=len(image2)
CA5/=len(image2)
pred[3]=[str(CA3),str(CA5)]

print('CA3: ',CA3,'\nCA5: ',CA5)

f=open(save_name,'w')
w=csv.writer(f)
w.writerows(pred)
f.close
74 changes: 74 additions & 0 deletions MobileNet_and_DenseNet/CA_M.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import numpy as np
import sys
import logging
import csv
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

from TYY_utils import mk_dir, load_data_npz
from TYY_model import TYY_MobileNet_reg

def MAE(a,b):
mae = np.sum(np.absolute(a-b))
mae/=len(b)
return mae

'''''''''''''''''''''''''''''''''''''''''''''
file name
'''''''''''''''''''''''''''''''''''''''''''''
test_file = sys.argv[1]
netType = int(sys.argv[2])

logging.debug("Loading testing data...")
image2, age2, image_size = load_data_npz(test_file)

if netType == 1:
alpha = 0.25
model_file = 'megaage_models/MobileNet/batch_size_50/mobilenet_reg_0.25_64/mobilenet_reg_0.25_64.h5'
model = TYY_MobileNet_reg(image_size,alpha)()
mk_dir('Results_csv')
save_name = 'Results_csv/mobilenet_reg_%s_%d.csv' % (alpha, image_size)

elif netType == 2:
alpha = 0.5
model_file = 'megaage_models/MobileNet/batch_size_50/mobilenet_reg_0.5_64/mobilenet_reg_0.5_64.h5'
model = TYY_MobileNet_reg(image_size,alpha)()
mk_dir('Results_csv')
save_name = 'Results_csv/mobilenet_reg_%s_%d.csv' % (alpha, image_size)


'''''''''''''''''''''''''''''''''''''''''''''
load data
'''''''''''''''''''''''''''''''''''''''''''''
logging.debug("Loading model file...")
model.load_weights(model_file)

age_p=model.predict(image2,batch_size=len(image2))

'''''''''''''''''''''''''''''''''''''''''''''
prediction
'''''''''''''''''''''''''''''''''''''''''''''
pred=[['MAE'],[str(MAE(age2,age_p[:,0]))],['ID','age','age_p','error']]
pred.append(['CA3','CA5'])
pred.append(['0','0'])
CA3=0
CA5=0
for i in range(0,len(image2)):
error=np.absolute(age2[i]-age_p[i,0])
if error<=3:
CA3+=1
if error<=5:
CA5+=1
temp = [str(i), str(age2[i]), str(age_p[i,0]), str(error)]
pred.append(temp)

CA3/=len(image2)
CA5/=len(image2)
pred[4]=[str(CA3),str(CA5)]

print('CA3: ',CA3,'\nCA5: ',CA5)

f=open(save_name,'w')
w=csv.writer(f)
w.writerows(pred)
f.close
36 changes: 36 additions & 0 deletions MobileNet_and_DenseNet/TYY_callbacks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import keras
from sklearn.metrics import roc_auc_score
import sys
import matplotlib.pyplot as plt
from keras.models import Model
import numpy as np
from keras import backend as K


class DecayLearningRate(keras.callbacks.Callback):
def __init__(self, startEpoch):
self.startEpoch = startEpoch

def on_train_begin(self, logs={}):
return
def on_train_end(self, logs={}):
return

def on_epoch_begin(self, epoch, logs={}):
if epoch in self.startEpoch:
if epoch == 0:
ratio = 1
else:
ratio = 0.1
LR = K.get_value(self.model.optimizer.lr)
K.set_value(self.model.optimizer.lr,LR*ratio)
return

def on_epoch_end(self, epoch, logs={}):
return

def on_batch_begin(self, batch, logs={}):
return

def on_batch_end(self, batch, logs={}):
return
102 changes: 102 additions & 0 deletions MobileNet_and_DenseNet/TYY_generators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import keras
import numpy as np
import sys
from scipy import misc
import tensorflow as tf


def random_crop(x,dn):
dx = np.random.randint(dn,size=1)[0]
dy = np.random.randint(dn,size=1)[0]
w = x.shape[0]
h = x.shape[1]
out = x[0+dx:w-(dn-dx),0+dy:h-(dn-dy),:]
out = misc.imresize(out, (w,h), interp='nearest')
return out

def augment_data(images):
for i in range(0,images.shape[0]):

if np.random.random() > 0.5:
images[i] = images[i][:,::-1]
"""
if np.random.random() > 0.5:
images[i] = random_crop(images[i],4)
"""
if np.random.random() > 0.75:
images[i] = tf.contrib.keras.preprocessing.image.random_rotation(images[i], 20, row_axis=0, col_axis=1, channel_axis=2)
if np.random.random() > 0.75:
images[i] = tf.contrib.keras.preprocessing.image.random_shear(images[i], 0.2, row_axis=0, col_axis=1, channel_axis=2)
if np.random.random() > 0.75:
images[i] = tf.contrib.keras.preprocessing.image.random_shift(images[i], 0.2, 0.2, row_axis=0, col_axis=1, channel_axis=2)
if np.random.random() > 0.75:
images[i] = tf.contrib.keras.preprocessing.image.random_zoom(images[i], [0.8,1.2], row_axis=0, col_axis=1, channel_axis=2)

return images


def data_generator_reg(X,Y,batch_size):

while True:
idxs = np.random.permutation(len(X))
X = X[idxs]
Y = Y[idxs]
p,q = [],[]
for i in range(len(X)):
p.append(X[i])
q.append(Y[i])
if len(p) == batch_size:
yield augment_data(np.array(p)),np.array(q)
p,q = [],[]
if p:
yield augment_data(np.array(p)),np.array(q)
p,q = [],[]

def data_generator_dex(X,Y,batch_size):

Y1 = Y[0]
Y2 = Y[1]

while True:
idxs = np.random.permutation(len(X))
X = X[idxs]
Y1 = Y1[idxs]
Y2 = Y2[idxs]
p,q1,q2 = [],[],[]
for i in range(len(X)):
p.append(X[i])
q1.append(Y1[i])
q2.append(Y2[i])
if len(p) == batch_size:
yield augment_data(np.array(p)),[np.array(q1),np.array(q2)]
p,q1,q2 = [],[],[]
if p:
yield augment_data(np.array(p)),[np.array(q1),np.array(q2)]
p,q1,q2 = [],[],[]

def data_generator_dex_centerloss(X,Y,batch_size):
X1 = X[0]
X2 = X[1]
Y1 = Y[0]
Y2 = Y[1]
Y3 = Y[2]
while True:
idxs = np.random.permutation(len(X1))
X1 = X1[idxs] #images
X2 = X2[idxs] #labels for center loss
Y1 = Y1[idxs]
Y2 = Y2[idxs]
Y3 = Y3[idxs]
p1,p2,q1,q2,q3 = [],[],[],[],[]
for i in range(len(X1)):
p1.append(X1[i])
p2.append(X2[i])
q1.append(Y1[i])
q2.append(Y2[i])
q3.append(Y3[i])
if len(p1) == batch_size:
yield [augment_data(np.array(p1)),np.array(p2)],[np.array(q1),np.array(q2),np.array(q3)]
p1,p2,q1,q2,q3 = [],[],[],[],[]
if p1:
yield [augment_data(np.array(p1)),np.array(p2)],[np.array(q1),np.array(q2),np.array(q3)]
p1,p2,q1,q2,q3 = [],[],[],[],[]
86 changes: 86 additions & 0 deletions MobileNet_and_DenseNet/TYY_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# This code is imported from the following project: https://github.com/asmith26/wide_resnets_keras

import logging
import sys
import numpy as np
from keras.models import Model
from keras.layers import Input, Activation, add, Dense, Flatten, Dropout, Multiply, Embedding, Lambda, Add, Concatenate, Activation
from keras.layers.convolutional import Conv2D, AveragePooling2D, MaxPooling2D
from keras.layers.normalization import BatchNormalization
from keras.regularizers import l2
from keras import backend as K
from keras.optimizers import SGD,Adam
from keras.applications.mobilenet import MobileNet
from densenet import *
from keras.utils import plot_model

sys.setrecursionlimit(2 ** 20)
np.random.seed(2 ** 10)


class TYY_MobileNet_reg:
def __init__(self, image_size, alpha):


if K.image_dim_ordering() == "th":
logging.debug("image_dim_ordering = 'th'")
self._channel_axis = 1
self._input_shape = (3, image_size, image_size)
else:
logging.debug("image_dim_ordering = 'tf'")
self._channel_axis = -1
self._input_shape = (image_size, image_size, 3)
self.alpha = alpha

# def create_model(self):
def __call__(self):
logging.debug("Creating model...")

inputs = Input(shape=self._input_shape)
model_mobilenet = MobileNet(input_shape=self._input_shape, alpha=self.alpha, depth_multiplier=1, dropout=1e-3, include_top=False, weights=None, input_tensor=None, pooling=None)
x = model_mobilenet(inputs)
#flatten = Flatten()(x)

feat_a = Conv2D(20,(1,1),activation='relu')(x)
feat_a = Flatten()(feat_a)
feat_a = Dropout(0.2)(feat_a)
feat_a = Dense(32,activation='relu',name='feat_a')(feat_a)

pred_a = Dense(1,name='pred_a')(feat_a)
model = Model(inputs=inputs, outputs=[pred_a])


return model


class TYY_DenseNet_reg:
def __init__(self, image_size, depth):

if K.image_dim_ordering() == "th":
logging.debug("image_dim_ordering = 'th'")
self._channel_axis = 1
self._input_shape = (3, image_size, image_size)
else:
logging.debug("image_dim_ordering = 'tf'")
self._channel_axis = -1
self._input_shape = (image_size, image_size, 3)
self.depth = depth

# def create_model(self):
def __call__(self):
logging.debug("Creating model...")

inputs = Input(shape=self._input_shape)
model_densenet = DenseNet(input_shape=self._input_shape, depth=self.depth, include_top=False, weights=None, input_tensor=None)
flatten = model_densenet(inputs)

feat_a = Dense(128,activation='relu')(flatten)
feat_a = Dropout(0.2)(feat_a)
feat_a = Dense(32,activation='relu',name='feat_a')(feat_a)

pred_a = Dense(1,name='pred_a')(feat_a)
model = Model(inputs=inputs, outputs=[pred_a])

return model


Loading

0 comments on commit b8dfb83

Please sign in to comment.