Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/master/C4 - Convolutional Neural Networks/Week 4/Face Recognition/inception_blocks_v2.py
Views: 4804
import tensorflow as tf1import numpy as np2import os3from numpy import genfromtxt4from tensorflow.keras import backend as K5from tensorflow.keras.layers import Conv2D, ZeroPadding2D, Activation, Input, concatenate6from tensorflow.keras.models import Model7from tensorflow.keras.layers import BatchNormalization8from tensorflow.keras.layers import MaxPooling2D, AveragePooling2D9import fr_utils10from tensorflow.keras.layers import Lambda, Flatten, Dense1112K.set_image_data_format('channels_first')1314def inception_block_1a(X):15"""16Implementation of an inception block17"""1819X_3x3 = Conv2D(96, (1, 1), data_format='channels_first', name ='inception_3a_3x3_conv1')(X)20X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name = 'inception_3a_3x3_bn1')(X_3x3)21X_3x3 = Activation('relu')(X_3x3)22X_3x3 = ZeroPadding2D(padding=(1, 1), data_format='channels_first')(X_3x3)23X_3x3 = Conv2D(128, (3, 3), data_format='channels_first', name='inception_3a_3x3_conv2')(X_3x3)24X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_3x3_bn2')(X_3x3)25X_3x3 = Activation('relu')(X_3x3)2627X_5x5 = Conv2D(16, (1, 1), data_format='channels_first', name='inception_3a_5x5_conv1')(X)28X_5x5 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_5x5_bn1')(X_5x5)29X_5x5 = Activation('relu')(X_5x5)30X_5x5 = ZeroPadding2D(padding=(2, 2), data_format='channels_first')(X_5x5)31X_5x5 = Conv2D(32, (5, 5), data_format='channels_first', name='inception_3a_5x5_conv2')(X_5x5)32X_5x5 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_5x5_bn2')(X_5x5)33X_5x5 = Activation('relu')(X_5x5)3435X_pool = MaxPooling2D(pool_size=3, strides=2, data_format='channels_first')(X)36X_pool = Conv2D(32, (1, 1), data_format='channels_first', name='inception_3a_pool_conv')(X_pool)37X_pool = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_pool_bn')(X_pool)38X_pool = Activation('relu')(X_pool)39X_pool = ZeroPadding2D(padding=((3, 4), (3, 4)), data_format='channels_first')(X_pool)4041X_1x1 = Conv2D(64, (1, 1), data_format='channels_first', name='inception_3a_1x1_conv')(X)42X_1x1 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_1x1_bn')(X_1x1)43X_1x1 = Activation('relu')(X_1x1)4445# CONCAT46inception = concatenate([X_3x3, X_5x5, X_pool, X_1x1], axis=1)4748return inception4950def inception_block_1b(X):51X_3x3 = Conv2D(96, (1, 1), data_format='channels_first', name='inception_3b_3x3_conv1')(X)52X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_3x3_bn1')(X_3x3)53X_3x3 = Activation('relu')(X_3x3)54X_3x3 = ZeroPadding2D(padding=(1, 1), data_format='channels_first')(X_3x3)55X_3x3 = Conv2D(128, (3, 3), data_format='channels_first', name='inception_3b_3x3_conv2')(X_3x3)56X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_3x3_bn2')(X_3x3)57X_3x3 = Activation('relu')(X_3x3)5859X_5x5 = Conv2D(32, (1, 1), data_format='channels_first', name='inception_3b_5x5_conv1')(X)60X_5x5 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_5x5_bn1')(X_5x5)61X_5x5 = Activation('relu')(X_5x5)62X_5x5 = ZeroPadding2D(padding=(2, 2), data_format='channels_first')(X_5x5)63X_5x5 = Conv2D(64, (5, 5), data_format='channels_first', name='inception_3b_5x5_conv2')(X_5x5)64X_5x5 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_5x5_bn2')(X_5x5)65X_5x5 = Activation('relu')(X_5x5)6667X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)68X_pool = Conv2D(64, (1, 1), data_format='channels_first', name='inception_3b_pool_conv')(X_pool)69X_pool = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_pool_bn')(X_pool)70X_pool = Activation('relu')(X_pool)71X_pool = ZeroPadding2D(padding=(4, 4), data_format='channels_first')(X_pool)7273X_1x1 = Conv2D(64, (1, 1), data_format='channels_first', name='inception_3b_1x1_conv')(X)74X_1x1 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_1x1_bn')(X_1x1)75X_1x1 = Activation('relu')(X_1x1)7677inception = concatenate([X_3x3, X_5x5, X_pool, X_1x1], axis=1)7879return inception8081def inception_block_1c(X):82X_3x3 = fr_utils.conv2d_bn(X,83layer='inception_3c_3x3',84cv1_out=128,85cv1_filter=(1, 1),86cv2_out=256,87cv2_filter=(3, 3),88cv2_strides=(2, 2),89padding=(1, 1))9091X_5x5 = fr_utils.conv2d_bn(X,92layer='inception_3c_5x5',93cv1_out=32,94cv1_filter=(1, 1),95cv2_out=64,96cv2_filter=(5, 5),97cv2_strides=(2, 2),98padding=(2, 2))99100X_pool = MaxPooling2D(pool_size=3, strides=2, data_format='channels_first')(X)101X_pool = ZeroPadding2D(padding=((0, 1), (0, 1)), data_format='channels_first')(X_pool)102103inception = concatenate([X_3x3, X_5x5, X_pool], axis=1)104105return inception106107def inception_block_2a(X):108X_3x3 = fr_utils.conv2d_bn(X,109layer='inception_4a_3x3',110cv1_out=96,111cv1_filter=(1, 1),112cv2_out=192,113cv2_filter=(3, 3),114cv2_strides=(1, 1),115padding=(1, 1))116X_5x5 = fr_utils.conv2d_bn(X,117layer='inception_4a_5x5',118cv1_out=32,119cv1_filter=(1, 1),120cv2_out=64,121cv2_filter=(5, 5),122cv2_strides=(1, 1),123padding=(2, 2))124125X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)126X_pool = fr_utils.conv2d_bn(X_pool,127layer='inception_4a_pool',128cv1_out=128,129cv1_filter=(1, 1),130padding=(2, 2))131X_1x1 = fr_utils.conv2d_bn(X,132layer='inception_4a_1x1',133cv1_out=256,134cv1_filter=(1, 1))135inception = concatenate([X_3x3, X_5x5, X_pool, X_1x1], axis=1)136137return inception138139def inception_block_2b(X):140#inception4e141X_3x3 = fr_utils.conv2d_bn(X,142layer='inception_4e_3x3',143cv1_out=160,144cv1_filter=(1, 1),145cv2_out=256,146cv2_filter=(3, 3),147cv2_strides=(2, 2),148padding=(1, 1))149X_5x5 = fr_utils.conv2d_bn(X,150layer='inception_4e_5x5',151cv1_out=64,152cv1_filter=(1, 1),153cv2_out=128,154cv2_filter=(5, 5),155cv2_strides=(2, 2),156padding=(2, 2))157158X_pool = MaxPooling2D(pool_size=3, strides=2, data_format='channels_first')(X)159X_pool = ZeroPadding2D(padding=((0, 1), (0, 1)), data_format='channels_first')(X_pool)160161inception = concatenate([X_3x3, X_5x5, X_pool], axis=1)162163return inception164165def inception_block_3a(X):166X_3x3 = fr_utils.conv2d_bn(X,167layer='inception_5a_3x3',168cv1_out=96,169cv1_filter=(1, 1),170cv2_out=384,171cv2_filter=(3, 3),172cv2_strides=(1, 1),173padding=(1, 1))174X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)175X_pool = fr_utils.conv2d_bn(X_pool,176layer='inception_5a_pool',177cv1_out=96,178cv1_filter=(1, 1),179padding=(1, 1))180X_1x1 = fr_utils.conv2d_bn(X,181layer='inception_5a_1x1',182cv1_out=256,183cv1_filter=(1, 1))184185inception = concatenate([X_3x3, X_pool, X_1x1], axis=1)186187return inception188189def inception_block_3b(X):190X_3x3 = fr_utils.conv2d_bn(X,191layer='inception_5b_3x3',192cv1_out=96,193cv1_filter=(1, 1),194cv2_out=384,195cv2_filter=(3, 3),196cv2_strides=(1, 1),197padding=(1, 1))198X_pool = MaxPooling2D(pool_size=3, strides=2, data_format='channels_first')(X)199X_pool = fr_utils.conv2d_bn(X_pool,200layer='inception_5b_pool',201cv1_out=96,202cv1_filter=(1, 1))203X_pool = ZeroPadding2D(padding=(1, 1), data_format='channels_first')(X_pool)204205X_1x1 = fr_utils.conv2d_bn(X,206layer='inception_5b_1x1',207cv1_out=256,208cv1_filter=(1, 1))209inception = concatenate([X_3x3, X_pool, X_1x1], axis=1)210211return inception212213def faceRecoModel(input_shape):214"""215Implementation of the Inception model used for FaceNet216217Arguments:218input_shape -- shape of the images of the dataset219220Returns:221model -- a Model() instance in Keras222"""223224# Define the input as a tensor with shape input_shape225X_input = Input(input_shape)226227# Zero-Padding228X = ZeroPadding2D((3, 3))(X_input)229230# First Block231X = Conv2D(64, (7, 7), strides = (2, 2), name = 'conv1', data_format='channels_first')(X)232X = BatchNormalization(axis = 1, name = 'bn1')(X)233X = Activation('relu')(X)234235# Zero-Padding + MAXPOOL236X = ZeroPadding2D((1, 1),data_format='channels_first' )(X)237X = MaxPooling2D((3, 3), strides = 2, data_format='channels_first')(X)238239# Second Block240X = Conv2D(64, (1, 1), strides = (1, 1), name = 'conv2', data_format='channels_first')(X)241X = BatchNormalization(axis = 1, epsilon=0.00001, name = 'bn2')(X)242X = Activation('relu')(X)243244# Zero-Padding + MAXPOOL245X = ZeroPadding2D((1, 1), data_format='channels_first')(X)246247# Second Block248X = Conv2D(192, (3, 3), strides = (1, 1), name = 'conv3', data_format='channels_first')(X)249X = BatchNormalization(axis = 1, epsilon=0.00001, name = 'bn3')(X)250X = Activation('relu')(X)251252# Zero-Padding + MAXPOOL253X = ZeroPadding2D((1, 1), data_format='channels_first')(X)254X = MaxPooling2D(pool_size = 3, strides = 2,data_format='channels_first')(X)255256# Inception 1: a/b/c257X = inception_block_1a(X)258X = inception_block_1b(X)259X = inception_block_1c(X)260261# Inception 2: a/b262X = inception_block_2a(X)263X = inception_block_2b(X)264265# Inception 3: a/b266X = inception_block_3a(X)267X = inception_block_3b(X)268269# Top layer270X = AveragePooling2D(pool_size=(3, 3), strides=(1, 1), data_format='channels_first')(X)271X = Flatten()(X)272X = Dense(128, name='dense_layer')(X)273274# L2 normalization275X = Lambda(lambda x: K.l2_normalize(x,axis=1))(X)276277# Create model instance278model = Model(inputs = X_input, outputs = X, name='FaceRecoModel')279280return model281282