Spaces:
Build error
Build error
= commited on
Commit ·
d57c931
1
Parent(s): b63fd37
adding smooth attention
Browse files
app.py
CHANGED
|
@@ -84,6 +84,13 @@ if file is not None:
|
|
| 84 |
|
| 85 |
left.markdown("""---""")
|
| 86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
# add a side for the scaler and the head number
|
| 88 |
scale = st.sidebar.slider("Attention scale", min_value=30, max_value =200)
|
| 89 |
|
|
@@ -122,7 +129,7 @@ if file is not None:
|
|
| 122 |
attention = outputs.attentions[-1][0]
|
| 123 |
|
| 124 |
# Let us recuperate the attention image
|
| 125 |
-
attention_image = get_attention(image, attention, size = (224, 224), patch_size = (14, 14), scale = scale, head = head)
|
| 126 |
|
| 127 |
# Let us transform the attention image to a opencv image
|
| 128 |
attention_image = cv2.cvtColor(attention_image.astype('float32'), cv2.COLOR_RGB2BGR)
|
|
|
|
| 84 |
|
| 85 |
left.markdown("""---""")
|
| 86 |
|
| 87 |
+
# initiliaze the smoothing parameters
|
| 88 |
+
smooth_scale = st.sidebar.slider("Smooth scale", min_value=0.1, max_value =1.0, step = 0.1)
|
| 89 |
+
|
| 90 |
+
smooth_size = st.sidebar.slider("Smooth size", min_value=1, max_value =10)
|
| 91 |
+
|
| 92 |
+
smooth_iter = st.sidebar.slider("Smooth iter", min_value=1, max_value =10)
|
| 93 |
+
|
| 94 |
# add a side for the scaler and the head number
|
| 95 |
scale = st.sidebar.slider("Attention scale", min_value=30, max_value =200)
|
| 96 |
|
|
|
|
| 129 |
attention = outputs.attentions[-1][0]
|
| 130 |
|
| 131 |
# Let us recuperate the attention image
|
| 132 |
+
attention_image = get_attention(image, attention, size = (224, 224), patch_size = (14, 14), scale = scale, head = head, smooth_scale = smooth_scale, smooth_size = smooth_size, smooth_iter = smooth_iter)
|
| 133 |
|
| 134 |
# Let us transform the attention image to a opencv image
|
| 135 |
attention_image = cv2.cvtColor(attention_image.astype('float32'), cv2.COLOR_RGB2BGR)
|
fake_face_detection/metrics/__pycache__/__init__.cpython-310.pyc
CHANGED
|
Binary files a/fake_face_detection/metrics/__pycache__/__init__.cpython-310.pyc and b/fake_face_detection/metrics/__pycache__/__init__.cpython-310.pyc differ
|
|
|
fake_face_detection/metrics/__pycache__/compute_metrics.cpython-310.pyc
CHANGED
|
Binary files a/fake_face_detection/metrics/__pycache__/compute_metrics.cpython-310.pyc and b/fake_face_detection/metrics/__pycache__/compute_metrics.cpython-310.pyc differ
|
|
|
fake_face_detection/metrics/make_predictions.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
|
| 2 |
from fake_face_detection.data.fake_face_dataset import FakeFaceDetectionDataset
|
| 3 |
from fake_face_detection.metrics.compute_metrics import compute_metrics
|
|
|
|
| 4 |
from torch.utils.tensorboard import SummaryWriter
|
| 5 |
from PIL.JpegImagePlugin import JpegImageFile
|
| 6 |
from torch.utils.data import DataLoader
|
|
@@ -16,7 +17,7 @@ import numpy as np
|
|
| 16 |
import torch
|
| 17 |
import os
|
| 18 |
|
| 19 |
-
def get_attention(image: Union[str, JpegImageFile], attention: torch.Tensor, size: tuple, patch_size: tuple, scale: int = 50, head: int = 1):
|
| 20 |
|
| 21 |
# recuperate the image as a numpy array
|
| 22 |
if isinstance(image, str):
|
|
@@ -47,6 +48,9 @@ def get_attention(image: Union[str, JpegImageFile], attention: torch.Tensor, siz
|
|
| 47 |
# let us reshape the attention to the right size
|
| 48 |
attention = attention.reshape(size[0], size[1], 1)
|
| 49 |
|
|
|
|
|
|
|
|
|
|
| 50 |
# recuperate the result
|
| 51 |
attention_image = img / 255 * attention.numpy() * scale
|
| 52 |
|
|
@@ -63,7 +67,10 @@ def make_predictions(test_dataset: FakeFaceDetectionDataset,
|
|
| 63 |
figsize: tuple = (24, 24),
|
| 64 |
attention_scale: int = 50,
|
| 65 |
show: bool = True,
|
| 66 |
-
head: int = 1
|
|
|
|
|
|
|
|
|
|
| 67 |
"""Make predictions with a vision transformer model
|
| 68 |
|
| 69 |
Args:
|
|
@@ -78,6 +85,9 @@ def make_predictions(test_dataset: FakeFaceDetectionDataset,
|
|
| 78 |
attention_scale (int, optional): The attention scale. Defaults to 50.
|
| 79 |
show (bool, optional): A boolean value indicating if we want to recuperate the figure. Defaults to True.
|
| 80 |
head (int, optional): The head number. Defaults to 1.
|
|
|
|
|
|
|
|
|
|
| 81 |
|
| 82 |
Returns:
|
| 83 |
Union[Tuple[pd.DataFrame, dict], Tuple[pd.DataFame, dict, figure]]: The return prediction and the metrics
|
|
|
|
| 1 |
|
| 2 |
from fake_face_detection.data.fake_face_dataset import FakeFaceDetectionDataset
|
| 3 |
from fake_face_detection.metrics.compute_metrics import compute_metrics
|
| 4 |
+
from fake_face_detection.smoothest_attention import smooth_attention
|
| 5 |
from torch.utils.tensorboard import SummaryWriter
|
| 6 |
from PIL.JpegImagePlugin import JpegImageFile
|
| 7 |
from torch.utils.data import DataLoader
|
|
|
|
| 17 |
import torch
|
| 18 |
import os
|
| 19 |
|
| 20 |
+
def get_attention(image: Union[str, JpegImageFile], attention: torch.Tensor, size: tuple, patch_size: tuple, scale: int = 50, head: int = 1, smooth_iter: int = 2, smooth_scale: float = 0.2, smooth_size = 5):
|
| 21 |
|
| 22 |
# recuperate the image as a numpy array
|
| 23 |
if isinstance(image, str):
|
|
|
|
| 48 |
# let us reshape the attention to the right size
|
| 49 |
attention = attention.reshape(size[0], size[1], 1)
|
| 50 |
|
| 51 |
+
# add the smoothest attention
|
| 52 |
+
attention = smooth_attention(attention, smooth_iter, smooth_scale, smooth_size)
|
| 53 |
+
|
| 54 |
# recuperate the result
|
| 55 |
attention_image = img / 255 * attention.numpy() * scale
|
| 56 |
|
|
|
|
| 67 |
figsize: tuple = (24, 24),
|
| 68 |
attention_scale: int = 50,
|
| 69 |
show: bool = True,
|
| 70 |
+
head: int = 1,
|
| 71 |
+
smooth_iter: int = 2,
|
| 72 |
+
smooth_scale: float = 0.2,
|
| 73 |
+
smooth_size = 5):
|
| 74 |
"""Make predictions with a vision transformer model
|
| 75 |
|
| 76 |
Args:
|
|
|
|
| 85 |
attention_scale (int, optional): The attention scale. Defaults to 50.
|
| 86 |
show (bool, optional): A boolean value indicating if we want to recuperate the figure. Defaults to True.
|
| 87 |
head (int, optional): The head number. Defaults to 1.
|
| 88 |
+
smooth_iter (int, optional): The number of iterations for the smoothest attention. Defaults to 2.
|
| 89 |
+
smooth_scale (float, optional): The scale for the smoothest attention. Defaults to 0.2.
|
| 90 |
+
smooth_size ([type], optional): The size for the smoothest attention. Defaults to 5.
|
| 91 |
|
| 92 |
Returns:
|
| 93 |
Union[Tuple[pd.DataFrame, dict], Tuple[pd.DataFame, dict, figure]]: The return prediction and the metrics
|
fake_face_detection/utils/split_data.py
CHANGED
|
@@ -27,11 +27,11 @@ def split_data_from_dir(path: str, new_path: str, test_size: float = 0.2, valid_
|
|
| 27 |
# let us recuperate the files' paths in it
|
| 28 |
images = os.listdir(dir_path)
|
| 29 |
|
| 30 |
-
# let us split the data between training and test
|
| 31 |
-
train_set,
|
| 32 |
|
| 33 |
-
# let us split the
|
| 34 |
-
|
| 35 |
|
| 36 |
# let us create the train test and valid directories
|
| 37 |
if not os.path.exists(os.path.join(os.path.join(new_path, 'train'), dir_)) or\
|
|
|
|
| 27 |
# let us recuperate the files' paths in it
|
| 28 |
images = os.listdir(dir_path)
|
| 29 |
|
| 30 |
+
# let us split the data between training and test + valid sets
|
| 31 |
+
train_set, test_valid_set = train_test_split(images, test_size = test_size + valid_size)
|
| 32 |
|
| 33 |
+
# let us split the test + valid sets between test and valid sets
|
| 34 |
+
test_set, valid_set = train_test_split(test_valid_set, test_size = valid_size)
|
| 35 |
|
| 36 |
# let us create the train test and valid directories
|
| 37 |
if not os.path.exists(os.path.join(os.path.join(new_path, 'train'), dir_)) or\
|