mirror of
https://github.com/20kaushik02/CSE515_MWDB_Project.git
synced 2025-12-06 09:34:07 +00:00
refactored madhura's task 2 code, some more fixes
This commit is contained in:
parent
3b741069e0
commit
2ca88df5be
@ -137,9 +137,7 @@
|
|||||||
" str(input(\"Enter feature model - one of \" + str(list(valid_feature_models.keys()))))\n",
|
" str(input(\"Enter feature model - one of \" + str(list(valid_feature_models.keys()))))\n",
|
||||||
"]\n",
|
"]\n",
|
||||||
"\n",
|
"\n",
|
||||||
"selected_distance_measure = valid_distance_measures[\n",
|
"selected_distance_measure = feature_distance_matches[selected_feature_model]\n",
|
||||||
" str(input(\"Enter distance measure - one of \" + str(list(valid_distance_measures.keys()))))\n",
|
|
||||||
"]\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"if selected_image_id == -1:\n",
|
"if selected_image_id == -1:\n",
|
||||||
" show_similar_images_for_image(\n",
|
" show_similar_images_for_image(\n",
|
||||||
|
|||||||
151
Phase 2/task_2a.ipynb
Normal file
151
Phase 2/task_2a.ipynb
Normal file
File diff suppressed because one or more lines are too long
149
Phase 2/task_2b.ipynb
Normal file
149
Phase 2/task_2b.ipynb
Normal file
File diff suppressed because one or more lines are too long
1247
Phase 2/task_3.ipynb
1247
Phase 2/task_3.ipynb
File diff suppressed because it is too large
Load Diff
@ -291,7 +291,6 @@ def get_all_fd(image_id, given_image=None, given_label=None):
|
|||||||
else:
|
else:
|
||||||
img, label = dataset[image_id]
|
img, label = dataset[image_id]
|
||||||
img_shape = np.array(img).shape
|
img_shape = np.array(img).shape
|
||||||
print(img_shape)
|
|
||||||
if img_shape[0] >= 3:
|
if img_shape[0] >= 3:
|
||||||
true_channels = 3
|
true_channels = 3
|
||||||
else:
|
else:
|
||||||
@ -357,7 +356,7 @@ valid_feature_models = {
|
|||||||
"avgpool": "avgpool_fd",
|
"avgpool": "avgpool_fd",
|
||||||
"layer3": "layer3_fd",
|
"layer3": "layer3_fd",
|
||||||
"fc": "fc_fd",
|
"fc": "fc_fd",
|
||||||
"resnet": "resnet_fd"
|
"resnet": "resnet_fd",
|
||||||
}
|
}
|
||||||
valid_distance_measures = {
|
valid_distance_measures = {
|
||||||
"euclidean": euclidean_distance_measure,
|
"euclidean": euclidean_distance_measure,
|
||||||
@ -380,7 +379,7 @@ def show_similar_images_for_image(
|
|||||||
target_image=None,
|
target_image=None,
|
||||||
target_label=None,
|
target_label=None,
|
||||||
k=10,
|
k=10,
|
||||||
feature_model="fc",
|
feature_model="fc_fd",
|
||||||
distance_measure=pearson_distance_measure,
|
distance_measure=pearson_distance_measure,
|
||||||
save_plots=False,
|
save_plots=False,
|
||||||
):
|
):
|
||||||
@ -509,7 +508,7 @@ def show_similar_images_for_image(
|
|||||||
|
|
||||||
if save_plots:
|
if save_plots:
|
||||||
plt.savefig(
|
plt.savefig(
|
||||||
f"Plots/Image_{target_image_id}_{feature_model}_{distance_measure.__name__}_k{k}.png"
|
f"Plots/Image_{target_image_id}_{feature_model}_{distance_measure.__name__}_{k}_images.png"
|
||||||
)
|
)
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
@ -534,7 +533,7 @@ def show_similar_images_for_label(
|
|||||||
fd_collection,
|
fd_collection,
|
||||||
target_label,
|
target_label,
|
||||||
k=10,
|
k=10,
|
||||||
feature_model="fc",
|
feature_model="fc_fd",
|
||||||
distance_measure=pearson_distance_measure,
|
distance_measure=pearson_distance_measure,
|
||||||
save_plots=False,
|
save_plots=False,
|
||||||
):
|
):
|
||||||
@ -594,7 +593,7 @@ def show_similar_images_for_label(
|
|||||||
|
|
||||||
if save_plots:
|
if save_plots:
|
||||||
plt.savefig(
|
plt.savefig(
|
||||||
f"Plots/Label_{target_label}_{feature_model}_{distance_measure.__name__}_k{k}.png"
|
f"Plots/Label_{target_label}_{feature_model}_{distance_measure.__name__}_{k}_images.png"
|
||||||
)
|
)
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
@ -605,10 +604,18 @@ def show_similar_labels_for_image(
|
|||||||
target_image=None,
|
target_image=None,
|
||||||
target_label=None,
|
target_label=None,
|
||||||
k=10,
|
k=10,
|
||||||
feature_model="fc",
|
feature_model="fc_fd",
|
||||||
distance_measure=pearson_distance_measure,
|
distance_measure=pearson_distance_measure,
|
||||||
save_plots=False,
|
save_plots=False,
|
||||||
):
|
):
|
||||||
|
assert (
|
||||||
|
feature_model in valid_feature_models.values()
|
||||||
|
), "feature_model should be one of " + str(valid_feature_models.keys())
|
||||||
|
|
||||||
|
assert (
|
||||||
|
distance_measure in valid_distance_measures.values()
|
||||||
|
), "distance_measure should be one of " + str(list(valid_distance_measures.keys()))
|
||||||
|
|
||||||
# if target from dataset
|
# if target from dataset
|
||||||
if target_image_id != -1:
|
if target_image_id != -1:
|
||||||
print(
|
print(
|
||||||
@ -645,61 +652,57 @@ def show_similar_labels_for_image(
|
|||||||
|
|
||||||
label_dict = {target_image_id: target_label}
|
label_dict = {target_image_id: target_label}
|
||||||
|
|
||||||
target_image_fd = np.array(target_image[feature_model + "_fd"])
|
target_image_fd = np.array(target_image[feature_model])
|
||||||
|
|
||||||
assert (
|
|
||||||
feature_model in valid_feature_models
|
|
||||||
), "feature_model should be one of " + str(valid_feature_models)
|
|
||||||
|
|
||||||
assert (
|
|
||||||
distance_measure in valid_distance_measures.values()
|
|
||||||
), "distance_measure should be one of " + str(list(valid_distance_measures.keys()))
|
|
||||||
|
|
||||||
# only RGB for non RGB images
|
|
||||||
if feature_model != "hog":
|
|
||||||
all_images = fd_collection.find({"true_channels": 3})
|
|
||||||
else:
|
|
||||||
all_images = fd_collection.find()
|
|
||||||
|
|
||||||
|
all_images = fd_collection.find({})
|
||||||
for cur_img in all_images:
|
for cur_img in all_images:
|
||||||
cur_img_id = cur_img["image_id"]
|
cur_img_id = cur_img["image_id"]
|
||||||
# skip target itself
|
# skip target itself
|
||||||
if cur_img_id == target_image_id:
|
if cur_img_id == target_image_id:
|
||||||
continue
|
continue
|
||||||
cur_img_fd = np.array(cur_img[feature_model + "_fd"])
|
cur_img_fd = np.array(cur_img[feature_model])
|
||||||
cur_dist = distance_measure(
|
cur_dist = distance_measure(
|
||||||
cur_img_fd,
|
cur_img_fd,
|
||||||
target_image_fd,
|
target_image_fd,
|
||||||
)
|
)
|
||||||
cursor = fd_collection.find({"image_id": cur_img_id})
|
cur_label = cur_img["true_label"]
|
||||||
label=cursor[0]["true_label"]
|
|
||||||
|
|
||||||
# store first k images irrespective of distance (so that we store no more than k minimum distances)
|
# store first k images irrespective of distance (so that we store no more than k minimum distances)
|
||||||
if len(min_dists) < k + 1 and label not in label_dict.values():
|
if len(min_dists) < k + 1 and cur_label not in label_dict.values():
|
||||||
min_dists[cur_img_id] = cur_dist
|
min_dists[cur_img_id] = cur_dist
|
||||||
label_dict[cur_img_id] = label
|
label_dict[cur_img_id] = cur_label
|
||||||
|
|
||||||
# if lower distance:
|
# if lower distance:
|
||||||
elif cur_dist < max(min_dists.values()) and label not in label_dict.values():
|
elif (
|
||||||
|
cur_dist < max(min_dists.values()) and cur_label not in label_dict.values()
|
||||||
|
):
|
||||||
# add to min_dists
|
# add to min_dists
|
||||||
min_dists.update({cur_img_id: cur_dist})
|
min_dists.update({cur_img_id: cur_dist})
|
||||||
label_dict.update({cur_img_id: label})
|
label_dict.update({cur_img_id: cur_label})
|
||||||
# remove greatest distance by index
|
# remove label with greatest distance by index
|
||||||
pop_key = max(min_dists, key=min_dists.get)
|
pop_key = max(min_dists, key=min_dists.get)
|
||||||
min_dists.pop(pop_key)
|
min_dists.pop(pop_key)
|
||||||
label_dict.pop(pop_key)
|
label_dict.pop(pop_key)
|
||||||
|
|
||||||
min_dists = dict(sorted(min_dists.items(), key=lambda item: item[1]))
|
min_dists = dict(sorted(min_dists.items(), key=lambda item: item[1]))
|
||||||
|
|
||||||
for image_id in min_dists.keys():
|
fig, axs = plt.subplots(1, k, figsize=(48, 12))
|
||||||
|
for idx, image_id in enumerate(min_dists.keys()):
|
||||||
if image_id == target_image_id:
|
if image_id == target_image_id:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
print("Label: ", label_dict[image_id], "; distance: ", min_dists[image_id])
|
|
||||||
sample_image, sample_label = dataset[image_id]
|
sample_image, sample_label = dataset[image_id]
|
||||||
plt.imshow(transforms.ToPILImage()(sample_image))
|
axs[idx-1].imshow(transforms.ToPILImage()(sample_image))
|
||||||
plt.show()
|
axs[idx-1].set_title(
|
||||||
|
f"Label: {label_dict[image_id]}; Distance: {min_dists[image_id]}"
|
||||||
|
)
|
||||||
|
axs[idx-1].axis("off")
|
||||||
|
|
||||||
|
if save_plots:
|
||||||
|
plt.savefig(
|
||||||
|
f"Plots/Image_{target_image_id}_{feature_model}_{distance_measure.__name__}_{k}_labels.png"
|
||||||
|
)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
valid_dim_reduction_methods = {
|
valid_dim_reduction_methods = {
|
||||||
@ -838,16 +841,16 @@ def extract_latent_semantics(
|
|||||||
if sim_matrix is not None:
|
if sim_matrix is not None:
|
||||||
feature_vectors = sim_matrix
|
feature_vectors = sim_matrix
|
||||||
print(
|
print(
|
||||||
"Applying {} on the {} space to get {} latent semantics{}...".format(
|
"Applying {} on the given similarity matrix to get {} latent semantics{}...".format(
|
||||||
dim_reduction_method, feature_model, k, top_img_str
|
dim_reduction_method, k, top_img_str
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
# else take feature space from database
|
# else take feature space from database
|
||||||
else:
|
else:
|
||||||
feature_vectors = np.array([img[feature_model] for img in all_images])
|
feature_vectors = np.array([np.array(img[feature_model]).flatten() for img in all_images])
|
||||||
print(
|
print(
|
||||||
"Applying {} on the given similarity matrix to get {} latent semantics{}...".format(
|
"Applying {} on the {} space to get {} latent semantics{}...".format(
|
||||||
dim_reduction_method, k, top_img_str
|
dim_reduction_method, feature_model, k, top_img_str
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user