Skip to content

Instantly share code, notes, and snippets.

View karolzak's full-sized avatar
😷
Working from home

Karol Żak karolzak

😷
Working from home
  • Microsoft
View GitHub Profile
@karolzak
karolzak / get_patches.py
Last active January 16, 2019 22:27
returns crops out of single image (numpy) or array of images
def get_patches(img_arr, size=256, stride=256):
'''
Takes single image or array of images and returns
crops using sliding window method.
If stride < size it will do overlapping.
'''
# check size and stride
if size % stride != 0:
raise ValueError('size % stride must be equal 0')
@karolzak
karolzak / plot_segmentation_images.py
Last active January 24, 2019 09:02
Image plotting for semantic segmentation data
import numpy as np
import matplotlib.pyplot as plt
def mask_to_red(mask, img_size=1024):
'''
Converts binary segmentation mask from white to red color.
Also adds alpha channel to make black background transparent.
'''
c1 = mask.reshape(img_size,img_size)
@karolzak
karolzak / unet.py
Last active January 16, 2019 22:26
Simple UNET implementation in Keras
###################### unet ############################
from keras.models import Model
from keras.layers import *
def upsample_conv(filters, kernel_size, strides, padding):
return Conv2DTranspose(filters, kernel_size, strides=strides, padding=padding)
def upsample_simple(filters, kernel_size, strides, padding):
@karolzak
karolzak / iou.py
Last active January 16, 2019 22:28
simple iou metric with 0.5 rounding (treshold)
################### metrics ############################
from keras import backend as K
SMOOTH = 1e-12
def iou(true, pred):
y_pred_pos = K.round(K.clip(pred, 0, 1))
intersection = true * y_pred_pos
union = true + y_pred_pos
return K.sum(intersection + SMOOTH) / K.sum(union - intersection + SMOOTH)
@karolzak
karolzak / jaccard_distance.py
Last active January 16, 2019 22:27
jaccard_distance loss function
#https://github.com/keras-team/keras-contrib/blob/master/keras_contrib/losses/jaccard.py
from keras import backend as K
def jaccard_distance(y_true, y_pred, smooth=100):
"""Jaccard distance for semantic segmentation.
Also known as the intersection-over-union loss.
@karolzak
karolzak / segm_plot_history.py
Last active January 18, 2019 13:01
plotting training history for keras unet implementation
import numpy as np
import matplotlib.pyplot as plt
def plot_segm_history(history):
# summarize history for iou
plt.figure(figsize=(12,6))
plt.plot(history.history['iou'], linewidth=3)
plt.plot(history.history['val_iou'], linewidth=3)
plt.suptitle('iou metric', fontsize=20)
@karolzak
karolzak / segm_get_augmented.py
Last active January 16, 2019 22:27
image augmentation for semantic segmentation models
from keras.preprocessing.image import ImageDataGenerator
# Runtime data augmentation
def get_augmented(
X_train,
Y_train,
X_val,
Y_val,
batch_size=32,
@karolzak
karolzak / sem_losses.py
Created June 27, 2019 13:48
semantic segmentation losses
# https://lars76.github.io/neural-networks/object-detection/losses-for-segmentation/
def weighted_cross_entropy(beta):
def convert_to_logits(y_pred):
# see https://github.com/tensorflow/tensorflow/blob/r1.10/tensorflow/python/keras/backend.py#L3525
y_pred = tf.clip_by_value(y_pred, tf.keras.backend.epsilon(), 1 - tf.keras.backend.epsilon())
return tf.log(y_pred / (1 - y_pred))
def loss(y_true, y_pred):
@karolzak
karolzak / list_objects_in_memory.py
Created August 21, 2019 16:27
Get info about objects in memory
import sys
# These are the usual ipython objects, including this one you are creating
ipython_vars = ['In', 'Out', 'exit', 'quit', 'get_ipython', 'ipython_vars']
# Get a sorted list of the objects and their sizes
sorted([(x, sys.getsizeof(globals().get(x))) for x in dir() if not x.startswith('_') and x not in sys.modules and x not in ipython_vars], key=lambda x: x[1], reverse=True)
@karolzak
karolzak / reset_keras.py
Created August 21, 2019 16:37
Reset keras and TF
from keras.backend.tensorflow_backend import set_session
from keras.backend.tensorflow_backend import clear_session
from keras.backend.tensorflow_backend import get_session
import tensorflow
# Reset Keras Session
def reset_keras():
sess = get_session()
clear_session()
sess.close()