Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

Importing the Necessary Libraries

In [1]:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import time
import os
from PIL import Image
from tensorflow.keras.preprocessing.image import load_img, img_to_array

Loading Content and Style Image


In [2]:
content_img = Image.open('1.jpeg').convert('RGB')
style_img = Image.open('2.jpeg').convert('RGB')

Image Preprocessing
In [3]:
def preprocess_content_img(image):
image = img_to_array(image)
height, width, _ = image.shape
aspect_ratio = width / height
new_width = int(aspect_ratio * 480)
image = tf.image.resize(image, (480, new_width))
image = image/255.
return image

In [4]:
def preprocess_sytle_img(image):
image = img_to_array(image)
image = image/255.
return image

In [5]:
content_img = preprocess_content_img(content_img)
style_img = preprocess_sytle_img(style_img)

Visualize Content and Style Image


In [6]:
def plot_images(images, titles=None):
num_images = len(images)
fig, axes = plt.subplots(1, num_images, figsize=(25, 25))
for i, (image, ax) in enumerate(zip(images, axes)):
if len(image.shape) > 3:
image = tf.squeeze(image, axis=0)
ax.imshow(image)
if titles is not None and i < len(titles):
ax.set_title(titles[i])
plt.show()
plot_images([content_img, style_img], ['Content Image', 'Style Image'])
Convert Tensor to Image
In [7]:
def tensor_to_image(tensor):
tensor = tensor.numpy()
tensor = (tensor * 255).astype(np.uint8)
if np.ndim(tensor) > 3:
assert tensor.shape[0] == 1
tensor = tensor[0]
return Image.fromarray(tensor)

Define the Model


In [8]:

base_model_effnet = tf.keras.applications.EfficientNetB0(include_top=False, weights='ima


genet')
base_model_effnet.summary()

Model: "efficientnetb0"

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━
━━━━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃ Connected
to ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━
━━━━━━━━━━━━━━━━━━┩
│ input_layer (InputLayer) │ (None, None, None, 3) │ 0 │ -

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ rescaling (Rescaling) │ (None, None, None, 3) │ 0 │ input_lay
er[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ normalization (Normalization) │ (None, None, None, 3) │ 7 │ rescaling
[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ rescaling_1 (Rescaling) │ (None, None, None, 3) │ 0 │ normaliza
tion[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ stem_conv_pad (ZeroPadding2D) │ (None, None, None, 3) │ 0 │ rescaling
_1[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ stem_conv (Conv2D) │ (None, None, None, 32) │ 864 │ stem_conv
_pad[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ stem_bn (BatchNormalization) │ (None, None, None, 32) │ 128 │ stem_conv
[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ stem_activation (Activation) │ (None, None, None, 32) │ 0 │ stem_bn[0
][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_dwconv │ (None, None, None, 32) │ 288 │ stem_acti
vation[0][0] │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_bn │ (None, None, None, 32) │ 128 │ block1a_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_activation │ (None, None, None, 32) │ 0 │ block1a_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_se_squeeze │ (None, 32) │ 0 │ block1a_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_se_reshape (Reshape) │ (None, 1, 1, 32) │ 0 │ block1a_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_se_reduce (Conv2D) │ (None, 1, 1, 8) │ 264 │ block1a_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_se_expand (Conv2D) │ (None, 1, 1, 32) │ 288 │ block1a_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_se_excite (Multiply) │ (None, None, None, 32) │ 0 │ block1a_a
ctivation[0][0], │
│ │ │ │ block1a_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_project_conv (Conv2D) │ (None, None, None, 16) │ 512 │ block1a_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block1a_project_bn │ (None, None, None, 16) │ 64 │ block1a_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_expand_conv (Conv2D) │ (None, None, None, 96) │ 1,536 │ block1a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_expand_bn │ (None, None, None, 96) │ 384 │ block2a_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_expand_activation │ (None, None, None, 96) │ 0 │ block2a_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_dwconv_pad │ (None, None, None, 96) │ 0 │ block2a_e
xpand_activation… │
│ (ZeroPadding2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_dwconv │ (None, None, None, 96) │ 864 │ block2a_d
wconv_pad[0][0] │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_bn │ (None, None, None, 96) │ 384 │ block2a_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_activation │ (None, None, None, 96) │ 0 │ block2a_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_se_squeeze │ (None, 96) │ 0 │ block2a_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_se_reshape (Reshape) │ (None, 1, 1, 96) │ 0 │ block2a_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_se_reduce (Conv2D) │ (None, 1, 1, 4) │ 388 │ block2a_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_se_expand (Conv2D) │ (None, 1, 1, 96) │ 480 │ block2a_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_se_excite (Multiply) │ (None, None, None, 96) │ 0 │ block2a_a
ctivation[0][0], │
│ │ │ │ block2a_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_project_conv (Conv2D) │ (None, None, None, 24) │ 2,304 │ block2a_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2a_project_bn │ (None, None, None, 24) │ 96 │ block2a_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_expand_conv (Conv2D) │ (None, None, None, 144) │ 3,456 │ block2a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_expand_bn │ (None, None, None, 144) │ 576 │ block2b_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_expand_activation │ (None, None, None, 144) │ 0 │ block2b_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_dwconv │ (None, None, None, 144) │ 1,296 │ block2b_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_bn │ (None, None, None, 144) │ 576 │ block2b_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_activation │ (None, None, None, 144) │ 0 │ block2b_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_se_squeeze │ (None, 144) │ 0 │ block2b_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_se_reshape (Reshape) │ (None, 1, 1, 144) │ 0 │ block2b_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_se_reduce (Conv2D) │ (None, 1, 1, 6) │ 870 │ block2b_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_se_expand (Conv2D) │ (None, 1, 1, 144) │ 1,008 │ block2b_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
──────────────────┤
│ block2b_se_excite (Multiply) │ (None, None, None, 144) │ 0 │ block2b_a
ctivation[0][0], │
│ │ │ │ block2b_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_project_conv (Conv2D) │ (None, None, None, 24) │ 3,456 │ block2b_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_project_bn │ (None, None, None, 24) │ 96 │ block2b_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_drop (Dropout) │ (None, None, None, 24) │ 0 │ block2b_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block2b_add (Add) │ (None, None, None, 24) │ 0 │ block2b_d
rop[0][0], │
│ │ │ │ block2a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_expand_conv (Conv2D) │ (None, None, None, 144) │ 3,456 │ block2b_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_expand_bn │ (None, None, None, 144) │ 576 │ block3a_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_expand_activation │ (None, None, None, 144) │ 0 │ block3a_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_dwconv_pad │ (None, None, None, 144) │ 0 │ block3a_e
xpand_activation… │
│ (ZeroPadding2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_dwconv │ (None, None, None, 144) │ 3,600 │ block3a_d
wconv_pad[0][0] │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_bn │ (None, None, None, 144) │ 576 │ block3a_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_activation │ (None, None, None, 144) │ 0 │ block3a_b
n[0][0] │
│ (Activation) │ │ │


├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_se_squeeze │ (None, 144) │ 0 │ block3a_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_se_reshape (Reshape) │ (None, 1, 1, 144) │ 0 │ block3a_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_se_reduce (Conv2D) │ (None, 1, 1, 6) │ 870 │ block3a_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_se_expand (Conv2D) │ (None, 1, 1, 144) │ 1,008 │ block3a_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_se_excite (Multiply) │ (None, None, None, 144) │ 0 │ block3a_a
ctivation[0][0], │
│ │ │ │ block3a_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_project_conv (Conv2D) │ (None, None, None, 40) │ 5,760 │ block3a_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3a_project_bn │ (None, None, None, 40) │ 160 │ block3a_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_expand_conv (Conv2D) │ (None, None, None, 240) │ 9,600 │ block3a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_expand_bn │ (None, None, None, 240) │ 960 │ block3b_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_expand_activation │ (None, None, None, 240) │ 0 │ block3b_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_dwconv │ (None, None, None, 240) │ 6,000 │ block3b_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_bn │ (None, None, None, 240) │ 960 │ block3b_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_activation │ (None, None, None, 240) │ 0 │ block3b_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_se_squeeze │ (None, 240) │ 0 │ block3b_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_se_reshape (Reshape) │ (None, 1, 1, 240) │ 0 │ block3b_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_se_reduce (Conv2D) │ (None, 1, 1, 10) │ 2,410 │ block3b_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_se_expand (Conv2D) │ (None, 1, 1, 240) │ 2,640 │ block3b_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_se_excite (Multiply) │ (None, None, None, 240) │ 0 │ block3b_a
ctivation[0][0], │
│ │ │ │ block3b_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_project_conv (Conv2D) │ (None, None, None, 40) │ 9,600 │ block3b_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_project_bn │ (None, None, None, 40) │ 160 │ block3b_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_drop (Dropout) │ (None, None, None, 40) │ 0 │ block3b_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block3b_add (Add) │ (None, None, None, 40) │ 0 │ block3b_d
rop[0][0], │
│ │ │ │ block3a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_expand_conv (Conv2D) │ (None, None, None, 240) │ 9,600 │ block3b_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_expand_bn │ (None, None, None, 240) │ 960 │ block4a_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_expand_activation │ (None, None, None, 240) │ 0 │ block4a_e
xpand_bn[0][0] │
│ (Activation) │ │ │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_dwconv_pad │ (None, None, None, 240) │ 0 │ block4a_e
xpand_activation… │
│ (ZeroPadding2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_dwconv │ (None, None, None, 240) │ 2,160 │ block4a_d
wconv_pad[0][0] │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_bn │ (None, None, None, 240) │ 960 │ block4a_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_activation │ (None, None, None, 240) │ 0 │ block4a_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_se_squeeze │ (None, 240) │ 0 │ block4a_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_se_reshape (Reshape) │ (None, 1, 1, 240) │ 0 │ block4a_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_se_reduce (Conv2D) │ (None, 1, 1, 10) │ 2,410 │ block4a_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_se_expand (Conv2D) │ (None, 1, 1, 240) │ 2,640 │ block4a_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_se_excite (Multiply) │ (None, None, None, 240) │ 0 │ block4a_a
ctivation[0][0], │
│ │ │ │ block4a_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_project_conv (Conv2D) │ (None, None, None, 80) │ 19,200 │ block4a_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4a_project_bn │ (None, None, None, 80) │ 320 │ block4a_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_expand_conv (Conv2D) │ (None, None, None, 480) │ 38,400 │ block4a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_expand_bn │ (None, None, None, 480) │ 1,920 │ block4b_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_expand_activation │ (None, None, None, 480) │ 0 │ block4b_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_dwconv │ (None, None, None, 480) │ 4,320 │ block4b_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_bn │ (None, None, None, 480) │ 1,920 │ block4b_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_activation │ (None, None, None, 480) │ 0 │ block4b_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_se_squeeze │ (None, 480) │ 0 │ block4b_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_se_reshape (Reshape) │ (None, 1, 1, 480) │ 0 │ block4b_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_se_reduce (Conv2D) │ (None, 1, 1, 20) │ 9,620 │ block4b_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_se_expand (Conv2D) │ (None, 1, 1, 480) │ 10,080 │ block4b_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_se_excite (Multiply) │ (None, None, None, 480) │ 0 │ block4b_a
ctivation[0][0], │
│ │ │ │ block4b_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_project_conv (Conv2D) │ (None, None, None, 80) │ 38,400 │ block4b_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_project_bn │ (None, None, None, 80) │ 320 │ block4b_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │


├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_drop (Dropout) │ (None, None, None, 80) │ 0 │ block4b_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4b_add (Add) │ (None, None, None, 80) │ 0 │ block4b_d
rop[0][0], │
│ │ │ │ block4a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_expand_conv (Conv2D) │ (None, None, None, 480) │ 38,400 │ block4b_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_expand_bn │ (None, None, None, 480) │ 1,920 │ block4c_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_expand_activation │ (None, None, None, 480) │ 0 │ block4c_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_dwconv │ (None, None, None, 480) │ 4,320 │ block4c_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_bn │ (None, None, None, 480) │ 1,920 │ block4c_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_activation │ (None, None, None, 480) │ 0 │ block4c_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_se_squeeze │ (None, 480) │ 0 │ block4c_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_se_reshape (Reshape) │ (None, 1, 1, 480) │ 0 │ block4c_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_se_reduce (Conv2D) │ (None, 1, 1, 20) │ 9,620 │ block4c_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_se_expand (Conv2D) │ (None, 1, 1, 480) │ 10,080 │ block4c_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_se_excite (Multiply) │ (None, None, None, 480) │ 0 │ block4c_a
ctivation[0][0], │
│ │ │ │ block4c_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_project_conv (Conv2D) │ (None, None, None, 80) │ 38,400 │ block4c_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_project_bn │ (None, None, None, 80) │ 320 │ block4c_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_drop (Dropout) │ (None, None, None, 80) │ 0 │ block4c_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block4c_add (Add) │ (None, None, None, 80) │ 0 │ block4c_d
rop[0][0], │
│ │ │ │ block4b_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_expand_conv (Conv2D) │ (None, None, None, 480) │ 38,400 │ block4c_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_expand_bn │ (None, None, None, 480) │ 1,920 │ block5a_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_expand_activation │ (None, None, None, 480) │ 0 │ block5a_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_dwconv │ (None, None, None, 480) │ 12,000 │ block5a_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_bn │ (None, None, None, 480) │ 1,920 │ block5a_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_activation │ (None, None, None, 480) │ 0 │ block5a_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_se_squeeze │ (None, 480) │ 0 │ block5a_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_se_reshape (Reshape) │ (None, 1, 1, 480) │ 0 │ block5a_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_se_reduce (Conv2D) │ (None, 1, 1, 20) │ 9,620 │ block5a_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_se_expand (Conv2D) │ (None, 1, 1, 480) │ 10,080 │ block5a_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_se_excite (Multiply) │ (None, None, None, 480) │ 0 │ block5a_a
ctivation[0][0], │
│ │ │ │ block5a_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_project_conv (Conv2D) │ (None, None, None, 112) │ 53,760 │ block5a_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5a_project_bn │ (None, None, None, 112) │ 448 │ block5a_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_expand_conv (Conv2D) │ (None, None, None, 672) │ 75,264 │ block5a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_expand_bn │ (None, None, None, 672) │ 2,688 │ block5b_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_expand_activation │ (None, None, None, 672) │ 0 │ block5b_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_dwconv │ (None, None, None, 672) │ 16,800 │ block5b_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_bn │ (None, None, None, 672) │ 2,688 │ block5b_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_activation │ (None, None, None, 672) │ 0 │ block5b_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_se_squeeze │ (None, 672) │ 0 │ block5b_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_se_reshape (Reshape) │ (None, 1, 1, 672) │ 0 │ block5b_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_se_reduce (Conv2D) │ (None, 1, 1, 28) │ 18,844 │ block5b_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_se_expand (Conv2D) │ (None, 1, 1, 672) │ 19,488 │ block5b_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_se_excite (Multiply) │ (None, None, None, 672) │ 0 │ block5b_a
ctivation[0][0], │
│ │ │ │ block5b_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_project_conv (Conv2D) │ (None, None, None, 112) │ 75,264 │ block5b_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_project_bn │ (None, None, None, 112) │ 448 │ block5b_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_drop (Dropout) │ (None, None, None, 112) │ 0 │ block5b_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5b_add (Add) │ (None, None, None, 112) │ 0 │ block5b_d
rop[0][0], │
│ │ │ │ block5a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_expand_conv (Conv2D) │ (None, None, None, 672) │ 75,264 │ block5b_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_expand_bn │ (None, None, None, 672) │ 2,688 │ block5c_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_expand_activation │ (None, None, None, 672) │ 0 │ block5c_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_dwconv │ (None, None, None, 672) │ 16,800 │ block5c_e
xpand_activation… │
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_bn │ (None, None, None, 672) │ 2,688 │ block5c_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_activation │ (None, None, None, 672) │ 0 │ block5c_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_se_squeeze │ (None, 672) │ 0 │ block5c_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_se_reshape (Reshape) │ (None, 1, 1, 672) │ 0 │ block5c_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_se_reduce (Conv2D) │ (None, 1, 1, 28) │ 18,844 │ block5c_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_se_expand (Conv2D) │ (None, 1, 1, 672) │ 19,488 │ block5c_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_se_excite (Multiply) │ (None, None, None, 672) │ 0 │ block5c_a
ctivation[0][0], │
│ │ │ │ block5c_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_project_conv (Conv2D) │ (None, None, None, 112) │ 75,264 │ block5c_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_project_bn │ (None, None, None, 112) │ 448 │ block5c_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_drop (Dropout) │ (None, None, None, 112) │ 0 │ block5c_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block5c_add (Add) │ (None, None, None, 112) │ 0 │ block5c_d
rop[0][0], │
│ │ │ │ block5b_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_expand_conv (Conv2D) │ (None, None, None, 672) │ 75,264 │ block5c_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_expand_bn │ (None, None, None, 672) │ 2,688 │ block6a_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_expand_activation │ (None, None, None, 672) │ 0 │ block6a_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_dwconv_pad │ (None, None, None, 672) │ 0 │ block6a_e
xpand_activation… │
│ (ZeroPadding2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_dwconv │ (None, None, None, 672) │ 16,800 │ block6a_d
wconv_pad[0][0] │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_bn │ (None, None, None, 672) │ 2,688 │ block6a_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_activation │ (None, None, None, 672) │ 0 │ block6a_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_se_squeeze │ (None, 672) │ 0 │ block6a_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_se_reshape (Reshape) │ (None, 1, 1, 672) │ 0 │ block6a_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_se_reduce (Conv2D) │ (None, 1, 1, 28) │ 18,844 │ block6a_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_se_expand (Conv2D) │ (None, 1, 1, 672) │ 19,488 │ block6a_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_se_excite (Multiply) │ (None, None, None, 672) │ 0 │ block6a_a
ctivation[0][0], │
│ │ │ │ block6a_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_project_conv (Conv2D) │ (None, None, None, 192) │ 129,024 │ block6a_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6a_project_bn │ (None, None, None, 192) │ 768 │ block6a_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_expand_conv (Conv2D) │ (None, None, None, 1152) │ 221,184 │ block6a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_expand_bn │ (None, None, None, 1152) │ 4,608 │ block6b_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_expand_activation │ (None, None, None, 1152) │ 0 │ block6b_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_dwconv │ (None, None, None, 1152) │ 28,800 │ block6b_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_bn │ (None, None, None, 1152) │ 4,608 │ block6b_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_activation │ (None, None, None, 1152) │ 0 │ block6b_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_se_squeeze │ (None, 1152) │ 0 │ block6b_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_se_reshape (Reshape) │ (None, 1, 1, 1152) │ 0 │ block6b_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_se_reduce (Conv2D) │ (None, 1, 1, 48) │ 55,344 │ block6b_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_se_expand (Conv2D) │ (None, 1, 1, 1152) │ 56,448 │ block6b_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_se_excite (Multiply) │ (None, None, None, 1152) │ 0 │ block6b_a
ctivation[0][0], │
│ │ │ │ block6b_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_project_conv (Conv2D) │ (None, None, None, 192) │ 221,184 │ block6b_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_project_bn │ (None, None, None, 192) │ 768 │ block6b_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_drop (Dropout) │ (None, None, None, 192) │ 0 │ block6b_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6b_add (Add) │ (None, None, None, 192) │ 0 │ block6b_d
rop[0][0], │
│ │ │ │ block6a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_expand_conv (Conv2D) │ (None, None, None, 1152) │ 221,184 │ block6b_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_expand_bn │ (None, None, None, 1152) │ 4,608 │ block6c_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_expand_activation │ (None, None, None, 1152) │ 0 │ block6c_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_dwconv │ (None, None, None, 1152) │ 28,800 │ block6c_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_bn │ (None, None, None, 1152) │ 4,608 │ block6c_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_activation │ (None, None, None, 1152) │ 0 │ block6c_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_se_squeeze │ (None, 1152) │ 0 │ block6c_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_se_reshape (Reshape) │ (None, 1, 1, 1152) │ 0 │ block6c_s
e_squeeze[0][0] │
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_se_reduce (Conv2D) │ (None, 1, 1, 48) │ 55,344 │ block6c_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_se_expand (Conv2D) │ (None, 1, 1, 1152) │ 56,448 │ block6c_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_se_excite (Multiply) │ (None, None, None, 1152) │ 0 │ block6c_a
ctivation[0][0], │
│ │ │ │ block6c_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_project_conv (Conv2D) │ (None, None, None, 192) │ 221,184 │ block6c_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_project_bn │ (None, None, None, 192) │ 768 │ block6c_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_drop (Dropout) │ (None, None, None, 192) │ 0 │ block6c_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6c_add (Add) │ (None, None, None, 192) │ 0 │ block6c_d
rop[0][0], │
│ │ │ │ block6b_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_expand_conv (Conv2D) │ (None, None, None, 1152) │ 221,184 │ block6c_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_expand_bn │ (None, None, None, 1152) │ 4,608 │ block6d_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_expand_activation │ (None, None, None, 1152) │ 0 │ block6d_e
xpand_bn[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_dwconv │ (None, None, None, 1152) │ 28,800 │ block6d_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_bn │ (None, None, None, 1152) │ 4,608 │ block6d_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_activation │ (None, None, None, 1152) │ 0 │ block6d_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_se_squeeze │ (None, 1152) │ 0 │ block6d_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_se_reshape (Reshape) │ (None, 1, 1, 1152) │ 0 │ block6d_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_se_reduce (Conv2D) │ (None, 1, 1, 48) │ 55,344 │ block6d_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_se_expand (Conv2D) │ (None, 1, 1, 1152) │ 56,448 │ block6d_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_se_excite (Multiply) │ (None, None, None, 1152) │ 0 │ block6d_a
ctivation[0][0], │
│ │ │ │ block6d_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_project_conv (Conv2D) │ (None, None, None, 192) │ 221,184 │ block6d_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_project_bn │ (None, None, None, 192) │ 768 │ block6d_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_drop (Dropout) │ (None, None, None, 192) │ 0 │ block6d_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block6d_add (Add) │ (None, None, None, 192) │ 0 │ block6d_d
rop[0][0], │
│ │ │ │ block6c_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_expand_conv (Conv2D) │ (None, None, None, 1152) │ 221,184 │ block6d_a
dd[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_expand_bn │ (None, None, None, 1152) │ 4,608 │ block7a_e
xpand_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_expand_activation │ (None, None, None, 1152) │ 0 │ block7a_e
xpand_bn[0][0] │
│ (Activation) │ │ │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_dwconv │ (None, None, None, 1152) │ 10,368 │ block7a_e
xpand_activation… │
│ (DepthwiseConv2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_bn │ (None, None, None, 1152) │ 4,608 │ block7a_d
wconv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_activation │ (None, None, None, 1152) │ 0 │ block7a_b
n[0][0] │
│ (Activation) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_se_squeeze │ (None, 1152) │ 0 │ block7a_a
ctivation[0][0] │
│ (GlobalAveragePooling2D) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_se_reshape (Reshape) │ (None, 1, 1, 1152) │ 0 │ block7a_s
e_squeeze[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_se_reduce (Conv2D) │ (None, 1, 1, 48) │ 55,344 │ block7a_s
e_reshape[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_se_expand (Conv2D) │ (None, 1, 1, 1152) │ 56,448 │ block7a_s
e_reduce[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_se_excite (Multiply) │ (None, None, None, 1152) │ 0 │ block7a_a
ctivation[0][0], │
│ │ │ │ block7a_s
e_expand[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_project_conv (Conv2D) │ (None, None, None, 320) │ 368,640 │ block7a_s
e_excite[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ block7a_project_bn │ (None, None, None, 320) │ 1,280 │ block7a_p
roject_conv[0][0] │
│ (BatchNormalization) │ │ │

├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ top_conv (Conv2D) │ (None, None, None, 1280) │ 409,600 │ block7a_p
roject_bn[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ top_bn (BatchNormalization) │ (None, None, None, 1280) │ 5,120 │ top_conv[
0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼──────────
──────────────────┤
│ top_activation (Activation) │ (None, None, None, 1280) │ 0 │ top_bn[0]
│ top_activation (Activation) │ (None, None, None, 1280) │ 0 │ top_bn[0]
[0] │
└───────────────────────────────┴───────────────────────────┴─────────────────┴──────────
──────────────────┘

Total params: 4,049,571 (15.45 MB)

Trainable params: 4,007,548 (15.29 MB)

Non-trainable params: 42,023 (164.16 KB)

In [9]:

style_layer_names = ['block1a_activation',
'block2a_activation',
'block2b_activation',
'block3a_activation',
'block3b_activation',
'block4a_activation',
'block4b_activation',
]
num_style_layers = len(style_layer_names)

content_layer_name = ['block5a_activation']

In [10]:
def get_model(base_model, style_layer_names, content_layer_names):
outputs = []
for name in style_layer_names:
outputs.append(base_model.get_layer(name).output)
for name in content_layer_names:
outputs.append(base_model.get_layer(name).output)
model = tf.keras.models.Model(inputs=base_model.input, outputs=outputs)
model.trainable = False
return model
model = get_model(base_model_effnet, style_layer_names, content_layer_name)

In [11]:
optimizer = tf.keras.optimizers.Adam(learning_rate=0.02)

Computing the Gram Matrix


In [12]:

def gram_matrix(input_tensor):
channels = int(input_tensor.shape[-1])
a = tf.reshape(input_tensor, [-1, channels])
gram = tf.matmul(a, a, transpose_a=True)
return gram / tf.cast(tf.shape(input_tensor)[0]*tf.shape(input_tensor)[1]*tf.shape(i
nput_tensor)[2], tf.float32)

Extracting Image Style and Content


In [13]:
def extract_style_content(img_tensor, model):
preprocessed_img = tf.keras.applications.efficientnet.preprocess_input(img_tensor*25
5.)
features = model(preprocessed_img)
style_features = [gram_matrix(feature) for feature in features[:len(style_layer_name
s)]]
content_features = features[-1]
return style_features, content_features
Loss Function
In [14]:
def c_loss(style_outputs, content_output, target_style_outputs, target_content_output):
style_weight = 10 #@param {type:"slider", min:0, max:10, step:1}
content_weight = 0.2 #@param {type:"slider", min:-1, max:1, step:0.01}
style_losses = []
for i, output in enumerate(style_outputs):
target_output = target_style_outputs[i]
style_losses.append(tf.reduce_mean(tf.square(output - target_output)))
style_loss = tf.reduce_mean(style_losses)
content_loss = tf.reduce_mean(tf.square(content_output - target_content_output))
total_loss = style_weight*style_loss + content_weight*content_loss
return total_loss

Computing Target Content and Style Outputs


In [15]:
content_img_tensor = tf.expand_dims(tf.constant(content_img), axis=0)
_, target_content_output = extract_style_content(content_img_tensor, model)

style_img_tensor = tf.expand_dims(tf.constant(style_img), axis=0)


target_style_outputs, _ = extract_style_content(style_img_tensor, model)

Function for Single Step Through the Training Loop


In [16]:
@tf.function()
def train_step(img, model, optimizer, target_style_outputs, target_content_output):
with tf.GradientTape() as tape:
style_outputs, content_output = extract_style_content(img, model)
loss = c_loss(style_outputs, content_output, target_style_outputs, target_conten
t_output)

grads = tape.gradient(loss, img)


optimizer.apply_gradients([(grads, img)])
img.assign(tf.clip_by_value(img, 0.0, 1.0))

Initializing the Input Image Which will be Updated During


Training
In [17]:
image = np.clip(content_img, 0., 1.)
image = np.expand_dims(image , axis=0)
image = tf.Variable(image )
plt.figure(figsize=(10,10))
plt.imshow(image.numpy()[0])
plt.axis('off')
plt.show()
Training the Model
In [ ]:

num_epochs = 10
steps_per_epoch = 100

start = time.time()
for epoch in range(num_epochs):
print("Epoch {} /{} ".format(epoch+1, num_epochs))
for step in range(steps_per_epoch):
train_step(image, model, optimizer, target_style_outputs, target_content_output)

plt.figure(figsize=(12,10))
stylized_image = tensor_to_image(image)
plt.imshow(stylized_image)
plt.axis('off')
plt.title("Epoch {} ".format(epoch+1))
plt.show()
end = time.time()
print("Total training time: {:.1f} seconds".format(end-start))

Epoch 1/10

Visualize the Content, Style and Stylized Image


In [ ]:
def plot_images(images, titles=None):
num_images = len(images)

fig, axes = plt.subplots(1, num_images, figsize=(15, 20))

for i, (image, ax) in enumerate(zip(images, axes)):


if isinstance(image, Image.Image):
image = np.array(image)
if len(image.shape) > 3:
image = tf.squeeze(image, axis=0)
ax.imshow(image)
if titles is not None and i < len(titles):
ax.set_title(titles[i])
plt.show()

generated_img = tensor_to_image(image)
plot_images([content_img, style_img, generated_img], ['Content Image', 'Style Image', 'S
tylized Image'])
Save the Stylized Image
In [ ]:
plt.figure(figsize=(12,12))
plt.imshow(generated_img)
plt.title('Stylized Image')
plt.axis('off')
plt.show()
generated_img.save('Style-transfer-image.jpeg')

In [ ]:

You might also like