File size: 1,574 Bytes
1046772
a2ca503
 
1ae2bef
 
 
e53b04f
 
1f029d6
 
 
 
 
51718fb
d7f67d7
ad572cd
d7f67d7
1f029d6
 
 
 
 
a2ca503
 
 
3c26522
 
a2ca503
3010861
e029f9c
 
a2ca503
3c26522
e029f9c
 
 
 
 
 
a2ca503
e029f9c
 
 
 
 
004c076
a2ca503
9d17ea5
e670f36
87eb18f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import utils
from huggingface_hub.keras_mixin import from_pretrained_keras
from PIL import Image
import streamlit as st
import tensorflow as tf

# Inputs
st.title("Input your image")
image_url = st.text_input(
	label="URL of image",
	value="https://dl.fbaipublicfiles.com/dino/img.png",
	placeholder="https://your-favourite-image.png"
)

# Outputs
st.title("Original Image from URL")

# Preprocess the same image but with normlization.
image, preprocessed_image = utils.load_image_from_url(
	image_url,
	model_type="dino"
)
st.image(image, caption="Original Image")

# Load the DINO model
with st.spinner("Loading the model..."):
	dino = from_pretrained_keras("probing-vits/vit-dino-base16")

with st.spinner("Generating the attention scores..."):
	# Get the attention scores
	_, attention_score_dict = dino.predict(preprocessed_image)

with st.spinner("Generating the heat maps... HOLD ON!"):
	# De-normalize the image for visual clarity. 
	in1k_mean = tf.constant([0.485 * 255, 0.456 * 255, 0.406 * 255])  
	in1k_std = tf.constant([0.229 * 255, 0.224 * 255, 0.225 * 255])  
	preprocessed_img_orig = (preprocessed_image * in1k_std) + in1k_mean
	preprocessed_img_orig = preprocessed_img_orig / 255.
	preprocessed_img_orig = tf.clip_by_value(preprocessed_img_orig, 0.0, 1.0).numpy()

	attentions = utils.attention_heatmap(
		attention_score_dict=attention_score_dict,
		image=preprocessed_img_orig
	)

	plt = utils.plot(attentions=attentions, image=preprocessed_img_orig)

# Show the attention maps
st.title("Attention 🔥 Maps")
st.image(plt, caption="Attention Heat Maps")