Spaces:
Sleeping
Sleeping
Kieran Fraser
commited on
Commit
·
eda40cc
1
Parent(s):
b88aa2b
Added blue evaluate button
Browse filesSigned-off-by: Kieran Fraser <Kieran.Fraser@ibm.com>
app.py
CHANGED
|
@@ -41,9 +41,7 @@ css = """
|
|
| 41 |
.center-text { text-align: center !important }
|
| 42 |
.larger-gap { gap: 100px !important; }
|
| 43 |
.symbols { text-align: center !important; margin: auto !important; }
|
| 44 |
-
|
| 45 |
-
min-width: 0px !important;
|
| 46 |
-
}
|
| 47 |
.eval-bt { background-color: #3b74f4; color: white; }
|
| 48 |
"""
|
| 49 |
|
|
@@ -224,13 +222,13 @@ with gr.Blocks(css=css, theme='Tshackelton/IBMPlex-DenseReadable') as demo:
|
|
| 224 |
|
| 225 |
|
| 226 |
with gr.Row(elem_classes=["larger-gap", "custom-text"]):
|
| 227 |
-
with gr.Column(scale=1):
|
| 228 |
gr.Markdown('''<p style="font-size: 20px; text-align: justify">ℹ️ First lets set the scene. You have a dataset of images, such as CIFAR-10.</p>''')
|
| 229 |
gr.Markdown('''<p style="font-size: 18px; text-align: justify"><i>Note: CIFAR-10 images are low resolution images which span 10 different categories as shown.</i></p>''')
|
| 230 |
gr.Markdown('''<p style="font-size: 20px; text-align: justify">ℹ️ Your goal is to have an AI model capable of classifying these images. So you
|
| 231 |
train a model on this dataset, or use a pre-trained model from Hugging Face,
|
| 232 |
such as Meta's Distilled Data-efficient Image Transformer.</p>''')
|
| 233 |
-
with gr.Column(scale=1):
|
| 234 |
gr.Markdown('''
|
| 235 |
<p style="font-size: 20px;"><b>Hugging Face dataset:</b>
|
| 236 |
<a href="https://huggingface.co/datasets/cifar10" target="_blank">CIFAR-10</a></p>
|
|
@@ -244,7 +242,7 @@ with gr.Blocks(css=css, theme='Tshackelton/IBMPlex-DenseReadable') as demo:
|
|
| 244 |
<br/>
|
| 245 |
<p style="font-size: 20px;">👀 take a look at the sample images from the CIFAR-10 dataset and their respective labels.</p>
|
| 246 |
''')
|
| 247 |
-
with gr.Column(scale=1):
|
| 248 |
gr.Gallery(label="CIFAR-10", preview=True, value=sample_CIFAR10(), height=420)
|
| 249 |
|
| 250 |
gr.Markdown('''<hr/>''')
|
|
@@ -270,7 +268,7 @@ with gr.Blocks(css=css, theme='Tshackelton/IBMPlex-DenseReadable') as demo:
|
|
| 270 |
max_iter = gr.Slider(minimum=1, maximum=10, label="Max iterations", value=4)
|
| 271 |
eps = gr.Slider(minimum=0.0001, maximum=1, label="Epslion", value=0.3)
|
| 272 |
eps_steps = gr.Slider(minimum=0.0001, maximum=1, label="Epsilon steps", value=0.03)
|
| 273 |
-
bt_eval_pgd = gr.Button("Evaluate", elem_classes="eval-bt")
|
| 274 |
|
| 275 |
# Evaluation Output. Visualisations of success/failures of running evaluation attacks.
|
| 276 |
with gr.Column(scale=5):
|
|
@@ -280,12 +278,12 @@ with gr.Blocks(css=css, theme='Tshackelton/IBMPlex-DenseReadable') as demo:
|
|
| 280 |
original_gallery = gr.Gallery(label="Original", preview=False, show_download_button=True)
|
| 281 |
benign_output = gr.Label(num_top_classes=3, visible=False)
|
| 282 |
clean_accuracy = gr.Number(label="Clean Accuracy", precision=2)
|
| 283 |
-
with gr.Column(scale=1, min_width=
|
| 284 |
gr.Markdown('''➕''')
|
| 285 |
with gr.Column(scale=10):
|
| 286 |
-
gr.Markdown('''<p style="font-size: 18px"><i>Visual representation of the calculated perturbations for attacking the model
|
| 287 |
delta_gallery = gr.Gallery(label="Added perturbation", preview=False, show_download_button=True)
|
| 288 |
-
with gr.Column(scale=1, min_width=
|
| 289 |
gr.Markdown('''🟰''', elem_classes='symbols')
|
| 290 |
with gr.Column(scale=10):
|
| 291 |
gr.Markdown('''<p style="font-size: 18px"><i>The original image (with optimized perturbations applied) gives us an adversarial image which fools the model.</i></p>''')
|
|
@@ -313,7 +311,7 @@ with gr.Blocks(css=css, theme='Tshackelton/IBMPlex-DenseReadable') as demo:
|
|
| 313 |
y_location = gr.Slider(minimum=1, maximum=32, label="Location (y)", value=1)
|
| 314 |
patch_height = gr.Slider(minimum=1, maximum=32, label="Patch height", value=12)
|
| 315 |
patch_width = gr.Slider(minimum=1, maximum=32, label="Patch width", value=12)
|
| 316 |
-
eval_btn_patch = gr.Button("Evaluate", elem_classes="eval-bt")
|
| 317 |
|
| 318 |
# Evaluation Output. Visualisations of success/failures of running evaluation attacks.
|
| 319 |
with gr.Column(scale=3):
|
|
@@ -323,14 +321,14 @@ with gr.Blocks(css=css, theme='Tshackelton/IBMPlex-DenseReadable') as demo:
|
|
| 323 |
original_gallery = gr.Gallery(label="Original", preview=False, show_download_button=True)
|
| 324 |
clean_accuracy = gr.Number(label="Clean Accuracy", precision=2)
|
| 325 |
|
| 326 |
-
with gr.Column(scale=1, min_width=
|
| 327 |
gr.Markdown('''➕''')
|
| 328 |
|
| 329 |
with gr.Column(scale=10):
|
| 330 |
gr.Markdown('''<p style="font-size: 18px"><i>Visual representation of the optimized patch for attacking the model.</i></p><br><br>''')
|
| 331 |
delta_gallery = gr.Gallery(label="Patches", preview=True, show_download_button=True)
|
| 332 |
|
| 333 |
-
with gr.Column(scale=1, min_width=
|
| 334 |
gr.Markdown('''🟰''', elem_classes='symbols')
|
| 335 |
|
| 336 |
with gr.Column(scale=10):
|
|
|
|
| 41 |
.center-text { text-align: center !important }
|
| 42 |
.larger-gap { gap: 100px !important; }
|
| 43 |
.symbols { text-align: center !important; margin: auto !important; }
|
| 44 |
+
.cust-width { min-width: 250px !important;}
|
|
|
|
|
|
|
| 45 |
.eval-bt { background-color: #3b74f4; color: white; }
|
| 46 |
"""
|
| 47 |
|
|
|
|
| 222 |
|
| 223 |
|
| 224 |
with gr.Row(elem_classes=["larger-gap", "custom-text"]):
|
| 225 |
+
with gr.Column(scale=1, elem_classes="cust-width"):
|
| 226 |
gr.Markdown('''<p style="font-size: 20px; text-align: justify">ℹ️ First lets set the scene. You have a dataset of images, such as CIFAR-10.</p>''')
|
| 227 |
gr.Markdown('''<p style="font-size: 18px; text-align: justify"><i>Note: CIFAR-10 images are low resolution images which span 10 different categories as shown.</i></p>''')
|
| 228 |
gr.Markdown('''<p style="font-size: 20px; text-align: justify">ℹ️ Your goal is to have an AI model capable of classifying these images. So you
|
| 229 |
train a model on this dataset, or use a pre-trained model from Hugging Face,
|
| 230 |
such as Meta's Distilled Data-efficient Image Transformer.</p>''')
|
| 231 |
+
with gr.Column(scale=1, elem_classes="cust-width"):
|
| 232 |
gr.Markdown('''
|
| 233 |
<p style="font-size: 20px;"><b>Hugging Face dataset:</b>
|
| 234 |
<a href="https://huggingface.co/datasets/cifar10" target="_blank">CIFAR-10</a></p>
|
|
|
|
| 242 |
<br/>
|
| 243 |
<p style="font-size: 20px;">👀 take a look at the sample images from the CIFAR-10 dataset and their respective labels.</p>
|
| 244 |
''')
|
| 245 |
+
with gr.Column(scale=1, elem_classes="cust-width"):
|
| 246 |
gr.Gallery(label="CIFAR-10", preview=True, value=sample_CIFAR10(), height=420)
|
| 247 |
|
| 248 |
gr.Markdown('''<hr/>''')
|
|
|
|
| 268 |
max_iter = gr.Slider(minimum=1, maximum=10, label="Max iterations", value=4)
|
| 269 |
eps = gr.Slider(minimum=0.0001, maximum=1, label="Epslion", value=0.3)
|
| 270 |
eps_steps = gr.Slider(minimum=0.0001, maximum=1, label="Epsilon steps", value=0.03)
|
| 271 |
+
bt_eval_pgd = gr.Button("Evaluate ✨", elem_classes="eval-bt")
|
| 272 |
|
| 273 |
# Evaluation Output. Visualisations of success/failures of running evaluation attacks.
|
| 274 |
with gr.Column(scale=5):
|
|
|
|
| 278 |
original_gallery = gr.Gallery(label="Original", preview=False, show_download_button=True)
|
| 279 |
benign_output = gr.Label(num_top_classes=3, visible=False)
|
| 280 |
clean_accuracy = gr.Number(label="Clean Accuracy", precision=2)
|
| 281 |
+
with gr.Column(scale=1, min_width=0, elem_classes='symbols'):
|
| 282 |
gr.Markdown('''➕''')
|
| 283 |
with gr.Column(scale=10):
|
| 284 |
+
gr.Markdown('''<p style="font-size: 18px"><i>Visual representation of the calculated perturbations for attacking the model.</i></p><br>''')
|
| 285 |
delta_gallery = gr.Gallery(label="Added perturbation", preview=False, show_download_button=True)
|
| 286 |
+
with gr.Column(scale=1, min_width=0):
|
| 287 |
gr.Markdown('''🟰''', elem_classes='symbols')
|
| 288 |
with gr.Column(scale=10):
|
| 289 |
gr.Markdown('''<p style="font-size: 18px"><i>The original image (with optimized perturbations applied) gives us an adversarial image which fools the model.</i></p>''')
|
|
|
|
| 311 |
y_location = gr.Slider(minimum=1, maximum=32, label="Location (y)", value=1)
|
| 312 |
patch_height = gr.Slider(minimum=1, maximum=32, label="Patch height", value=12)
|
| 313 |
patch_width = gr.Slider(minimum=1, maximum=32, label="Patch width", value=12)
|
| 314 |
+
eval_btn_patch = gr.Button("Evaluate ✨", elem_classes="eval-bt")
|
| 315 |
|
| 316 |
# Evaluation Output. Visualisations of success/failures of running evaluation attacks.
|
| 317 |
with gr.Column(scale=3):
|
|
|
|
| 321 |
original_gallery = gr.Gallery(label="Original", preview=False, show_download_button=True)
|
| 322 |
clean_accuracy = gr.Number(label="Clean Accuracy", precision=2)
|
| 323 |
|
| 324 |
+
with gr.Column(scale=1, min_width=0, elem_classes='symbols'):
|
| 325 |
gr.Markdown('''➕''')
|
| 326 |
|
| 327 |
with gr.Column(scale=10):
|
| 328 |
gr.Markdown('''<p style="font-size: 18px"><i>Visual representation of the optimized patch for attacking the model.</i></p><br><br>''')
|
| 329 |
delta_gallery = gr.Gallery(label="Patches", preview=True, show_download_button=True)
|
| 330 |
|
| 331 |
+
with gr.Column(scale=1, min_width=0):
|
| 332 |
gr.Markdown('''🟰''', elem_classes='symbols')
|
| 333 |
|
| 334 |
with gr.Column(scale=10):
|