BertChristiaens commited on
Commit
07cf2eb
1 Parent(s): a983caa
.gitattributes CHANGED
@@ -32,3 +32,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ track filter=lfs diff=lfs merge=lfs -text
36
+ content/inpainting_after.png filter=lfs diff=lfs merge=lfs -text
37
+ content/inpainting_before.jpg filter=lfs diff=lfs merge=lfs -text
38
+ content/inpainting_sidebar.png filter=lfs diff=lfs merge=lfs -text
39
+ content/regen_example.png filter=lfs diff=lfs merge=lfs -text
app.py CHANGED
@@ -12,7 +12,7 @@ from segmentation import segment_image
12
  from config import HEIGHT, WIDTH, POS_PROMPT, NEG_PROMPT, COLOR_MAPPING, map_colors, map_colors_rgb
13
  from palette import COLOR_MAPPING_CATEGORY
14
  from preprocessing import preprocess_seg_mask, get_image, get_mask
15
-
16
  # wide layout
17
  st.set_page_config(layout="wide")
18
 
@@ -276,6 +276,13 @@ def main():
276
 
277
  _reset_state = check_reset_state()
278
 
 
 
 
 
 
 
 
279
  col1, col2 = st.columns(2)
280
  with col1:
281
  make_editing_canvas(canvas_color=color_chooser,
 
12
  from config import HEIGHT, WIDTH, POS_PROMPT, NEG_PROMPT, COLOR_MAPPING, map_colors, map_colors_rgb
13
  from palette import COLOR_MAPPING_CATEGORY
14
  from preprocessing import preprocess_seg_mask, get_image, get_mask
15
+ from explanation import make_inpainting_explanation, make_regeneration_explanation, make_segmentation_explanation
16
  # wide layout
17
  st.set_page_config(layout="wide")
18
 
 
276
 
277
  _reset_state = check_reset_state()
278
 
279
+ if generation_mode == "Inpainting":
280
+ make_inpainting_explanation()
281
+ elif generation_mode == "Segmentation conditioning":
282
+ make_segmentation_explanation()
283
+ elif generation_mode == "Re-generate objects":
284
+ make_regeneration_explanation()
285
+
286
  col1, col2 = st.columns(2)
287
  with col1:
288
  make_editing_canvas(canvas_color=color_chooser,
content/inpainting_after.png ADDED

Git LFS Details

  • SHA256: a494df35d8a951685af5460651e912a023746cd8ca32e21c7cde47e822112560
  • Pointer size: 132 Bytes
  • Size of remote file: 1.86 MB
content/inpainting_before.jpg ADDED

Git LFS Details

  • SHA256: 3625ed2aaeb62de05ce603fa69156e79979e594003469b9bce38b740c76ac014
  • Pointer size: 131 Bytes
  • Size of remote file: 216 kB
content/inpainting_sidebar.png ADDED

Git LFS Details

  • SHA256: 48ea23d2f2563c45130fd8e136cf24b021086cbc2db17597135ff1416c448f9e
  • Pointer size: 130 Bytes
  • Size of remote file: 54.2 kB
content/regen_example.png ADDED

Git LFS Details

  • SHA256: f91d2ce9ddd4e54ed542a20f7ba9f82d7b609668020765f8b4baab24642cf396
  • Pointer size: 132 Bytes
  • Size of remote file: 1.83 MB
explanation.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+ def make_inpainting_explanation():
4
+ with st.expander("Explanation inpainting", expanded=False):
5
+ st.write("In the inpainting mode, you can draw regions on the input image that you want to regenerate. "
6
+ "This can be useful to remove unwanted objects from the image or to improve the consistency of the image."
7
+ )
8
+ st.image("content/inpainting_sidebar.png", caption="Image before inpainting, note the ornaments on the wall", width=100)
9
+ st.write("You can find drawing options in the sidebar. There are two modes: freedraw and polygon. Freedraw allows the user to draw with a pencil of a certain width. "
10
+ "Polygon allows the user to draw a polygon by clicking on the image to add a point. The polygon is closed by right clicking.")
11
+
12
+ st.write("### Example inpainting")
13
+ st.write("In the example below, the ornaments on the wall are removed. The inpainting is done by drawing a mask on the image.")
14
+ st.image("content/inpainting_before.jpg", caption="Image before inpainting, note the ornaments on the wall", width=400)
15
+ st.image("content/inpainting_after.png", caption="Image before inpainting, note the ornaments on the wall", width=400)
16
+
17
+ def make_regeneration_explanation():
18
+ with st.expander("Explanation object regeneration"):
19
+ st.write("In this object regeneration mode, the model calculates which objects occur in the image. "
20
+ "The user can then select which objects can be regenerated by the controlnet model by adding them in the multiselect box. "
21
+ "All the object classes that are not selected will remain the same as in the original image."
22
+ )
23
+ st.write("### Example object regeneration")
24
+ st.write("In the example below, the room consists of various objects such as wall, ceiling, floor, lamp, bed, ... "
25
+ "In the multiselect box, all the objects except for 'lamp', 'bed and 'table' are selected to be regenerated. "
26
+ )
27
+ st.image("content/regen_example.png", caption="Room where all concepts except for 'bed', 'lamp', 'table' are regenerated", width=400)
28
+
29
+ def make_segmentation_explanation():
30
+ pass
image.png DELETED
Binary file (684 kB)
 
test.py DELETED
@@ -1,50 +0,0 @@
1
-
2
-
3
- class FondantInferenceModel:
4
- """FondantInferenceModel class that abstracts the model loading and inference.
5
- User needs to implement an inference, pre/postprocess step and pass the class to the FondantInferenceComponent.
6
- The FondantInferenceComponent will then load the model and prepare it for inference.
7
- The examples folder can then show examples for a pytorch / huggingface / tensorflow / ... model.
8
- """
9
- def __init__(self, device: str = "cpu"):
10
- self.device = device
11
- # load model
12
- self.model = self.load_model()
13
- # set model to eval mode
14
- self.eval()
15
-
16
- def load_model(self):
17
- # load model
18
- ...
19
-
20
- def eval(self):
21
- # prepare for inference
22
- self.model = self.model.eval()
23
- self.model = self.model.to(self.device)
24
-
25
- def preprocess(self, input):
26
- # preprocess input
27
- ...
28
-
29
- def postprocess(self, output):
30
- # postprocess output
31
- ...
32
-
33
- def __call__(self, *args, **kwargs):
34
- processed_inputs = self.preprocess(*args, **kwargs)
35
- outputs = self.model(*processed_inputs)
36
- processed_outputs = self.postprocess(outputs)
37
- return processed_outputs
38
-
39
-
40
- class FondantInferenceComponent(FondantTransformComponent, FondantInferenceModel):
41
- # loads the model and prepares it for inference
42
-
43
- def transform(
44
- self, args: argparse.Namespace, dataframe: dd.DataFrame
45
- ) -> dd.DataFrame:
46
- # by using the InferenceComponent, the model is automatically loaded and prepared for inference
47
- # you just need to call the infer method
48
- # the self.infer method calls the model.__call__ method of the FondantInferenceModel
49
- output = self.infer(args.image)
50
-