In [1]:
import sys
import os
sys.path.append("/home/nakamura/network_dissection/NetDissect/src")
os.chdir("/home/nakamura/network_dissection/NetDissect/")
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from viewprobe import NetworkProbe
from category_info import category_info
script = "/home/nakamura/network_dissection/NetDissect/research/top_iou_mean_10_percent_quantile_1223.ipynb"
% matplotlib inline
In [2]:
# define models
alex = {}
alex["name"] = "alexnet_imagenet"
alex["directory"] = "./dissection/alexnet_imagenet_full_conv_384/"
alex["blobs"] = ["conv1", "conv2", "conv3", "conv4", "conv5", "fc6-conv", "fc7-conv", "fc8-conv"]
vgg_material = {}
vgg_material["name"] = "vgg_material"
vgg_material["directory"] = "./dissection/vgg_material_full_conv/"
vgg_material["blobs"] = ["conv1_2", "conv2_2","conv3_3", "conv4_3", "conv5_3", "fc6-conv", "fc7-conv", "fc8-conv"]
sentibank = {}
sentibank["name"] = "sentibank"
sentibank["directory"] = "./dissection/caffe_sentibank_full_conv/"
sentibank["blobs"] = ["conv1", "conv2","conv3", "conv4", "conv5", "fc6-conv", "fc7-conv", "fc8-conv"]
vgg_face = {}
vgg_face["name"] = "vgg_face"
vgg_face["directory"] = "./dissection/VGG_FACE_full_conv/"
vgg_face["blobs"] = ["conv1_2", "conv2_2","conv3_3", "conv4_3", "conv5_3", "fc6-conv", "fc7-conv", "fc8-conv"]
models = [alex, vgg_material, sentibank, vgg_face]
In [28]:
def mean_quantile_iou(model, blob, q=0.9):
"""return ordered_iou averaged in a layer as pandas.Series
"""
path= os.path.join(model["directory"], blob + "-iou.csv")
iou = pd.read_csv(path, index_col=0)
quantile = iou.quantile(q=q)
# True where iou exceed quantile, else False
q_table = iou > quantile
# number of elements which exceed threshold
n_exceed = q_table.sum()
iou_threshold = iou * q_table
# sum of masked table devided by number of non-zero elements
iou_mean_quantile = iou_threshold.sum() / n_exceed
ordered_iou = iou_mean_quantile.sort_values(ascending=False)
return ordered_iou
In [33]:
def plot_iou_top(model, blob, N, ):
raw_iou = mean_quantile_iou(model, blob)
iou = raw_iou.values
label = raw_iou.index.tolist()
colors = category_info().generate_color_list(label)
bottom = range(N)
iou_top = iou[:N][::-1]
label_top = label[:N][::-1]
plt.figure(figsize=(8,16))
plt.barh(bottom, iou_top,height=0.5, align="center", color=colors[:N][::-1])
plt.title("Top IOU categories {}".format(model["name"] + " "+blob))
plt.ylim(-1, N)
plt.yticks(np.arange(0,N + 1),label_top)
plt.xlabel("Mean IOU for top 10% quantiles")
save_dir = "/home/nakamura/network_dissection/NetDissect/research/figures/top_iou/"
file_name = "top_iou_mean_10_percent_quantile_" + model["name"] + "_" + blob + ".png"
plt.text(0, -0.5, script)
plt.savefig(os.path.join(save_dir, file_name), dpi=300)
plt.show()
In [34]:
for model in models:
for blob in model["blobs"]:
plot_iou_top(model, blob, N=50)