mirror of
https://github.com/wassname/pipe-segmentation.git
synced 2026-07-17 01:30:37 +08:00
2.3 MiB
2.3 MiB
In [1]:
import os
os.environ['THEANO_FLAGS']='mode=FAST_RUN,device=gpu,floatX=float32'In [2]:
from matplotlib import pyplot as plt
import numpy as np
import seaborn as sns
import skimage
from skimage import transform, color
from path import Path
import arrow
from tqdm import tqdmIn [3]:
%matplotlib inline
plt.rcParams['figure.figsize']=(10,10)In [4]:
import keras
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Input, merge, Convolution2D, MaxPooling2D, UpSampling2D
from keras.optimizers import Adam
from keras.callbacks import ModelCheckpoint, LearningRateScheduler
from keras import backend as K
from keras.preprocessing.image import ImageDataGeneratorUsing Theano backend. Using gpu device 0: GeForce GTX 860M (CNMeM is disabled, cuDNN 4007)
In [5]:
img_rows = 80
img_cols = 112
batch_size=10
seed=1
output_shape=(img_rows,img_cols)In [6]:
dest_dir = Path('./data/augumented/train')
dest_dir_test = Path('./data/augumented/test')
# make sure image match
images=sorted(dest_dir.glob('image/*.png'))
masks=sorted(dest_dir.glob('mask/*.png'))
assert len(dest_dir.glob('image/*.png'))==len(dest_dir.glob('mask/*.png')), 'should be same number of pngs'
for i,[image,mask] in enumerate(zip(images,masks)):
assert image.basename()==mask.basename(),'i=%s %s!=%s'%(i,image.basename(),mask.basename())In [7]:
data_gen_args=dict(
rotation_range=10.,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=np.deg2rad(10),
zoom_range=0.1,
channel_shift_range=0.01,
fill_mode='constant',
horizontal_flip=True,
vertical_flip=True,
rescale=1/255.
)
datagen1 = ImageDataGenerator(**data_gen_args)
datagen2 = ImageDataGenerator(**data_gen_args)
image_gen=datagen1.flow_from_directory(dest_dir,
class_mode=None,
classes=['image'],
batch_size=batch_size,
seed=seed,
target_size=output_shape,
)
mask_gen=datagen2.flow_from_directory(dest_dir,
class_mode=None,
classes=['mask'],
batch_size=batch_size,
seed=seed,
target_size=output_shape,
)
# join the generators (converting the mask to greyscale)
def dual_gen(image_gen,mask_gen):
for image,mask in zip(image_gen,mask_gen):
mask=skimage.color.rgb2grey(np.transpose(mask,(0,2,3,1)))
yield image,mask
train_gen=dual_gen(image_gen,mask_gen)
X_train, y_train=next(train_gen)
X_train.shape, y_train.shapeOut [7]:
Found 3870 images belonging to 1 classes. Found 3870 images belonging to 1 classes.
((10, 3, 80, 112), (10, 80, 112))
In [8]:
# test gen
data_gen_args=dict(
fill_mode='constant',
rescale=1/255.
)
datagen_test1 = ImageDataGenerator(**data_gen_args)
datagen_test2 = ImageDataGenerator(**data_gen_args)
image_gen_test=datagen_test1.flow_from_directory(dest_dir_test,
class_mode=None,
classes=['image'],
batch_size=batch_size,
seed=seed,
target_size=output_shape,
shuffle=False
)
mask_gen_test=datagen_test2.flow_from_directory(dest_dir_test,
class_mode=None,
classes=['mask'],
batch_size=batch_size,
seed=seed,
target_size=output_shape,
shuffle=False
)
# join the generators
def dual_gen(image_gen,mask_gen):
for image,mask in zip(image_gen,mask_gen):
mask=skimage.color.rgb2grey(np.transpose(mask,(0,2,3,1)))
yield image,mask
test_gen=dual_gen(image_gen_test,mask_gen_test)
X_test, y_test=next(test_gen)
X_test.shape, y_test.shapeOut [8]:
Found 503 images belonging to 1 classes. Found 503 images belonging to 1 classes.
((10, 3, 80, 112), (10, 80, 112))
In [9]:
# train gen, but this time un-augumented so I can directly compare them for overfitting
data_gen_args=dict(
fill_mode='constant',
rescale=1/255.
)
datagen_test1b = ImageDataGenerator(**data_gen_args)
datagen_test2b = ImageDataGenerator(**data_gen_args)
image_gen_train2=datagen_test1b.flow_from_directory(dest_dir,
class_mode=None,
classes=['image'],
batch_size=batch_size,
seed=seed,
target_size=output_shape,
shuffle=False
)
mask_gen_train2=datagen_test2b.flow_from_directory(dest_dir,
class_mode=None,
classes=['mask'],
batch_size=batch_size,
seed=seed,
target_size=output_shape,
shuffle=False
)
# join the generators
def dual_gen(image_gen,mask_gen):
for image,mask in zip(image_gen,mask_gen):
mask=skimage.color.rgb2grey(np.transpose(mask,(0,2,3,1)))
yield image,mask
train_gen_unaugumented=dual_gen(image_gen_train2,mask_gen_train2)
X_test, y_test=next(train_gen_unaugumented)
X_test.shape, y_test.shapeOut [9]:
Found 3870 images belonging to 1 classes. Found 3870 images belonging to 1 classes.
((10, 3, 80, 112), (10, 80, 112))
In [10]:
# View some of the data
seed=1
n=5
rows=n
cols=4
pltnb=0
plt.figure(figsize=(15,rows*2))
for i in range(n):
X_train, y_train=next(train_gen)
for b in range(2):
# create a grid of 3x2
pltnb+=1
plt.subplot(rows,cols,pltnb)
plt.title('i=%s batchn=%s datagen1'%(i,b))
plt.imshow(np.transpose(X_train[b],(1,2,0)))
plt.colorbar()
plt.axis('off')
pltnb+=1
plt.subplot(rows,cols,pltnb)
plt.title('i=%s batchn=%s gen2'%(i,b))
plt.imshow(y_train[b], cmap=plt.get_cmap('gray'))
plt.colorbar()
plt.axis('off')
plt.tight_layout()
plt.show()In [203]:
# show data dist
plt.figure(figsize=(15,5))
plt.subplot(1,2,1)
sns.distplot(X_train.flatten())
plt.title('X')
plt.subplot(1,2,2)
sns.distplot(y_train.flatten())
plt.title('y')Out [203]:
<matplotlib.text.Text at 0x7fb864bca0f0>
In [11]:
# define custom loss and metric functions
from keras import backend as K
smooth = 1
def dice_coef(y_true, y_pred, smooth=1):
"""
Dice = 2*sum(|A*B|)/(sum(A^2)+sum(B^2))
ref: https://arxiv.org/pdf/1606.04797v1.pdf
"""
intersection = K.sum(K.abs(y_true * y_pred), axis=-1)
return (2. * intersection + smooth) / (K.sum(K.square(y_true),-1) + K.sum(K.square(y_pred),-1) + smooth)
# I think the missing one was a mistake, because it made loss(y_true,y_true)=-1
def dice_coef_loss(y_true, y_pred):
return 1-dice_coef(y_true, y_pred)
In [12]:
import sys
from keras.models import Model
from keras.layers import Input, merge, Convolution2D, MaxPooling2D, UpSampling2D, Dense
from keras.layers import BatchNormalization, Dropout, Flatten, Lambda, Reshape
from keras.layers.advanced_activations import ELU, LeakyReLU
from keras import backend as K
def unet_inception_model(optimiser, img_cols=512, img_rows=512, activation='relu', dropout=0.5, init='he_normal', splitted=True):
actv = activation == 'relu' and (lambda: LeakyReLU(0.1)) or activation == 'elu' and (lambda: ELU(1.0)) or None
def inception_block(inputs, depth, batch_mode=0, splitted=False):
"""Inception block v1 with asymetric convolutions"""
assert depth % 16 == 0
c1_1 = Convolution2D(int(depth/4), 1, 1, init=init, border_mode='same')(inputs)
c2_1 = Convolution2D(int(depth/8*3), 1, 1, init=init, border_mode='same')(inputs)
c2_1 = actv()(c2_1)
if splitted:
c2_2 = Convolution2D(int(depth/2), 1, 3, init=init, border_mode='same')(c2_1)
c2_2 = BatchNormalization(mode=batch_mode, axis=1)(c2_2)
c2_2 = actv()(c2_2)
c2_3 = Convolution2D(int(depth/2), 3, 1, init=init, border_mode='same')(c2_2)
else:
c2_3 = Convolution2D(int(depth/2), 3, 3, init=init, border_mode='same')(c2_1)
c3_1 = Convolution2D(int(depth/16), 1, 1, init=init, border_mode='same')(inputs)
c3_1 = actv()(c3_1)
if splitted:
c3_2 = Convolution2D(int(depth/8), 1, 5, init=init, border_mode='same')(c3_1)
c3_2 = BatchNormalization(mode=batch_mode, axis=1)(c3_2)
c3_2 = actv()(c3_2)
c3_3 = Convolution2D(int(depth/8), 5, 1, init=init, border_mode='same')(c3_2)
else:
c3_3 = Convolution2D(int(depth/8), 5, 5, init=init, border_mode='same')(c3_1)
p4_1 = MaxPooling2D(pool_size=(3,3), strides=(1,1), border_mode='same')(inputs)
c4_2 = Convolution2D(int(depth/8), 1, 1, init=init, border_mode='same')(p4_1)
res = merge([c1_1, c2_3, c3_3, c4_2], mode='concat', concat_axis=1)
res = BatchNormalization(mode=batch_mode, axis=1)(res)
res = actv()(res)
return res
def residual_skip(inputs, num, depth, scale=0.1):
"""
A skip connection with a branch to a residual block
/ 1x1conv \
input ---------- - output
"""
residual = Convolution2D(depth, num, num, border_mode='same')(inputs)
residual = BatchNormalization(mode=2, axis=1)(residual)
residual = Lambda(lambda x: x*scale)(residual)
res = merge([inputs, residual], mode="sum")
return actv()(res)
def reduction_block(nb_filter, nb_row, nb_col, border_mode='same', subsample=(1, 1)):
"""Downsampling using a strided convolution followed by batchnorm and activation"""
def f(_input):
conv = Convolution2D(nb_filter=nb_filter, nb_row=nb_row, nb_col=nb_col, subsample=subsample,
border_mode=border_mode)(_input)
norm = BatchNormalization(mode=2, axis=1)(conv)
return actv()(norm)
return f
def get_unet_inception_2head(optimizer):
inputs = Input((3, img_rows, img_cols), name='main_input')
conv1 = inception_block(inputs, 32, batch_mode=2, splitted=splitted)
pool1 = reduction_block(32, 3, 3, border_mode='same', subsample=(2,2))(conv1)
pool1 = Dropout(dropout)(pool1)
conv2 = inception_block(pool1, 64, batch_mode=2, splitted=splitted)
pool2 = reduction_block(64, 3, 3, border_mode='same', subsample=(2,2))(conv2)
pool2 = Dropout(dropout)(pool2)
conv3 = inception_block(pool2, 128, batch_mode=2, splitted=splitted)
pool3 = reduction_block(128, 3, 3, border_mode='same', subsample=(2,2))(conv3)
pool3 = Dropout(dropout)(pool3)
conv4 = inception_block(pool3, 256, batch_mode=2, splitted=splitted)
pool4 = reduction_block(256, 3, 3, border_mode='same', subsample=(2,2))(conv4)
pool4 = Dropout(dropout)(pool4)
conv5 = inception_block(pool4, 512, batch_mode=2, splitted=splitted)
conv5 = Dropout(dropout)(conv5)
after_conv4 = residual_skip(conv4, 1, 256)
up6 = merge([UpSampling2D(size=(2, 2))(conv5), after_conv4], mode='concat', concat_axis=1)
conv6 = inception_block(up6, 256, batch_mode=2, splitted=splitted)
conv6 = Dropout(dropout)(conv6)
after_conv3 = residual_skip(conv3, 1, 128)
up7 = merge([UpSampling2D(size=(2, 2))(conv6), after_conv3], mode='concat', concat_axis=1)
conv7 = inception_block(up7, 128, batch_mode=2, splitted=splitted)
conv7 = Dropout(dropout)(conv7)
after_conv2 = residual_skip(conv2, 1, 64)
up8 = merge([UpSampling2D(size=(2, 2))(conv7), after_conv2], mode='concat', concat_axis=1)
conv8 = inception_block(up8, 64, batch_mode=2, splitted=splitted)
conv8 = Dropout(dropout)(conv8)
after_conv1 = residual_skip(conv1, 1, 32)
up9 = merge([UpSampling2D(size=(2, 2))(conv8), after_conv1], mode='concat', concat_axis=1)
conv9 = inception_block(up9, 32, batch_mode=2, splitted=splitted)
conv9 = Dropout(dropout)(conv9)
conv10 = Convolution2D(1, 1, 1, init=init, activation='hard_sigmoid')(conv9)
reshp = Reshape((img_rows,img_cols), name='main_output')(conv10)
model = Model(input=inputs, output=reshp)
model.compile(optimizer=optimizer,
loss=[dice_coef_loss],
metrics=['accuracy']
)
return model
return get_unet_inception_2head(optimiser)
In [13]:
model_name='unet_inception_inv2'
optimizer = keras.optimizers.Nadam(lr=2e-4)
model = unet_inception_model(optimizer,img_cols,img_rows,dropout=0.5)
model_checkpoint = ModelCheckpoint('models/%s_weights.hdf5'%model_name, monitor='val_acc', save_best_only=True, save_weights_only=True)
early_stopping = keras.callbacks.EarlyStopping(patience=2, monitor='val_acc')In [14]:
model.summary()____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
main_input (InputLayer) (None, 3, 80, 112) 0
____________________________________________________________________________________________________
convolution2d_2 (Convolution2D) (None, 12, 80, 112) 48 main_input[0][0]
____________________________________________________________________________________________________
convolution2d_5 (Convolution2D) (None, 2, 80, 112) 8 main_input[0][0]
____________________________________________________________________________________________________
leakyrelu_1 (LeakyReLU) (None, 12, 80, 112) 0 convolution2d_2[0][0]
____________________________________________________________________________________________________
leakyrelu_3 (LeakyReLU) (None, 2, 80, 112) 0 convolution2d_5[0][0]
____________________________________________________________________________________________________
convolution2d_3 (Convolution2D) (None, 16, 80, 112) 592 leakyrelu_1[0][0]
____________________________________________________________________________________________________
convolution2d_6 (Convolution2D) (None, 4, 80, 112) 44 leakyrelu_3[0][0]
____________________________________________________________________________________________________
batchnormalization_1 (BatchNormal(None, 16, 80, 112) 32 convolution2d_3[0][0]
____________________________________________________________________________________________________
batchnormalization_2 (BatchNormal(None, 4, 80, 112) 8 convolution2d_6[0][0]
____________________________________________________________________________________________________
leakyrelu_2 (LeakyReLU) (None, 16, 80, 112) 0 batchnormalization_1[0][0]
____________________________________________________________________________________________________
leakyrelu_4 (LeakyReLU) (None, 4, 80, 112) 0 batchnormalization_2[0][0]
____________________________________________________________________________________________________
maxpooling2d_1 (MaxPooling2D) (None, 3, 80, 112) 0 main_input[0][0]
____________________________________________________________________________________________________
convolution2d_1 (Convolution2D) (None, 8, 80, 112) 32 main_input[0][0]
____________________________________________________________________________________________________
convolution2d_4 (Convolution2D) (None, 16, 80, 112) 784 leakyrelu_2[0][0]
____________________________________________________________________________________________________
convolution2d_7 (Convolution2D) (None, 4, 80, 112) 84 leakyrelu_4[0][0]
____________________________________________________________________________________________________
convolution2d_8 (Convolution2D) (None, 4, 80, 112) 16 maxpooling2d_1[0][0]
____________________________________________________________________________________________________
merge_1 (Merge) (None, 32, 80, 112) 0 convolution2d_1[0][0]
convolution2d_4[0][0]
convolution2d_7[0][0]
convolution2d_8[0][0]
____________________________________________________________________________________________________
batchnormalization_3 (BatchNormal(None, 32, 80, 112) 64 merge_1[0][0]
____________________________________________________________________________________________________
leakyrelu_5 (LeakyReLU) (None, 32, 80, 112) 0 batchnormalization_3[0][0]
____________________________________________________________________________________________________
convolution2d_9 (Convolution2D) (None, 32, 40, 56) 9248 leakyrelu_5[0][0]
____________________________________________________________________________________________________
batchnormalization_4 (BatchNormal(None, 32, 40, 56) 64 convolution2d_9[0][0]
____________________________________________________________________________________________________
leakyrelu_6 (LeakyReLU) (None, 32, 40, 56) 0 batchnormalization_4[0][0]
____________________________________________________________________________________________________
dropout_1 (Dropout) (None, 32, 40, 56) 0 leakyrelu_6[0][0]
____________________________________________________________________________________________________
convolution2d_11 (Convolution2D) (None, 24, 40, 56) 792 dropout_1[0][0]
____________________________________________________________________________________________________
convolution2d_14 (Convolution2D) (None, 4, 40, 56) 132 dropout_1[0][0]
____________________________________________________________________________________________________
leakyrelu_7 (LeakyReLU) (None, 24, 40, 56) 0 convolution2d_11[0][0]
____________________________________________________________________________________________________
leakyrelu_9 (LeakyReLU) (None, 4, 40, 56) 0 convolution2d_14[0][0]
____________________________________________________________________________________________________
convolution2d_12 (Convolution2D) (None, 32, 40, 56) 2336 leakyrelu_7[0][0]
____________________________________________________________________________________________________
convolution2d_15 (Convolution2D) (None, 8, 40, 56) 168 leakyrelu_9[0][0]
____________________________________________________________________________________________________
batchnormalization_5 (BatchNormal(None, 32, 40, 56) 64 convolution2d_12[0][0]
____________________________________________________________________________________________________
batchnormalization_6 (BatchNormal(None, 8, 40, 56) 16 convolution2d_15[0][0]
____________________________________________________________________________________________________
leakyrelu_8 (LeakyReLU) (None, 32, 40, 56) 0 batchnormalization_5[0][0]
____________________________________________________________________________________________________
leakyrelu_10 (LeakyReLU) (None, 8, 40, 56) 0 batchnormalization_6[0][0]
____________________________________________________________________________________________________
maxpooling2d_2 (MaxPooling2D) (None, 32, 40, 56) 0 dropout_1[0][0]
____________________________________________________________________________________________________
convolution2d_10 (Convolution2D) (None, 16, 40, 56) 528 dropout_1[0][0]
____________________________________________________________________________________________________
convolution2d_13 (Convolution2D) (None, 32, 40, 56) 3104 leakyrelu_8[0][0]
____________________________________________________________________________________________________
convolution2d_16 (Convolution2D) (None, 8, 40, 56) 328 leakyrelu_10[0][0]
____________________________________________________________________________________________________
convolution2d_17 (Convolution2D) (None, 8, 40, 56) 264 maxpooling2d_2[0][0]
____________________________________________________________________________________________________
merge_2 (Merge) (None, 64, 40, 56) 0 convolution2d_10[0][0]
convolution2d_13[0][0]
convolution2d_16[0][0]
convolution2d_17[0][0]
____________________________________________________________________________________________________
batchnormalization_7 (BatchNormal(None, 64, 40, 56) 128 merge_2[0][0]
____________________________________________________________________________________________________
leakyrelu_11 (LeakyReLU) (None, 64, 40, 56) 0 batchnormalization_7[0][0]
____________________________________________________________________________________________________
convolution2d_18 (Convolution2D) (None, 64, 20, 28) 36928 leakyrelu_11[0][0]
____________________________________________________________________________________________________
batchnormalization_8 (BatchNormal(None, 64, 20, 28) 128 convolution2d_18[0][0]
____________________________________________________________________________________________________
leakyrelu_12 (LeakyReLU) (None, 64, 20, 28) 0 batchnormalization_8[0][0]
____________________________________________________________________________________________________
dropout_2 (Dropout) (None, 64, 20, 28) 0 leakyrelu_12[0][0]
____________________________________________________________________________________________________
convolution2d_20 (Convolution2D) (None, 48, 20, 28) 3120 dropout_2[0][0]
____________________________________________________________________________________________________
convolution2d_23 (Convolution2D) (None, 8, 20, 28) 520 dropout_2[0][0]
____________________________________________________________________________________________________
leakyrelu_13 (LeakyReLU) (None, 48, 20, 28) 0 convolution2d_20[0][0]
____________________________________________________________________________________________________
leakyrelu_15 (LeakyReLU) (None, 8, 20, 28) 0 convolution2d_23[0][0]
____________________________________________________________________________________________________
convolution2d_21 (Convolution2D) (None, 64, 20, 28) 9280 leakyrelu_13[0][0]
____________________________________________________________________________________________________
convolution2d_24 (Convolution2D) (None, 16, 20, 28) 656 leakyrelu_15[0][0]
____________________________________________________________________________________________________
batchnormalization_9 (BatchNormal(None, 64, 20, 28) 128 convolution2d_21[0][0]
____________________________________________________________________________________________________
batchnormalization_10 (BatchNorma(None, 16, 20, 28) 32 convolution2d_24[0][0]
____________________________________________________________________________________________________
leakyrelu_14 (LeakyReLU) (None, 64, 20, 28) 0 batchnormalization_9[0][0]
____________________________________________________________________________________________________
leakyrelu_16 (LeakyReLU) (None, 16, 20, 28) 0 batchnormalization_10[0][0]
____________________________________________________________________________________________________
maxpooling2d_3 (MaxPooling2D) (None, 64, 20, 28) 0 dropout_2[0][0]
____________________________________________________________________________________________________
convolution2d_19 (Convolution2D) (None, 32, 20, 28) 2080 dropout_2[0][0]
____________________________________________________________________________________________________
convolution2d_22 (Convolution2D) (None, 64, 20, 28) 12352 leakyrelu_14[0][0]
____________________________________________________________________________________________________
convolution2d_25 (Convolution2D) (None, 16, 20, 28) 1296 leakyrelu_16[0][0]
____________________________________________________________________________________________________
convolution2d_26 (Convolution2D) (None, 16, 20, 28) 1040 maxpooling2d_3[0][0]
____________________________________________________________________________________________________
merge_3 (Merge) (None, 128, 20, 28) 0 convolution2d_19[0][0]
convolution2d_22[0][0]
convolution2d_25[0][0]
convolution2d_26[0][0]
____________________________________________________________________________________________________
batchnormalization_11 (BatchNorma(None, 128, 20, 28) 256 merge_3[0][0]
____________________________________________________________________________________________________
leakyrelu_17 (LeakyReLU) (None, 128, 20, 28) 0 batchnormalization_11[0][0]
____________________________________________________________________________________________________
convolution2d_27 (Convolution2D) (None, 128, 10, 14) 147584 leakyrelu_17[0][0]
____________________________________________________________________________________________________
batchnormalization_12 (BatchNorma(None, 128, 10, 14) 256 convolution2d_27[0][0]
____________________________________________________________________________________________________
leakyrelu_18 (LeakyReLU) (None, 128, 10, 14) 0 batchnormalization_12[0][0]
____________________________________________________________________________________________________
dropout_3 (Dropout) (None, 128, 10, 14) 0 leakyrelu_18[0][0]
____________________________________________________________________________________________________
convolution2d_29 (Convolution2D) (None, 96, 10, 14) 12384 dropout_3[0][0]
____________________________________________________________________________________________________
convolution2d_32 (Convolution2D) (None, 16, 10, 14) 2064 dropout_3[0][0]
____________________________________________________________________________________________________
leakyrelu_19 (LeakyReLU) (None, 96, 10, 14) 0 convolution2d_29[0][0]
____________________________________________________________________________________________________
leakyrelu_21 (LeakyReLU) (None, 16, 10, 14) 0 convolution2d_32[0][0]
____________________________________________________________________________________________________
convolution2d_30 (Convolution2D) (None, 128, 10, 14) 36992 leakyrelu_19[0][0]
____________________________________________________________________________________________________
convolution2d_33 (Convolution2D) (None, 32, 10, 14) 2592 leakyrelu_21[0][0]
____________________________________________________________________________________________________
batchnormalization_13 (BatchNorma(None, 128, 10, 14) 256 convolution2d_30[0][0]
____________________________________________________________________________________________________
batchnormalization_14 (BatchNorma(None, 32, 10, 14) 64 convolution2d_33[0][0]
____________________________________________________________________________________________________
leakyrelu_20 (LeakyReLU) (None, 128, 10, 14) 0 batchnormalization_13[0][0]
____________________________________________________________________________________________________
leakyrelu_22 (LeakyReLU) (None, 32, 10, 14) 0 batchnormalization_14[0][0]
____________________________________________________________________________________________________
maxpooling2d_4 (MaxPooling2D) (None, 128, 10, 14) 0 dropout_3[0][0]
____________________________________________________________________________________________________
convolution2d_28 (Convolution2D) (None, 64, 10, 14) 8256 dropout_3[0][0]
____________________________________________________________________________________________________
convolution2d_31 (Convolution2D) (None, 128, 10, 14) 49280 leakyrelu_20[0][0]
____________________________________________________________________________________________________
convolution2d_34 (Convolution2D) (None, 32, 10, 14) 5152 leakyrelu_22[0][0]
____________________________________________________________________________________________________
convolution2d_35 (Convolution2D) (None, 32, 10, 14) 4128 maxpooling2d_4[0][0]
____________________________________________________________________________________________________
merge_4 (Merge) (None, 256, 10, 14) 0 convolution2d_28[0][0]
convolution2d_31[0][0]
convolution2d_34[0][0]
convolution2d_35[0][0]
____________________________________________________________________________________________________
batchnormalization_15 (BatchNorma(None, 256, 10, 14) 512 merge_4[0][0]
____________________________________________________________________________________________________
leakyrelu_23 (LeakyReLU) (None, 256, 10, 14) 0 batchnormalization_15[0][0]
____________________________________________________________________________________________________
convolution2d_36 (Convolution2D) (None, 256, 5, 7) 590080 leakyrelu_23[0][0]
____________________________________________________________________________________________________
batchnormalization_16 (BatchNorma(None, 256, 5, 7) 512 convolution2d_36[0][0]
____________________________________________________________________________________________________
leakyrelu_24 (LeakyReLU) (None, 256, 5, 7) 0 batchnormalization_16[0][0]
____________________________________________________________________________________________________
dropout_4 (Dropout) (None, 256, 5, 7) 0 leakyrelu_24[0][0]
____________________________________________________________________________________________________
convolution2d_38 (Convolution2D) (None, 192, 5, 7) 49344 dropout_4[0][0]
____________________________________________________________________________________________________
convolution2d_41 (Convolution2D) (None, 32, 5, 7) 8224 dropout_4[0][0]
____________________________________________________________________________________________________
leakyrelu_25 (LeakyReLU) (None, 192, 5, 7) 0 convolution2d_38[0][0]
____________________________________________________________________________________________________
leakyrelu_27 (LeakyReLU) (None, 32, 5, 7) 0 convolution2d_41[0][0]
____________________________________________________________________________________________________
convolution2d_39 (Convolution2D) (None, 256, 5, 7) 147712 leakyrelu_25[0][0]
____________________________________________________________________________________________________
convolution2d_42 (Convolution2D) (None, 64, 5, 7) 10304 leakyrelu_27[0][0]
____________________________________________________________________________________________________
batchnormalization_17 (BatchNorma(None, 256, 5, 7) 512 convolution2d_39[0][0]
____________________________________________________________________________________________________
batchnormalization_18 (BatchNorma(None, 64, 5, 7) 128 convolution2d_42[0][0]
____________________________________________________________________________________________________
leakyrelu_26 (LeakyReLU) (None, 256, 5, 7) 0 batchnormalization_17[0][0]
____________________________________________________________________________________________________
leakyrelu_28 (LeakyReLU) (None, 64, 5, 7) 0 batchnormalization_18[0][0]
____________________________________________________________________________________________________
maxpooling2d_5 (MaxPooling2D) (None, 256, 5, 7) 0 dropout_4[0][0]
____________________________________________________________________________________________________
convolution2d_37 (Convolution2D) (None, 128, 5, 7) 32896 dropout_4[0][0]
____________________________________________________________________________________________________
convolution2d_40 (Convolution2D) (None, 256, 5, 7) 196864 leakyrelu_26[0][0]
____________________________________________________________________________________________________
convolution2d_43 (Convolution2D) (None, 64, 5, 7) 20544 leakyrelu_28[0][0]
____________________________________________________________________________________________________
convolution2d_44 (Convolution2D) (None, 64, 5, 7) 16448 maxpooling2d_5[0][0]
____________________________________________________________________________________________________
merge_5 (Merge) (None, 512, 5, 7) 0 convolution2d_37[0][0]
convolution2d_40[0][0]
convolution2d_43[0][0]
convolution2d_44[0][0]
____________________________________________________________________________________________________
convolution2d_45 (Convolution2D) (None, 256, 10, 14) 65792 leakyrelu_23[0][0]
____________________________________________________________________________________________________
batchnormalization_19 (BatchNorma(None, 512, 5, 7) 1024 merge_5[0][0]
____________________________________________________________________________________________________
batchnormalization_20 (BatchNorma(None, 256, 10, 14) 512 convolution2d_45[0][0]
____________________________________________________________________________________________________
leakyrelu_29 (LeakyReLU) (None, 512, 5, 7) 0 batchnormalization_19[0][0]
____________________________________________________________________________________________________
lambda_1 (Lambda) (None, 256, 10, 14) 0 batchnormalization_20[0][0]
____________________________________________________________________________________________________
dropout_5 (Dropout) (None, 512, 5, 7) 0 leakyrelu_29[0][0]
____________________________________________________________________________________________________
merge_6 (Merge) (None, 256, 10, 14) 0 leakyrelu_23[0][0]
lambda_1[0][0]
____________________________________________________________________________________________________
upsampling2d_1 (UpSampling2D) (None, 512, 10, 14) 0 dropout_5[0][0]
____________________________________________________________________________________________________
leakyrelu_30 (LeakyReLU) (None, 256, 10, 14) 0 merge_6[0][0]
____________________________________________________________________________________________________
merge_7 (Merge) (None, 768, 10, 14) 0 upsampling2d_1[0][0]
leakyrelu_30[0][0]
____________________________________________________________________________________________________
convolution2d_47 (Convolution2D) (None, 96, 10, 14) 73824 merge_7[0][0]
____________________________________________________________________________________________________
convolution2d_50 (Convolution2D) (None, 16, 10, 14) 12304 merge_7[0][0]
____________________________________________________________________________________________________
leakyrelu_31 (LeakyReLU) (None, 96, 10, 14) 0 convolution2d_47[0][0]
____________________________________________________________________________________________________
leakyrelu_33 (LeakyReLU) (None, 16, 10, 14) 0 convolution2d_50[0][0]
____________________________________________________________________________________________________
convolution2d_48 (Convolution2D) (None, 128, 10, 14) 36992 leakyrelu_31[0][0]
____________________________________________________________________________________________________
convolution2d_51 (Convolution2D) (None, 32, 10, 14) 2592 leakyrelu_33[0][0]
____________________________________________________________________________________________________
batchnormalization_21 (BatchNorma(None, 128, 10, 14) 256 convolution2d_48[0][0]
____________________________________________________________________________________________________
batchnormalization_22 (BatchNorma(None, 32, 10, 14) 64 convolution2d_51[0][0]
____________________________________________________________________________________________________
leakyrelu_32 (LeakyReLU) (None, 128, 10, 14) 0 batchnormalization_21[0][0]
____________________________________________________________________________________________________
leakyrelu_34 (LeakyReLU) (None, 32, 10, 14) 0 batchnormalization_22[0][0]
____________________________________________________________________________________________________
maxpooling2d_6 (MaxPooling2D) (None, 768, 10, 14) 0 merge_7[0][0]
____________________________________________________________________________________________________
convolution2d_46 (Convolution2D) (None, 64, 10, 14) 49216 merge_7[0][0]
____________________________________________________________________________________________________
convolution2d_49 (Convolution2D) (None, 128, 10, 14) 49280 leakyrelu_32[0][0]
____________________________________________________________________________________________________
convolution2d_52 (Convolution2D) (None, 32, 10, 14) 5152 leakyrelu_34[0][0]
____________________________________________________________________________________________________
convolution2d_53 (Convolution2D) (None, 32, 10, 14) 24608 maxpooling2d_6[0][0]
____________________________________________________________________________________________________
merge_8 (Merge) (None, 256, 10, 14) 0 convolution2d_46[0][0]
convolution2d_49[0][0]
convolution2d_52[0][0]
convolution2d_53[0][0]
____________________________________________________________________________________________________
convolution2d_54 (Convolution2D) (None, 128, 20, 28) 16512 leakyrelu_17[0][0]
____________________________________________________________________________________________________
batchnormalization_23 (BatchNorma(None, 256, 10, 14) 512 merge_8[0][0]
____________________________________________________________________________________________________
batchnormalization_24 (BatchNorma(None, 128, 20, 28) 256 convolution2d_54[0][0]
____________________________________________________________________________________________________
leakyrelu_35 (LeakyReLU) (None, 256, 10, 14) 0 batchnormalization_23[0][0]
____________________________________________________________________________________________________
lambda_2 (Lambda) (None, 128, 20, 28) 0 batchnormalization_24[0][0]
____________________________________________________________________________________________________
dropout_6 (Dropout) (None, 256, 10, 14) 0 leakyrelu_35[0][0]
____________________________________________________________________________________________________
merge_9 (Merge) (None, 128, 20, 28) 0 leakyrelu_17[0][0]
lambda_2[0][0]
____________________________________________________________________________________________________
upsampling2d_2 (UpSampling2D) (None, 256, 20, 28) 0 dropout_6[0][0]
____________________________________________________________________________________________________
leakyrelu_36 (LeakyReLU) (None, 128, 20, 28) 0 merge_9[0][0]
____________________________________________________________________________________________________
merge_10 (Merge) (None, 384, 20, 28) 0 upsampling2d_2[0][0]
leakyrelu_36[0][0]
____________________________________________________________________________________________________
convolution2d_56 (Convolution2D) (None, 48, 20, 28) 18480 merge_10[0][0]
____________________________________________________________________________________________________
convolution2d_59 (Convolution2D) (None, 8, 20, 28) 3080 merge_10[0][0]
____________________________________________________________________________________________________
leakyrelu_37 (LeakyReLU) (None, 48, 20, 28) 0 convolution2d_56[0][0]
____________________________________________________________________________________________________
leakyrelu_39 (LeakyReLU) (None, 8, 20, 28) 0 convolution2d_59[0][0]
____________________________________________________________________________________________________
convolution2d_57 (Convolution2D) (None, 64, 20, 28) 9280 leakyrelu_37[0][0]
____________________________________________________________________________________________________
convolution2d_60 (Convolution2D) (None, 16, 20, 28) 656 leakyrelu_39[0][0]
____________________________________________________________________________________________________
batchnormalization_25 (BatchNorma(None, 64, 20, 28) 128 convolution2d_57[0][0]
____________________________________________________________________________________________________
batchnormalization_26 (BatchNorma(None, 16, 20, 28) 32 convolution2d_60[0][0]
____________________________________________________________________________________________________
leakyrelu_38 (LeakyReLU) (None, 64, 20, 28) 0 batchnormalization_25[0][0]
____________________________________________________________________________________________________
leakyrelu_40 (LeakyReLU) (None, 16, 20, 28) 0 batchnormalization_26[0][0]
____________________________________________________________________________________________________
maxpooling2d_7 (MaxPooling2D) (None, 384, 20, 28) 0 merge_10[0][0]
____________________________________________________________________________________________________
convolution2d_55 (Convolution2D) (None, 32, 20, 28) 12320 merge_10[0][0]
____________________________________________________________________________________________________
convolution2d_58 (Convolution2D) (None, 64, 20, 28) 12352 leakyrelu_38[0][0]
____________________________________________________________________________________________________
convolution2d_61 (Convolution2D) (None, 16, 20, 28) 1296 leakyrelu_40[0][0]
____________________________________________________________________________________________________
convolution2d_62 (Convolution2D) (None, 16, 20, 28) 6160 maxpooling2d_7[0][0]
____________________________________________________________________________________________________
merge_11 (Merge) (None, 128, 20, 28) 0 convolution2d_55[0][0]
convolution2d_58[0][0]
convolution2d_61[0][0]
convolution2d_62[0][0]
____________________________________________________________________________________________________
convolution2d_63 (Convolution2D) (None, 64, 40, 56) 4160 leakyrelu_11[0][0]
____________________________________________________________________________________________________
batchnormalization_27 (BatchNorma(None, 128, 20, 28) 256 merge_11[0][0]
____________________________________________________________________________________________________
batchnormalization_28 (BatchNorma(None, 64, 40, 56) 128 convolution2d_63[0][0]
____________________________________________________________________________________________________
leakyrelu_41 (LeakyReLU) (None, 128, 20, 28) 0 batchnormalization_27[0][0]
____________________________________________________________________________________________________
lambda_3 (Lambda) (None, 64, 40, 56) 0 batchnormalization_28[0][0]
____________________________________________________________________________________________________
dropout_7 (Dropout) (None, 128, 20, 28) 0 leakyrelu_41[0][0]
____________________________________________________________________________________________________
merge_12 (Merge) (None, 64, 40, 56) 0 leakyrelu_11[0][0]
lambda_3[0][0]
____________________________________________________________________________________________________
upsampling2d_3 (UpSampling2D) (None, 128, 40, 56) 0 dropout_7[0][0]
____________________________________________________________________________________________________
leakyrelu_42 (LeakyReLU) (None, 64, 40, 56) 0 merge_12[0][0]
____________________________________________________________________________________________________
merge_13 (Merge) (None, 192, 40, 56) 0 upsampling2d_3[0][0]
leakyrelu_42[0][0]
____________________________________________________________________________________________________
convolution2d_65 (Convolution2D) (None, 24, 40, 56) 4632 merge_13[0][0]
____________________________________________________________________________________________________
convolution2d_68 (Convolution2D) (None, 4, 40, 56) 772 merge_13[0][0]
____________________________________________________________________________________________________
leakyrelu_43 (LeakyReLU) (None, 24, 40, 56) 0 convolution2d_65[0][0]
____________________________________________________________________________________________________
leakyrelu_45 (LeakyReLU) (None, 4, 40, 56) 0 convolution2d_68[0][0]
____________________________________________________________________________________________________
convolution2d_66 (Convolution2D) (None, 32, 40, 56) 2336 leakyrelu_43[0][0]
____________________________________________________________________________________________________
convolution2d_69 (Convolution2D) (None, 8, 40, 56) 168 leakyrelu_45[0][0]
____________________________________________________________________________________________________
batchnormalization_29 (BatchNorma(None, 32, 40, 56) 64 convolution2d_66[0][0]
____________________________________________________________________________________________________
batchnormalization_30 (BatchNorma(None, 8, 40, 56) 16 convolution2d_69[0][0]
____________________________________________________________________________________________________
leakyrelu_44 (LeakyReLU) (None, 32, 40, 56) 0 batchnormalization_29[0][0]
____________________________________________________________________________________________________
leakyrelu_46 (LeakyReLU) (None, 8, 40, 56) 0 batchnormalization_30[0][0]
____________________________________________________________________________________________________
maxpooling2d_8 (MaxPooling2D) (None, 192, 40, 56) 0 merge_13[0][0]
____________________________________________________________________________________________________
convolution2d_64 (Convolution2D) (None, 16, 40, 56) 3088 merge_13[0][0]
____________________________________________________________________________________________________
convolution2d_67 (Convolution2D) (None, 32, 40, 56) 3104 leakyrelu_44[0][0]
____________________________________________________________________________________________________
convolution2d_70 (Convolution2D) (None, 8, 40, 56) 328 leakyrelu_46[0][0]
____________________________________________________________________________________________________
convolution2d_71 (Convolution2D) (None, 8, 40, 56) 1544 maxpooling2d_8[0][0]
____________________________________________________________________________________________________
merge_14 (Merge) (None, 64, 40, 56) 0 convolution2d_64[0][0]
convolution2d_67[0][0]
convolution2d_70[0][0]
convolution2d_71[0][0]
____________________________________________________________________________________________________
convolution2d_72 (Convolution2D) (None, 32, 80, 112) 1056 leakyrelu_5[0][0]
____________________________________________________________________________________________________
batchnormalization_31 (BatchNorma(None, 64, 40, 56) 128 merge_14[0][0]
____________________________________________________________________________________________________
batchnormalization_32 (BatchNorma(None, 32, 80, 112) 64 convolution2d_72[0][0]
____________________________________________________________________________________________________
leakyrelu_47 (LeakyReLU) (None, 64, 40, 56) 0 batchnormalization_31[0][0]
____________________________________________________________________________________________________
lambda_4 (Lambda) (None, 32, 80, 112) 0 batchnormalization_32[0][0]
____________________________________________________________________________________________________
dropout_8 (Dropout) (None, 64, 40, 56) 0 leakyrelu_47[0][0]
____________________________________________________________________________________________________
merge_15 (Merge) (None, 32, 80, 112) 0 leakyrelu_5[0][0]
lambda_4[0][0]
____________________________________________________________________________________________________
upsampling2d_4 (UpSampling2D) (None, 64, 80, 112) 0 dropout_8[0][0]
____________________________________________________________________________________________________
leakyrelu_48 (LeakyReLU) (None, 32, 80, 112) 0 merge_15[0][0]
____________________________________________________________________________________________________
merge_16 (Merge) (None, 96, 80, 112) 0 upsampling2d_4[0][0]
leakyrelu_48[0][0]
____________________________________________________________________________________________________
convolution2d_74 (Convolution2D) (None, 12, 80, 112) 1164 merge_16[0][0]
____________________________________________________________________________________________________
convolution2d_77 (Convolution2D) (None, 2, 80, 112) 194 merge_16[0][0]
____________________________________________________________________________________________________
leakyrelu_49 (LeakyReLU) (None, 12, 80, 112) 0 convolution2d_74[0][0]
____________________________________________________________________________________________________
leakyrelu_51 (LeakyReLU) (None, 2, 80, 112) 0 convolution2d_77[0][0]
____________________________________________________________________________________________________
convolution2d_75 (Convolution2D) (None, 16, 80, 112) 592 leakyrelu_49[0][0]
____________________________________________________________________________________________________
convolution2d_78 (Convolution2D) (None, 4, 80, 112) 44 leakyrelu_51[0][0]
____________________________________________________________________________________________________
batchnormalization_33 (BatchNorma(None, 16, 80, 112) 32 convolution2d_75[0][0]
____________________________________________________________________________________________________
batchnormalization_34 (BatchNorma(None, 4, 80, 112) 8 convolution2d_78[0][0]
____________________________________________________________________________________________________
leakyrelu_50 (LeakyReLU) (None, 16, 80, 112) 0 batchnormalization_33[0][0]
____________________________________________________________________________________________________
leakyrelu_52 (LeakyReLU) (None, 4, 80, 112) 0 batchnormalization_34[0][0]
____________________________________________________________________________________________________
maxpooling2d_9 (MaxPooling2D) (None, 96, 80, 112) 0 merge_16[0][0]
____________________________________________________________________________________________________
convolution2d_73 (Convolution2D) (None, 8, 80, 112) 776 merge_16[0][0]
____________________________________________________________________________________________________
convolution2d_76 (Convolution2D) (None, 16, 80, 112) 784 leakyrelu_50[0][0]
____________________________________________________________________________________________________
convolution2d_79 (Convolution2D) (None, 4, 80, 112) 84 leakyrelu_52[0][0]
____________________________________________________________________________________________________
convolution2d_80 (Convolution2D) (None, 4, 80, 112) 388 maxpooling2d_9[0][0]
____________________________________________________________________________________________________
merge_17 (Merge) (None, 32, 80, 112) 0 convolution2d_73[0][0]
convolution2d_76[0][0]
convolution2d_79[0][0]
convolution2d_80[0][0]
____________________________________________________________________________________________________
batchnormalization_35 (BatchNorma(None, 32, 80, 112) 64 merge_17[0][0]
____________________________________________________________________________________________________
leakyrelu_53 (LeakyReLU) (None, 32, 80, 112) 0 batchnormalization_35[0][0]
____________________________________________________________________________________________________
dropout_9 (Dropout) (None, 32, 80, 112) 0 leakyrelu_53[0][0]
____________________________________________________________________________________________________
convolution2d_81 (Convolution2D) (None, 1, 80, 112) 33 dropout_9[0][0]
____________________________________________________________________________________________________
main_output (Reshape) (None, 80, 112) 0 convolution2d_81[0][0]
====================================================================================================
Total params: 1858475
____________________________________________________________________________________________________
In [15]:
# load pre-trained model?
# model.load_weights('models/unet_inception_inv2_20160929-10-50-26_acc-0.75_weights.hdf5')In [16]:
# sanity test
# y_pred = model.predict(X_test)
# plt.imshow(y_pred[0]>0.5)Out [16]:
<matplotlib.image.AxesImage at 0x7f86a3261780>
In [ ]:
model_checkpoint = ModelCheckpoint('models/%s_weights.hdf5'%model_name, monitor='val_acc', save_best_only=True, save_weights_only=True)
early_stopping = keras.callbacks.EarlyStopping(patience=2, monitor='val_acc')
history3 = model.fit_generator(train_gen,
samples_per_epoch=400,
nb_epoch=200,
verbose=1,
validation_data=test_gen,
nb_val_samples=170,
callbacks=[
model_checkpoint,
# early_stopping
])Epoch 1/200 400/400 [==============================] - 64s - loss: 0.8976 - acc: 0.0242 - val_loss: 0.8691 - val_acc: 0.0461 Epoch 2/200 400/400 [==============================] - 48s - loss: 0.8535 - acc: 0.0391 - val_loss: 0.7940 - val_acc: 0.0903 Epoch 3/200 400/400 [==============================] - 47s - loss: 0.8137 - acc: 0.0565 - val_loss: 0.6822 - val_acc: 0.1158 Epoch 4/200 400/400 [==============================] - 48s - loss: 0.7147 - acc: 0.0676 - val_loss: 0.6004 - val_acc: 0.2094 Epoch 5/200 400/400 [==============================] - 50s - loss: 0.6409 - acc: 0.0751 - val_loss: 0.5747 - val_acc: 0.2436 Epoch 6/200 400/400 [==============================] - 46s - loss: 0.5866 - acc: 0.0832 - val_loss: 0.5002 - val_acc: 0.3364 Epoch 7/200 400/400 [==============================] - 47s - loss: 0.5425 - acc: 0.0929 - val_loss: 0.4716 - val_acc: 0.3748 Epoch 8/200 400/400 [==============================] - 47s - loss: 0.5224 - acc: 0.0998 - val_loss: 0.4599 - val_acc: 0.3287 Epoch 9/200 400/400 [==============================] - 48s - loss: 0.4933 - acc: 0.0944 - val_loss: 0.4340 - val_acc: 0.3628 Epoch 10/200 400/400 [==============================] - 51s - loss: 0.4633 - acc: 0.1242 - val_loss: 0.4294 - val_acc: 0.4512 Epoch 11/200 400/400 [==============================] - 62s - loss: 0.4439 - acc: 0.1253 - val_loss: 0.4066 - val_acc: 0.3927 Epoch 12/200 400/400 [==============================] - 67s - loss: 0.4327 - acc: 0.1149 - val_loss: 0.3771 - val_acc: 0.4518 Epoch 13/200 400/400 [==============================] - 65s - loss: 0.4157 - acc: 0.1326 - val_loss: 0.3651 - val_acc: 0.4161 Epoch 14/200 400/400 [==============================] - 58s - loss: 0.4019 - acc: 0.1304 - val_loss: 0.3632 - val_acc: 0.4656 Epoch 15/200 400/400 [==============================] - 46s - loss: 0.3770 - acc: 0.1416 - val_loss: 0.3683 - val_acc: 0.4424 Epoch 16/200 400/400 [==============================] - 47s - loss: 0.3605 - acc: 0.1486 - val_loss: 0.3463 - val_acc: 0.4726 Epoch 17/200 400/400 [==============================] - 49s - loss: 0.3657 - acc: 0.1323 - val_loss: 0.3414 - val_acc: 0.4780 Epoch 18/200 400/400 [==============================] - 53s - loss: 0.3621 - acc: 0.1144 - val_loss: 0.3300 - val_acc: 0.4860 Epoch 19/200 400/400 [==============================] - 57s - loss: 0.3461 - acc: 0.1278 - val_loss: 0.3072 - val_acc: 0.4566 Epoch 20/200 400/400 [==============================] - 64s - loss: 0.3209 - acc: 0.1258 - val_loss: 0.3203 - val_acc: 0.4690 Epoch 21/200 400/400 [==============================] - 65s - loss: 0.3169 - acc: 0.1272 - val_loss: 0.3037 - val_acc: 0.5291 Epoch 22/200 400/400 [==============================] - 62s - loss: 0.3132 - acc: 0.1333 - val_loss: 0.2931 - val_acc: 0.5083 Epoch 23/200 400/400 [==============================] - 62s - loss: 0.2983 - acc: 0.1288 - val_loss: 0.2845 - val_acc: 0.4930 Epoch 24/200 400/400 [==============================] - 63s - loss: 0.2919 - acc: 0.1219 - val_loss: 0.2713 - val_acc: 0.5307 Epoch 25/200 400/400 [==============================] - 63s - loss: 0.2777 - acc: 0.1442 - val_loss: 0.2819 - val_acc: 0.5411 Epoch 26/200 400/400 [==============================] - 63s - loss: 0.2662 - acc: 0.1415 - val_loss: 0.2733 - val_acc: 0.5252 Epoch 27/200 400/400 [==============================] - 63s - loss: 0.2750 - acc: 0.1280 - val_loss: 0.2503 - val_acc: 0.5768 Epoch 28/200 400/400 [==============================] - 63s - loss: 0.2610 - acc: 0.1276 - val_loss: 0.2527 - val_acc: 0.5636 Epoch 29/200 400/400 [==============================] - 62s - loss: 0.2491 - acc: 0.1574 - val_loss: 0.2477 - val_acc: 0.5587 Epoch 30/200 400/400 [==============================] - 62s - loss: 0.2429 - acc: 0.1503 - val_loss: 0.2379 - val_acc: 0.5546 Epoch 31/200 400/400 [==============================] - 60s - loss: 0.2414 - acc: 0.1466 - val_loss: 0.2297 - val_acc: 0.5554 Epoch 32/200 400/400 [==============================] - 63s - loss: 0.2325 - acc: 0.1410 - val_loss: 0.2401 - val_acc: 0.5885 Epoch 33/200 400/400 [==============================] - 64s - loss: 0.2243 - acc: 0.1575 - val_loss: 0.2275 - val_acc: 0.5656 Epoch 34/200 400/400 [==============================] - 63s - loss: 0.2307 - acc: 0.1620 - val_loss: 0.2188 - val_acc: 0.6052 Epoch 35/200 400/400 [==============================] - 63s - loss: 0.2091 - acc: 0.1659 - val_loss: 0.2278 - val_acc: 0.5789 Epoch 36/200 400/400 [==============================] - 63s - loss: 0.2172 - acc: 0.1570 - val_loss: 0.2429 - val_acc: 0.5694 Epoch 37/200 400/400 [==============================] - 57s - loss: 0.2289 - acc: 0.1496 - val_loss: 0.2197 - val_acc: 0.6003 Epoch 38/200 400/400 [==============================] - 45s - loss: 0.2216 - acc: 0.1643 - val_loss: 0.2249 - val_acc: 0.5837 Epoch 39/200 400/400 [==============================] - 45s - loss: 0.2114 - acc: 0.1434 - val_loss: 0.2176 - val_acc: 0.5786 Epoch 40/200 400/400 [==============================] - 45s - loss: 0.2140 - acc: 0.1768 - val_loss: 0.2063 - val_acc: 0.5748 Epoch 41/200 400/400 [==============================] - 46s - loss: 0.2032 - acc: 0.1706 - val_loss: 0.2133 - val_acc: 0.5989 Epoch 42/200 400/400 [==============================] - 45s - loss: 0.1952 - acc: 0.1712 - val_loss: 0.2149 - val_acc: 0.5991 Epoch 43/200 400/400 [==============================] - 46s - loss: 0.2037 - acc: 0.1804 - val_loss: 0.1951 - val_acc: 0.5945 Epoch 44/200 400/400 [==============================] - 45s - loss: 0.1884 - acc: 0.1687 - val_loss: 0.1950 - val_acc: 0.5952 Epoch 45/200 400/400 [==============================] - 45s - loss: 0.1810 - acc: 0.1843 - val_loss: 0.1940 - val_acc: 0.6044 Epoch 46/200 400/400 [==============================] - 45s - loss: 0.1838 - acc: 0.1929 - val_loss: 0.1934 - val_acc: 0.5667 Epoch 47/200 400/400 [==============================] - 45s - loss: 0.1878 - acc: 0.1637 - val_loss: 0.1950 - val_acc: 0.6043 Epoch 48/200 400/400 [==============================] - 45s - loss: 0.1828 - acc: 0.1908 - val_loss: 0.1956 - val_acc: 0.5937 Epoch 49/200 400/400 [==============================] - 45s - loss: 0.1798 - acc: 0.1806 - val_loss: 0.1930 - val_acc: 0.5938 Epoch 50/200 400/400 [==============================] - 45s - loss: 0.1707 - acc: 0.2049 - val_loss: 0.1992 - val_acc: 0.5914 Epoch 51/200 400/400 [==============================] - 46s - loss: 0.1746 - acc: 0.1924 - val_loss: 0.1804 - val_acc: 0.6095 Epoch 52/200 400/400 [==============================] - 46s - loss: 0.1757 - acc: 0.2042 - val_loss: 0.1849 - val_acc: 0.5947 Epoch 53/200 400/400 [==============================] - 46s - loss: 0.1736 - acc: 0.1910 - val_loss: 0.1705 - val_acc: 0.6392 Epoch 54/200 400/400 [==============================] - 45s - loss: 0.1621 - acc: 0.1900 - val_loss: 0.1706 - val_acc: 0.6276 Epoch 55/200 400/400 [==============================] - 45s - loss: 0.1525 - acc: 0.2265 - val_loss: 0.1786 - val_acc: 0.6127 Epoch 56/200 400/400 [==============================] - 45s - loss: 0.1675 - acc: 0.2018 - val_loss: 0.1821 - val_acc: 0.6111 Epoch 57/200 400/400 [==============================] - 46s - loss: 0.1686 - acc: 0.2186 - val_loss: 0.1803 - val_acc: 0.6488 Epoch 58/200 400/400 [==============================] - 45s - loss: 0.1526 - acc: 0.2383 - val_loss: 0.1712 - val_acc: 0.6116 Epoch 59/200 400/400 [==============================] - 46s - loss: 0.1491 - acc: 0.2261 - val_loss: 0.1570 - val_acc: 0.6540 Epoch 60/200 400/400 [==============================] - 45s - loss: 0.1467 - acc: 0.2538 - val_loss: 0.1585 - val_acc: 0.6419 Epoch 61/200 400/400 [==============================] - 45s - loss: 0.1451 - acc: 0.2390 - val_loss: 0.1669 - val_acc: 0.6358 Epoch 62/200 400/400 [==============================] - 45s - loss: 0.1479 - acc: 0.2691 - val_loss: 0.1689 - val_acc: 0.6348 Epoch 63/200 400/400 [==============================] - 45s - loss: 0.1526 - acc: 0.2562 - val_loss: 0.1534 - val_acc: 0.6486 Epoch 64/200 400/400 [==============================] - 45s - loss: 0.1355 - acc: 0.2591 - val_loss: 0.1697 - val_acc: 0.6414 Epoch 65/200 400/400 [==============================] - 46s - loss: 0.1422 - acc: 0.2656 - val_loss: 0.1687 - val_acc: 0.6411 Epoch 66/200 400/400 [==============================] - 45s - loss: 0.1441 - acc: 0.2725 - val_loss: 0.1553 - val_acc: 0.6459 Epoch 67/200 400/400 [==============================] - 45s - loss: 0.1473 - acc: 0.3032 - val_loss: 0.1615 - val_acc: 0.6451 Epoch 68/200 400/400 [==============================] - 46s - loss: 0.1298 - acc: 0.2947 - val_loss: 0.1548 - val_acc: 0.6403 Epoch 69/200 400/400 [==============================] - 45s - loss: 0.1381 - acc: 0.3289 - val_loss: 0.1738 - val_acc: 0.6184 Epoch 70/200 400/400 [==============================] - 46s - loss: 0.1340 - acc: 0.3133 - val_loss: 0.1502 - val_acc: 0.6812 Epoch 71/200 400/400 [==============================] - 45s - loss: 0.1305 - acc: 0.3283 - val_loss: 0.1550 - val_acc: 0.6514 Epoch 72/200 400/400 [==============================] - 46s - loss: 0.1406 - acc: 0.3216 - val_loss: 0.1620 - val_acc: 0.6479 Epoch 73/200 400/400 [==============================] - 45s - loss: 0.1255 - acc: 0.3382 - val_loss: 0.1491 - val_acc: 0.6600 Epoch 74/200 400/400 [==============================] - 45s - loss: 0.1248 - acc: 0.3691 - val_loss: 0.1636 - val_acc: 0.6396 Epoch 75/200 400/400 [==============================] - 46s - loss: 0.1386 - acc: 0.3614 - val_loss: 0.1614 - val_acc: 0.6606 Epoch 76/200 400/400 [==============================] - 45s - loss: 0.1357 - acc: 0.3647 - val_loss: 0.1688 - val_acc: 0.6499 Epoch 77/200 400/400 [==============================] - 45s - loss: 0.1308 - acc: 0.3723 - val_loss: 0.1448 - val_acc: 0.6740 Epoch 78/200 400/400 [==============================] - 46s - loss: 0.1244 - acc: 0.3867 - val_loss: 0.1686 - val_acc: 0.6552 Epoch 79/200 400/400 [==============================] - 45s - loss: 0.1244 - acc: 0.4033 - val_loss: 0.1441 - val_acc: 0.6774 Epoch 80/200 400/400 [==============================] - 46s - loss: 0.1265 - acc: 0.3965 - val_loss: 0.1735 - val_acc: 0.6404 Epoch 81/200 400/400 [==============================] - 45s - loss: 0.1294 - acc: 0.4201 - val_loss: 0.1467 - val_acc: 0.6740 Epoch 82/200 400/400 [==============================] - 45s - loss: 0.1253 - acc: 0.4094 - val_loss: 0.1491 - val_acc: 0.6709 Epoch 83/200 400/400 [==============================] - 45s - loss: 0.1250 - acc: 0.4023 - val_loss: 0.1479 - val_acc: 0.6671 Epoch 84/200 400/400 [==============================] - 45s - loss: 0.1231 - acc: 0.4369 - val_loss: 0.1588 - val_acc: 0.6470 Epoch 85/200 400/400 [==============================] - 46s - loss: 0.1292 - acc: 0.4111 - val_loss: 0.1449 - val_acc: 0.6659 Epoch 86/200 400/400 [==============================] - 46s - loss: 0.1278 - acc: 0.4072 - val_loss: 0.1458 - val_acc: 0.6816 Epoch 87/200 400/400 [==============================] - 46s - loss: 0.1201 - acc: 0.4188 - val_loss: 0.1668 - val_acc: 0.6390 Epoch 88/200 400/400 [==============================] - 46s - loss: 0.1255 - acc: 0.4212 - val_loss: 0.1160 - val_acc: 0.7185 Epoch 89/200 400/400 [==============================] - 46s - loss: 0.1204 - acc: 0.4218 - val_loss: 0.1563 - val_acc: 0.6661 Epoch 90/200 400/400 [==============================] - 46s - loss: 0.1170 - acc: 0.4045 - val_loss: 0.1513 - val_acc: 0.6672 Epoch 91/200 400/400 [==============================] - 46s - loss: 0.1178 - acc: 0.4285 - val_loss: 0.1528 - val_acc: 0.6588 Epoch 92/200 400/400 [==============================] - 45s - loss: 0.1212 - acc: 0.4222 - val_loss: 0.1493 - val_acc: 0.6752 Epoch 93/200 400/400 [==============================] - 45s - loss: 0.1166 - acc: 0.4376 - val_loss: 0.1420 - val_acc: 0.6649 Epoch 94/200 400/400 [==============================] - 46s - loss: 0.1152 - acc: 0.4473 - val_loss: 0.1341 - val_acc: 0.6732 Epoch 95/200 400/400 [==============================] - 46s - loss: 0.1226 - acc: 0.4325 - val_loss: 0.1495 - val_acc: 0.6823 Epoch 96/200 400/400 [==============================] - 45s - loss: 0.1195 - acc: 0.4617 - val_loss: 0.1624 - val_acc: 0.6500 Epoch 97/200 400/400 [==============================] - 46s - loss: 0.1032 - acc: 0.4879 - val_loss: 0.1274 - val_acc: 0.6939 Epoch 98/200 400/400 [==============================] - 46s - loss: 0.1146 - acc: 0.4973 - val_loss: 0.1437 - val_acc: 0.6609 Epoch 99/200 400/400 [==============================] - 45s - loss: 0.1114 - acc: 0.4925 - val_loss: 0.1457 - val_acc: 0.6714 Epoch 100/200 400/400 [==============================] - 46s - loss: 0.1161 - acc: 0.4809 - val_loss: 0.1316 - val_acc: 0.6991 Epoch 101/200 400/400 [==============================] - 45s - loss: 0.1233 - acc: 0.4772 - val_loss: 0.1332 - val_acc: 0.6864 Epoch 102/200 400/400 [==============================] - 46s - loss: 0.1058 - acc: 0.5083 - val_loss: 0.1435 - val_acc: 0.6796 Epoch 103/200 400/400 [==============================] - 46s - loss: 0.1128 - acc: 0.4975 - val_loss: 0.1285 - val_acc: 0.6976 Epoch 104/200 400/400 [==============================] - 45s - loss: 0.1093 - acc: 0.5009 - val_loss: 0.1459 - val_acc: 0.6673 Epoch 105/200 400/400 [==============================] - 46s - loss: 0.1149 - acc: 0.4936 - val_loss: 0.1291 - val_acc: 0.6972 Epoch 106/200 400/400 [==============================] - 46s - loss: 0.1092 - acc: 0.5133 - val_loss: 0.1353 - val_acc: 0.6876 Epoch 107/200 400/400 [==============================] - 46s - loss: 0.1052 - acc: 0.5086 - val_loss: 0.1441 - val_acc: 0.6811 Epoch 108/200 400/400 [==============================] - 46s - loss: 0.1080 - acc: 0.5245 - val_loss: 0.1384 - val_acc: 0.6886 Epoch 109/200 400/400 [==============================] - 45s - loss: 0.1021 - acc: 0.5110 - val_loss: 0.1342 - val_acc: 0.6875 Epoch 110/200 400/400 [==============================] - 46s - loss: 0.1068 - acc: 0.5161 - val_loss: 0.1310 - val_acc: 0.7084 Epoch 111/200 400/400 [==============================] - 45s - loss: 0.1092 - acc: 0.5135 - val_loss: 0.1357 - val_acc: 0.6808 Epoch 112/200 400/400 [==============================] - 45s - loss: 0.1102 - acc: 0.5186 - val_loss: 0.1469 - val_acc: 0.6822 Epoch 113/200 400/400 [==============================] - 46s - loss: 0.1035 - acc: 0.5442 - val_loss: 0.1286 - val_acc: 0.6944 Epoch 114/200 400/400 [==============================] - 45s - loss: 0.1146 - acc: 0.5257 - val_loss: 0.1314 - val_acc: 0.7166 Epoch 115/200 400/400 [==============================] - 46s - loss: 0.1112 - acc: 0.5127 - val_loss: 0.1430 - val_acc: 0.6656 Epoch 116/200 400/400 [==============================] - 46s - loss: 0.1047 - acc: 0.5454 - val_loss: 0.1233 - val_acc: 0.6918 Epoch 117/200 400/400 [==============================] - 46s - loss: 0.1062 - acc: 0.5380 - val_loss: 0.1225 - val_acc: 0.6897 Epoch 118/200 400/400 [==============================] - 45s - loss: 0.1068 - acc: 0.5373 - val_loss: 0.1389 - val_acc: 0.6831 Epoch 119/200 400/400 [==============================] - 46s - loss: 0.1005 - acc: 0.5513 - val_loss: 0.1280 - val_acc: 0.7044 Epoch 120/200 400/400 [==============================] - 46s - loss: 0.1016 - acc: 0.5531 - val_loss: 0.1124 - val_acc: 0.7217 Epoch 121/200 400/400 [==============================] - 46s - loss: 0.1070 - acc: 0.5479 - val_loss: 0.1156 - val_acc: 0.7091 Epoch 122/200 400/400 [==============================] - 46s - loss: 0.1007 - acc: 0.5600 - val_loss: 0.1259 - val_acc: 0.7091 Epoch 123/200 400/400 [==============================] - 45s - loss: 0.1043 - acc: 0.5578 - val_loss: 0.1312 - val_acc: 0.6909 Epoch 124/200 400/400 [==============================] - 46s - loss: 0.1119 - acc: 0.5454 - val_loss: 0.1213 - val_acc: 0.7006 Epoch 125/200 400/400 [==============================] - 46s - loss: 0.1082 - acc: 0.5574 - val_loss: 0.1332 - val_acc: 0.6626 Epoch 126/200 400/400 [==============================] - 45s - loss: 0.0958 - acc: 0.5655 - val_loss: 0.1298 - val_acc: 0.6808 Epoch 127/200 400/400 [==============================] - 45s - loss: 0.1136 - acc: 0.5499 - val_loss: 0.1206 - val_acc: 0.6981 Epoch 128/200 400/400 [==============================] - 46s - loss: 0.1065 - acc: 0.5635 - val_loss: 0.1246 - val_acc: 0.6946 Epoch 129/200 400/400 [==============================] - 45s - loss: 0.1153 - acc: 0.5438 - val_loss: 0.1286 - val_acc: 0.6916 Epoch 130/200 400/400 [==============================] - 46s - loss: 0.1132 - acc: 0.5503 - val_loss: 0.1199 - val_acc: 0.7054 Epoch 131/200 400/400 [==============================] - 46s - loss: 0.0967 - acc: 0.5629 - val_loss: 0.1278 - val_acc: 0.6898 Epoch 132/200 400/400 [==============================] - 46s - loss: 0.1006 - acc: 0.5703 - val_loss: 0.1397 - val_acc: 0.6759 Epoch 133/200 400/400 [==============================] - 46s - loss: 0.1029 - acc: 0.5767 - val_loss: 0.1246 - val_acc: 0.7088 Epoch 134/200 400/400 [==============================] - 46s - loss: 0.1044 - acc: 0.5567 - val_loss: 0.1274 - val_acc: 0.7022 Epoch 135/200 400/400 [==============================] - 46s - loss: 0.0985 - acc: 0.5873 - val_loss: 0.1268 - val_acc: 0.6940 Epoch 136/200 400/400 [==============================] - 45s - loss: 0.0951 - acc: 0.5917 - val_loss: 0.1233 - val_acc: 0.7015 Epoch 137/200 400/400 [==============================] - 46s - loss: 0.0966 - acc: 0.6047 - val_loss: 0.1217 - val_acc: 0.7113 Epoch 138/200 400/400 [==============================] - 45s - loss: 0.0968 - acc: 0.5963 - val_loss: 0.1234 - val_acc: 0.6966 Epoch 139/200 400/400 [==============================] - 47s - loss: 0.0976 - acc: 0.5896 - val_loss: 0.1198 - val_acc: 0.7054 Epoch 140/200 400/400 [==============================] - 47s - loss: 0.0999 - acc: 0.6005 - val_loss: 0.1062 - val_acc: 0.7212 Epoch 141/200 400/400 [==============================] - 46s - loss: 0.0957 - acc: 0.6146 - val_loss: 0.1204 - val_acc: 0.6965 Epoch 142/200 400/400 [==============================] - 46s - loss: 0.0940 - acc: 0.6215 - val_loss: 0.1259 - val_acc: 0.7013 Epoch 143/200 400/400 [==============================] - 53s - loss: 0.0985 - acc: 0.5989 - val_loss: 0.1153 - val_acc: 0.6989 Epoch 144/200 400/400 [==============================] - 52s - loss: 0.1040 - acc: 0.6007 - val_loss: 0.1243 - val_acc: 0.6975 Epoch 145/200 400/400 [==============================] - 60s - loss: 0.0950 - acc: 0.6276 - val_loss: 0.1076 - val_acc: 0.7350 Epoch 146/200 400/400 [==============================] - 63s - loss: 0.0912 - acc: 0.6121 - val_loss: 0.1172 - val_acc: 0.7136 Epoch 147/200 400/400 [==============================] - 65s - loss: 0.0942 - acc: 0.6277 - val_loss: 0.1231 - val_acc: 0.7047 Epoch 148/200 400/400 [==============================] - 65s - loss: 0.0937 - acc: 0.6207 - val_loss: 0.1169 - val_acc: 0.6912 Epoch 149/200 400/400 [==============================] - 63s - loss: 0.1020 - acc: 0.6151 - val_loss: 0.1219 - val_acc: 0.7031 Epoch 150/200 400/400 [==============================] - 63s - loss: 0.0971 - acc: 0.6231 - val_loss: 0.1208 - val_acc: 0.6894 Epoch 151/200 400/400 [==============================] - 62s - loss: 0.1017 - acc: 0.6181 - val_loss: 0.1126 - val_acc: 0.7133 Epoch 152/200 400/400 [==============================] - 62s - loss: 0.0884 - acc: 0.6364 - val_loss: 0.1178 - val_acc: 0.7010 Epoch 153/200 400/400 [==============================] - 65s - loss: 0.0949 - acc: 0.6214 - val_loss: 0.1108 - val_acc: 0.7091 Epoch 154/200 400/400 [==============================] - 63s - loss: 0.1046 - acc: 0.6143 - val_loss: 0.1115 - val_acc: 0.7087 Epoch 155/200 400/400 [==============================] - 63s - loss: 0.0926 - acc: 0.6415 - val_loss: 0.1117 - val_acc: 0.7221 Epoch 156/200 400/400 [==============================] - 64s - loss: 0.0900 - acc: 0.6492 - val_loss: 0.1109 - val_acc: 0.7099 Epoch 157/200 400/400 [==============================] - 64s - loss: 0.0909 - acc: 0.6439 - val_loss: 0.1011 - val_acc: 0.7419 Epoch 158/200 400/400 [==============================] - 63s - loss: 0.0895 - acc: 0.6399 - val_loss: 0.1039 - val_acc: 0.7118 Epoch 159/200 400/400 [==============================] - 63s - loss: 0.0924 - acc: 0.6415 - val_loss: 0.1115 - val_acc: 0.7232 Epoch 160/200 400/400 [==============================] - 64s - loss: 0.0859 - acc: 0.6677 - val_loss: 0.1099 - val_acc: 0.7133 Epoch 161/200 400/400 [==============================] - 63s - loss: 0.0925 - acc: 0.6492 - val_loss: 0.1010 - val_acc: 0.7274 Epoch 162/200 400/400 [==============================] - 63s - loss: 0.0953 - acc: 0.6500 - val_loss: 0.1193 - val_acc: 0.7196 Epoch 163/200 400/400 [==============================] - 61s - loss: 0.1005 - acc: 0.6309 - val_loss: 0.1192 - val_acc: 0.7201 Epoch 164/200 400/400 [==============================] - 59s - loss: 0.1004 - acc: 0.6529 - val_loss: 0.1074 - val_acc: 0.7265 Epoch 165/200 400/400 [==============================] - 63s - loss: 0.0874 - acc: 0.6627 - val_loss: 0.1192 - val_acc: 0.7154 Epoch 166/200 400/400 [==============================] - 64s - loss: 0.0887 - acc: 0.6668 - val_loss: 0.1189 - val_acc: 0.7163 Epoch 167/200 400/400 [==============================] - 64s - loss: 0.0856 - acc: 0.6579 - val_loss: 0.1049 - val_acc: 0.7273 Epoch 168/200 400/400 [==============================] - 62s - loss: 0.0916 - acc: 0.6653 - val_loss: 0.1185 - val_acc: 0.7118 Epoch 169/200 400/400 [==============================] - 62s - loss: 0.0930 - acc: 0.6596 - val_loss: 0.1011 - val_acc: 0.7301 Epoch 170/200 400/400 [==============================] - 62s - loss: 0.0915 - acc: 0.6725 - val_loss: 0.1172 - val_acc: 0.7118 Epoch 171/200 400/400 [==============================] - 63s - loss: 0.0873 - acc: 0.6646 - val_loss: 0.1194 - val_acc: 0.7183 Epoch 172/200 400/400 [==============================] - 62s - loss: 0.0897 - acc: 0.6619 - val_loss: 0.1129 - val_acc: 0.6904 Epoch 173/200 400/400 [==============================] - 62s - loss: 0.1000 - acc: 0.6533 - val_loss: 0.1055 - val_acc: 0.7327 Epoch 174/200 400/400 [==============================] - 64s - loss: 0.0937 - acc: 0.6719 - val_loss: 0.0949 - val_acc: 0.7400 Epoch 175/200 400/400 [==============================] - 64s - loss: 0.0913 - acc: 0.6782 - val_loss: 0.1065 - val_acc: 0.7338 Epoch 176/200 400/400 [==============================] - 62s - loss: 0.0871 - acc: 0.6712 - val_loss: 0.1040 - val_acc: 0.7259 Epoch 177/200 400/400 [==============================] - 61s - loss: 0.0915 - acc: 0.6759 - val_loss: 0.1018 - val_acc: 0.7414 Epoch 178/200 400/400 [==============================] - 65s - loss: 0.0929 - acc: 0.6747 - val_loss: 0.1023 - val_acc: 0.7259 Epoch 179/200 400/400 [==============================] - 65s - loss: 0.0914 - acc: 0.6727 - val_loss: 0.1167 - val_acc: 0.7220 Epoch 180/200 400/400 [==============================] - 64s - loss: 0.0833 - acc: 0.6842 - val_loss: 0.1052 - val_acc: 0.7298 Epoch 181/200 400/400 [==============================] - 93s - loss: 0.0861 - acc: 0.6785 - val_loss: 0.1050 - val_acc: 0.7084 Epoch 182/200 400/400 [==============================] - 70s - loss: 0.0984 - acc: 0.6628 - val_loss: 0.1069 - val_acc: 0.7252 Epoch 183/200 400/400 [==============================] - 61s - loss: 0.0948 - acc: 0.6698 - val_loss: 0.1140 - val_acc: 0.7234 Epoch 184/200 400/400 [==============================] - 62s - loss: 0.0778 - acc: 0.6972 - val_loss: 0.1037 - val_acc: 0.7287 Epoch 185/200 400/400 [==============================] - 64s - loss: 0.0865 - acc: 0.6908 - val_loss: 0.0992 - val_acc: 0.7338 Epoch 186/200 400/400 [==============================] - 64s - loss: 0.0949 - acc: 0.6762 - val_loss: 0.1014 - val_acc: 0.7218 Epoch 187/200 400/400 [==============================] - 65s - loss: 0.0819 - acc: 0.6887 - val_loss: 0.1039 - val_acc: 0.7190 Epoch 188/200 400/400 [==============================] - 62s - loss: 0.0867 - acc: 0.6796 - val_loss: 0.0976 - val_acc: 0.7318 Epoch 189/200 400/400 [==============================] - 62s - loss: 0.0866 - acc: 0.6857 - val_loss: 0.1060 - val_acc: 0.7132 Epoch 190/200 400/400 [==============================] - 64s - loss: 0.0864 - acc: 0.6734 - val_loss: 0.1020 - val_acc: 0.7298 Epoch 191/200 400/400 [==============================] - 63s - loss: 0.0847 - acc: 0.6878 - val_loss: 0.1012 - val_acc: 0.7422 Epoch 192/200 400/400 [==============================] - 63s - loss: 0.0882 - acc: 0.6725 - val_loss: 0.1006 - val_acc: 0.7422 Epoch 193/200 400/400 [==============================] - 65s - loss: 0.0842 - acc: 0.6839 - val_loss: 0.1144 - val_acc: 0.7149 Epoch 194/200 400/400 [==============================] - 67s - loss: 0.0805 - acc: 0.7033 - val_loss: 0.1093 - val_acc: 0.7184 Epoch 195/200
In [17]:
%%time
score = model.evaluate_generator(test_gen, val_samples=350)
score=dict(zip(model.metrics_names,score))
print(score){'acc': 0.7344642894608634, 'loss': 0.10256582477263042}
CPU times: user 35 s, sys: 2.7 s, total: 37.7 s
Wall time: 34.7 s
In [134]:
wfn='models/{}_{}_acc-{:2.2f}_weights.hdf5'.format(model_name,ts,score['acc'])
model.save_weights(wfn)
wfnOut [134]:
'models/unet_inception_inv2_20160929-10-50-26_acc-0.75_weights.hdf5'
In [95]:
def plot_hist(history):
"""plot keras history object"""
for label in history.history:
if not label.startswith('val'):
plt.title(label)
plt.plot(history.history[label], label=label)
if 'val_' + label in history.history:
plt.plot(history.history['val_' + label], label=label)
plt.xlabel('epoch')
plt.show()
plot_hist(model.history)In [44]:
model = unet_inception_model(optimizer,img_cols,img_rows)
# load best checkpoint
# model.load_weights('models/%s_weights.hdf5'%model_name)
# or load pre-trained model
model.load_weights('models/unet_inception_inv2_20160929-10-50-26_acc-0.75_weights.hdf5')
val_samples=10000
# add a few other metrics
model.compile(optimizer=optimizer,
loss=[dice_coef_loss],
metrics=[
'accuracy',
'mse',
'binary_crossentropy',
'matthews_correlation',
'binary_accuracy',
]
)In [45]:
%%time
score = model.evaluate_generator(test_gen, val_samples=val_samples)
score=dict(zip(model.metrics_names,score))
print(score){'mean_squared_error': 0.0078170919320546088, 'matthews_correlation': 0.77096645796298979, 'loss': 0.1007234075255692, 'acc': 0.73327500212192531, 'binary_crossentropy': 0.08795671812444926, 'binary_accuracy': 0.99096557062864299}
CPU times: user 3min 57s, sys: 1min 3s, total: 5min 1s
Wall time: 3min 52s
In [48]:
%%time
score = model.evaluate_generator(train_gen_unaugumented, val_samples=val_samples)
score=dict(zip(model.metrics_names,score))
print(score){'mean_squared_error': 0.0075589731866493818, 'matthews_correlation': 0.81601719522476202, 'loss': 0.079188272582367061, 'acc': 0.73974999982118606, 'binary_crossentropy': 0.083371352989226585, 'binary_accuracy': 0.99112304443120958}
CPU times: user 3min 27s, sys: 1min 3s, total: 4min 30s
Wall time: 3min 23s
In [50]:
%%time
score = model.evaluate_generator(train_gen, val_samples=val_samples)
score=dict(zip(model.metrics_names,score))
print(score){'mean_squared_error': 0.0069730838667601347, 'matthews_correlation': 0.8103281590938568, 'loss': 0.074400506030768157, 'acc': 0.7660037497878075, 'binary_crossentropy': 0.075926830759271979, 'binary_accuracy': 0.15817984386076386}
CPU times: user 3min 28s, sys: 1min 2s, total: 4min 31s
Wall time: 3min 22s
In [25]:
X_test, y_test = next(test_gen)
y_pred = model.predict(X_test)In [26]:
from matplotlib.colors import LogNorm
norm=LogNorm(vmin=1e-3, vmax=1.0)
sns.set_style("dark")
n=batch_size
plt.figure(figsize=(9,2.5*n))
fontsize=16
for i in range(n):
ax=plt.subplot(n,3,1+i*3)
if i==0: plt.title('(a) Input image', fontsize=fontsize)
plt.imshow(np.transpose(X_test,(0,2,3,1))[i])
plt.axis('off')
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
ax=plt.subplot(n,3,2+i*3)
if i==0: plt.title('(a) Manual mask', fontsize=fontsize)
plt.imshow(np.transpose(X_test,(0,2,3,1))[i])
cm=plt.imshow(y_test[i]>0.5, norm=norm, alpha=1, cmap=plt.cm.rainbow)
plt.axis('off')
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
ax=plt.subplot(n,3,3+i*3)
if i==0: plt.title('(b) Predicted mask', fontsize=fontsize)
plt.imshow(np.transpose(X_test,(0,2,3,1))[i])
cm=plt.imshow(y_pred[i]>0.5, norm=norm, alpha=1, cmap=plt.cm.rainbow)
plt.axis('off')
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
plt.tight_layout()
plt.show()

