Skip to content

Instantly share code, notes, and snippets.

@ZER-0-NE
Last active July 6, 2019 10:43
Show Gist options
  • Save ZER-0-NE/e16e1ee4d03cb4d51de12bc14f34a572 to your computer and use it in GitHub Desktop.
Save ZER-0-NE/e16e1ee4d03cb4d51de12bc14f34a572 to your computer and use it in GitHub Desktop.
// The model overfits around 20 epochs. The saved checkpoint model works well on the test set by giving just 18 false positives
// as compared to 36 in other cases. The model is shallow as compared to other researchers. The batch size=128 and small lr
// were significant factor in getting low losses. Next try would be to increase lr and dropout.
// This was trained on the new dataset
train_data_path = 'detection_data_1/train/'
validation_data_path = 'detection_data_1/val/'
test_data_path = 'detection_data_1/test/'
#Parametres
img_width, img_height = 150, 250
nb_train_samples = sum(len(files) for _, _, files in os.walk(train_data_path))
nb_validation_samples = sum(len(files) for _, _, files in os.walk(validation_data_path))
# print(nb_train_samples)
epochs = 100
batch_size = 128
if K.image_data_format() == 'channels_first':
input_shape = (3, img_width, img_height)
else:
input_shape = (img_width, img_height, 3)
# K.set_image_dim_ordering('th')
model = Sequential()
model.add(Conv2D(64, (7, 7), padding = 'same', input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.4))
model.add(Conv2D(64, (7, 7), padding = 'same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.4))
model.add(Conv2D(64, (7, 7), padding = 'same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.4))
model.add(Conv2D(128, (7, 7), padding = 'same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(128, (7, 7), padding = 'same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(128, (7, 7), padding = 'same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(256, (7, 7), padding = 'same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer=optimizers.Adam(lr=3e-4),
metrics=['accuracy'])
from keras.callbacks import ReduceLROnPlateau, ModelCheckpoint
checkpoint = ModelCheckpoint(filepath='checkpointORCA_adam-{epoch:02d}-{val_loss:.2f}.h5', monitor='val_loss', verbose=0, save_best_only=True)
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.5,
patience=20, min_lr=1e-8)
train_datagen = ImageDataGenerator(rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2)
# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1. / 255)
# Change the batchsize according to your system RAM
train_batchsize = 128
val_batchsize = 128
train_generator = train_datagen.flow_from_directory(
train_data_path,
target_size=(img_width, img_height),
batch_size=train_batchsize,
class_mode='binary',
shuffle=True)
# train_generator.reset()
# validation_generator.reset()
validation_generator = test_datagen.flow_from_directory(
validation_data_path,
target_size=(img_width, img_height),
batch_size=val_batchsize,
class_mode='binary',
shuffle=False)
# validation_generator.reset()
history = model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size,
callbacks=[checkpoint, reduce_lr])
# model.save_weights('orca_detection_3.h5')
model.save('OrcaCNN_detection_adam_15x25.h5')
Found 22790 images belonging to 2 classes.
Found 16574 images belonging to 2 classes.
Epoch 1/100
178/178 [==============================] - 431s 2s/step - loss: 0.4748 - acc: 0.7393 - val_loss: 0.2205 - val_acc: 0.9122
Epoch 2/100
178/178 [==============================] - 401s 2s/step - loss: 0.2067 - acc: 0.9208 - val_loss: 0.1519 - val_acc: 0.9383
Epoch 3/100
178/178 [==============================] - 404s 2s/step - loss: 0.1670 - acc: 0.9355 - val_loss: 0.1493 - val_acc: 0.9413
Epoch 4/100
178/178 [==============================] - 403s 2s/step - loss: 0.1567 - acc: 0.9405 - val_loss: 0.1545 - val_acc: 0.9440
Epoch 5/100
178/178 [==============================] - 402s 2s/step - loss: 0.1401 - acc: 0.9467 - val_loss: 0.1239 - val_acc: 0.9508
Epoch 6/100
178/178 [==============================] - 400s 2s/step - loss: 0.1303 - acc: 0.9494 - val_loss: 0.1279 - val_acc: 0.9509
Epoch 7/100
178/178 [==============================] - 401s 2s/step - loss: 0.1286 - acc: 0.9505 - val_loss: 0.1196 - val_acc: 0.9536
Epoch 8/100
178/178 [==============================] - 400s 2s/step - loss: 0.1317 - acc: 0.9492 - val_loss: 0.1193 - val_acc: 0.9542
Epoch 9/100
178/178 [==============================] - 401s 2s/step - loss: 0.1213 - acc: 0.9534 - val_loss: 0.1264 - val_acc: 0.9519
Epoch 10/100
178/178 [==============================] - 400s 2s/step - loss: 0.1133 - acc: 0.9552 - val_loss: 0.1113 - val_acc: 0.9566
Epoch 11/100
178/178 [==============================] - 399s 2s/step - loss: 0.1126 - acc: 0.9572 - val_loss: 0.1048 - val_acc: 0.9594
Epoch 12/100
178/178 [==============================] - 399s 2s/step - loss: 0.1133 - acc: 0.9550 - val_loss: 0.1201 - val_acc: 0.9556
Epoch 13/100
178/178 [==============================] - 399s 2s/step - loss: 0.1121 - acc: 0.9564 - val_loss: 0.1085 - val_acc: 0.9579
Epoch 14/100
178/178 [==============================] - 399s 2s/step - loss: 0.1045 - acc: 0.9599 - val_loss: 0.1072 - val_acc: 0.9594
Epoch 15/100
178/178 [==============================] - 399s 2s/step - loss: 0.1036 - acc: 0.9590 - val_loss: 0.1111 - val_acc: 0.9579
Epoch 16/100
178/178 [==============================] - 396s 2s/step - loss: 0.1018 - acc: 0.9602 - val_loss: 0.1133 - val_acc: 0.9576
Epoch 17/100
178/178 [==============================] - 394s 2s/step - loss: 0.1016 - acc: 0.9589 - val_loss: 0.1139 - val_acc: 0.9555
Epoch 18/100
178/178 [==============================] - 394s 2s/step - loss: 0.1024 - acc: 0.9602 - val_loss: 0.1109 - val_acc: 0.9575
Epoch 19/100
178/178 [==============================] - 393s 2s/step - loss: 0.0962 - acc: 0.9624 - val_loss: 0.1094 - val_acc: 0.9590
Epoch 20/100
178/178 [==============================] - 394s 2s/step - loss: 0.0979 - acc: 0.9619 - val_loss: 0.1052 - val_acc: 0.9602
Epoch 21/100
178/178 [==============================] - 393s 2s/step - loss: 0.1014 - acc: 0.9611 - val_loss: 0.1063 - val_acc: 0.9589
Epoch 22/100
178/178 [==============================] - 393s 2s/step - loss: 0.0963 - acc: 0.9629 - val_loss: 0.1000 - val_acc: 0.9632
Epoch 23/100
178/178 [==============================] - 394s 2s/step - loss: 0.0918 - acc: 0.9642 - val_loss: 0.1106 - val_acc: 0.9601
Epoch 24/100
178/178 [==============================] - 394s 2s/step - loss: 0.0920 - acc: 0.9633 - val_loss: 0.1088 - val_acc: 0.9583
Epoch 25/100
178/178 [==============================] - 394s 2s/step - loss: 0.0942 - acc: 0.9632 - val_loss: 0.1140 - val_acc: 0.9568
Epoch 26/100
178/178 [==============================] - 394s 2s/step - loss: 0.0877 - acc: 0.9661 - val_loss: 0.1025 - val_acc: 0.9599
Epoch 27/100
178/178 [==============================] - 394s 2s/step - loss: 0.0848 - acc: 0.9660 - val_loss: 0.1240 - val_acc: 0.9566
Epoch 28/100
178/178 [==============================] - 394s 2s/step - loss: 0.0917 - acc: 0.9644 - val_loss: 0.1186 - val_acc: 0.9573
Epoch 29/100
178/178 [==============================] - 394s 2s/step - loss: 0.0841 - acc: 0.9679 - val_loss: 0.1086 - val_acc: 0.9568
Epoch 30/100
178/178 [==============================] - 393s 2s/step - loss: 0.0827 - acc: 0.9671 - val_loss: 0.1054 - val_acc: 0.9594
Epoch 31/100
178/178 [==============================] - 394s 2s/step - loss: 0.0859 - acc: 0.9671 - val_loss: 0.1010 - val_acc: 0.9619
Epoch 32/100
178/178 [==============================] - 395s 2s/step - loss: 0.0861 - acc: 0.9658 - val_loss: 0.1034 - val_acc: 0.9587
Epoch 33/100
178/178 [==============================] - 396s 2s/step - loss: 0.0792 - acc: 0.9702 - val_loss: 0.0979 - val_acc: 0.9613
Epoch 34/100
178/178 [==============================] - 395s 2s/step - loss: 0.0786 - acc: 0.9697 - val_loss: 0.1149 - val_acc: 0.9571
Epoch 35/100
178/178 [==============================] - 396s 2s/step - loss: 0.0805 - acc: 0.9686 - val_loss: 0.1038 - val_acc: 0.9601
Epoch 36/100
178/178 [==============================] - 397s 2s/step - loss: 0.0825 - acc: 0.9684 - val_loss: 0.1026 - val_acc: 0.9594
Epoch 37/100
178/178 [==============================] - 396s 2s/step - loss: 0.0874 - acc: 0.9654 - val_loss: 0.1283 - val_acc: 0.9556
Epoch 38/100
178/178 [==============================] - 395s 2s/step - loss: 0.0789 - acc: 0.9695 - val_loss: 0.1031 - val_acc: 0.9608
Epoch 39/100
178/178 [==============================] - 396s 2s/step - loss: 0.0727 - acc: 0.9728 - val_loss: 0.1166 - val_acc: 0.9571
Epoch 40/100
178/178 [==============================] - 394s 2s/step - loss: 0.0743 - acc: 0.9705 - val_loss: 0.1040 - val_acc: 0.9617
Epoch 41/100
178/178 [==============================] - 393s 2s/step - loss: 0.0706 - acc: 0.9708 - val_loss: 0.1103 - val_acc: 0.9577
Epoch 42/100
178/178 [==============================] - 394s 2s/step - loss: 0.0809 - acc: 0.9691 - val_loss: 0.1044 - val_acc: 0.9606
Epoch 43/100
178/178 [==============================] - 394s 2s/step - loss: 0.0733 - acc: 0.9718 - val_loss: 0.1070 - val_acc: 0.9591
Epoch 44/100
178/178 [==============================] - 395s 2s/step - loss: 0.0733 - acc: 0.9732 - val_loss: 0.1142 - val_acc: 0.9571
Epoch 45/100
178/178 [==============================] - 395s 2s/step - loss: 0.0715 - acc: 0.9724 - val_loss: 0.0987 - val_acc: 0.9642
Epoch 46/100
178/178 [==============================] - 395s 2s/step - loss: 0.0770 - acc: 0.9702 - val_loss: 0.1067 - val_acc: 0.9605
Epoch 47/100
178/178 [==============================] - 395s 2s/step - loss: 0.0667 - acc: 0.9745 - val_loss: 0.1050 - val_acc: 0.9596
Epoch 48/100
178/178 [==============================] - 393s 2s/step - loss: 0.0704 - acc: 0.9717 - val_loss: 0.1079 - val_acc: 0.9607
Epoch 49/100
178/178 [==============================] - 393s 2s/step - loss: 0.0701 - acc: 0.9717 - val_loss: 0.1074 - val_acc: 0.9601
Epoch 50/100
178/178 [==============================] - 394s 2s/step - loss: 0.0678 - acc: 0.9738 - val_loss: 0.1088 - val_acc: 0.9601
Epoch 51/100
178/178 [==============================] - 393s 2s/step - loss: 0.0659 - acc: 0.9743 - val_loss: 0.1066 - val_acc: 0.9587
Epoch 52/100
178/178 [==============================] - 393s 2s/step - loss: 0.0637 - acc: 0.9735 - val_loss: 0.1080 - val_acc: 0.9588
Epoch 53/100
178/178 [==============================] - 394s 2s/step - loss: 0.0599 - acc: 0.9768 - val_loss: 0.1099 - val_acc: 0.9614
Epoch 54/100
178/178 [==============================] - 395s 2s/step - loss: 0.0604 - acc: 0.9765 - val_loss: 0.1128 - val_acc: 0.9595
Epoch 55/100
178/178 [==============================] - 395s 2s/step - loss: 0.0614 - acc: 0.9765 - val_loss: 0.1093 - val_acc: 0.9605
Epoch 56/100
178/178 [==============================] - 395s 2s/step - loss: 0.0513 - acc: 0.9799 - val_loss: 0.1062 - val_acc: 0.9605
Epoch 57/100
178/178 [==============================] - 395s 2s/step - loss: 0.0519 - acc: 0.9803 - val_loss: 0.1151 - val_acc: 0.9593
Epoch 58/100
178/178 [==============================] - 394s 2s/step - loss: 0.0623 - acc: 0.9770 - val_loss: 0.1097 - val_acc: 0.9603
Epoch 59/100
178/178 [==============================] - 394s 2s/step - loss: 0.0517 - acc: 0.9788 - val_loss: 0.1201 - val_acc: 0.9580
Epoch 60/100
178/178 [==============================] - 393s 2s/step - loss: 0.0485 - acc: 0.9801 - val_loss: 0.1154 - val_acc: 0.9606
Epoch 61/100
178/178 [==============================] - 394s 2s/step - loss: 0.0514 - acc: 0.9799 - val_loss: 0.1190 - val_acc: 0.9601
Epoch 62/100
178/178 [==============================] - 394s 2s/step - loss: 0.0503 - acc: 0.9803 - val_loss: 0.1159 - val_acc: 0.9590
Epoch 63/100
178/178 [==============================] - 394s 2s/step - loss: 0.0466 - acc: 0.9826 - val_loss: 0.1105 - val_acc: 0.9606
Epoch 64/100
178/178 [==============================] - 394s 2s/step - loss: 0.0481 - acc: 0.9805 - val_loss: 0.1188 - val_acc: 0.9607
Epoch 65/100
178/178 [==============================] - 394s 2s/step - loss: 0.0454 - acc: 0.9822 - val_loss: 0.1147 - val_acc: 0.9616
Epoch 66/100
178/178 [==============================] - 394s 2s/step - loss: 0.0495 - acc: 0.9811 - val_loss: 0.1160 - val_acc: 0.9587
Epoch 67/100
178/178 [==============================] - 394s 2s/step - loss: 0.0472 - acc: 0.9816 - val_loss: 0.1106 - val_acc: 0.9620
Epoch 68/100
178/178 [==============================] - 394s 2s/step - loss: 0.0442 - acc: 0.9830 - val_loss: 0.1161 - val_acc: 0.9598
Epoch 69/100
178/178 [==============================] - 394s 2s/step - loss: 0.0426 - acc: 0.9835 - val_loss: 0.1163 - val_acc: 0.9594
Epoch 70/100
178/178 [==============================] - 395s 2s/step - loss: 0.0459 - acc: 0.9816 - val_loss: 0.1200 - val_acc: 0.9553
Epoch 71/100
178/178 [==============================] - 395s 2s/step - loss: 0.0406 - acc: 0.9841 - val_loss: 0.1301 - val_acc: 0.9541
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment