AI Blitz XIII
Face Age Prediction using Transfer Learning [81.3 F1]
Face Age prediction using models pretrained on ImageNet [Resnet101v2]
Face Age Classfication using Transfer Leaning¶
In [1]:
import os
import shutil
import random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from tqdm.notebook import tqdm
import cv2
from tensorflow import keras
In [2]:
import tensorflow as tf
print(tf.test.is_built_with_cuda())
print(tf.config.list_physical_devices('GPU'))
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
True [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')] Num GPUs Available: 1
Loading Data¶
In [5]:
train_imgs_path = 'train_data/faces/train/'
val_imgs_path = 'train_data/faces/val/'
train_df = pd.read_csv('train_data/train.csv')
val_df = pd.read_csv('train_data/val.csv')
In [6]:
train_df.head()
Out[6]:
ImageID | age | |
---|---|---|
0 | 93vu1 | 30-40 |
1 | yjifi | 80-90 |
2 | ldd2k | 90-100 |
3 | eiwe0 | 40-50 |
4 | sc0bp | 0-10 |
Visualizing¶
In [7]:
idx = random.randint(0, len(train_df)-1)
fname = train_df.iloc[idx, 0]
age = train_df.iloc[idx, 1]
face_img = cv2.imread(train_imgs_path+fname+".jpg")
face_img = cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(4,4))
plt.imshow(face_img)
plt.show()
print(age)
90-100
In [8]:
sns.countplot(x=train_df["age"].append(val_df["age"]))
plt.show()
In [9]:
# from sklearn.utils import class_weight
# classes=sorted(list(set(train_df["age"])))
# class_weights = class_weight.compute_class_weight('balanced',
# classes=sorted(list(set(train_df["age"]))),
# y=train_df["age"].append(val_df["age"]))
# class_wt_dict=dict(enumerate(class_weights))
# print(classes)
# class_wt_dict
Train Test Split¶
In [11]:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications.resnet import preprocess_input as base_preprocess
image_gen = ImageDataGenerator(preprocessing_function=base_preprocess,
rotation_range=2,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.1,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest',
# rescale=1/255,
validation_split=0.15)
In [ ]:
train_images = train_generator.flow_from_dataframe(
dataframe=train_df,
x_col='Filepath',
y_col='Label',
target_size=(224, 224),
color_mode='rgb',
class_mode='categorical',
batch_size=32,
shuffle=True,
seed=42,
subset='training'
)
In [13]:
data_dir = "train_data/dataset/"
batch_size = 16
target_size = (300, 300)
train_image_gen = image_gen.flow_from_directory(data_dir,
target_size=target_size,
color_mode='rgb',
batch_size=batch_size,
class_mode='categorical',
subset="training")
val_image_gen = image_gen.flow_from_directory(data_dir,
target_size=target_size,
color_mode='rgb',
batch_size=batch_size,
class_mode='categorical',
shuffle=False,
subset="validation")
print(train_image_gen.class_indices)
sns.countplot(x=train_image_gen.classes)
plt.show()
Found 4762 images belonging to 10 classes. Found 834 images belonging to 10 classes. {'0-10': 0, '10-20': 1, '20-30': 2, '30-40': 3, '40-50': 4, '50-60': 5, '60-70': 6, '70-80': 7, '80-90': 8, '90-100': 9}
Transfer Learning using ResNet Model¶
In [14]:
from tensorflow.keras.applications import *
from tensorflow.keras.layers import Flatten, Dense, Input, Dropout, GlobalAveragePooling2D
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
base_model = ResNet101V2(weights='imagenet', include_top=False, input_shape=(300, 300, 3))
for layer in base_model.layers:
layer.trainable = True
x = base_model.output
x = GlobalAveragePooling2D()(x)
#x = Flatten()(x)
# x = Dense(4096, activation='relu')(x)
# x = Dropout(0.5)(x)
# x = Dense(512, activation='relu')(x)
# x = Dropout(0.5)(x)
x = Dense(256, activation='relu')(x)
x = Dropout(0.5)(x)
x = Dense(10, activation='softmax')(x)
tl_model = Model(inputs=base_model.input, outputs=x)
tl_model.summary()
Model: "model" __________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ================================================================================================== input_1 (InputLayer) [(None, 300, 300, 3) 0 __________________________________________________________________________________________________ conv1_pad (ZeroPadding2D) (None, 306, 306, 3) 0 input_1[0][0] __________________________________________________________________________________________________ conv1_conv (Conv2D) (None, 150, 150, 64) 9472 conv1_pad[0][0] __________________________________________________________________________________________________ pool1_pad (ZeroPadding2D) (None, 152, 152, 64) 0 conv1_conv[0][0] __________________________________________________________________________________________________ pool1_pool (MaxPooling2D) (None, 75, 75, 64) 0 pool1_pad[0][0] __________________________________________________________________________________________________ conv2_block1_preact_bn (BatchNo (None, 75, 75, 64) 256 pool1_pool[0][0] __________________________________________________________________________________________________ conv2_block1_preact_relu (Activ (None, 75, 75, 64) 0 conv2_block1_preact_bn[0][0] __________________________________________________________________________________________________ conv2_block1_1_conv (Conv2D) (None, 75, 75, 64) 4096 conv2_block1_preact_relu[0][0] __________________________________________________________________________________________________ conv2_block1_1_bn (BatchNormali (None, 75, 75, 64) 256 conv2_block1_1_conv[0][0] __________________________________________________________________________________________________ conv2_block1_1_relu (Activation (None, 75, 75, 64) 0 conv2_block1_1_bn[0][0] __________________________________________________________________________________________________ conv2_block1_2_pad (ZeroPadding (None, 77, 77, 64) 0 conv2_block1_1_relu[0][0] __________________________________________________________________________________________________ conv2_block1_2_conv (Conv2D) (None, 75, 75, 64) 36864 conv2_block1_2_pad[0][0] __________________________________________________________________________________________________ conv2_block1_2_bn (BatchNormali (None, 75, 75, 64) 256 conv2_block1_2_conv[0][0] __________________________________________________________________________________________________ conv2_block1_2_relu (Activation (None, 75, 75, 64) 0 conv2_block1_2_bn[0][0] __________________________________________________________________________________________________ conv2_block1_0_conv (Conv2D) (None, 75, 75, 256) 16640 conv2_block1_preact_relu[0][0] __________________________________________________________________________________________________ conv2_block1_3_conv (Conv2D) (None, 75, 75, 256) 16640 conv2_block1_2_relu[0][0] __________________________________________________________________________________________________ conv2_block1_out (Add) (None, 75, 75, 256) 0 conv2_block1_0_conv[0][0] conv2_block1_3_conv[0][0] __________________________________________________________________________________________________ conv2_block2_preact_bn (BatchNo (None, 75, 75, 256) 1024 conv2_block1_out[0][0] __________________________________________________________________________________________________ conv2_block2_preact_relu (Activ (None, 75, 75, 256) 0 conv2_block2_preact_bn[0][0] __________________________________________________________________________________________________ conv2_block2_1_conv (Conv2D) (None, 75, 75, 64) 16384 conv2_block2_preact_relu[0][0] __________________________________________________________________________________________________ conv2_block2_1_bn (BatchNormali (None, 75, 75, 64) 256 conv2_block2_1_conv[0][0] __________________________________________________________________________________________________ conv2_block2_1_relu (Activation (None, 75, 75, 64) 0 conv2_block2_1_bn[0][0] __________________________________________________________________________________________________ conv2_block2_2_pad (ZeroPadding (None, 77, 77, 64) 0 conv2_block2_1_relu[0][0] __________________________________________________________________________________________________ conv2_block2_2_conv (Conv2D) (None, 75, 75, 64) 36864 conv2_block2_2_pad[0][0] __________________________________________________________________________________________________ conv2_block2_2_bn (BatchNormali (None, 75, 75, 64) 256 conv2_block2_2_conv[0][0] __________________________________________________________________________________________________ conv2_block2_2_relu (Activation (None, 75, 75, 64) 0 conv2_block2_2_bn[0][0] __________________________________________________________________________________________________ conv2_block2_3_conv (Conv2D) (None, 75, 75, 256) 16640 conv2_block2_2_relu[0][0] __________________________________________________________________________________________________ conv2_block2_out (Add) (None, 75, 75, 256) 0 conv2_block1_out[0][0] conv2_block2_3_conv[0][0] __________________________________________________________________________________________________ conv2_block3_preact_bn (BatchNo (None, 75, 75, 256) 1024 conv2_block2_out[0][0] __________________________________________________________________________________________________ conv2_block3_preact_relu (Activ (None, 75, 75, 256) 0 conv2_block3_preact_bn[0][0] __________________________________________________________________________________________________ conv2_block3_1_conv (Conv2D) (None, 75, 75, 64) 16384 conv2_block3_preact_relu[0][0] __________________________________________________________________________________________________ conv2_block3_1_bn (BatchNormali (None, 75, 75, 64) 256 conv2_block3_1_conv[0][0] __________________________________________________________________________________________________ conv2_block3_1_relu (Activation (None, 75, 75, 64) 0 conv2_block3_1_bn[0][0] __________________________________________________________________________________________________ conv2_block3_2_pad (ZeroPadding (None, 77, 77, 64) 0 conv2_block3_1_relu[0][0] __________________________________________________________________________________________________ conv2_block3_2_conv (Conv2D) (None, 38, 38, 64) 36864 conv2_block3_2_pad[0][0] __________________________________________________________________________________________________ conv2_block3_2_bn (BatchNormali (None, 38, 38, 64) 256 conv2_block3_2_conv[0][0] __________________________________________________________________________________________________ conv2_block3_2_relu (Activation (None, 38, 38, 64) 0 conv2_block3_2_bn[0][0] __________________________________________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 38, 38, 256) 0 conv2_block2_out[0][0] __________________________________________________________________________________________________ conv2_block3_3_conv (Conv2D) (None, 38, 38, 256) 16640 conv2_block3_2_relu[0][0] __________________________________________________________________________________________________ conv2_block3_out (Add) (None, 38, 38, 256) 0 max_pooling2d[0][0] conv2_block3_3_conv[0][0] __________________________________________________________________________________________________ conv3_block1_preact_bn (BatchNo (None, 38, 38, 256) 1024 conv2_block3_out[0][0] __________________________________________________________________________________________________ conv3_block1_preact_relu (Activ (None, 38, 38, 256) 0 conv3_block1_preact_bn[0][0] __________________________________________________________________________________________________ conv3_block1_1_conv (Conv2D) (None, 38, 38, 128) 32768 conv3_block1_preact_relu[0][0] __________________________________________________________________________________________________ conv3_block1_1_bn (BatchNormali (None, 38, 38, 128) 512 conv3_block1_1_conv[0][0] __________________________________________________________________________________________________ conv3_block1_1_relu (Activation (None, 38, 38, 128) 0 conv3_block1_1_bn[0][0] __________________________________________________________________________________________________ conv3_block1_2_pad (ZeroPadding (None, 40, 40, 128) 0 conv3_block1_1_relu[0][0] __________________________________________________________________________________________________ conv3_block1_2_conv (Conv2D) (None, 38, 38, 128) 147456 conv3_block1_2_pad[0][0] __________________________________________________________________________________________________ conv3_block1_2_bn (BatchNormali (None, 38, 38, 128) 512 conv3_block1_2_conv[0][0] __________________________________________________________________________________________________ conv3_block1_2_relu (Activation (None, 38, 38, 128) 0 conv3_block1_2_bn[0][0] __________________________________________________________________________________________________ conv3_block1_0_conv (Conv2D) (None, 38, 38, 512) 131584 conv3_block1_preact_relu[0][0] __________________________________________________________________________________________________ conv3_block1_3_conv (Conv2D) (None, 38, 38, 512) 66048 conv3_block1_2_relu[0][0] __________________________________________________________________________________________________ conv3_block1_out (Add) (None, 38, 38, 512) 0 conv3_block1_0_conv[0][0] conv3_block1_3_conv[0][0] __________________________________________________________________________________________________ conv3_block2_preact_bn (BatchNo (None, 38, 38, 512) 2048 conv3_block1_out[0][0] __________________________________________________________________________________________________ conv3_block2_preact_relu (Activ (None, 38, 38, 512) 0 conv3_block2_preact_bn[0][0] __________________________________________________________________________________________________ conv3_block2_1_conv (Conv2D) (None, 38, 38, 128) 65536 conv3_block2_preact_relu[0][0] __________________________________________________________________________________________________ conv3_block2_1_bn (BatchNormali (None, 38, 38, 128) 512 conv3_block2_1_conv[0][0] __________________________________________________________________________________________________ conv3_block2_1_relu (Activation (None, 38, 38, 128) 0 conv3_block2_1_bn[0][0] __________________________________________________________________________________________________ conv3_block2_2_pad (ZeroPadding (None, 40, 40, 128) 0 conv3_block2_1_relu[0][0] __________________________________________________________________________________________________ conv3_block2_2_conv (Conv2D) (None, 38, 38, 128) 147456 conv3_block2_2_pad[0][0] __________________________________________________________________________________________________ conv3_block2_2_bn (BatchNormali (None, 38, 38, 128) 512 conv3_block2_2_conv[0][0] __________________________________________________________________________________________________ conv3_block2_2_relu (Activation (None, 38, 38, 128) 0 conv3_block2_2_bn[0][0] __________________________________________________________________________________________________ conv3_block2_3_conv (Conv2D) (None, 38, 38, 512) 66048 conv3_block2_2_relu[0][0] __________________________________________________________________________________________________ conv3_block2_out (Add) (None, 38, 38, 512) 0 conv3_block1_out[0][0] conv3_block2_3_conv[0][0] __________________________________________________________________________________________________ conv3_block3_preact_bn (BatchNo (None, 38, 38, 512) 2048 conv3_block2_out[0][0] __________________________________________________________________________________________________ conv3_block3_preact_relu (Activ (None, 38, 38, 512) 0 conv3_block3_preact_bn[0][0] __________________________________________________________________________________________________ conv3_block3_1_conv (Conv2D) (None, 38, 38, 128) 65536 conv3_block3_preact_relu[0][0] __________________________________________________________________________________________________ conv3_block3_1_bn (BatchNormali (None, 38, 38, 128) 512 conv3_block3_1_conv[0][0] __________________________________________________________________________________________________ conv3_block3_1_relu (Activation (None, 38, 38, 128) 0 conv3_block3_1_bn[0][0] __________________________________________________________________________________________________ conv3_block3_2_pad (ZeroPadding (None, 40, 40, 128) 0 conv3_block3_1_relu[0][0] __________________________________________________________________________________________________ conv3_block3_2_conv (Conv2D) (None, 38, 38, 128) 147456 conv3_block3_2_pad[0][0] __________________________________________________________________________________________________ conv3_block3_2_bn (BatchNormali (None, 38, 38, 128) 512 conv3_block3_2_conv[0][0] __________________________________________________________________________________________________ conv3_block3_2_relu (Activation (None, 38, 38, 128) 0 conv3_block3_2_bn[0][0] __________________________________________________________________________________________________ conv3_block3_3_conv (Conv2D) (None, 38, 38, 512) 66048 conv3_block3_2_relu[0][0] __________________________________________________________________________________________________ conv3_block3_out (Add) (None, 38, 38, 512) 0 conv3_block2_out[0][0] conv3_block3_3_conv[0][0] __________________________________________________________________________________________________ conv3_block4_preact_bn (BatchNo (None, 38, 38, 512) 2048 conv3_block3_out[0][0] __________________________________________________________________________________________________ conv3_block4_preact_relu (Activ (None, 38, 38, 512) 0 conv3_block4_preact_bn[0][0] __________________________________________________________________________________________________ conv3_block4_1_conv (Conv2D) (None, 38, 38, 128) 65536 conv3_block4_preact_relu[0][0] __________________________________________________________________________________________________ conv3_block4_1_bn (BatchNormali (None, 38, 38, 128) 512 conv3_block4_1_conv[0][0] __________________________________________________________________________________________________ conv3_block4_1_relu (Activation (None, 38, 38, 128) 0 conv3_block4_1_bn[0][0] __________________________________________________________________________________________________ conv3_block4_2_pad (ZeroPadding (None, 40, 40, 128) 0 conv3_block4_1_relu[0][0] __________________________________________________________________________________________________ conv3_block4_2_conv (Conv2D) (None, 19, 19, 128) 147456 conv3_block4_2_pad[0][0] __________________________________________________________________________________________________ conv3_block4_2_bn (BatchNormali (None, 19, 19, 128) 512 conv3_block4_2_conv[0][0] __________________________________________________________________________________________________ conv3_block4_2_relu (Activation (None, 19, 19, 128) 0 conv3_block4_2_bn[0][0] __________________________________________________________________________________________________ max_pooling2d_1 (MaxPooling2D) (None, 19, 19, 512) 0 conv3_block3_out[0][0] __________________________________________________________________________________________________ conv3_block4_3_conv (Conv2D) (None, 19, 19, 512) 66048 conv3_block4_2_relu[0][0] __________________________________________________________________________________________________ conv3_block4_out (Add) (None, 19, 19, 512) 0 max_pooling2d_1[0][0] conv3_block4_3_conv[0][0] __________________________________________________________________________________________________ conv4_block1_preact_bn (BatchNo (None, 19, 19, 512) 2048 conv3_block4_out[0][0] __________________________________________________________________________________________________ conv4_block1_preact_relu (Activ (None, 19, 19, 512) 0 conv4_block1_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block1_1_conv (Conv2D) (None, 19, 19, 256) 131072 conv4_block1_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block1_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block1_1_conv[0][0] __________________________________________________________________________________________________ conv4_block1_1_relu (Activation (None, 19, 19, 256) 0 conv4_block1_1_bn[0][0] __________________________________________________________________________________________________ conv4_block1_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block1_1_relu[0][0] __________________________________________________________________________________________________ conv4_block1_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block1_2_pad[0][0] __________________________________________________________________________________________________ conv4_block1_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block1_2_conv[0][0] __________________________________________________________________________________________________ conv4_block1_2_relu (Activation (None, 19, 19, 256) 0 conv4_block1_2_bn[0][0] __________________________________________________________________________________________________ conv4_block1_0_conv (Conv2D) (None, 19, 19, 1024) 525312 conv4_block1_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block1_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block1_2_relu[0][0] __________________________________________________________________________________________________ conv4_block1_out (Add) (None, 19, 19, 1024) 0 conv4_block1_0_conv[0][0] conv4_block1_3_conv[0][0] __________________________________________________________________________________________________ conv4_block2_preact_bn (BatchNo (None, 19, 19, 1024) 4096 conv4_block1_out[0][0] __________________________________________________________________________________________________ conv4_block2_preact_relu (Activ (None, 19, 19, 1024) 0 conv4_block2_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block2_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block2_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block2_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block2_1_conv[0][0] __________________________________________________________________________________________________ conv4_block2_1_relu (Activation (None, 19, 19, 256) 0 conv4_block2_1_bn[0][0] __________________________________________________________________________________________________ conv4_block2_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block2_1_relu[0][0] __________________________________________________________________________________________________ conv4_block2_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block2_2_pad[0][0] __________________________________________________________________________________________________ conv4_block2_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block2_2_conv[0][0] __________________________________________________________________________________________________ conv4_block2_2_relu (Activation (None, 19, 19, 256) 0 conv4_block2_2_bn[0][0] __________________________________________________________________________________________________ conv4_block2_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block2_2_relu[0][0] __________________________________________________________________________________________________ conv4_block2_out (Add) (None, 19, 19, 1024) 0 conv4_block1_out[0][0] conv4_block2_3_conv[0][0] __________________________________________________________________________________________________ conv4_block3_preact_bn (BatchNo (None, 19, 19, 1024) 4096 conv4_block2_out[0][0] __________________________________________________________________________________________________ conv4_block3_preact_relu (Activ (None, 19, 19, 1024) 0 conv4_block3_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block3_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block3_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block3_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block3_1_conv[0][0] __________________________________________________________________________________________________ conv4_block3_1_relu (Activation (None, 19, 19, 256) 0 conv4_block3_1_bn[0][0] __________________________________________________________________________________________________ conv4_block3_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block3_1_relu[0][0] __________________________________________________________________________________________________ conv4_block3_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block3_2_pad[0][0] __________________________________________________________________________________________________ conv4_block3_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block3_2_conv[0][0] __________________________________________________________________________________________________ conv4_block3_2_relu (Activation (None, 19, 19, 256) 0 conv4_block3_2_bn[0][0] __________________________________________________________________________________________________ conv4_block3_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block3_2_relu[0][0] __________________________________________________________________________________________________ conv4_block3_out (Add) (None, 19, 19, 1024) 0 conv4_block2_out[0][0] conv4_block3_3_conv[0][0] __________________________________________________________________________________________________ conv4_block4_preact_bn (BatchNo (None, 19, 19, 1024) 4096 conv4_block3_out[0][0] __________________________________________________________________________________________________ conv4_block4_preact_relu (Activ (None, 19, 19, 1024) 0 conv4_block4_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block4_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block4_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block4_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block4_1_conv[0][0] __________________________________________________________________________________________________ conv4_block4_1_relu (Activation (None, 19, 19, 256) 0 conv4_block4_1_bn[0][0] __________________________________________________________________________________________________ conv4_block4_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block4_1_relu[0][0] __________________________________________________________________________________________________ conv4_block4_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block4_2_pad[0][0] __________________________________________________________________________________________________ conv4_block4_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block4_2_conv[0][0] __________________________________________________________________________________________________ conv4_block4_2_relu (Activation (None, 19, 19, 256) 0 conv4_block4_2_bn[0][0] __________________________________________________________________________________________________ conv4_block4_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block4_2_relu[0][0] __________________________________________________________________________________________________ conv4_block4_out (Add) (None, 19, 19, 1024) 0 conv4_block3_out[0][0] conv4_block4_3_conv[0][0] __________________________________________________________________________________________________ conv4_block5_preact_bn (BatchNo (None, 19, 19, 1024) 4096 conv4_block4_out[0][0] __________________________________________________________________________________________________ conv4_block5_preact_relu (Activ (None, 19, 19, 1024) 0 conv4_block5_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block5_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block5_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block5_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block5_1_conv[0][0] __________________________________________________________________________________________________ conv4_block5_1_relu (Activation (None, 19, 19, 256) 0 conv4_block5_1_bn[0][0] __________________________________________________________________________________________________ conv4_block5_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block5_1_relu[0][0] __________________________________________________________________________________________________ conv4_block5_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block5_2_pad[0][0] __________________________________________________________________________________________________ conv4_block5_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block5_2_conv[0][0] __________________________________________________________________________________________________ conv4_block5_2_relu (Activation (None, 19, 19, 256) 0 conv4_block5_2_bn[0][0] __________________________________________________________________________________________________ conv4_block5_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block5_2_relu[0][0] __________________________________________________________________________________________________ conv4_block5_out (Add) (None, 19, 19, 1024) 0 conv4_block4_out[0][0] conv4_block5_3_conv[0][0] __________________________________________________________________________________________________ conv4_block6_preact_bn (BatchNo (None, 19, 19, 1024) 4096 conv4_block5_out[0][0] __________________________________________________________________________________________________ conv4_block6_preact_relu (Activ (None, 19, 19, 1024) 0 conv4_block6_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block6_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block6_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block6_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block6_1_conv[0][0] __________________________________________________________________________________________________ conv4_block6_1_relu (Activation (None, 19, 19, 256) 0 conv4_block6_1_bn[0][0] __________________________________________________________________________________________________ conv4_block6_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block6_1_relu[0][0] __________________________________________________________________________________________________ conv4_block6_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block6_2_pad[0][0] __________________________________________________________________________________________________ conv4_block6_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block6_2_conv[0][0] __________________________________________________________________________________________________ conv4_block6_2_relu (Activation (None, 19, 19, 256) 0 conv4_block6_2_bn[0][0] __________________________________________________________________________________________________ conv4_block6_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block6_2_relu[0][0] __________________________________________________________________________________________________ conv4_block6_out (Add) (None, 19, 19, 1024) 0 conv4_block5_out[0][0] conv4_block6_3_conv[0][0] __________________________________________________________________________________________________ conv4_block7_preact_bn (BatchNo (None, 19, 19, 1024) 4096 conv4_block6_out[0][0] __________________________________________________________________________________________________ conv4_block7_preact_relu (Activ (None, 19, 19, 1024) 0 conv4_block7_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block7_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block7_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block7_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block7_1_conv[0][0] __________________________________________________________________________________________________ conv4_block7_1_relu (Activation (None, 19, 19, 256) 0 conv4_block7_1_bn[0][0] __________________________________________________________________________________________________ conv4_block7_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block7_1_relu[0][0] __________________________________________________________________________________________________ conv4_block7_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block7_2_pad[0][0] __________________________________________________________________________________________________ conv4_block7_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block7_2_conv[0][0] __________________________________________________________________________________________________ conv4_block7_2_relu (Activation (None, 19, 19, 256) 0 conv4_block7_2_bn[0][0] __________________________________________________________________________________________________ conv4_block7_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block7_2_relu[0][0] __________________________________________________________________________________________________ conv4_block7_out (Add) (None, 19, 19, 1024) 0 conv4_block6_out[0][0] conv4_block7_3_conv[0][0] __________________________________________________________________________________________________ conv4_block8_preact_bn (BatchNo (None, 19, 19, 1024) 4096 conv4_block7_out[0][0] __________________________________________________________________________________________________ conv4_block8_preact_relu (Activ (None, 19, 19, 1024) 0 conv4_block8_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block8_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block8_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block8_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block8_1_conv[0][0] __________________________________________________________________________________________________ conv4_block8_1_relu (Activation (None, 19, 19, 256) 0 conv4_block8_1_bn[0][0] __________________________________________________________________________________________________ conv4_block8_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block8_1_relu[0][0] __________________________________________________________________________________________________ conv4_block8_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block8_2_pad[0][0] __________________________________________________________________________________________________ conv4_block8_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block8_2_conv[0][0] __________________________________________________________________________________________________ conv4_block8_2_relu (Activation (None, 19, 19, 256) 0 conv4_block8_2_bn[0][0] __________________________________________________________________________________________________ conv4_block8_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block8_2_relu[0][0] __________________________________________________________________________________________________ conv4_block8_out (Add) (None, 19, 19, 1024) 0 conv4_block7_out[0][0] conv4_block8_3_conv[0][0] __________________________________________________________________________________________________ conv4_block9_preact_bn (BatchNo (None, 19, 19, 1024) 4096 conv4_block8_out[0][0] __________________________________________________________________________________________________ conv4_block9_preact_relu (Activ (None, 19, 19, 1024) 0 conv4_block9_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block9_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block9_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block9_1_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block9_1_conv[0][0] __________________________________________________________________________________________________ conv4_block9_1_relu (Activation (None, 19, 19, 256) 0 conv4_block9_1_bn[0][0] __________________________________________________________________________________________________ conv4_block9_2_pad (ZeroPadding (None, 21, 21, 256) 0 conv4_block9_1_relu[0][0] __________________________________________________________________________________________________ conv4_block9_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block9_2_pad[0][0] __________________________________________________________________________________________________ conv4_block9_2_bn (BatchNormali (None, 19, 19, 256) 1024 conv4_block9_2_conv[0][0] __________________________________________________________________________________________________ conv4_block9_2_relu (Activation (None, 19, 19, 256) 0 conv4_block9_2_bn[0][0] __________________________________________________________________________________________________ conv4_block9_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block9_2_relu[0][0] __________________________________________________________________________________________________ conv4_block9_out (Add) (None, 19, 19, 1024) 0 conv4_block8_out[0][0] conv4_block9_3_conv[0][0] __________________________________________________________________________________________________ conv4_block10_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block9_out[0][0] __________________________________________________________________________________________________ conv4_block10_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block10_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block10_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block10_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block10_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block10_1_conv[0][0] __________________________________________________________________________________________________ conv4_block10_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block10_1_bn[0][0] __________________________________________________________________________________________________ conv4_block10_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block10_1_relu[0][0] __________________________________________________________________________________________________ conv4_block10_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block10_2_pad[0][0] __________________________________________________________________________________________________ conv4_block10_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block10_2_conv[0][0] __________________________________________________________________________________________________ conv4_block10_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block10_2_bn[0][0] __________________________________________________________________________________________________ conv4_block10_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block10_2_relu[0][0] __________________________________________________________________________________________________ conv4_block10_out (Add) (None, 19, 19, 1024) 0 conv4_block9_out[0][0] conv4_block10_3_conv[0][0] __________________________________________________________________________________________________ conv4_block11_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block10_out[0][0] __________________________________________________________________________________________________ conv4_block11_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block11_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block11_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block11_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block11_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block11_1_conv[0][0] __________________________________________________________________________________________________ conv4_block11_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block11_1_bn[0][0] __________________________________________________________________________________________________ conv4_block11_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block11_1_relu[0][0] __________________________________________________________________________________________________ conv4_block11_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block11_2_pad[0][0] __________________________________________________________________________________________________ conv4_block11_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block11_2_conv[0][0] __________________________________________________________________________________________________ conv4_block11_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block11_2_bn[0][0] __________________________________________________________________________________________________ conv4_block11_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block11_2_relu[0][0] __________________________________________________________________________________________________ conv4_block11_out (Add) (None, 19, 19, 1024) 0 conv4_block10_out[0][0] conv4_block11_3_conv[0][0] __________________________________________________________________________________________________ conv4_block12_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block11_out[0][0] __________________________________________________________________________________________________ conv4_block12_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block12_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block12_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block12_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block12_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block12_1_conv[0][0] __________________________________________________________________________________________________ conv4_block12_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block12_1_bn[0][0] __________________________________________________________________________________________________ conv4_block12_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block12_1_relu[0][0] __________________________________________________________________________________________________ conv4_block12_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block12_2_pad[0][0] __________________________________________________________________________________________________ conv4_block12_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block12_2_conv[0][0] __________________________________________________________________________________________________ conv4_block12_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block12_2_bn[0][0] __________________________________________________________________________________________________ conv4_block12_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block12_2_relu[0][0] __________________________________________________________________________________________________ conv4_block12_out (Add) (None, 19, 19, 1024) 0 conv4_block11_out[0][0] conv4_block12_3_conv[0][0] __________________________________________________________________________________________________ conv4_block13_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block12_out[0][0] __________________________________________________________________________________________________ conv4_block13_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block13_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block13_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block13_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block13_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block13_1_conv[0][0] __________________________________________________________________________________________________ conv4_block13_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block13_1_bn[0][0] __________________________________________________________________________________________________ conv4_block13_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block13_1_relu[0][0] __________________________________________________________________________________________________ conv4_block13_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block13_2_pad[0][0] __________________________________________________________________________________________________ conv4_block13_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block13_2_conv[0][0] __________________________________________________________________________________________________ conv4_block13_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block13_2_bn[0][0] __________________________________________________________________________________________________ conv4_block13_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block13_2_relu[0][0] __________________________________________________________________________________________________ conv4_block13_out (Add) (None, 19, 19, 1024) 0 conv4_block12_out[0][0] conv4_block13_3_conv[0][0] __________________________________________________________________________________________________ conv4_block14_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block13_out[0][0] __________________________________________________________________________________________________ conv4_block14_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block14_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block14_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block14_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block14_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block14_1_conv[0][0] __________________________________________________________________________________________________ conv4_block14_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block14_1_bn[0][0] __________________________________________________________________________________________________ conv4_block14_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block14_1_relu[0][0] __________________________________________________________________________________________________ conv4_block14_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block14_2_pad[0][0] __________________________________________________________________________________________________ conv4_block14_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block14_2_conv[0][0] __________________________________________________________________________________________________ conv4_block14_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block14_2_bn[0][0] __________________________________________________________________________________________________ conv4_block14_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block14_2_relu[0][0] __________________________________________________________________________________________________ conv4_block14_out (Add) (None, 19, 19, 1024) 0 conv4_block13_out[0][0] conv4_block14_3_conv[0][0] __________________________________________________________________________________________________ conv4_block15_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block14_out[0][0] __________________________________________________________________________________________________ conv4_block15_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block15_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block15_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block15_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block15_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block15_1_conv[0][0] __________________________________________________________________________________________________ conv4_block15_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block15_1_bn[0][0] __________________________________________________________________________________________________ conv4_block15_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block15_1_relu[0][0] __________________________________________________________________________________________________ conv4_block15_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block15_2_pad[0][0] __________________________________________________________________________________________________ conv4_block15_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block15_2_conv[0][0] __________________________________________________________________________________________________ conv4_block15_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block15_2_bn[0][0] __________________________________________________________________________________________________ conv4_block15_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block15_2_relu[0][0] __________________________________________________________________________________________________ conv4_block15_out (Add) (None, 19, 19, 1024) 0 conv4_block14_out[0][0] conv4_block15_3_conv[0][0] __________________________________________________________________________________________________ conv4_block16_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block15_out[0][0] __________________________________________________________________________________________________ conv4_block16_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block16_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block16_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block16_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block16_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block16_1_conv[0][0] __________________________________________________________________________________________________ conv4_block16_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block16_1_bn[0][0] __________________________________________________________________________________________________ conv4_block16_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block16_1_relu[0][0] __________________________________________________________________________________________________ conv4_block16_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block16_2_pad[0][0] __________________________________________________________________________________________________ conv4_block16_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block16_2_conv[0][0] __________________________________________________________________________________________________ conv4_block16_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block16_2_bn[0][0] __________________________________________________________________________________________________ conv4_block16_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block16_2_relu[0][0] __________________________________________________________________________________________________ conv4_block16_out (Add) (None, 19, 19, 1024) 0 conv4_block15_out[0][0] conv4_block16_3_conv[0][0] __________________________________________________________________________________________________ conv4_block17_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block16_out[0][0] __________________________________________________________________________________________________ conv4_block17_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block17_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block17_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block17_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block17_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block17_1_conv[0][0] __________________________________________________________________________________________________ conv4_block17_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block17_1_bn[0][0] __________________________________________________________________________________________________ conv4_block17_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block17_1_relu[0][0] __________________________________________________________________________________________________ conv4_block17_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block17_2_pad[0][0] __________________________________________________________________________________________________ conv4_block17_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block17_2_conv[0][0] __________________________________________________________________________________________________ conv4_block17_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block17_2_bn[0][0] __________________________________________________________________________________________________ conv4_block17_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block17_2_relu[0][0] __________________________________________________________________________________________________ conv4_block17_out (Add) (None, 19, 19, 1024) 0 conv4_block16_out[0][0] conv4_block17_3_conv[0][0] __________________________________________________________________________________________________ conv4_block18_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block17_out[0][0] __________________________________________________________________________________________________ conv4_block18_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block18_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block18_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block18_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block18_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block18_1_conv[0][0] __________________________________________________________________________________________________ conv4_block18_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block18_1_bn[0][0] __________________________________________________________________________________________________ conv4_block18_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block18_1_relu[0][0] __________________________________________________________________________________________________ conv4_block18_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block18_2_pad[0][0] __________________________________________________________________________________________________ conv4_block18_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block18_2_conv[0][0] __________________________________________________________________________________________________ conv4_block18_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block18_2_bn[0][0] __________________________________________________________________________________________________ conv4_block18_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block18_2_relu[0][0] __________________________________________________________________________________________________ conv4_block18_out (Add) (None, 19, 19, 1024) 0 conv4_block17_out[0][0] conv4_block18_3_conv[0][0] __________________________________________________________________________________________________ conv4_block19_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block18_out[0][0] __________________________________________________________________________________________________ conv4_block19_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block19_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block19_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block19_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block19_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block19_1_conv[0][0] __________________________________________________________________________________________________ conv4_block19_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block19_1_bn[0][0] __________________________________________________________________________________________________ conv4_block19_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block19_1_relu[0][0] __________________________________________________________________________________________________ conv4_block19_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block19_2_pad[0][0] __________________________________________________________________________________________________ conv4_block19_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block19_2_conv[0][0] __________________________________________________________________________________________________ conv4_block19_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block19_2_bn[0][0] __________________________________________________________________________________________________ conv4_block19_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block19_2_relu[0][0] __________________________________________________________________________________________________ conv4_block19_out (Add) (None, 19, 19, 1024) 0 conv4_block18_out[0][0] conv4_block19_3_conv[0][0] __________________________________________________________________________________________________ conv4_block20_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block19_out[0][0] __________________________________________________________________________________________________ conv4_block20_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block20_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block20_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block20_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block20_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block20_1_conv[0][0] __________________________________________________________________________________________________ conv4_block20_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block20_1_bn[0][0] __________________________________________________________________________________________________ conv4_block20_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block20_1_relu[0][0] __________________________________________________________________________________________________ conv4_block20_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block20_2_pad[0][0] __________________________________________________________________________________________________ conv4_block20_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block20_2_conv[0][0] __________________________________________________________________________________________________ conv4_block20_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block20_2_bn[0][0] __________________________________________________________________________________________________ conv4_block20_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block20_2_relu[0][0] __________________________________________________________________________________________________ conv4_block20_out (Add) (None, 19, 19, 1024) 0 conv4_block19_out[0][0] conv4_block20_3_conv[0][0] __________________________________________________________________________________________________ conv4_block21_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block20_out[0][0] __________________________________________________________________________________________________ conv4_block21_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block21_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block21_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block21_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block21_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block21_1_conv[0][0] __________________________________________________________________________________________________ conv4_block21_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block21_1_bn[0][0] __________________________________________________________________________________________________ conv4_block21_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block21_1_relu[0][0] __________________________________________________________________________________________________ conv4_block21_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block21_2_pad[0][0] __________________________________________________________________________________________________ conv4_block21_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block21_2_conv[0][0] __________________________________________________________________________________________________ conv4_block21_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block21_2_bn[0][0] __________________________________________________________________________________________________ conv4_block21_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block21_2_relu[0][0] __________________________________________________________________________________________________ conv4_block21_out (Add) (None, 19, 19, 1024) 0 conv4_block20_out[0][0] conv4_block21_3_conv[0][0] __________________________________________________________________________________________________ conv4_block22_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block21_out[0][0] __________________________________________________________________________________________________ conv4_block22_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block22_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block22_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block22_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block22_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block22_1_conv[0][0] __________________________________________________________________________________________________ conv4_block22_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block22_1_bn[0][0] __________________________________________________________________________________________________ conv4_block22_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block22_1_relu[0][0] __________________________________________________________________________________________________ conv4_block22_2_conv (Conv2D) (None, 19, 19, 256) 589824 conv4_block22_2_pad[0][0] __________________________________________________________________________________________________ conv4_block22_2_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block22_2_conv[0][0] __________________________________________________________________________________________________ conv4_block22_2_relu (Activatio (None, 19, 19, 256) 0 conv4_block22_2_bn[0][0] __________________________________________________________________________________________________ conv4_block22_3_conv (Conv2D) (None, 19, 19, 1024) 263168 conv4_block22_2_relu[0][0] __________________________________________________________________________________________________ conv4_block22_out (Add) (None, 19, 19, 1024) 0 conv4_block21_out[0][0] conv4_block22_3_conv[0][0] __________________________________________________________________________________________________ conv4_block23_preact_bn (BatchN (None, 19, 19, 1024) 4096 conv4_block22_out[0][0] __________________________________________________________________________________________________ conv4_block23_preact_relu (Acti (None, 19, 19, 1024) 0 conv4_block23_preact_bn[0][0] __________________________________________________________________________________________________ conv4_block23_1_conv (Conv2D) (None, 19, 19, 256) 262144 conv4_block23_preact_relu[0][0] __________________________________________________________________________________________________ conv4_block23_1_bn (BatchNormal (None, 19, 19, 256) 1024 conv4_block23_1_conv[0][0] __________________________________________________________________________________________________ conv4_block23_1_relu (Activatio (None, 19, 19, 256) 0 conv4_block23_1_bn[0][0] __________________________________________________________________________________________________ conv4_block23_2_pad (ZeroPaddin (None, 21, 21, 256) 0 conv4_block23_1_relu[0][0] __________________________________________________________________________________________________ conv4_block23_2_conv (Conv2D) (None, 10, 10, 256) 589824 conv4_block23_2_pad[0][0] __________________________________________________________________________________________________ conv4_block23_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block23_2_conv[0][0] __________________________________________________________________________________________________ conv4_block23_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block23_2_bn[0][0] __________________________________________________________________________________________________ max_pooling2d_2 (MaxPooling2D) (None, 10, 10, 1024) 0 conv4_block22_out[0][0] __________________________________________________________________________________________________ conv4_block23_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block23_2_relu[0][0] __________________________________________________________________________________________________ conv4_block23_out (Add) (None, 10, 10, 1024) 0 max_pooling2d_2[0][0] conv4_block23_3_conv[0][0] __________________________________________________________________________________________________ conv5_block1_preact_bn (BatchNo (None, 10, 10, 1024) 4096 conv4_block23_out[0][0] __________________________________________________________________________________________________ conv5_block1_preact_relu (Activ (None, 10, 10, 1024) 0 conv5_block1_preact_bn[0][0] __________________________________________________________________________________________________ conv5_block1_1_conv (Conv2D) (None, 10, 10, 512) 524288 conv5_block1_preact_relu[0][0] __________________________________________________________________________________________________ conv5_block1_1_bn (BatchNormali (None, 10, 10, 512) 2048 conv5_block1_1_conv[0][0] __________________________________________________________________________________________________ conv5_block1_1_relu (Activation (None, 10, 10, 512) 0 conv5_block1_1_bn[0][0] __________________________________________________________________________________________________ conv5_block1_2_pad (ZeroPadding (None, 12, 12, 512) 0 conv5_block1_1_relu[0][0] __________________________________________________________________________________________________ conv5_block1_2_conv (Conv2D) (None, 10, 10, 512) 2359296 conv5_block1_2_pad[0][0] __________________________________________________________________________________________________ conv5_block1_2_bn (BatchNormali (None, 10, 10, 512) 2048 conv5_block1_2_conv[0][0] __________________________________________________________________________________________________ conv5_block1_2_relu (Activation (None, 10, 10, 512) 0 conv5_block1_2_bn[0][0] __________________________________________________________________________________________________ conv5_block1_0_conv (Conv2D) (None, 10, 10, 2048) 2099200 conv5_block1_preact_relu[0][0] __________________________________________________________________________________________________ conv5_block1_3_conv (Conv2D) (None, 10, 10, 2048) 1050624 conv5_block1_2_relu[0][0] __________________________________________________________________________________________________ conv5_block1_out (Add) (None, 10, 10, 2048) 0 conv5_block1_0_conv[0][0] conv5_block1_3_conv[0][0] __________________________________________________________________________________________________ conv5_block2_preact_bn (BatchNo (None, 10, 10, 2048) 8192 conv5_block1_out[0][0] __________________________________________________________________________________________________ conv5_block2_preact_relu (Activ (None, 10, 10, 2048) 0 conv5_block2_preact_bn[0][0] __________________________________________________________________________________________________ conv5_block2_1_conv (Conv2D) (None, 10, 10, 512) 1048576 conv5_block2_preact_relu[0][0] __________________________________________________________________________________________________ conv5_block2_1_bn (BatchNormali (None, 10, 10, 512) 2048 conv5_block2_1_conv[0][0] __________________________________________________________________________________________________ conv5_block2_1_relu (Activation (None, 10, 10, 512) 0 conv5_block2_1_bn[0][0] __________________________________________________________________________________________________ conv5_block2_2_pad (ZeroPadding (None, 12, 12, 512) 0 conv5_block2_1_relu[0][0] __________________________________________________________________________________________________ conv5_block2_2_conv (Conv2D) (None, 10, 10, 512) 2359296 conv5_block2_2_pad[0][0] __________________________________________________________________________________________________ conv5_block2_2_bn (BatchNormali (None, 10, 10, 512) 2048 conv5_block2_2_conv[0][0] __________________________________________________________________________________________________ conv5_block2_2_relu (Activation (None, 10, 10, 512) 0 conv5_block2_2_bn[0][0] __________________________________________________________________________________________________ conv5_block2_3_conv (Conv2D) (None, 10, 10, 2048) 1050624 conv5_block2_2_relu[0][0] __________________________________________________________________________________________________ conv5_block2_out (Add) (None, 10, 10, 2048) 0 conv5_block1_out[0][0] conv5_block2_3_conv[0][0] __________________________________________________________________________________________________ conv5_block3_preact_bn (BatchNo (None, 10, 10, 2048) 8192 conv5_block2_out[0][0] __________________________________________________________________________________________________ conv5_block3_preact_relu (Activ (None, 10, 10, 2048) 0 conv5_block3_preact_bn[0][0] __________________________________________________________________________________________________ conv5_block3_1_conv (Conv2D) (None, 10, 10, 512) 1048576 conv5_block3_preact_relu[0][0] __________________________________________________________________________________________________ conv5_block3_1_bn (BatchNormali (None, 10, 10, 512) 2048 conv5_block3_1_conv[0][0] __________________________________________________________________________________________________ conv5_block3_1_relu (Activation (None, 10, 10, 512) 0 conv5_block3_1_bn[0][0] __________________________________________________________________________________________________ conv5_block3_2_pad (ZeroPadding (None, 12, 12, 512) 0 conv5_block3_1_relu[0][0] __________________________________________________________________________________________________ conv5_block3_2_conv (Conv2D) (None, 10, 10, 512) 2359296 conv5_block3_2_pad[0][0] __________________________________________________________________________________________________ conv5_block3_2_bn (BatchNormali (None, 10, 10, 512) 2048 conv5_block3_2_conv[0][0] __________________________________________________________________________________________________ conv5_block3_2_relu (Activation (None, 10, 10, 512) 0 conv5_block3_2_bn[0][0] __________________________________________________________________________________________________ conv5_block3_3_conv (Conv2D) (None, 10, 10, 2048) 1050624 conv5_block3_2_relu[0][0] __________________________________________________________________________________________________ conv5_block3_out (Add) (None, 10, 10, 2048) 0 conv5_block2_out[0][0] conv5_block3_3_conv[0][0] __________________________________________________________________________________________________ post_bn (BatchNormalization) (None, 10, 10, 2048) 8192 conv5_block3_out[0][0] __________________________________________________________________________________________________ post_relu (Activation) (None, 10, 10, 2048) 0 post_bn[0][0] __________________________________________________________________________________________________ global_average_pooling2d (Globa (None, 2048) 0 post_relu[0][0] __________________________________________________________________________________________________ dense (Dense) (None, 256) 524544 global_average_pooling2d[0][0] __________________________________________________________________________________________________ dropout (Dropout) (None, 256) 0 dense[0][0] __________________________________________________________________________________________________ dense_1 (Dense) (None, 10) 2570 dropout[0][0] ================================================================================================== Total params: 43,153,674 Trainable params: 43,056,010 Non-trainable params: 97,664 __________________________________________________________________________________________________
In [15]:
optimizer = Adam(0.00005)
tl_model.compile(loss="categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"])
Setting up callbacks¶
- learning rate reduction
- saving best model
- early stopping if required
In [16]:
from tensorflow.keras.callbacks import ReduceLROnPlateau
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.callbacks import ModelCheckpoint
lr_reduce = ReduceLROnPlateau(monitor='val_accuracy', factor=0.5, patience=2,mode='max', min_lr=0.00001,verbose=1)
early_stop = EarlyStopping(monitor="val_loss", patience=2, verbose=1)
model_chkpt = ModelCheckpoint('model_resnet.hdf5',save_best_only=True, monitor='val_loss',verbose=1)
callback_list = [model_chkpt,lr_reduce]
Model Training¶
In [17]:
tl_model.fit(train_image_gen,
epochs=25,
validation_data = val_image_gen,
callbacks=callback_list)
#class_weight=class_wt_dict)
Epoch 1/25 298/298 [==============================] - 97s 295ms/step - loss: 1.6627 - accuracy: 0.3465 - val_loss: 1.0513 - val_accuracy: 0.5480 Epoch 00001: val_loss improved from inf to 1.05134, saving model to model_resnet.hdf5
C:\Users\heman\anaconda3\lib\site-packages\keras\utils\generic_utils.py:494: CustomMaskWarning: Custom mask layers require a config and must override get_config. When loading, the custom mask layer must be passed to the custom_objects argument. warnings.warn('Custom mask layers require a config and must override '
Epoch 2/25 298/298 [==============================] - 86s 288ms/step - loss: 1.0815 - accuracy: 0.5412 - val_loss: 0.8082 - val_accuracy: 0.6703 Epoch 00002: val_loss improved from 1.05134 to 0.80824, saving model to model_resnet.hdf5 Epoch 3/25 298/298 [==============================] - 86s 288ms/step - loss: 0.8568 - accuracy: 0.6415 - val_loss: 0.8615 - val_accuracy: 0.6271 Epoch 00003: val_loss did not improve from 0.80824 Epoch 4/25 298/298 [==============================] - 87s 290ms/step - loss: 0.7650 - accuracy: 0.6783 - val_loss: 0.5963 - val_accuracy: 0.7590 Epoch 00004: val_loss improved from 0.80824 to 0.59629, saving model to model_resnet.hdf5 Epoch 5/25 298/298 [==============================] - 87s 291ms/step - loss: 0.6745 - accuracy: 0.7344 - val_loss: 0.6667 - val_accuracy: 0.7338 Epoch 00005: val_loss did not improve from 0.59629 Epoch 6/25 298/298 [==============================] - 87s 291ms/step - loss: 0.5783 - accuracy: 0.7680 - val_loss: 0.7445 - val_accuracy: 0.7134 Epoch 00006: val_loss did not improve from 0.59629 Epoch 00006: ReduceLROnPlateau reducing learning rate to 2.499999936844688e-05. Epoch 7/25 298/298 [==============================] - 87s 291ms/step - loss: 0.4380 - accuracy: 0.8249 - val_loss: 0.6097 - val_accuracy: 0.7902 Epoch 00007: val_loss did not improve from 0.59629 Epoch 8/25 298/298 [==============================] - 87s 292ms/step - loss: 0.3464 - accuracy: 0.8673 - val_loss: 0.5234 - val_accuracy: 0.8046 Epoch 00008: val_loss improved from 0.59629 to 0.52341, saving model to model_resnet.hdf5 Epoch 9/25 298/298 [==============================] - 87s 291ms/step - loss: 0.3291 - accuracy: 0.8795 - val_loss: 0.6634 - val_accuracy: 0.7614 Epoch 00009: val_loss did not improve from 0.52341 Epoch 10/25 298/298 [==============================] - 87s 291ms/step - loss: 0.3022 - accuracy: 0.8856 - val_loss: 0.6904 - val_accuracy: 0.7578 Epoch 00010: val_loss did not improve from 0.52341 Epoch 00010: ReduceLROnPlateau reducing learning rate to 1.249999968422344e-05. Epoch 11/25 298/298 [==============================] - 87s 291ms/step - loss: 0.2194 - accuracy: 0.9189 - val_loss: 0.6069 - val_accuracy: 0.7914 Epoch 00011: val_loss did not improve from 0.52341 Epoch 12/25 298/298 [==============================] - 87s 292ms/step - loss: 0.1766 - accuracy: 0.9366 - val_loss: 0.6098 - val_accuracy: 0.7974 Epoch 00012: val_loss did not improve from 0.52341 Epoch 00012: ReduceLROnPlateau reducing learning rate to 1e-05. Epoch 13/25 298/298 [==============================] - 87s 292ms/step - loss: 0.1571 - accuracy: 0.9469 - val_loss: 0.5134 - val_accuracy: 0.8165 Epoch 00013: val_loss improved from 0.52341 to 0.51335, saving model to model_resnet.hdf5 Epoch 14/25 298/298 [==============================] - 87s 291ms/step - loss: 0.1392 - accuracy: 0.9532 - val_loss: 0.6237 - val_accuracy: 0.7974 Epoch 00014: val_loss did not improve from 0.51335 Epoch 15/25 298/298 [==============================] - 87s 291ms/step - loss: 0.1306 - accuracy: 0.9542 - val_loss: 0.5597 - val_accuracy: 0.8249 Epoch 00015: val_loss did not improve from 0.51335 Epoch 16/25 298/298 [==============================] - 87s 291ms/step - loss: 0.1174 - accuracy: 0.9605 - val_loss: 0.6247 - val_accuracy: 0.8010 Epoch 00016: val_loss did not improve from 0.51335 Epoch 17/25 298/298 [==============================] - 87s 291ms/step - loss: 0.1066 - accuracy: 0.9639 - val_loss: 0.6228 - val_accuracy: 0.8129 Epoch 00017: val_loss did not improve from 0.51335 Epoch 18/25 298/298 [==============================] - 87s 292ms/step - loss: 0.0949 - accuracy: 0.9677 - val_loss: 0.6421 - val_accuracy: 0.8034 Epoch 00018: val_loss did not improve from 0.51335 Epoch 19/25 298/298 [==============================] - 88s 293ms/step - loss: 0.0956 - accuracy: 0.9685 - val_loss: 0.5913 - val_accuracy: 0.8201 Epoch 00019: val_loss did not improve from 0.51335 Epoch 20/25 298/298 [==============================] - 88s 295ms/step - loss: 0.0840 - accuracy: 0.9721 - val_loss: 0.6264 - val_accuracy: 0.8165 Epoch 00020: val_loss did not improve from 0.51335 Epoch 21/25 298/298 [==============================] - 87s 292ms/step - loss: 0.0843 - accuracy: 0.9704 - val_loss: 0.6448 - val_accuracy: 0.8070 Epoch 00021: val_loss did not improve from 0.51335 Epoch 22/25 298/298 [==============================] - 87s 291ms/step - loss: 0.0792 - accuracy: 0.9748 - val_loss: 0.7020 - val_accuracy: 0.8022 Epoch 00022: val_loss did not improve from 0.51335 Epoch 23/25 298/298 [==============================] - 88s 293ms/step - loss: 0.0661 - accuracy: 0.9784 - val_loss: 0.7577 - val_accuracy: 0.7938 Epoch 00023: val_loss did not improve from 0.51335 Epoch 24/25 298/298 [==============================] - 87s 291ms/step - loss: 0.0724 - accuracy: 0.9767 - val_loss: 0.7434 - val_accuracy: 0.7866 Epoch 00024: val_loss did not improve from 0.51335 Epoch 25/25 298/298 [==============================] - 87s 292ms/step - loss: 0.0703 - accuracy: 0.9782 - val_loss: 0.7906 - val_accuracy: 0.7830 Epoch 00025: val_loss did not improve from 0.51335
Out[17]:
<keras.callbacks.History at 0x281169671c0>
In [27]:
tl_model.fit(train_image_gen,
epochs=15,
validation_data = val_image_gen,
callbacks=callback_list,
class_weight=class_wt_dict)
Model Evaluation¶
In [18]:
metrics = pd.DataFrame(tl_model.history.history)
metrics[["loss","val_loss"]].plot()
Out[18]:
<AxesSubplot:>
In [19]:
metrics = pd.DataFrame(tl_model.history.history)
metrics[["accuracy","val_accuracy"]].plot()
Out[19]:
<AxesSubplot:>
In [20]:
tl_model = keras.models.load_model("model_resnet.hdf5")
tl_model.evaluate(val_image_gen)
53/53 [==============================] - 12s 197ms/step - loss: 0.5436 - accuracy: 0.8189
Out[20]:
[0.5435665249824524, 0.8189448714256287]
In [21]:
predictions = tl_model.predict(val_image_gen, verbose=1)
predictions = predictions.argmax(axis=1)
val_labels = val_image_gen.classes
53/53 [==============================] - 11s 199ms/step
In [23]:
import sklearn
from sklearn.metrics import classification_report, confusion_matrix
cm = confusion_matrix(val_labels, predictions)
sns.heatmap(cm, annot=True)
plt.show()
Test Data¶
In [23]:
test_imgs = 'test_faces/'
test_df = pd.read_csv("test.csv")
test_df.head()
Out[23]:
ImageID | age | |
---|---|---|
0 | 8rti7 | 40-50 |
1 | 575pj | 30-40 |
2 | 6ma92 | 30-40 |
3 | jtu3e | 20-30 |
4 | svx4s | 10-20 |
In [24]:
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
for idx in tqdm(range(len(test_df))):
iname = test_df.iloc[idx, 0]+".jpg"
fname = test_imgs+iname
image = load_img(fname, target_size=(300, 300))
image = img_to_array(image)
image = base_preprocess(image)
image = np.expand_dims(image, axis=0)
prediction = tl_model.predict(image).argmax(axis=-1)[0]
age = list(train_image_gen.class_indices)[prediction]
test_df.iloc[idx, 1]=age
In [25]:
test_df.head()
Out[25]:
ImageID | age | |
---|---|---|
0 | 8rti7 | 90-100 |
1 | 575pj | 10-20 |
2 | 6ma92 | 10-20 |
3 | jtu3e | 30-40 |
4 | svx4s | 30-40 |
In [26]:
test_df.to_csv("submission.csv", index=False)
In [ ]:
Content
Comments
You must login before you can post a comment.