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/Convolutional Neural Networks/week4/Face Recognition/inception_blocks_v2.py
Views: 13377
import tensorflow as tf1import numpy as np2import os3from numpy import genfromtxt4from keras import backend as K5from keras.layers import Conv2D, ZeroPadding2D, Activation, Input, concatenate6from keras.models import Model7from keras.layers.normalization import BatchNormalization8from keras.layers.pooling import MaxPooling2D, AveragePooling2D9import fr_utils10from keras.layers.core import Lambda, Flatten, Dense1112def inception_block_1a(X):13"""14Implementation of an inception block15"""1617X_3x3 = Conv2D(96, (1, 1), data_format='channels_first', name ='inception_3a_3x3_conv1')(X)18X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name = 'inception_3a_3x3_bn1')(X_3x3)19X_3x3 = Activation('relu')(X_3x3)20X_3x3 = ZeroPadding2D(padding=(1, 1), data_format='channels_first')(X_3x3)21X_3x3 = Conv2D(128, (3, 3), data_format='channels_first', name='inception_3a_3x3_conv2')(X_3x3)22X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_3x3_bn2')(X_3x3)23X_3x3 = Activation('relu')(X_3x3)2425X_5x5 = Conv2D(16, (1, 1), data_format='channels_first', name='inception_3a_5x5_conv1')(X)26X_5x5 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_5x5_bn1')(X_5x5)27X_5x5 = Activation('relu')(X_5x5)28X_5x5 = ZeroPadding2D(padding=(2, 2), data_format='channels_first')(X_5x5)29X_5x5 = Conv2D(32, (5, 5), data_format='channels_first', name='inception_3a_5x5_conv2')(X_5x5)30X_5x5 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_5x5_bn2')(X_5x5)31X_5x5 = Activation('relu')(X_5x5)3233X_pool = MaxPooling2D(pool_size=3, strides=2, data_format='channels_first')(X)34X_pool = Conv2D(32, (1, 1), data_format='channels_first', name='inception_3a_pool_conv')(X_pool)35X_pool = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_pool_bn')(X_pool)36X_pool = Activation('relu')(X_pool)37X_pool = ZeroPadding2D(padding=((3, 4), (3, 4)), data_format='channels_first')(X_pool)3839X_1x1 = Conv2D(64, (1, 1), data_format='channels_first', name='inception_3a_1x1_conv')(X)40X_1x1 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3a_1x1_bn')(X_1x1)41X_1x1 = Activation('relu')(X_1x1)4243# CONCAT44inception = concatenate([X_3x3, X_5x5, X_pool, X_1x1], axis=1)4546return inception4748def inception_block_1b(X):49X_3x3 = Conv2D(96, (1, 1), data_format='channels_first', name='inception_3b_3x3_conv1')(X)50X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_3x3_bn1')(X_3x3)51X_3x3 = Activation('relu')(X_3x3)52X_3x3 = ZeroPadding2D(padding=(1, 1), data_format='channels_first')(X_3x3)53X_3x3 = Conv2D(128, (3, 3), data_format='channels_first', name='inception_3b_3x3_conv2')(X_3x3)54X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_3x3_bn2')(X_3x3)55X_3x3 = Activation('relu')(X_3x3)5657X_5x5 = Conv2D(32, (1, 1), data_format='channels_first', name='inception_3b_5x5_conv1')(X)58X_5x5 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_5x5_bn1')(X_5x5)59X_5x5 = Activation('relu')(X_5x5)60X_5x5 = ZeroPadding2D(padding=(2, 2), data_format='channels_first')(X_5x5)61X_5x5 = Conv2D(64, (5, 5), data_format='channels_first', name='inception_3b_5x5_conv2')(X_5x5)62X_5x5 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_5x5_bn2')(X_5x5)63X_5x5 = Activation('relu')(X_5x5)6465X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)66X_pool = Conv2D(64, (1, 1), data_format='channels_first', name='inception_3b_pool_conv')(X_pool)67X_pool = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_pool_bn')(X_pool)68X_pool = Activation('relu')(X_pool)69X_pool = ZeroPadding2D(padding=(4, 4), data_format='channels_first')(X_pool)7071X_1x1 = Conv2D(64, (1, 1), data_format='channels_first', name='inception_3b_1x1_conv')(X)72X_1x1 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_3b_1x1_bn')(X_1x1)73X_1x1 = Activation('relu')(X_1x1)7475inception = concatenate([X_3x3, X_5x5, X_pool, X_1x1], axis=1)7677return inception7879def inception_block_1c(X):80X_3x3 = fr_utils.conv2d_bn(X,81layer='inception_3c_3x3',82cv1_out=128,83cv1_filter=(1, 1),84cv2_out=256,85cv2_filter=(3, 3),86cv2_strides=(2, 2),87padding=(1, 1))8889X_5x5 = fr_utils.conv2d_bn(X,90layer='inception_3c_5x5',91cv1_out=32,92cv1_filter=(1, 1),93cv2_out=64,94cv2_filter=(5, 5),95cv2_strides=(2, 2),96padding=(2, 2))9798X_pool = MaxPooling2D(pool_size=3, strides=2, data_format='channels_first')(X)99X_pool = ZeroPadding2D(padding=((0, 1), (0, 1)), data_format='channels_first')(X_pool)100101inception = concatenate([X_3x3, X_5x5, X_pool], axis=1)102103return inception104105def inception_block_2a(X):106X_3x3 = fr_utils.conv2d_bn(X,107layer='inception_4a_3x3',108cv1_out=96,109cv1_filter=(1, 1),110cv2_out=192,111cv2_filter=(3, 3),112cv2_strides=(1, 1),113padding=(1, 1))114X_5x5 = fr_utils.conv2d_bn(X,115layer='inception_4a_5x5',116cv1_out=32,117cv1_filter=(1, 1),118cv2_out=64,119cv2_filter=(5, 5),120cv2_strides=(1, 1),121padding=(2, 2))122123X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)124X_pool = fr_utils.conv2d_bn(X_pool,125layer='inception_4a_pool',126cv1_out=128,127cv1_filter=(1, 1),128padding=(2, 2))129X_1x1 = fr_utils.conv2d_bn(X,130layer='inception_4a_1x1',131cv1_out=256,132cv1_filter=(1, 1))133inception = concatenate([X_3x3, X_5x5, X_pool, X_1x1], axis=1)134135return inception136137def inception_block_2b(X):138#inception4e139X_3x3 = fr_utils.conv2d_bn(X,140layer='inception_4e_3x3',141cv1_out=160,142cv1_filter=(1, 1),143cv2_out=256,144cv2_filter=(3, 3),145cv2_strides=(2, 2),146padding=(1, 1))147X_5x5 = fr_utils.conv2d_bn(X,148layer='inception_4e_5x5',149cv1_out=64,150cv1_filter=(1, 1),151cv2_out=128,152cv2_filter=(5, 5),153cv2_strides=(2, 2),154padding=(2, 2))155156X_pool = MaxPooling2D(pool_size=3, strides=2, data_format='channels_first')(X)157X_pool = ZeroPadding2D(padding=((0, 1), (0, 1)), data_format='channels_first')(X_pool)158159inception = concatenate([X_3x3, X_5x5, X_pool], axis=1)160161return inception162163def inception_block_3a(X):164X_3x3 = fr_utils.conv2d_bn(X,165layer='inception_5a_3x3',166cv1_out=96,167cv1_filter=(1, 1),168cv2_out=384,169cv2_filter=(3, 3),170cv2_strides=(1, 1),171padding=(1, 1))172X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)173X_pool = fr_utils.conv2d_bn(X_pool,174layer='inception_5a_pool',175cv1_out=96,176cv1_filter=(1, 1),177padding=(1, 1))178X_1x1 = fr_utils.conv2d_bn(X,179layer='inception_5a_1x1',180cv1_out=256,181cv1_filter=(1, 1))182183inception = concatenate([X_3x3, X_pool, X_1x1], axis=1)184185return inception186187def inception_block_3b(X):188X_3x3 = fr_utils.conv2d_bn(X,189layer='inception_5b_3x3',190cv1_out=96,191cv1_filter=(1, 1),192cv2_out=384,193cv2_filter=(3, 3),194cv2_strides=(1, 1),195padding=(1, 1))196X_pool = MaxPooling2D(pool_size=3, strides=2, data_format='channels_first')(X)197X_pool = fr_utils.conv2d_bn(X_pool,198layer='inception_5b_pool',199cv1_out=96,200cv1_filter=(1, 1))201X_pool = ZeroPadding2D(padding=(1, 1), data_format='channels_first')(X_pool)202203X_1x1 = fr_utils.conv2d_bn(X,204layer='inception_5b_1x1',205cv1_out=256,206cv1_filter=(1, 1))207inception = concatenate([X_3x3, X_pool, X_1x1], axis=1)208209return inception210211def faceRecoModel(input_shape):212"""213Implementation of the Inception model used for FaceNet214215Arguments:216input_shape -- shape of the images of the dataset217218Returns:219model -- a Model() instance in Keras220"""221222# Define the input as a tensor with shape input_shape223X_input = Input(input_shape)224225# Zero-Padding226X = ZeroPadding2D((3, 3))(X_input)227228# First Block229X = Conv2D(64, (7, 7), strides = (2, 2), name = 'conv1')(X)230X = BatchNormalization(axis = 1, name = 'bn1')(X)231X = Activation('relu')(X)232233# Zero-Padding + MAXPOOL234X = ZeroPadding2D((1, 1))(X)235X = MaxPooling2D((3, 3), strides = 2)(X)236237# Second Block238X = Conv2D(64, (1, 1), strides = (1, 1), name = 'conv2')(X)239X = BatchNormalization(axis = 1, epsilon=0.00001, name = 'bn2')(X)240X = Activation('relu')(X)241242# Zero-Padding + MAXPOOL243X = ZeroPadding2D((1, 1))(X)244245# Second Block246X = Conv2D(192, (3, 3), strides = (1, 1), name = 'conv3')(X)247X = BatchNormalization(axis = 1, epsilon=0.00001, name = 'bn3')(X)248X = Activation('relu')(X)249250# Zero-Padding + MAXPOOL251X = ZeroPadding2D((1, 1))(X)252X = MaxPooling2D(pool_size = 3, strides = 2)(X)253254# Inception 1: a/b/c255X = inception_block_1a(X)256X = inception_block_1b(X)257X = inception_block_1c(X)258259# Inception 2: a/b260X = inception_block_2a(X)261X = inception_block_2b(X)262263# Inception 3: a/b264X = inception_block_3a(X)265X = inception_block_3b(X)266267# Top layer268X = AveragePooling2D(pool_size=(3, 3), strides=(1, 1), data_format='channels_first')(X)269X = Flatten()(X)270X = Dense(128, name='dense_layer')(X)271272# L2 normalization273X = Lambda(lambda x: K.l2_normalize(x,axis=1))(X)274275# Create model instance276model = Model(inputs = X_input, outputs = X, name='FaceRecoModel')277278return model279280