Last active
June 5, 2020 19:05
-
-
Save saurabhpal97/78d5846646932713ba9580a848c8414c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
from keras.utils import np_utils | |
from keras.models import Sequential | |
from keras.layers import Dense, Dropout, Flatten, Activation, Conv2D, MaxPooling2D | |
from keras.optimizers import Adam | |
from keras.callbacks import EarlyStopping, ModelCheckpoint | |
from keras.preprocessing.image import ImageDataGenerator | |
from keras.activations import relu | |
%matplotlib inline | |
import matplotlib.pyplot as plt | |
def iter_occlusion(image, size=8): | |
occlusion = np.full((size * 5, size * 5, 1), [0.5], np.float32) | |
occlusion_center = np.full((size, size, 1), [0.5], np.float32) | |
occlusion_padding = size * 2 | |
# print('padding...') | |
image_padded = np.pad(image, ( \ | |
(occlusion_padding, occlusion_padding), (occlusion_padding, occlusion_padding), (0, 0) \ | |
), 'constant', constant_values = 0.0) | |
for y in range(occlusion_padding, image.shape[0] + occlusion_padding, size): | |
for x in range(occlusion_padding, image.shape[1] + occlusion_padding, size): | |
tmp = image_padded.copy() | |
tmp[y - occlusion_padding:y + occlusion_center.shape[0] + occlusion_padding, \ | |
x - occlusion_padding:x + occlusion_center.shape[1] + occlusion_padding] \ | |
= occlusion | |
tmp[y:y + occlusion_center.shape[0], x:x + occlusion_center.shape[1]] = occlusion_center | |
yield x - occlusion_padding, y - occlusion_padding, \ | |
tmp[occlusion_padding:tmp.shape[0] - occlusion_padding, occlusion_padding:tmp.shape[1] - occlusion_padding] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from keras.preprocessing.image import load_img | |
# load an image from file | |
image = load_img('car.jpeg', target_size=(224, 224)) | |
plt.imshow(image) | |
plt.title('ORIGINAL IMAGE') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from keras.preprocessing.image import img_to_array | |
from keras.applications.vgg16 import preprocess_input | |
# convert the image pixels to a numpy array | |
image = img_to_array(image) | |
# reshape data for the model | |
image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2])) | |
# prepare the image for the VGG model | |
image = preprocess_input(image) | |
# predict the probability across all output classes | |
yhat = model.predict(image) | |
temp = image[0] | |
print(temp.shape) | |
heatmap = np.zeros((224,224)) | |
correct_class = np.argmax(yhat) | |
for n,(x,y,image) in enumerate(iter_occlusion(temp,14)): | |
heatmap[x:x+14,y:y+14] = model.predict(image.reshape((1, image.shape[0], image.shape[1], image.shape[2])))[0][correct_class] | |
print(x,y,n,' - ',image.shape) | |
heatmap1 = heatmap/heatmap.max() | |
plt.imshow(heatmap) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import skimage.io as io | |
#creating mask from the standardised heatmap probabilities | |
mask = heatmap1 < 0.85 | |
mask1 = mask *256 | |
mask = mask.astype(int) | |
io.imshow(mask,cmap='gray') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
#read the image | |
image = cv2.imread('car.jpeg') | |
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB) | |
#resize image to appropriate dimensions | |
image = cv2.resize(image,(224,224)) | |
mask = mask.astype('uint8') | |
#apply the mask to the image | |
final = cv2.bitwise_and(image,image,mask = mask) | |
final = cv2.cvtColor(final,cv2.COLOR_BGR2RGB) | |
#plot the final image | |
plt.imshow(final) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment