File size: 8,048 Bytes
9e25742
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
import streamlit as st
from streamlit_extras.switch_page_button import switch_page


translations = {
'en': {'title': 'SegGPT',
    'original_tweet': 
       """

       [Original tweet](https://x.com/mervenoyann/status/1773056450790666568) (March 27, 2024)

       """,
    'tweet_1':
        """

        SegGPT is a vision generalist on image segmentation, quite like GPT for computer vision ✨  

        It comes with the last release of 🤗 Transformers 🎁    

        Technical details, demo and how-to's under this! 

        """,
    'tweet_2':
        """

        SegGPT is an extension of the <a href='Painter' target='_self'>Painter</a> where you speak to images with images: the model takes in an image prompt, transformed version of the image prompt, the actual image you want to see the same transform, and expected to output the transformed image.  

        <br>

        SegGPT consists of a vanilla ViT with a decoder on top (linear, conv, linear). The model is trained on diverse segmentation examples, where they provide example image-mask pairs, the actual input to be segmented, and the decoder head learns to reconstruct the mask output. 👇🏻 

        """,
    'tweet_3':
        """

        This generalizes pretty well!  

        The authors do not claim state-of-the-art results as the model is mainly used zero-shot and few-shot inference. They also do prompt tuning, where they freeze the parameters of the model and only optimize the image tensor (the input context). 

        """,
    'tweet_4':
        """

        Thanks to 🤗 Transformers you can use this model easily! See [here](https://t.co/U5pVpBhkfK).

        """,
    'tweet_5':
        """

        I have built an app for you to try it out. I combined SegGPT with Depth Anything Model, so you don't have to upload image mask prompts in your prompt pair 🤗  

        Try it [here](https://t.co/uJIwqJeYUy). Also check out the [collection](https://t.co/HvfjWkAEzP).

        """,
    'ressources':
        """

        Ressources:   

        [SegGPT: Segmenting Everything In Context](https://arxiv.org/abs/2304.03284) 

        by Xinlong Wang, Xiaosong Zhang, Yue Cao, Wen Wang, Chunhua Shen, Tiejun Huang (2023)  

        [GitHub](https://github.com/baaivision/Painter)

        """
      },
'fr': {
    'title': 'SegGPT',
    'original_tweet': 
       """

       [Tweet de base](https://x.com/mervenoyann/status/1773056450790666568) (en anglais) (27 mars 2024)

       """,
    'tweet_1':
        """

        SegGPT est un modèle généraliste de vision pour la segmentation d'images;  c'est un peu comme le GPT pour la vision par ordinateur ✨.  

        Il est intégré à la dernière version de 🤗 Transformers 🎁    

        Détails techniques, démonstrations et manières de l'utiliser ci-dessous ! 

        """,
    'tweet_2':
        """

        SegGPT est une extension de <a href='Painter' target='_self'>Painter</a> où vous parlez aux images avec des images : le modèle reçoit une image, une version transformée de l'image, l'image réelle que vous voulez voir avec la même transformation, et est censé produire l'image transformée.  

        <br>

        SegGPT consiste en un ViT standard surmonté d'un décodeur (couche linéaire, convolution, couche linéaire). Le modèle est entraîné sur divers exemples de segmentation, où les auteurs fournissent des paires image-masque, l'entrée réelle à segmenter, et la tête du décodeur apprend à reconstruire la sortie du masque. 👇🏻         """,
    'tweet_3':
        """

        Cela se généralise assez bien !  

        Les auteurs ne prétendent pas obtenir des résultats de pointe, car le modèle est principalement utilisé pour l'inférence zéro-shot et few-shot. Ils effectuent également un prompt tuning, où ils gèlent les paramètres du modèle et optimisent uniquement le tenseur d'image (le contexte d'entrée). 

        """,
    'tweet_4':
        """ 

        Grâce à 🤗 Transformers, vous pouvez utiliser ce modèle facilement ! Voir [ici] (https://t.co/U5pVpBhkfK).

        """,
    'tweet_5':
        """

        J'ai créé une application pour que vous puissiez l'essayer. J'ai combiné SegGPT avec Depth Anything Model, de sorte que vous n'avez pas besoin de télécharger des masques d'images dans votre paire de prompt 🤗.  

        Essayez-le [ici](https://t.co/uJIwqJeYUy). Consultez également la [collection](https://t.co/HvfjWkAEzP).

        """,
    'ressources':
        """

        Ressources :   

        [SegGPT: Segmenting Everything In Context](https://arxiv.org/abs/2304.03284) 

        de Xinlong Wang, Xiaosong Zhang, Yue Cao, Wen Wang, Chunhua Shen, Tiejun Huang (2023)  

        [GitHub](https://github.com/baaivision/Painter)

        """
    }
}    


def language_selector():
    languages = {'EN': '🇬🇧', 'FR': '🇫🇷'}
    selected_lang = st.selectbox('', options=list(languages.keys()), format_func=lambda x: languages[x], key='lang_selector')
    return 'en' if selected_lang == 'EN' else 'fr'

left_column, right_column = st.columns([5, 1])

# Add a selector to the right column
with right_column:
    lang = language_selector()

# Add a title to the left column
with left_column:
    st.title(translations[lang]["title"])
    
st.success(translations[lang]["original_tweet"], icon="ℹ️")
st.markdown(""" """)

st.markdown(translations[lang]["tweet_1"], unsafe_allow_html=True)
st.markdown(""" """)

st.image("pages/SegGPT/image_1.jpeg", use_container_width=True)
st.markdown(""" """)

st.markdown(translations[lang]["tweet_2"], unsafe_allow_html=True)
st.markdown(""" """)

st.image("pages/SegGPT/image_2.jpg", use_container_width=True)
st.markdown(""" """)

st.markdown(translations[lang]["tweet_3"], unsafe_allow_html=True)
st.markdown(""" """)

st.image("pages/SegGPT/image_3.jpg", use_container_width=True)
st.markdown(""" """)

st.markdown(translations[lang]["tweet_4"], unsafe_allow_html=True)
st.markdown(""" """)

st.image("pages/SegGPT/image_4.jpeg", use_container_width=True)
st.markdown(""" """)

with st.expander ("Code"):
    st.code("""

    import torch 

    from transformers import SegGptImageProcessor, SegGptForImageSegmentation 

    

    image_processor = SegGptImageProcessor.from_pretrained("BAAI/seggpt-vit-large") 

    model = SegGptForImageSegmentation.from_pretrained("BAAI/seggpt-vit-large") 

    

    inputs = image_processor( 

        images=image_input, 

        prompt_images=image_prompt, 

        prompt_masks=mask_prompt, 

        num_labels=10, 

        return_tensors="pt") 

    

    with torch.no_grad(): 

        outputs = model(**inputs) 

    

    target_sizes = [image_input.size[::-1]] 

    mask = image_processor.post_process_semantic_segmentation(outputs, target_sizes, num_labels=10)[0]

    """)
st.markdown(""" """)

st.markdown(translations[lang]["tweet_5"], unsafe_allow_html=True)
st.markdown(""" """)

st.image("pages/SegGPT/image_5.jpeg", use_container_width=True)
st.markdown(""" """)

st.info(translations[lang]["ressources"], icon="📚")  

st.markdown(""" """)
st.markdown(""" """)
st.markdown(""" """)
col1, col2, col3= st.columns(3)
with col1:
    if lang == "en":
        if st.button('Previous paper', use_container_width=True):
            switch_page("Painter")
    else:
        if st.button('Papier précédent', use_container_width=True):
            switch_page("Painter")
with col2:
    if lang == "en":
        if st.button("Home", use_container_width=True):
            switch_page("Home")
    else:
        if st.button("Accueil", use_container_width=True):
            switch_page("Home")
with col3:
    if lang == "en":
        if st.button("Next paper", use_container_width=True):
            switch_page("Grounding DINO")
    else:
        if st.button("Papier suivant", use_container_width=True):
            switch_page("Grounding DINO")