SW/영상인식

영상인식 : 케라스 : CIFAR10 : TRANSFER LEARNING : 예제

얇은생각 2019. 11. 7. 07:30
반응형

기초적으로 제공되는 imageNet을 활용하여 구현을 진행하였습니다. 좋은 깃허브에 있는 코드를 참고하여 구현을 진행하였습니다. python 버전이나 상이한 부분들을 수정하여 진행하였습니다. 

 

from keras.models import load_model
import numpy as np
from tqdm import tqdm
from keras import models
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.applications.vgg16 import VGG16,preprocess_input
from keras.applications.resnet50 import ResNet50
from keras.optimizers import Adam
from keras.models import Sequential, Model
from keras.layers import Dense, Flatten, GlobalAveragePooling2D
import pandas as pd
from keras.utils import np_utils
from keras.datasets import cifar10
from matplotlib import pyplot as plt
import cv2


np.random.seed(123) 
(X_train, y_train), (X_test, y_test) = cifar10.load_data()

X_train = X_train.astype('float32')
X_test = X_test.astype('float32')

X_train /= 255
X_test /= 255

Y_train = np_utils.to_categorical(y_train, 10)
Y_test = np_utils.to_categorical(y_test, 10)

train_set_x= X_train[:500]
train_set_y= Y_train[:500]

test_set_x= X_test[:100]
test_set_y= Y_test[:100]

plt.imshow(X_test[1])
plt.show()


frozen = ResNet50 (weights="imagenet", input_shape=(32,32,3), include_top=False)
frozen.summary()

trainable = frozen.output
trainable = GlobalAveragePooling2D()(trainable)

trainable = Dense(128, activation="relu")(trainable)
trainable = Dense(32, activation="relu")(trainable)
trainable = Dense(10, activation="softmax")(trainable)

model = Model(inputs=frozen.input, outputs=trainable)
model.summary()

for layer in model.layers[:-4]:
    layer.trainable = False

for layer in model.layers:
    print(layer, layer.trainable)

learning_rate = 0.0001
opt = Adam(lr=learning_rate)
model.compile(optimizer=opt,
              loss='binary_crossentropy',
              metrics=['accuracy'])


def evaluate_this_model(model, epochs):

    np.random.seed(1)

    history = model.fit(train_set_x, train_set_y, epochs=epochs)
    results = model.evaluate(test_set_x, test_set_y)

    plt.plot(np.squeeze(history.history["loss"]))
    plt.ylabel('cost')
    plt.xlabel('iterations (per tens)')
    plt.title("Learning rate =" + str(learning_rate))
    plt.show()

    print("\n\nAccuracy on training set is {}".format(history.history["acc"][-1]))
    print("\nAccuracy on test set is {}".format(results[1]))


evaluate_this_model(model, 10)
model.save('ResNet50.h5')

 해당 결과는 다음과 같이 출력되었습니다.


 

__________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ================================================================================================== input_4 (InputLayer) (None, 32, 32, 3) 0 __________________________________________________________________________________________________ conv1_pad (ZeroPadding2D) (None, 38, 38, 3) 0 input_4[0][0] __________________________________________________________________________________________________ conv1 (Conv2D) (None, 16, 16, 64) 9472 conv1_pad[0][0] __________________________________________________________________________________________________ bn_conv1 (BatchNormalization) (None, 16, 16, 64) 256 conv1[0][0] __________________________________________________________________________________________________ activation_50 (Activation) (None, 16, 16, 64) 0 bn_conv1[0][0] __________________________________________________________________________________________________ pool1_pad (ZeroPadding2D) (None, 18, 18, 64) 0 activation_50[0][0] __________________________________________________________________________________________________ max_pooling2d_2 (MaxPooling2D) (None, 8, 8, 64) 0 pool1_pad[0][0] __________________________________________________________________________________________________ res2a_branch2a (Conv2D) (None, 8, 8, 64) 4160 max_pooling2d_2[0][0] __________________________________________________________________________________________________ bn2a_branch2a (BatchNormalizati (None, 8, 8, 64) 256 res2a_branch2a[0][0] __________________________________________________________________________________________________ activation_51 (Activation) (None, 8, 8, 64) 0 bn2a_branch2a[0][0] __________________________________________________________________________________________________ res2a_branch2b (Conv2D) (None, 8, 8, 64) 36928 activation_51[0][0] __________________________________________________________________________________________________ bn2a_branch2b (BatchNormalizati (None, 8, 8, 64) 256 res2a_branch2b[0][0] __________________________________________________________________________________________________ activation_52 (Activation) (None, 8, 8, 64) 0 bn2a_branch2b[0][0] __________________________________________________________________________________________________ res2a_branch2c (Conv2D) (None, 8, 8, 256) 16640 activation_52[0][0] __________________________________________________________________________________________________ res2a_branch1 (Conv2D) (None, 8, 8, 256) 16640 max_pooling2d_2[0][0] __________________________________________________________________________________________________ bn2a_branch2c (BatchNormalizati (None, 8, 8, 256) 1024 res2a_branch2c[0][0] __________________________________________________________________________________________________ bn2a_branch1 (BatchNormalizatio (None, 8, 8, 256) 1024 res2a_branch1[0][0] __________________________________________________________________________________________________ add_17 (Add) (None, 8, 8, 256) 0 bn2a_branch2c[0][0] bn2a_branch1[0][0] __________________________________________________________________________________________________ activation_53 (Activation) (None, 8, 8, 256) 0 add_17[0][0] __________________________________________________________________________________________________ res2b_branch2a (Conv2D) (None, 8, 8, 64) 16448 activation_53[0][0] __________________________________________________________________________________________________ bn2b_branch2a (BatchNormalizati (None, 8, 8, 64) 256 res2b_branch2a[0][0] __________________________________________________________________________________________________ activation_54 (Activation) (None, 8, 8, 64) 0 bn2b_branch2a[0][0] __________________________________________________________________________________________________ res2b_branch2b (Conv2D) (None, 8, 8, 64) 36928 activation_54[0][0] __________________________________________________________________________________________________ bn2b_branch2b (BatchNormalizati (None, 8, 8, 64) 256 res2b_branch2b[0][0] __________________________________________________________________________________________________ activation_55 (Activation) (None, 8, 8, 64) 0 bn2b_branch2b[0][0] __________________________________________________________________________________________________ res2b_branch2c (Conv2D) (None, 8, 8, 256) 16640 activation_55[0][0] __________________________________________________________________________________________________ bn2b_branch2c (BatchNormalizati (None, 8, 8, 256) 1024 res2b_branch2c[0][0] __________________________________________________________________________________________________ add_18 (Add) (None, 8, 8, 256) 0 bn2b_branch2c[0][0] activation_53[0][0] __________________________________________________________________________________________________ activation_56 (Activation) (None, 8, 8, 256) 0 add_18[0][0] __________________________________________________________________________________________________ res2c_branch2a (Conv2D) (None, 8, 8, 64) 16448 activation_56[0][0] __________________________________________________________________________________________________ bn2c_branch2a (BatchNormalizati (None, 8, 8, 64) 256 res2c_branch2a[0][0] __________________________________________________________________________________________________ activation_57 (Activation) (None, 8, 8, 64) 0 bn2c_branch2a[0][0] __________________________________________________________________________________________________ res2c_branch2b (Conv2D) (None, 8, 8, 64) 36928 activation_57[0][0] __________________________________________________________________________________________________ bn2c_branch2b (BatchNormalizati (None, 8, 8, 64) 256 res2c_branch2b[0][0] __________________________________________________________________________________________________ activation_58 (Activation) (None, 8, 8, 64) 0 bn2c_branch2b[0][0] __________________________________________________________________________________________________ res2c_branch2c (Conv2D) (None, 8, 8, 256) 16640 activation_58[0][0] __________________________________________________________________________________________________ bn2c_branch2c (BatchNormalizati (None, 8, 8, 256) 1024 res2c_branch2c[0][0] __________________________________________________________________________________________________ add_19 (Add) (None, 8, 8, 256) 0 bn2c_branch2c[0][0] activation_56[0][0] __________________________________________________________________________________________________ activation_59 (Activation) (None, 8, 8, 256) 0 add_19[0][0] __________________________________________________________________________________________________ res3a_branch2a (Conv2D) (None, 4, 4, 128) 32896 activation_59[0][0] __________________________________________________________________________________________________ bn3a_branch2a (BatchNormalizati (None, 4, 4, 128) 512 res3a_branch2a[0][0] __________________________________________________________________________________________________ activation_60 (Activation) (None, 4, 4, 128) 0 bn3a_branch2a[0][0] __________________________________________________________________________________________________ res3a_branch2b (Conv2D) (None, 4, 4, 128) 147584 activation_60[0][0] __________________________________________________________________________________________________ bn3a_branch2b (BatchNormalizati (None, 4, 4, 128) 512 res3a_branch2b[0][0] __________________________________________________________________________________________________ activation_61 (Activation) (None, 4, 4, 128) 0 bn3a_branch2b[0][0] __________________________________________________________________________________________________ res3a_branch2c (Conv2D) (None, 4, 4, 512) 66048 activation_61[0][0] __________________________________________________________________________________________________ res3a_branch1 (Conv2D) (None, 4, 4, 512) 131584 activation_59[0][0] __________________________________________________________________________________________________ bn3a_branch2c (BatchNormalizati (None, 4, 4, 512) 2048 res3a_branch2c[0][0] __________________________________________________________________________________________________ bn3a_branch1 (BatchNormalizatio (None, 4, 4, 512) 2048 res3a_branch1[0][0] __________________________________________________________________________________________________ add_20 (Add) (None, 4, 4, 512) 0 bn3a_branch2c[0][0] bn3a_branch1[0][0] __________________________________________________________________________________________________ activation_62 (Activation) (None, 4, 4, 512) 0 add_20[0][0] __________________________________________________________________________________________________ res3b_branch2a (Conv2D) (None, 4, 4, 128) 65664 activation_62[0][0] __________________________________________________________________________________________________ bn3b_branch2a (BatchNormalizati (None, 4, 4, 128) 512 res3b_branch2a[0][0] __________________________________________________________________________________________________ activation_63 (Activation) (None, 4, 4, 128) 0 bn3b_branch2a[0][0] __________________________________________________________________________________________________ res3b_branch2b (Conv2D) (None, 4, 4, 128) 147584 activation_63[0][0] __________________________________________________________________________________________________ bn3b_branch2b (BatchNormalizati (None, 4, 4, 128) 512 res3b_branch2b[0][0] __________________________________________________________________________________________________ activation_64 (Activation) (None, 4, 4, 128) 0 bn3b_branch2b[0][0] __________________________________________________________________________________________________ res3b_branch2c (Conv2D) (None, 4, 4, 512) 66048 activation_64[0][0] __________________________________________________________________________________________________ bn3b_branch2c (BatchNormalizati (None, 4, 4, 512) 2048 res3b_branch2c[0][0] __________________________________________________________________________________________________ add_21 (Add) (None, 4, 4, 512) 0 bn3b_branch2c[0][0] activation_62[0][0] __________________________________________________________________________________________________ activation_65 (Activation) (None, 4, 4, 512) 0 add_21[0][0] __________________________________________________________________________________________________ res3c_branch2a (Conv2D) (None, 4, 4, 128) 65664 activation_65[0][0] __________________________________________________________________________________________________ bn3c_branch2a (BatchNormalizati (None, 4, 4, 128) 512 res3c_branch2a[0][0] __________________________________________________________________________________________________ activation_66 (Activation) (None, 4, 4, 128) 0 bn3c_branch2a[0][0] __________________________________________________________________________________________________ res3c_branch2b (Conv2D) (None, 4, 4, 128) 147584 activation_66[0][0] __________________________________________________________________________________________________ bn3c_branch2b (BatchNormalizati (None, 4, 4, 128) 512 res3c_branch2b[0][0] __________________________________________________________________________________________________ activation_67 (Activation) (None, 4, 4, 128) 0 bn3c_branch2b[0][0] __________________________________________________________________________________________________ res3c_branch2c (Conv2D) (None, 4, 4, 512) 66048 activation_67[0][0] __________________________________________________________________________________________________ bn3c_branch2c (BatchNormalizati (None, 4, 4, 512) 2048 res3c_branch2c[0][0] __________________________________________________________________________________________________ add_22 (Add) (None, 4, 4, 512) 0 bn3c_branch2c[0][0] activation_65[0][0] __________________________________________________________________________________________________ activation_68 (Activation) (None, 4, 4, 512) 0 add_22[0][0] __________________________________________________________________________________________________ res3d_branch2a (Conv2D) (None, 4, 4, 128) 65664 activation_68[0][0] __________________________________________________________________________________________________ bn3d_branch2a (BatchNormalizati (None, 4, 4, 128) 512 res3d_branch2a[0][0] __________________________________________________________________________________________________ activation_69 (Activation) (None, 4, 4, 128) 0 bn3d_branch2a[0][0] __________________________________________________________________________________________________ res3d_branch2b (Conv2D) (None, 4, 4, 128) 147584 activation_69[0][0] __________________________________________________________________________________________________ bn3d_branch2b (BatchNormalizati (None, 4, 4, 128) 512 res3d_branch2b[0][0] __________________________________________________________________________________________________ activation_70 (Activation) (None, 4, 4, 128) 0 bn3d_branch2b[0][0] __________________________________________________________________________________________________ res3d_branch2c (Conv2D) (None, 4, 4, 512) 66048 activation_70[0][0]

__________________________________________________________________________________________________ bn3d_branch2c (BatchNormalizati (None, 4, 4, 512) 2048 res3d_branch2c[0][0] __________________________________________________________________________________________________ add_23 (Add) (None, 4, 4, 512) 0 bn3d_branch2c[0][0] activation_68[0][0] __________________________________________________________________________________________________ activation_71 (Activation) (None, 4, 4, 512) 0 add_23[0][0] __________________________________________________________________________________________________ res4a_branch2a (Conv2D) (None, 2, 2, 256) 131328 activation_71[0][0] __________________________________________________________________________________________________ bn4a_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4a_branch2a[0][0] __________________________________________________________________________________________________ activation_72 (Activation) (None, 2, 2, 256) 0 bn4a_branch2a[0][0] __________________________________________________________________________________________________ res4a_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_72[0][0] __________________________________________________________________________________________________ bn4a_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4a_branch2b[0][0] __________________________________________________________________________________________________ activation_73 (Activation) (None, 2, 2, 256) 0 bn4a_branch2b[0][0] __________________________________________________________________________________________________ res4a_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_73[0][0] __________________________________________________________________________________________________ res4a_branch1 (Conv2D) (None, 2, 2, 1024) 525312 activation_71[0][0] __________________________________________________________________________________________________ bn4a_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4a_branch2c[0][0] __________________________________________________________________________________________________ bn4a_branch1 (BatchNormalizatio (None, 2, 2, 1024) 4096 res4a_branch1[0][0] __________________________________________________________________________________________________ add_24 (Add) (None, 2, 2, 1024) 0 bn4a_branch2c[0][0] bn4a_branch1[0][0] __________________________________________________________________________________________________ activation_74 (Activation) (None, 2, 2, 1024) 0 add_24[0][0] __________________________________________________________________________________________________ res4b_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_74[0][0] __________________________________________________________________________________________________ bn4b_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4b_branch2a[0][0] __________________________________________________________________________________________________ activation_75 (Activation) (None, 2, 2, 256) 0 bn4b_branch2a[0][0] __________________________________________________________________________________________________ res4b_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_75[0][0] __________________________________________________________________________________________________ bn4b_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4b_branch2b[0][0] __________________________________________________________________________________________________ activation_76 (Activation) (None, 2, 2, 256) 0 bn4b_branch2b[0][0] __________________________________________________________________________________________________ res4b_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_76[0][0] __________________________________________________________________________________________________ bn4b_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4b_branch2c[0][0] __________________________________________________________________________________________________ add_25 (Add) (None, 2, 2, 1024) 0 bn4b_branch2c[0][0] activation_74[0][0] __________________________________________________________________________________________________ activation_77 (Activation) (None, 2, 2, 1024) 0 add_25[0][0] __________________________________________________________________________________________________ res4c_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_77[0][0] __________________________________________________________________________________________________ bn4c_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4c_branch2a[0][0] __________________________________________________________________________________________________ activation_78 (Activation) (None, 2, 2, 256) 0 bn4c_branch2a[0][0] __________________________________________________________________________________________________ res4c_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_78[0][0] __________________________________________________________________________________________________ bn4c_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4c_branch2b[0][0] __________________________________________________________________________________________________ activation_79 (Activation) (None, 2, 2, 256) 0 bn4c_branch2b[0][0] __________________________________________________________________________________________________ res4c_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_79[0][0] __________________________________________________________________________________________________ bn4c_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4c_branch2c[0][0] __________________________________________________________________________________________________ add_26 (Add) (None, 2, 2, 1024) 0 bn4c_branch2c[0][0] activation_77[0][0] __________________________________________________________________________________________________ activation_80 (Activation) (None, 2, 2, 1024) 0 add_26[0][0] __________________________________________________________________________________________________ res4d_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_80[0][0] __________________________________________________________________________________________________ bn4d_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4d_branch2a[0][0] __________________________________________________________________________________________________ activation_81 (Activation) (None, 2, 2, 256) 0 bn4d_branch2a[0][0] __________________________________________________________________________________________________ res4d_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_81[0][0] __________________________________________________________________________________________________ bn4d_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4d_branch2b[0][0] __________________________________________________________________________________________________ activation_82 (Activation) (None, 2, 2, 256) 0 bn4d_branch2b[0][0] __________________________________________________________________________________________________ res4d_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_82[0][0] __________________________________________________________________________________________________ bn4d_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4d_branch2c[0][0] __________________________________________________________________________________________________ add_27 (Add) (None, 2, 2, 1024) 0 bn4d_branch2c[0][0] activation_80[0][0] __________________________________________________________________________________________________ activation_83 (Activation) (None, 2, 2, 1024) 0 add_27[0][0] __________________________________________________________________________________________________ res4e_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_83[0][0] __________________________________________________________________________________________________ bn4e_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4e_branch2a[0][0] __________________________________________________________________________________________________ activation_84 (Activation) (None, 2, 2, 256) 0 bn4e_branch2a[0][0] __________________________________________________________________________________________________ res4e_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_84[0][0] __________________________________________________________________________________________________ bn4e_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4e_branch2b[0][0] __________________________________________________________________________________________________ activation_85 (Activation) (None, 2, 2, 256) 0 bn4e_branch2b[0][0] __________________________________________________________________________________________________ res4e_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_85[0][0] __________________________________________________________________________________________________ bn4e_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4e_branch2c[0][0] __________________________________________________________________________________________________ add_28 (Add) (None, 2, 2, 1024) 0 bn4e_branch2c[0][0] activation_83[0][0] __________________________________________________________________________________________________ activation_86 (Activation) (None, 2, 2, 1024) 0 add_28[0][0] __________________________________________________________________________________________________ res4f_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_86[0][0] __________________________________________________________________________________________________ bn4f_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4f_branch2a[0][0] __________________________________________________________________________________________________ activation_87 (Activation) (None, 2, 2, 256) 0 bn4f_branch2a[0][0] __________________________________________________________________________________________________ res4f_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_87[0][0] __________________________________________________________________________________________________ bn4f_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4f_branch2b[0][0] __________________________________________________________________________________________________ activation_88 (Activation) (None, 2, 2, 256) 0 bn4f_branch2b[0][0] __________________________________________________________________________________________________ res4f_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_88[0][0] __________________________________________________________________________________________________ bn4f_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4f_branch2c[0][0] __________________________________________________________________________________________________ add_29 (Add) (None, 2, 2, 1024) 0 bn4f_branch2c[0][0] activation_86[0][0] __________________________________________________________________________________________________ activation_89 (Activation) (None, 2, 2, 1024) 0 add_29[0][0] __________________________________________________________________________________________________ res5a_branch2a (Conv2D) (None, 1, 1, 512) 524800 activation_89[0][0] __________________________________________________________________________________________________ bn5a_branch2a (BatchNormalizati (None, 1, 1, 512) 2048 res5a_branch2a[0][0] __________________________________________________________________________________________________ activation_90 (Activation) (None, 1, 1, 512) 0 bn5a_branch2a[0][0] __________________________________________________________________________________________________ res5a_branch2b (Conv2D) (None, 1, 1, 512) 2359808 activation_90[0][0] __________________________________________________________________________________________________ bn5a_branch2b (BatchNormalizati (None, 1, 1, 512) 2048 res5a_branch2b[0][0] __________________________________________________________________________________________________ activation_91 (Activation) (None, 1, 1, 512) 0 bn5a_branch2b[0][0] __________________________________________________________________________________________________ res5a_branch2c (Conv2D) (None, 1, 1, 2048) 1050624 activation_91[0][0] __________________________________________________________________________________________________ res5a_branch1 (Conv2D) (None, 1, 1, 2048) 2099200 activation_89[0][0] __________________________________________________________________________________________________ bn5a_branch2c (BatchNormalizati (None, 1, 1, 2048) 8192 res5a_branch2c[0][0] __________________________________________________________________________________________________ bn5a_branch1 (BatchNormalizatio (None, 1, 1, 2048) 8192 res5a_branch1[0][0] __________________________________________________________________________________________________ add_30 (Add) (None, 1, 1, 2048) 0 bn5a_branch2c[0][0] bn5a_branch1[0][0] __________________________________________________________________________________________________ activation_92 (Activation) (None, 1, 1, 2048) 0 add_30[0][0] __________________________________________________________________________________________________ res5b_branch2a (Conv2D) (None, 1, 1, 512) 1049088 activation_92[0][0]

__________________________________________________________________________________________________ bn5b_branch2a (BatchNormalizati (None, 1, 1, 512) 2048 res5b_branch2a[0][0] __________________________________________________________________________________________________ activation_93 (Activation) (None, 1, 1, 512) 0 bn5b_branch2a[0][0] __________________________________________________________________________________________________ res5b_branch2b (Conv2D) (None, 1, 1, 512) 2359808 activation_93[0][0] __________________________________________________________________________________________________ bn5b_branch2b (BatchNormalizati (None, 1, 1, 512) 2048 res5b_branch2b[0][0] __________________________________________________________________________________________________ activation_94 (Activation) (None, 1, 1, 512) 0 bn5b_branch2b[0][0] __________________________________________________________________________________________________ res5b_branch2c (Conv2D) (None, 1, 1, 2048) 1050624 activation_94[0][0] __________________________________________________________________________________________________ bn5b_branch2c (BatchNormalizati (None, 1, 1, 2048) 8192 res5b_branch2c[0][0] __________________________________________________________________________________________________ add_31 (Add) (None, 1, 1, 2048) 0 bn5b_branch2c[0][0] activation_92[0][0] __________________________________________________________________________________________________ activation_95 (Activation) (None, 1, 1, 2048) 0 add_31[0][0] __________________________________________________________________________________________________ res5c_branch2a (Conv2D) (None, 1, 1, 512) 1049088 activation_95[0][0] __________________________________________________________________________________________________ bn5c_branch2a (BatchNormalizati (None, 1, 1, 512) 2048 res5c_branch2a[0][0] __________________________________________________________________________________________________ activation_96 (Activation) (None, 1, 1, 512) 0 bn5c_branch2a[0][0] __________________________________________________________________________________________________ res5c_branch2b (Conv2D) (None, 1, 1, 512) 2359808 activation_96[0][0] __________________________________________________________________________________________________ bn5c_branch2b (BatchNormalizati (None, 1, 1, 512) 2048 res5c_branch2b[0][0] __________________________________________________________________________________________________ activation_97 (Activation) (None, 1, 1, 512) 0 bn5c_branch2b[0][0] __________________________________________________________________________________________________ res5c_branch2c (Conv2D) (None, 1, 1, 2048) 1050624 activation_97[0][0] __________________________________________________________________________________________________ bn5c_branch2c (BatchNormalizati (None, 1, 1, 2048) 8192 res5c_branch2c[0][0] __________________________________________________________________________________________________ add_32 (Add) (None, 1, 1, 2048) 0 bn5c_branch2c[0][0] activation_95[0][0] __________________________________________________________________________________________________ activation_98 (Activation) (None, 1, 1, 2048) 0 add_32[0][0] ================================================================================================== Total params: 23,587,712 Trainable params: 23,534,592 Non-trainable params: 53,120 __________________________________________________________________________________________________ __________________________________________________________________________________________________ Layer (type) Output Shape Param # Connected to ================================================================================================== input_4 (InputLayer) (None, 32, 32, 3) 0 __________________________________________________________________________________________________ conv1_pad (ZeroPadding2D) (None, 38, 38, 3) 0 input_4[0][0] __________________________________________________________________________________________________ conv1 (Conv2D) (None, 16, 16, 64) 9472 conv1_pad[0][0] __________________________________________________________________________________________________ bn_conv1 (BatchNormalization) (None, 16, 16, 64) 256 conv1[0][0] __________________________________________________________________________________________________ activation_50 (Activation) (None, 16, 16, 64) 0 bn_conv1[0][0] __________________________________________________________________________________________________ pool1_pad (ZeroPadding2D) (None, 18, 18, 64) 0 activation_50[0][0] __________________________________________________________________________________________________ max_pooling2d_2 (MaxPooling2D) (None, 8, 8, 64) 0 pool1_pad[0][0] __________________________________________________________________________________________________ res2a_branch2a (Conv2D) (None, 8, 8, 64) 4160 max_pooling2d_2[0][0] __________________________________________________________________________________________________ bn2a_branch2a (BatchNormalizati (None, 8, 8, 64) 256 res2a_branch2a[0][0] __________________________________________________________________________________________________ activation_51 (Activation) (None, 8, 8, 64) 0 bn2a_branch2a[0][0] __________________________________________________________________________________________________ res2a_branch2b (Conv2D) (None, 8, 8, 64) 36928 activation_51[0][0] __________________________________________________________________________________________________ bn2a_branch2b (BatchNormalizati (None, 8, 8, 64) 256 res2a_branch2b[0][0] __________________________________________________________________________________________________ activation_52 (Activation) (None, 8, 8, 64) 0 bn2a_branch2b[0][0] __________________________________________________________________________________________________ res2a_branch2c (Conv2D) (None, 8, 8, 256) 16640 activation_52[0][0] __________________________________________________________________________________________________ res2a_branch1 (Conv2D) (None, 8, 8, 256) 16640 max_pooling2d_2[0][0] __________________________________________________________________________________________________ bn2a_branch2c (BatchNormalizati (None, 8, 8, 256) 1024 res2a_branch2c[0][0] __________________________________________________________________________________________________ bn2a_branch1 (BatchNormalizatio (None, 8, 8, 256) 1024 res2a_branch1[0][0] __________________________________________________________________________________________________ add_17 (Add) (None, 8, 8, 256) 0 bn2a_branch2c[0][0] bn2a_branch1[0][0] __________________________________________________________________________________________________ activation_53 (Activation) (None, 8, 8, 256) 0 add_17[0][0] __________________________________________________________________________________________________ res2b_branch2a (Conv2D) (None, 8, 8, 64) 16448 activation_53[0][0] __________________________________________________________________________________________________ bn2b_branch2a (BatchNormalizati (None, 8, 8, 64) 256 res2b_branch2a[0][0] __________________________________________________________________________________________________ activation_54 (Activation) (None, 8, 8, 64) 0 bn2b_branch2a[0][0] __________________________________________________________________________________________________ res2b_branch2b (Conv2D) (None, 8, 8, 64) 36928 activation_54[0][0] __________________________________________________________________________________________________ bn2b_branch2b (BatchNormalizati (None, 8, 8, 64) 256 res2b_branch2b[0][0] __________________________________________________________________________________________________ activation_55 (Activation) (None, 8, 8, 64) 0 bn2b_branch2b[0][0] __________________________________________________________________________________________________ res2b_branch2c (Conv2D) (None, 8, 8, 256) 16640 activation_55[0][0] __________________________________________________________________________________________________ bn2b_branch2c (BatchNormalizati (None, 8, 8, 256) 1024 res2b_branch2c[0][0] __________________________________________________________________________________________________ add_18 (Add) (None, 8, 8, 256) 0 bn2b_branch2c[0][0] activation_53[0][0] __________________________________________________________________________________________________ activation_56 (Activation) (None, 8, 8, 256) 0 add_18[0][0] __________________________________________________________________________________________________ res2c_branch2a (Conv2D) (None, 8, 8, 64) 16448 activation_56[0][0] __________________________________________________________________________________________________ bn2c_branch2a (BatchNormalizati (None, 8, 8, 64) 256 res2c_branch2a[0][0] __________________________________________________________________________________________________ activation_57 (Activation) (None, 8, 8, 64) 0 bn2c_branch2a[0][0] __________________________________________________________________________________________________ res2c_branch2b (Conv2D) (None, 8, 8, 64) 36928 activation_57[0][0] __________________________________________________________________________________________________ bn2c_branch2b (BatchNormalizati (None, 8, 8, 64) 256 res2c_branch2b[0][0] __________________________________________________________________________________________________ activation_58 (Activation) (None, 8, 8, 64) 0 bn2c_branch2b[0][0] __________________________________________________________________________________________________ res2c_branch2c (Conv2D) (None, 8, 8, 256) 16640 activation_58[0][0] __________________________________________________________________________________________________ bn2c_branch2c (BatchNormalizati (None, 8, 8, 256) 1024 res2c_branch2c[0][0] __________________________________________________________________________________________________ add_19 (Add) (None, 8, 8, 256) 0 bn2c_branch2c[0][0] activation_56[0][0] __________________________________________________________________________________________________ activation_59 (Activation) (None, 8, 8, 256) 0 add_19[0][0] __________________________________________________________________________________________________ res3a_branch2a (Conv2D) (None, 4, 4, 128) 32896 activation_59[0][0] __________________________________________________________________________________________________ bn3a_branch2a (BatchNormalizati (None, 4, 4, 128) 512 res3a_branch2a[0][0] __________________________________________________________________________________________________ activation_60 (Activation) (None, 4, 4, 128) 0 bn3a_branch2a[0][0] __________________________________________________________________________________________________ res3a_branch2b (Conv2D) (None, 4, 4, 128) 147584 activation_60[0][0] __________________________________________________________________________________________________ bn3a_branch2b (BatchNormalizati (None, 4, 4, 128) 512 res3a_branch2b[0][0] __________________________________________________________________________________________________ activation_61 (Activation) (None, 4, 4, 128) 0 bn3a_branch2b[0][0] __________________________________________________________________________________________________ res3a_branch2c (Conv2D) (None, 4, 4, 512) 66048 activation_61[0][0] __________________________________________________________________________________________________ res3a_branch1 (Conv2D) (None, 4, 4, 512) 131584 activation_59[0][0] __________________________________________________________________________________________________ bn3a_branch2c (BatchNormalizati (None, 4, 4, 512) 2048 res3a_branch2c[0][0] __________________________________________________________________________________________________ bn3a_branch1 (BatchNormalizatio (None, 4, 4, 512) 2048 res3a_branch1[0][0] __________________________________________________________________________________________________ add_20 (Add) (None, 4, 4, 512) 0 bn3a_branch2c[0][0] bn3a_branch1[0][0] __________________________________________________________________________________________________ activation_62 (Activation) (None, 4, 4, 512) 0 add_20[0][0] __________________________________________________________________________________________________ res3b_branch2a (Conv2D) (None, 4, 4, 128) 65664 activation_62[0][0] __________________________________________________________________________________________________ bn3b_branch2a (BatchNormalizati (None, 4, 4, 128) 512 res3b_branch2a[0][0] __________________________________________________________________________________________________ activation_63 (Activation) (None, 4, 4, 128) 0 bn3b_branch2a[0][0] __________________________________________________________________________________________________ res3b_branch2b (Conv2D) (None, 4, 4, 128) 147584 activation_63[0][0] __________________________________________________________________________________________________ bn3b_branch2b (BatchNormalizati (None, 4, 4, 128) 512 res3b_branch2b[0][0] __________________________________________________________________________________________________ activation_64 (Activation) (None, 4, 4, 128) 0 bn3b_branch2b[0][0] __________________________________________________________________________________________________

res3b_branch2c (Conv2D) (None, 4, 4, 512) 66048 activation_64[0][0] __________________________________________________________________________________________________ bn3b_branch2c (BatchNormalizati (None, 4, 4, 512) 2048 res3b_branch2c[0][0] __________________________________________________________________________________________________ add_21 (Add) (None, 4, 4, 512) 0 bn3b_branch2c[0][0] activation_62[0][0] __________________________________________________________________________________________________ activation_65 (Activation) (None, 4, 4, 512) 0 add_21[0][0] __________________________________________________________________________________________________ res3c_branch2a (Conv2D) (None, 4, 4, 128) 65664 activation_65[0][0] __________________________________________________________________________________________________ bn3c_branch2a (BatchNormalizati (None, 4, 4, 128) 512 res3c_branch2a[0][0] __________________________________________________________________________________________________ activation_66 (Activation) (None, 4, 4, 128) 0 bn3c_branch2a[0][0] __________________________________________________________________________________________________ res3c_branch2b (Conv2D) (None, 4, 4, 128) 147584 activation_66[0][0] __________________________________________________________________________________________________ bn3c_branch2b (BatchNormalizati (None, 4, 4, 128) 512 res3c_branch2b[0][0] __________________________________________________________________________________________________ activation_67 (Activation) (None, 4, 4, 128) 0 bn3c_branch2b[0][0] __________________________________________________________________________________________________ res3c_branch2c (Conv2D) (None, 4, 4, 512) 66048 activation_67[0][0] __________________________________________________________________________________________________ bn3c_branch2c (BatchNormalizati (None, 4, 4, 512) 2048 res3c_branch2c[0][0] __________________________________________________________________________________________________ add_22 (Add) (None, 4, 4, 512) 0 bn3c_branch2c[0][0] activation_65[0][0] __________________________________________________________________________________________________ activation_68 (Activation) (None, 4, 4, 512) 0 add_22[0][0] __________________________________________________________________________________________________ res3d_branch2a (Conv2D) (None, 4, 4, 128) 65664 activation_68[0][0] __________________________________________________________________________________________________ bn3d_branch2a (BatchNormalizati (None, 4, 4, 128) 512 res3d_branch2a[0][0] __________________________________________________________________________________________________ activation_69 (Activation) (None, 4, 4, 128) 0 bn3d_branch2a[0][0] __________________________________________________________________________________________________ res3d_branch2b (Conv2D) (None, 4, 4, 128) 147584 activation_69[0][0] __________________________________________________________________________________________________ bn3d_branch2b (BatchNormalizati (None, 4, 4, 128) 512 res3d_branch2b[0][0] __________________________________________________________________________________________________ activation_70 (Activation) (None, 4, 4, 128) 0 bn3d_branch2b[0][0] __________________________________________________________________________________________________ res3d_branch2c (Conv2D) (None, 4, 4, 512) 66048 activation_70[0][0] __________________________________________________________________________________________________ bn3d_branch2c (BatchNormalizati (None, 4, 4, 512) 2048 res3d_branch2c[0][0] __________________________________________________________________________________________________ add_23 (Add) (None, 4, 4, 512) 0 bn3d_branch2c[0][0] activation_68[0][0] __________________________________________________________________________________________________ activation_71 (Activation) (None, 4, 4, 512) 0 add_23[0][0] __________________________________________________________________________________________________ res4a_branch2a (Conv2D) (None, 2, 2, 256) 131328 activation_71[0][0] __________________________________________________________________________________________________ bn4a_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4a_branch2a[0][0] __________________________________________________________________________________________________ activation_72 (Activation) (None, 2, 2, 256) 0 bn4a_branch2a[0][0] __________________________________________________________________________________________________ res4a_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_72[0][0] __________________________________________________________________________________________________ bn4a_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4a_branch2b[0][0] __________________________________________________________________________________________________ activation_73 (Activation) (None, 2, 2, 256) 0 bn4a_branch2b[0][0] __________________________________________________________________________________________________ res4a_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_73[0][0] __________________________________________________________________________________________________ res4a_branch1 (Conv2D) (None, 2, 2, 1024) 525312 activation_71[0][0] __________________________________________________________________________________________________ bn4a_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4a_branch2c[0][0] __________________________________________________________________________________________________ bn4a_branch1 (BatchNormalizatio (None, 2, 2, 1024) 4096 res4a_branch1[0][0] __________________________________________________________________________________________________ add_24 (Add) (None, 2, 2, 1024) 0 bn4a_branch2c[0][0] bn4a_branch1[0][0] __________________________________________________________________________________________________ activation_74 (Activation) (None, 2, 2, 1024) 0 add_24[0][0] __________________________________________________________________________________________________ res4b_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_74[0][0] __________________________________________________________________________________________________ bn4b_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4b_branch2a[0][0] __________________________________________________________________________________________________ activation_75 (Activation) (None, 2, 2, 256) 0 bn4b_branch2a[0][0] __________________________________________________________________________________________________ res4b_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_75[0][0] __________________________________________________________________________________________________ bn4b_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4b_branch2b[0][0] __________________________________________________________________________________________________ activation_76 (Activation) (None, 2, 2, 256) 0 bn4b_branch2b[0][0] __________________________________________________________________________________________________ res4b_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_76[0][0] __________________________________________________________________________________________________ bn4b_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4b_branch2c[0][0] __________________________________________________________________________________________________ add_25 (Add) (None, 2, 2, 1024) 0 bn4b_branch2c[0][0] activation_74[0][0] __________________________________________________________________________________________________ activation_77 (Activation) (None, 2, 2, 1024) 0 add_25[0][0] __________________________________________________________________________________________________ res4c_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_77[0][0] __________________________________________________________________________________________________ bn4c_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4c_branch2a[0][0] __________________________________________________________________________________________________ activation_78 (Activation) (None, 2, 2, 256) 0 bn4c_branch2a[0][0] __________________________________________________________________________________________________ res4c_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_78[0][0] __________________________________________________________________________________________________ bn4c_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4c_branch2b[0][0] __________________________________________________________________________________________________ activation_79 (Activation) (None, 2, 2, 256) 0 bn4c_branch2b[0][0] __________________________________________________________________________________________________ res4c_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_79[0][0] __________________________________________________________________________________________________ bn4c_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4c_branch2c[0][0] __________________________________________________________________________________________________ add_26 (Add) (None, 2, 2, 1024) 0 bn4c_branch2c[0][0] activation_77[0][0] __________________________________________________________________________________________________ activation_80 (Activation) (None, 2, 2, 1024) 0 add_26[0][0] __________________________________________________________________________________________________ res4d_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_80[0][0] __________________________________________________________________________________________________ bn4d_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4d_branch2a[0][0] __________________________________________________________________________________________________ activation_81 (Activation) (None, 2, 2, 256) 0 bn4d_branch2a[0][0] __________________________________________________________________________________________________ res4d_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_81[0][0] __________________________________________________________________________________________________ bn4d_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4d_branch2b[0][0] __________________________________________________________________________________________________ activation_82 (Activation) (None, 2, 2, 256) 0 bn4d_branch2b[0][0] __________________________________________________________________________________________________ res4d_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_82[0][0] __________________________________________________________________________________________________ bn4d_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4d_branch2c[0][0] __________________________________________________________________________________________________ add_27 (Add) (None, 2, 2, 1024) 0 bn4d_branch2c[0][0] activation_80[0][0] __________________________________________________________________________________________________ activation_83 (Activation) (None, 2, 2, 1024) 0 add_27[0][0] __________________________________________________________________________________________________ res4e_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_83[0][0] __________________________________________________________________________________________________ bn4e_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4e_branch2a[0][0] __________________________________________________________________________________________________ activation_84 (Activation) (None, 2, 2, 256) 0 bn4e_branch2a[0][0] __________________________________________________________________________________________________ res4e_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_84[0][0] __________________________________________________________________________________________________ bn4e_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4e_branch2b[0][0] __________________________________________________________________________________________________ activation_85 (Activation) (None, 2, 2, 256) 0 bn4e_branch2b[0][0] __________________________________________________________________________________________________ res4e_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_85[0][0] __________________________________________________________________________________________________ bn4e_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4e_branch2c[0][0] __________________________________________________________________________________________________ add_28 (Add) (None, 2, 2, 1024) 0 bn4e_branch2c[0][0] activation_83[0][0] __________________________________________________________________________________________________ activation_86 (Activation) (None, 2, 2, 1024) 0 add_28[0][0] __________________________________________________________________________________________________ res4f_branch2a (Conv2D) (None, 2, 2, 256) 262400 activation_86[0][0] __________________________________________________________________________________________________ bn4f_branch2a (BatchNormalizati (None, 2, 2, 256) 1024 res4f_branch2a[0][0] __________________________________________________________________________________________________

activation_87 (Activation) (None, 2, 2, 256) 0 bn4f_branch2a[0][0] __________________________________________________________________________________________________ res4f_branch2b (Conv2D) (None, 2, 2, 256) 590080 activation_87[0][0] __________________________________________________________________________________________________ bn4f_branch2b (BatchNormalizati (None, 2, 2, 256) 1024 res4f_branch2b[0][0] __________________________________________________________________________________________________ activation_88 (Activation) (None, 2, 2, 256) 0 bn4f_branch2b[0][0] __________________________________________________________________________________________________ res4f_branch2c (Conv2D) (None, 2, 2, 1024) 263168 activation_88[0][0] __________________________________________________________________________________________________ bn4f_branch2c (BatchNormalizati (None, 2, 2, 1024) 4096 res4f_branch2c[0][0] __________________________________________________________________________________________________ add_29 (Add) (None, 2, 2, 1024) 0 bn4f_branch2c[0][0] activation_86[0][0] __________________________________________________________________________________________________ activation_89 (Activation) (None, 2, 2, 1024) 0 add_29[0][0] __________________________________________________________________________________________________ res5a_branch2a (Conv2D) (None, 1, 1, 512) 524800 activation_89[0][0] __________________________________________________________________________________________________ bn5a_branch2a (BatchNormalizati (None, 1, 1, 512) 2048 res5a_branch2a[0][0] __________________________________________________________________________________________________ activation_90 (Activation) (None, 1, 1, 512) 0 bn5a_branch2a[0][0] __________________________________________________________________________________________________ res5a_branch2b (Conv2D) (None, 1, 1, 512) 2359808 activation_90[0][0] __________________________________________________________________________________________________ bn5a_branch2b (BatchNormalizati (None, 1, 1, 512) 2048 res5a_branch2b[0][0] __________________________________________________________________________________________________ activation_91 (Activation) (None, 1, 1, 512) 0 bn5a_branch2b[0][0] __________________________________________________________________________________________________ res5a_branch2c (Conv2D) (None, 1, 1, 2048) 1050624 activation_91[0][0] __________________________________________________________________________________________________ res5a_branch1 (Conv2D) (None, 1, 1, 2048) 2099200 activation_89[0][0] __________________________________________________________________________________________________ bn5a_branch2c (BatchNormalizati (None, 1, 1, 2048) 8192 res5a_branch2c[0][0] __________________________________________________________________________________________________ bn5a_branch1 (BatchNormalizatio (None, 1, 1, 2048) 8192 res5a_branch1[0][0] __________________________________________________________________________________________________ add_30 (Add) (None, 1, 1, 2048) 0 bn5a_branch2c[0][0] bn5a_branch1[0][0] __________________________________________________________________________________________________ activation_92 (Activation) (None, 1, 1, 2048) 0 add_30[0][0] __________________________________________________________________________________________________ res5b_branch2a (Conv2D) (None, 1, 1, 512) 1049088 activation_92[0][0] __________________________________________________________________________________________________ bn5b_branch2a (BatchNormalizati (None, 1, 1, 512) 2048 res5b_branch2a[0][0] __________________________________________________________________________________________________ activation_93 (Activation) (None, 1, 1, 512) 0 bn5b_branch2a[0][0] __________________________________________________________________________________________________ res5b_branch2b (Conv2D) (None, 1, 1, 512) 2359808 activation_93[0][0] __________________________________________________________________________________________________ bn5b_branch2b (BatchNormalizati (None, 1, 1, 512) 2048 res5b_branch2b[0][0] __________________________________________________________________________________________________ activation_94 (Activation) (None, 1, 1, 512) 0 bn5b_branch2b[0][0] __________________________________________________________________________________________________ res5b_branch2c (Conv2D) (None, 1, 1, 2048) 1050624 activation_94[0][0] __________________________________________________________________________________________________ bn5b_branch2c (BatchNormalizati (None, 1, 1, 2048) 8192 res5b_branch2c[0][0] __________________________________________________________________________________________________ add_31 (Add) (None, 1, 1, 2048) 0 bn5b_branch2c[0][0] activation_92[0][0] __________________________________________________________________________________________________ activation_95 (Activation) (None, 1, 1, 2048) 0 add_31[0][0] __________________________________________________________________________________________________ res5c_branch2a (Conv2D) (None, 1, 1, 512) 1049088 activation_95[0][0] __________________________________________________________________________________________________ bn5c_branch2a (BatchNormalizati (None, 1, 1, 512) 2048 res5c_branch2a[0][0] __________________________________________________________________________________________________ activation_96 (Activation) (None, 1, 1, 512) 0 bn5c_branch2a[0][0] __________________________________________________________________________________________________ res5c_branch2b (Conv2D) (None, 1, 1, 512) 2359808 activation_96[0][0] __________________________________________________________________________________________________ bn5c_branch2b (BatchNormalizati (None, 1, 1, 512) 2048 res5c_branch2b[0][0] __________________________________________________________________________________________________ activation_97 (Activation) (None, 1, 1, 512) 0 bn5c_branch2b[0][0] __________________________________________________________________________________________________ res5c_branch2c (Conv2D) (None, 1, 1, 2048) 1050624 activation_97[0][0] __________________________________________________________________________________________________ bn5c_branch2c (BatchNormalizati (None, 1, 1, 2048) 8192 res5c_branch2c[0][0] __________________________________________________________________________________________________ add_32 (Add) (None, 1, 1, 2048) 0 bn5c_branch2c[0][0] activation_95[0][0] __________________________________________________________________________________________________ activation_98 (Activation) (None, 1, 1, 2048) 0 add_32[0][0] __________________________________________________________________________________________________ global_average_pooling2d_4 (Glo (None, 2048) 0 activation_98[0][0] __________________________________________________________________________________________________ dense_10 (Dense) (None, 128) 262272 global_average_pooling2d_4[0][0] __________________________________________________________________________________________________ dense_11 (Dense) (None, 32) 4128 dense_10[0][0] __________________________________________________________________________________________________ dense_12 (Dense) (None, 10) 330 dense_11[0][0] ================================================================================================== Total params: 23,854,442 Trainable params: 23,801,322 Non-trainable params: 53,120 __________________________________________________________________________________________________ <keras.engine.input_layer.InputLayer object at 0x0000024EC14CFA08> False <keras.layers.convolutional.ZeroPadding2D object at 0x0000024EAB628148> False <keras.layers.convolutional.Conv2D object at 0x0000024EC0074BC8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EC14A2948> False <keras.layers.core.Activation object at 0x0000024EC149E708> False <keras.layers.convolutional.ZeroPadding2D object at 0x0000024EC149ADC8> False <keras.layers.pooling.MaxPooling2D object at 0x0000024EC149AD48> False <keras.layers.convolutional.Conv2D object at 0x0000024EAF1EAEC8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EAF1FA7C8> False <keras.layers.core.Activation object at 0x0000024EAF1FAB88> False <keras.layers.convolutional.Conv2D object at 0x0000024EAF204C08> False <keras.layers.normalization.BatchNormalization object at 0x0000024EAF26DB08> False <keras.layers.core.Activation object at 0x0000024EB6307808> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6352F08> False <keras.layers.convolutional.Conv2D object at 0x0000024EB643B508> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB63AA948> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB647FA08> False <keras.layers.merge.Add object at 0x0000024EB6469248> False <keras.layers.core.Activation object at 0x0000024EB6576248> False <keras.layers.convolutional.Conv2D object at 0x0000024EB65A9288> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB6644E48> False <keras.layers.core.Activation object at 0x0000024EB6656448> False <keras.layers.convolutional.Conv2D object at 0x0000024EB666C848> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB669FE08> False <keras.layers.core.Activation object at 0x0000024EB673D288> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6769A08> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB67C9688> False <keras.layers.merge.Add object at 0x0000024EB6849A48> False <keras.layers.core.Activation object at 0x0000024EB68AC2C8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6896A88> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB696BC08> False <keras.layers.core.Activation object at 0x0000024EB6985D08> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6A26888> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB6A2CB48> False <keras.layers.core.Activation object at 0x0000024EB6A729C8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6ABD208> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB6B58808> False <keras.layers.merge.Add object at 0x0000024EB6B9EBC8> False <keras.layers.core.Activation object at 0x0000024EB6BF0388> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6BC30C8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB6CA9F08> False <keras.layers.core.Activation object at 0x0000024EB6CBF688> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6CE75C8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB6D325C8> False <keras.layers.core.Activation object at 0x0000024EB6DC7A88> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6DD9808> False <keras.layers.convolutional.Conv2D object at 0x0000024EB6EF1BC8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB6E908C8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB6F47DC8> False <keras.layers.merge.Add object at 0x0000024EB6F93788> False <keras.layers.core.Activation object at 0x0000024EB7021AC8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB70A0688> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB70F8DC8> False <keras.layers.core.Activation object at 0x0000024EB7111E88> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7122CC8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7215908> False <keras.layers.core.Activation object at 0x0000024EB71F0608> False <keras.layers.convolutional.Conv2D object at 0x0000024EB724CA08> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB72E1748> False <keras.layers.merge.Add object at 0x0000024EB72C48C8> False <keras.layers.core.Activation object at 0x0000024EB7379D08> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7357B88> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB744C788> False <keras.layers.core.Activation object at 0x0000024EB744C088> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7474E48> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB750B908> False <keras.layers.core.Activation object at 0x0000024EB74EECC8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7579208> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7618E48> False <keras.layers.merge.Add object at 0x0000024EB765BF88> False <keras.layers.core.Activation object at 0x0000024EB76B1908> False <keras.layers.convolutional.Conv2D object at 0x0000024EB767DEC8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7789048> False <keras.layers.core.Activation object at 0x0000024EB7789B08> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7797B48> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7846DC8> False <keras.layers.core.Activation object at 0x0000024EB788BEC8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB78A61C8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB78DA048> False <keras.layers.merge.Add object at 0x0000024EB7999FC8> False <keras.layers.core.Activation object at 0x0000024EB7A1C108> False <keras.layers.convolutional.Conv2D object at 0x0000024EB79DA908> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7ABF3C8> False <keras.layers.core.Activation object at 0x0000024EB7ABFE08> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7AE6608> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7B2A548> False <keras.layers.core.Activation object at 0x0000024EB7BC4F48> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7C06848> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7D18F08> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7C451C8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7D63508> False <keras.layers.merge.Add object at 0x0000024EB7D314C8> False <keras.layers.core.Activation object at 0x0000024EB7E02648> False <keras.layers.convolutional.Conv2D object at 0x0000024EB7EC6D88> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB7F12EC8> False <keras.layers.core.Activation object at 0x0000024EB7F304C8> False

<keras.layers.convolutional.Conv2D object at 0x0000024EB7F55F88> False <keras.layers.normalization.BatchNormalization object at 0x00000250A2AA8448> False <keras.layers.core.Activation object at 0x0000025093068688> False <keras.layers.convolutional.Conv2D object at 0x0000025092DF7AC8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EC14C10C8> False <keras.layers.merge.Add object at 0x0000024EC14C1288> False <keras.layers.core.Activation object at 0x0000024EC00DD088> False <keras.layers.convolutional.Conv2D object at 0x0000024EC14AC4C8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB81E77C8> False <keras.layers.core.Activation object at 0x0000024EB81E7F08> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8211288> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB82CD3C8> False <keras.layers.core.Activation object at 0x0000024EB8306548> False <keras.layers.convolutional.Conv2D object at 0x0000024EB832E188> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB83E38C8> False <keras.layers.merge.Add object at 0x0000024EB8408A88> False <keras.layers.core.Activation object at 0x0000024EB8460B48> False <keras.layers.convolutional.Conv2D object at 0x0000024EB843F1C8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8522CC8> False <keras.layers.core.Activation object at 0x0000024EB853BC88> False <keras.layers.convolutional.Conv2D object at 0x0000024EB85D9248> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB85DFF88> False <keras.layers.core.Activation object at 0x0000024EB863E8C8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8674A08> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8696A08> False <keras.layers.merge.Add object at 0x0000024EB874BF48> False <keras.layers.core.Activation object at 0x0000024EB87A2888> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8769448> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8880088> False <keras.layers.core.Activation object at 0x0000024EB8880788> False <keras.layers.convolutional.Conv2D object at 0x0000024EB88A9148> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8981AC8> False <keras.layers.core.Activation object at 0x0000024EB8981B48> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8998848> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8A91BC8> False <keras.layers.merge.Add object at 0x0000024EB8A91E08> False <keras.layers.core.Activation object at 0x0000024EB8B123C8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8B3DCC8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8BC01C8> False <keras.layers.core.Activation object at 0x0000024EB8BC0B48> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8BD6C08> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8C67708> False <keras.layers.core.Activation object at 0x0000024EB8CC4D48> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8D07A48> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8D73E08> False <keras.layers.merge.Add object at 0x0000024EB8DEA5C8> False <keras.layers.core.Activation object at 0x0000024EB8E63588> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8E17EC8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8F04D88> False <keras.layers.core.Activation object at 0x0000024EB8F047C8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB8F2D1C8> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB8FAB208> False <keras.layers.core.Activation object at 0x0000024EB9027A48> False <keras.layers.convolutional.Conv2D object at 0x0000024EB902E308> False <keras.layers.convolutional.Conv2D object at 0x0000024EB913F548> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB9107608> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB91D7408> False <keras.layers.merge.Add object at 0x0000024EB91A0F08> False <keras.layers.core.Activation object at 0x0000024EB92A2F88> False <keras.layers.convolutional.Conv2D object at 0x0000024EB92DB888> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB936C488> False <keras.layers.core.Activation object at 0x0000024EB936C448> False <keras.layers.convolutional.Conv2D object at 0x0000024EB9390288> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB9430F88> False <keras.layers.core.Activation object at 0x0000024EB9474E48> False <keras.layers.convolutional.Conv2D object at 0x0000024EB94B5B48> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB9522448> False <keras.layers.merge.Add object at 0x0000024EB959A708> False <keras.layers.core.Activation object at 0x0000024EB95EBD08> False <keras.layers.convolutional.Conv2D object at 0x0000024EB95C9E48> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB96B3E48> False <keras.layers.core.Activation object at 0x0000024EB96C5BC8> False <keras.layers.convolutional.Conv2D object at 0x0000024EB96DC588> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB979D9C8> False <keras.layers.core.Activation object at 0x0000024EB97CE588> False <keras.layers.convolutional.Conv2D object at 0x0000024EB97FE148> False <keras.layers.normalization.BatchNormalization object at 0x0000024EB98B7908> False <keras.layers.merge.Add object at 0x0000024EB98DCAC8> False <keras.layers.core.Activation object at 0x0000024EB9930E88> False <keras.layers.pooling.GlobalAveragePooling2D object at 0x000002509F028D88> True <keras.layers.core.Dense object at 0x0000024EB9A32048> True <keras.layers.core.Dense object at 0x000002509D33B448> True <keras.layers.core.Dense object at 0x000002509441ABC8> True Epoch 1/10 500/500 [==============================] - ETA: 1:12 - loss: 0.4243 - acc: 0.884 - ETA: 14s - loss: 0.3956 - acc: 0.884 - ETA: 6s - loss: 0.3864 - acc: 0.8875 - ETA: 2s - loss: 0.3849 - acc: 0.888 - ETA: 1s - loss: 0.3845 - acc: 0.889 - 5s 10ms/step - loss: 0.3778 - acc: 0.8910 Epoch 2/10 500/500 [==============================] - ETA: 0s - loss: 0.3732 - acc: 0.896 - ETA: 0s - loss: 0.3689 - acc: 0.896 - ETA: 0s - loss: 0.3642 - acc: 0.898 - ETA: 0s - loss: 0.3592 - acc: 0.898 - ETA: 0s - loss: 0.3549 - acc: 0.898 - 0s 606us/step - loss: 0.3506 - acc: 0.8984 Epoch 3/10 500/500 [==============================] - ETA: 0s - loss: 0.3290 - acc: 0.900 - ETA: 0s - loss: 0.3232 - acc: 0.900 - ETA: 0s - loss: 0.3242 - acc: 0.900 - ETA: 0s - loss: 0.3211 - acc: 0.899 - ETA: 0s - loss: 0.3227 - acc: 0.899 - 0s 573us/step - loss: 0.3213 - acc: 0.9004 Epoch 4/10 500/500 [==============================] - ETA: 0s - loss: 0.3126 - acc: 0.903 - ETA: 0s - loss: 0.3162 - acc: 0.903 - ETA: 0s - loss: 0.3184 - acc: 0.901 - ETA: 0s - loss: 0.3156 - acc: 0.901 - ETA: 0s - loss: 0.3144 - acc: 0.900 - 0s 618us/step - loss: 0.3151 - acc: 0.9008 Epoch 5/10 500/500 [==============================] - ETA: 0s - loss: 0.3252 - acc: 0.900 - ETA: 0s - loss: 0.3123 - acc: 0.901 - ETA: 0s - loss: 0.3123 - acc: 0.901 - ETA: 0s - loss: 0.3128 - acc: 0.900 - ETA: 0s - loss: 0.3135 - acc: 0.900 - 0s 543us/step - loss: 0.3122 - acc: 0.9000 Epoch 6/10 500/500 [==============================] - ETA: 0s - loss: 0.2989 - acc: 0.903 - ETA: 0s - loss: 0.3063 - acc: 0.901 - ETA: 0s - loss: 0.3090 - acc: 0.900 - ETA: 0s - loss: 0.3037 - acc: 0.900 - ETA: 0s - loss: 0.3018 - acc: 0.900 - 0s 550us/step - loss: 0.3020 - acc: 0.9006 Epoch 7/10 500/500 [==============================] - ETA: 0s - loss: 0.2995 - acc: 0.900 - ETA: 0s - loss: 0.3044 - acc: 0.900 - ETA: 0s - loss: 0.2977 - acc: 0.901 - ETA: 0s - loss: 0.2957 - acc: 0.901 - ETA: 0s - loss: 0.2945 - acc: 0.901 - 0s 563us/step - loss: 0.2949 - acc: 0.9016 Epoch 8/10 500/500 [==============================] - ETA: 0s - loss: 0.2848 - acc: 0.896 - ETA: 0s - loss: 0.2909 - acc: 0.900 - ETA: 0s - loss: 0.2890 - acc: 0.900 - ETA: 0s - loss: 0.2863 - acc: 0.901 - ETA: 0s - loss: 0.2817 - acc: 0.901 - 0s 562us/step - loss: 0.2834 - acc: 0.9018 Epoch 9/10 500/500 [==============================] - ETA: 0s - loss: 0.2861 - acc: 0.903 - ETA: 0s - loss: 0.2773 - acc: 0.905 - ETA: 0s - loss: 0.2765 - acc: 0.905 - ETA: 0s - loss: 0.2783 - acc: 0.905 - ETA: 0s - loss: 0.2774 - acc: 0.905 - 0s 582us/step - loss: 0.2762 - acc: 0.9050 Epoch 10/10 500/500 [==============================] - ETA: 0s - loss: 0.2676 - acc: 0.909 - ETA: 0s - loss: 0.2635 - acc: 0.908 - ETA: 0s - loss: 0.2624 - acc: 0.908 - ETA: 0s - loss: 0.2622 - acc: 0.907 - ETA: 0s - loss: 0.2618 - acc: 0.906 - 0s 596us/step - loss: 0.2626 - acc: 0.9070 100/100 [==============================] - ETA: - ETA: - 2s 25ms/step

Accuracy on training set is 0.9069999775886536

Accuracy on test set is 0.8999999761581421


 

상당히 높은 수준의 정확도를 나타내는 것을 확인하실 수 있습니다. 전이 학습이라는 개념을 해당 실습에서 구체적으로 다루지는 않지만, 해당 코드는 훈련한 레즈넷이라는 모델을 가져와 CIFAR10 데이터를 분류시키는 방식입니다. 이제 다음 코드에서 직접 개인의 이미지를 가져와 예측을 시켜볼 수도 있습니다. 

 

model1=load_model('ResNet50.h5')

IMG_SIZE=32
path1='./my_image/cat.png'
img_data1 = cv2.imread(path1, cv2.IMREAD_COLOR)
img_data1 = cv2.resize(img_data1, (IMG_SIZE, IMG_SIZE))
data1 = (img_data1.reshape(-1, IMG_SIZE, IMG_SIZE, 3))/255
print(data1)
print(data1.shape)
model_out=model1.predict(data1)

if np.argmax(model_out) == 1:
    str_label = 'Automobile'p
    print(str_label)
if np.argmax(model_out) == 2:
    str_label = 'Bird'
    print(str_label)
if np.argmax(model_out) == 3:
    str_label = 'Cat'
    print(str_label)
if np.argmax(model_out) == 4:
    str_label = 'Deer'
    print(str_label)
if np.argmax(model_out) == 0:
    str_label = 'Airplane'
    print(str_label)
if np.argmax(model_out) == 5:
    str_label = 'Dog'
    print(str_label)
if np.argmax(model_out) == 6:
    str_label = 'Frog'
    print(str_label)
if np.argmax(model_out) == 7:
    str_label = 'Horse'
    print(str_label)
if np.argmax(model_out) == 8:
    str_label = 'Ship'
    print(str_label)
if np.argmax(model_out) == 9:
    str_label = 'Truck'
    print(str_label)

 


[[[[0.74509804 0.85882353 0.8745098 ] [0.89803922 0.95294118 0.97647059] [0.87058824 0.9254902 0.94901961] ... [0.79215686 0.86666667 0.88627451] [0.81960784 0.88235294 0.90588235] [0.82352941 0.86666667 0.92156863]] [[0.78431373 0.87058824 0.89019608] [0.87843137 0.93333333 0.95686275] [0.87843137 0.93333333 0.95686275] ... [0.76470588 0.81960784 0.90196078] [0.6745098 0.69411765 0.89019608] [0.41568627 0.42745098 0.80784314]] [[0.78823529 0.8745098 0.89411765] [0.83921569 0.90588235 0.92941176] [0.84705882 0.90980392 0.93333333] ... [0.4 0.41176471 0.81176471] [0.14901961 0.18039216 0.65098039] [0.36470588 0.44705882 0.56470588]] ... [[0.43921569 0.61176471 0.74509804] [0.55294118 0.67058824 0.78039216] [0.49019608 0.61568627 0.72941176] ... [0.70588235 0.75294118 0.81568627] [0.72941176 0.79215686 0.83921569] [0.72156863 0.78431373 0.83529412]] [[0.42745098 0.57254902 0.70588235] [0.45882353 0.58823529 0.71764706] [0.23529412 0.40392157 0.56862745] ... [0.76470588 0.83137255 0.86666667] [0.76078431 0.82745098 0.87843137] [0.72941176 0.8 0.82745098]] [[0.43921569 0.58431373 0.70196078] [0.43921569 0.58823529 0.70588235] [0.28235294 0.43921569 0.60392157] ... [0.76078431 0.82352941 0.87058824] [0.77254902 0.83529412 0.88235294] [0.72156863 0.78431373 0.83529412]]]] (1, 32, 32, 3) Bird


 

결과는 다음과 같이 출력되었습니다. 백테스팅 결과는 생각보다 만족스럽지는 않았습니다. 하지만 압도적으로 훈련시간을 줄이고, 다양한 데이터들을 가지고 튜닝을 한다면 충분히 높은 예측력을 가질 수 있을 것이라는 생각이 들었습니다. 전이학습과 관련된 기술들이 연구되고 있으며, 앞으로도 끊임없이 주목해야할 개념인 것 같습니다.

반응형