Spaces:
Runtime error
Runtime error
update app
Browse filesupdating for gpt-j model
app.py
CHANGED
|
@@ -62,14 +62,14 @@ def draw_polygons(polygons, colors, im_size=(256, 256), b_color="white", fpath=N
|
|
| 62 |
|
| 63 |
return draw, image
|
| 64 |
|
| 65 |
-
def prompt_to_layout(user_prompt, fpath=None):
|
| 66 |
|
| 67 |
model_prompt = '[User prompt] {} [Layout]'.format(user_prompt)
|
| 68 |
input_ids = tokenizer(model_prompt, return_tensors='pt')
|
| 69 |
-
output = finetuned.generate(**input_ids, do_sample=True, top_p=
|
| 70 |
output = tokenizer.batch_decode(output, skip_special_tokens=True)
|
| 71 |
|
| 72 |
-
layout = output[0].split('[User prompt]')[1].split('[Layout]')[1].split(', ')
|
| 73 |
spaces = [txt.split(':')[0] for txt in layout]
|
| 74 |
|
| 75 |
coordinates = [txt.split(':')[1] for txt in layout]
|
|
@@ -83,11 +83,11 @@ def prompt_to_layout(user_prompt, fpath=None):
|
|
| 83 |
for poly in polygons:
|
| 84 |
geom.append(Polygon(np.array(poly, dtype=int)))
|
| 85 |
|
| 86 |
-
colors = [
|
| 87 |
|
| 88 |
_, im = draw_polygons(geom, colors, fpath=fpath)
|
| 89 |
|
| 90 |
-
legend = Image.open("legend.png")
|
| 91 |
|
| 92 |
im = np.array(im)
|
| 93 |
im[:40, :] = np.array(legend)
|
|
@@ -96,7 +96,7 @@ def prompt_to_layout(user_prompt, fpath=None):
|
|
| 96 |
return im, layout, output
|
| 97 |
|
| 98 |
def mut_txt2layout(mut_output):
|
| 99 |
-
output = mut_output[0].split('[User prompt]')[1].split('[Layout]')[1].split(', ')
|
| 100 |
spaces = [txt.split(':')[0].strip(' ') for txt in output]
|
| 101 |
coordinates = [txt.split(':')[1] for txt in output]
|
| 102 |
coordinates = [re.findall(regex, coord) for coord in coordinates]
|
|
@@ -109,10 +109,10 @@ def mut_txt2layout(mut_output):
|
|
| 109 |
for poly in polygons:
|
| 110 |
geom.append(Polygon(np.array(poly, dtype=int)))
|
| 111 |
|
| 112 |
-
colors = [
|
| 113 |
_, im = draw_polygons(geom, colors, fpath=None)
|
| 114 |
|
| 115 |
-
legend = Image.open("legend.png")
|
| 116 |
|
| 117 |
im = np.array(im)
|
| 118 |
im[:40, :] = np.array(legend)
|
|
@@ -120,19 +120,20 @@ def mut_txt2layout(mut_output):
|
|
| 120 |
|
| 121 |
return im
|
| 122 |
|
| 123 |
-
def prompt_with_mutation(user_prompt, mut_rate, fpath=None):
|
| 124 |
|
| 125 |
#Create initial layout based on prompt
|
| 126 |
-
im, layout, output = prompt_to_layout(user_prompt)
|
| 127 |
|
| 128 |
#Create mutated layout based on initial
|
| 129 |
mut_len = int((1-mut_rate)*len(layout))
|
| 130 |
index1 = random.randrange(0,len(layout)-mut_len)
|
| 131 |
rooms = layout[index1:index1+mut_len]
|
| 132 |
-
rooms = '
|
|
|
|
| 133 |
new_prompt = '[User prompt] {} [Layout] {}'.format(user_prompt, rooms)
|
| 134 |
input_ids = tokenizer(new_prompt, return_tensors='pt')
|
| 135 |
-
mut_output = finetuned.generate(**input_ids, do_sample=True, top_p=
|
| 136 |
mut_output = tokenizer.batch_decode(mut_output, skip_special_tokens=True)
|
| 137 |
mut_im = mut_txt2layout(mut_output)
|
| 138 |
|
|
@@ -213,28 +214,30 @@ custom_css="""
|
|
| 213 |
opacity: 1 !important;
|
| 214 |
}"""
|
| 215 |
|
| 216 |
-
def gen_and_mutate(user_prompt, mutate=False, mut_rate=0.2):
|
| 217 |
if(mutate):
|
| 218 |
im, mut_im = None, None
|
| 219 |
while (mut_im is None):
|
| 220 |
try:
|
| 221 |
-
im, mut_im = prompt_with_mutation(user_prompt, mut_rate)
|
| 222 |
except:
|
| 223 |
pass
|
| 224 |
else:
|
| 225 |
mut_im=Image.open("empty.png")
|
| 226 |
-
im, _, _ = prompt_to_layout(user_prompt)
|
| 227 |
|
| 228 |
return im, mut_im
|
| 229 |
|
| 230 |
checkbox = gr.inputs.Checkbox(label='Mutate')
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
|
|
|
|
|
|
| 234 |
generated = gr.outputs.Image(label='Generated Layout')
|
| 235 |
mutated = gr.outputs.Image(label='Mutated Layout')
|
| 236 |
|
| 237 |
-
iface = gr.Interface(fn=gen_and_mutate, inputs=[textbox, checkbox,
|
| 238 |
css=custom_css,
|
| 239 |
thumbnail="thumbnail_gradio.PNG",
|
| 240 |
description='Demo of Semantic Generation of Residential Layouts \n',
|
|
|
|
| 62 |
|
| 63 |
return draw, image
|
| 64 |
|
| 65 |
+
def prompt_to_layout(user_prompt, top_p, top_k, fpath=None):
|
| 66 |
|
| 67 |
model_prompt = '[User prompt] {} [Layout]'.format(user_prompt)
|
| 68 |
input_ids = tokenizer(model_prompt, return_tensors='pt')
|
| 69 |
+
output = finetuned.generate(**input_ids, do_sample=True, top_p=top_p, top_k=top_k, max_length=300)
|
| 70 |
output = tokenizer.batch_decode(output, skip_special_tokens=True)
|
| 71 |
|
| 72 |
+
layout = output[0].split('[User prompt]')[1].split('[Layout] ')[1].split(', ')
|
| 73 |
spaces = [txt.split(':')[0] for txt in layout]
|
| 74 |
|
| 75 |
coordinates = [txt.split(':')[1] for txt in layout]
|
|
|
|
| 83 |
for poly in polygons:
|
| 84 |
geom.append(Polygon(np.array(poly, dtype=int)))
|
| 85 |
|
| 86 |
+
colors = [architext_colors2[housegan_labels[space]] for space in spaces]
|
| 87 |
|
| 88 |
_, im = draw_polygons(geom, colors, fpath=fpath)
|
| 89 |
|
| 90 |
+
legend = Image.open(r"F:\Personal\Startup\ArchiText\Media\legend.png")
|
| 91 |
|
| 92 |
im = np.array(im)
|
| 93 |
im[:40, :] = np.array(legend)
|
|
|
|
| 96 |
return im, layout, output
|
| 97 |
|
| 98 |
def mut_txt2layout(mut_output):
|
| 99 |
+
output = mut_output[0].rstrip().split('[User prompt]')[1].split('[Layout]')[1].split(', ')
|
| 100 |
spaces = [txt.split(':')[0].strip(' ') for txt in output]
|
| 101 |
coordinates = [txt.split(':')[1] for txt in output]
|
| 102 |
coordinates = [re.findall(regex, coord) for coord in coordinates]
|
|
|
|
| 109 |
for poly in polygons:
|
| 110 |
geom.append(Polygon(np.array(poly, dtype=int)))
|
| 111 |
|
| 112 |
+
colors = [architext_colors2[housegan_labels[space]] for space in spaces]
|
| 113 |
_, im = draw_polygons(geom, colors, fpath=None)
|
| 114 |
|
| 115 |
+
legend = Image.open(r"F:\Personal\Startup\ArchiText\Media\legend.png")
|
| 116 |
|
| 117 |
im = np.array(im)
|
| 118 |
im[:40, :] = np.array(legend)
|
|
|
|
| 120 |
|
| 121 |
return im
|
| 122 |
|
| 123 |
+
def prompt_with_mutation(user_prompt, top_p, top_k, mut_rate, fpath=None):
|
| 124 |
|
| 125 |
#Create initial layout based on prompt
|
| 126 |
+
im, layout, output = prompt_to_layout(user_prompt, top_p=top_p, top_k=top_k)
|
| 127 |
|
| 128 |
#Create mutated layout based on initial
|
| 129 |
mut_len = int((1-mut_rate)*len(layout))
|
| 130 |
index1 = random.randrange(0,len(layout)-mut_len)
|
| 131 |
rooms = layout[index1:index1+mut_len]
|
| 132 |
+
rooms[-1] = rooms[-1].split(':')[0] + ':'
|
| 133 |
+
rooms = ', '.join(rooms)# + ', '
|
| 134 |
new_prompt = '[User prompt] {} [Layout] {}'.format(user_prompt, rooms)
|
| 135 |
input_ids = tokenizer(new_prompt, return_tensors='pt')
|
| 136 |
+
mut_output = finetuned.generate(**input_ids, do_sample=True, top_p=top_p, top_k=top_k, max_length=400)
|
| 137 |
mut_output = tokenizer.batch_decode(mut_output, skip_special_tokens=True)
|
| 138 |
mut_im = mut_txt2layout(mut_output)
|
| 139 |
|
|
|
|
| 214 |
opacity: 1 !important;
|
| 215 |
}"""
|
| 216 |
|
| 217 |
+
def gen_and_mutate(user_prompt, mutate=False, top_p=0.94, top_k=100, mut_rate=0.2):
|
| 218 |
if(mutate):
|
| 219 |
im, mut_im = None, None
|
| 220 |
while (mut_im is None):
|
| 221 |
try:
|
| 222 |
+
im, mut_im = prompt_with_mutation(user_prompt, top_p, top_k, mut_rate)
|
| 223 |
except:
|
| 224 |
pass
|
| 225 |
else:
|
| 226 |
mut_im=Image.open("empty.png")
|
| 227 |
+
im, _, _ = prompt_to_layout(user_prompt, top_p, top_k)
|
| 228 |
|
| 229 |
return im, mut_im
|
| 230 |
|
| 231 |
checkbox = gr.inputs.Checkbox(label='Mutate')
|
| 232 |
+
topp_slider = gr.inputs.Slider(0.1, 1.0, 0.01, default=0.94, label='top_p')
|
| 233 |
+
topk_slider = gr.inputs.Slider(0, 100, 25, default=0, label='top_k')
|
| 234 |
+
mut_slider = gr.inputs.Slider(0.2, 0.8, 0.1, default=0.3, label='Mutation rate')
|
| 235 |
+
textbox = gr.inputs.Textbox(placeholder='house with two bedrooms and one bathroom', lines="2",
|
| 236 |
+
label="DESCRIBE YOUR DESIGN")
|
| 237 |
generated = gr.outputs.Image(label='Generated Layout')
|
| 238 |
mutated = gr.outputs.Image(label='Mutated Layout')
|
| 239 |
|
| 240 |
+
iface = gr.Interface(fn=gen_and_mutate, inputs=[textbox, checkbox, topp_slider, topk_slider, mut_slider], outputs=[generated, mutated],
|
| 241 |
css=custom_css,
|
| 242 |
thumbnail="thumbnail_gradio.PNG",
|
| 243 |
description='Demo of Semantic Generation of Residential Layouts \n',
|