Spaces:
Sleeping
Sleeping
Commit
·
b5dea27
1
Parent(s):
a16cb0b
Include advanced options to modify guidance scale, seed
Browse files
app.py
CHANGED
|
@@ -82,7 +82,7 @@ def pgd_inpaint(X, target, model, criterion, eps=0.1, step_size=0.015, iters=40,
|
|
| 82 |
|
| 83 |
return X_adv
|
| 84 |
|
| 85 |
-
def process_image_img2img(raw_image,prompt):
|
| 86 |
resize = T.transforms.Resize(512)
|
| 87 |
center_crop = T.transforms.CenterCrop(512)
|
| 88 |
init_image = center_crop(resize(raw_image))
|
|
@@ -103,13 +103,13 @@ def process_image_img2img(raw_image,prompt):
|
|
| 103 |
adv_image = to_pil(adv_X[0]).convert("RGB")
|
| 104 |
|
| 105 |
# a good seed (uncomment the line below to generate new images)
|
| 106 |
-
SEED = 9222
|
| 107 |
# SEED = np.random.randint(low=0, high=10000)
|
| 108 |
|
| 109 |
# Play with these for improving generated image quality
|
| 110 |
STRENGTH = 0.5
|
| 111 |
-
GUIDANCE = 7.5
|
| 112 |
-
NUM_STEPS = 50
|
| 113 |
|
| 114 |
with torch.autocast('cuda'):
|
| 115 |
torch.manual_seed(SEED)
|
|
@@ -119,7 +119,7 @@ def process_image_img2img(raw_image,prompt):
|
|
| 119 |
|
| 120 |
return [(init_image,"Source Image"), (adv_image, "Adv Image"), (image_nat,"Gen. Image Nat"), (image_adv, "Gen. Image Adv")]
|
| 121 |
|
| 122 |
-
def process_image_inpaint(raw_image,mask, prompt):
|
| 123 |
init_image = raw_image.convert('RGB').resize((512,512))
|
| 124 |
mask_image = mask.convert('RGB')
|
| 125 |
mask_image = ImageOps.invert(mask_image).resize((512,512))
|
|
@@ -156,7 +156,7 @@ def process_image_inpaint(raw_image,mask, prompt):
|
|
| 156 |
adv_image = recover_image(adv_image, init_image, mask_image, background=True)
|
| 157 |
|
| 158 |
# A good seed
|
| 159 |
-
SEED = 9209
|
| 160 |
|
| 161 |
# Uncomment the below to generated other images
|
| 162 |
# SEED = np.random.randint(low=0, high=100000)
|
|
@@ -165,8 +165,8 @@ def process_image_inpaint(raw_image,mask, prompt):
|
|
| 165 |
print(SEED)
|
| 166 |
|
| 167 |
#strength = 0.7
|
| 168 |
-
guidance_scale = 7.5
|
| 169 |
-
num_inference_steps = 100
|
| 170 |
|
| 171 |
image_nat = pipe_inpaint(prompt=prompt,
|
| 172 |
image=init_image,
|
|
@@ -192,7 +192,7 @@ def process_image_inpaint(raw_image,mask, prompt):
|
|
| 192 |
return [(init_image,"Source Image"), (adv_image, "Adv Image"), (image_nat,"Gen. Image Nat"), (image_adv, "Gen. Image Adv")]
|
| 193 |
|
| 194 |
|
| 195 |
-
examples_list = [["dog.png", "dog under heavy rain and muddy ground real"]]
|
| 196 |
|
| 197 |
|
| 198 |
with gr.Blocks() as demo:
|
|
@@ -203,7 +203,7 @@ with gr.Blocks() as demo:
|
|
| 203 |
<p style="margin-bottom: 10px; font-size: 94%">This is an unofficial demo for Photoguard, which is an approach to safeguarding images against manipulation by ML-powered photo-editing models such as stable diffusion through immunization of images. The demo is based on the <a href='https://github.com/MadryLab/photoguard' style='text-decoration: underline;' target='_blank'> Github </a> implementation provided by the authors.</p>
|
| 204 |
''')
|
| 205 |
gr.HTML('''
|
| 206 |
-
<p align="center"><img src="https://raw.githubusercontent.com/MadryLab/photoguard/main/assets/hero_fig.PNG" style="width:
|
| 207 |
''')
|
| 208 |
gr.HTML('''
|
| 209 |
<p style="margin-bottom: 10px; font-size: 94%"> A malevolent actor might download
|
|
@@ -224,15 +224,20 @@ we disrupt their ability to successfully perform such edits forcing them to gene
|
|
| 224 |
mask_image_inpaint = gr.Image(type="pil", label = "Mask")
|
| 225 |
input_prompt_inpaint = gr.Textbox(label="Prompt")
|
| 226 |
run_btn_inpaint = gr.Button('Run')
|
| 227 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 228 |
with gr.Row():
|
| 229 |
result_gallery = gr.Gallery(
|
| 230 |
label="Generated images", show_label=False, elem_id="gallery"
|
| 231 |
).style(grid=[2], height="auto")
|
| 232 |
|
| 233 |
-
run_btn_img2img.click(process_image_img2img, inputs = [input_image_img2img,input_prompt_img2img], outputs = [result_gallery])
|
| 234 |
-
examples = gr.Examples(examples=examples_list,inputs = [input_image_img2img,input_prompt_img2img], outputs = [result_gallery], cache_examples = True, fn = process_image_img2img)
|
| 235 |
-
run_btn_inpaint.click(process_image_inpaint, inputs = [input_image_inpaint,mask_image_inpaint,input_prompt_inpaint], outputs = [result_gallery])
|
| 236 |
|
| 237 |
|
| 238 |
demo.launch(debug=True)
|
|
|
|
| 82 |
|
| 83 |
return X_adv
|
| 84 |
|
| 85 |
+
def process_image_img2img(raw_image,prompt, scale, num_steps, seed):
|
| 86 |
resize = T.transforms.Resize(512)
|
| 87 |
center_crop = T.transforms.CenterCrop(512)
|
| 88 |
init_image = center_crop(resize(raw_image))
|
|
|
|
| 103 |
adv_image = to_pil(adv_X[0]).convert("RGB")
|
| 104 |
|
| 105 |
# a good seed (uncomment the line below to generate new images)
|
| 106 |
+
SEED = seed# Default is 9222
|
| 107 |
# SEED = np.random.randint(low=0, high=10000)
|
| 108 |
|
| 109 |
# Play with these for improving generated image quality
|
| 110 |
STRENGTH = 0.5
|
| 111 |
+
GUIDANCE = scale # Default is 7.5
|
| 112 |
+
NUM_STEPS = num_steps # Default is 50
|
| 113 |
|
| 114 |
with torch.autocast('cuda'):
|
| 115 |
torch.manual_seed(SEED)
|
|
|
|
| 119 |
|
| 120 |
return [(init_image,"Source Image"), (adv_image, "Adv Image"), (image_nat,"Gen. Image Nat"), (image_adv, "Gen. Image Adv")]
|
| 121 |
|
| 122 |
+
def process_image_inpaint(raw_image,mask, prompt,scale, num_steps, seed):
|
| 123 |
init_image = raw_image.convert('RGB').resize((512,512))
|
| 124 |
mask_image = mask.convert('RGB')
|
| 125 |
mask_image = ImageOps.invert(mask_image).resize((512,512))
|
|
|
|
| 156 |
adv_image = recover_image(adv_image, init_image, mask_image, background=True)
|
| 157 |
|
| 158 |
# A good seed
|
| 159 |
+
SEED = seed #Default is 9209
|
| 160 |
|
| 161 |
# Uncomment the below to generated other images
|
| 162 |
# SEED = np.random.randint(low=0, high=100000)
|
|
|
|
| 165 |
print(SEED)
|
| 166 |
|
| 167 |
#strength = 0.7
|
| 168 |
+
guidance_scale = scale# Default is 7.5
|
| 169 |
+
num_inference_steps = num_steps # Default is 100
|
| 170 |
|
| 171 |
image_nat = pipe_inpaint(prompt=prompt,
|
| 172 |
image=init_image,
|
|
|
|
| 192 |
return [(init_image,"Source Image"), (adv_image, "Adv Image"), (image_nat,"Gen. Image Nat"), (image_adv, "Gen. Image Adv")]
|
| 193 |
|
| 194 |
|
| 195 |
+
examples_list = [["dog.png", "dog under heavy rain and muddy ground real", 7.5, 50, 9222]]
|
| 196 |
|
| 197 |
|
| 198 |
with gr.Blocks() as demo:
|
|
|
|
| 203 |
<p style="margin-bottom: 10px; font-size: 94%">This is an unofficial demo for Photoguard, which is an approach to safeguarding images against manipulation by ML-powered photo-editing models such as stable diffusion through immunization of images. The demo is based on the <a href='https://github.com/MadryLab/photoguard' style='text-decoration: underline;' target='_blank'> Github </a> implementation provided by the authors.</p>
|
| 204 |
''')
|
| 205 |
gr.HTML('''
|
| 206 |
+
<p align="center"><img src="https://raw.githubusercontent.com/MadryLab/photoguard/main/assets/hero_fig.PNG" style="width:60%"/></p>
|
| 207 |
''')
|
| 208 |
gr.HTML('''
|
| 209 |
<p style="margin-bottom: 10px; font-size: 94%"> A malevolent actor might download
|
|
|
|
| 224 |
mask_image_inpaint = gr.Image(type="pil", label = "Mask")
|
| 225 |
input_prompt_inpaint = gr.Textbox(label="Prompt")
|
| 226 |
run_btn_inpaint = gr.Button('Run')
|
| 227 |
+
|
| 228 |
+
with gr.Accordion("Advanced options", open=False):
|
| 229 |
+
scale = gr.Slider(label="Guidance Scale", minimum=0.1, maximum=30.0, value=7.5, step=0.1)
|
| 230 |
+
num_steps = gr.Slider(label="Number of Inference Steps", minimum=5, maximum=125, value=100, step=5)
|
| 231 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=2147483647, step=1, randomize=True)
|
| 232 |
+
|
| 233 |
with gr.Row():
|
| 234 |
result_gallery = gr.Gallery(
|
| 235 |
label="Generated images", show_label=False, elem_id="gallery"
|
| 236 |
).style(grid=[2], height="auto")
|
| 237 |
|
| 238 |
+
run_btn_img2img.click(process_image_img2img, inputs = [input_image_img2img,input_prompt_img2img, scale, num_steps, seed], outputs = [result_gallery])
|
| 239 |
+
examples = gr.Examples(examples=examples_list,inputs = [input_image_img2img,input_prompt_img2img,scale, num_steps, seed], outputs = [result_gallery], cache_examples = True, fn = process_image_img2img)
|
| 240 |
+
run_btn_inpaint.click(process_image_inpaint, inputs = [input_image_inpaint,mask_image_inpaint,input_prompt_inpaint,scale, num_steps, seed], outputs = [result_gallery])
|
| 241 |
|
| 242 |
|
| 243 |
demo.launch(debug=True)
|