File size: 6,716 Bytes
c8f09d8
bca2bcb
 
 
 
 
 
 
 
 
 
f0b81b4
bca2bcb
d063f18
 
bca2bcb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c8f09d8
0532088
bca2bcb
 
3f0bdca
4c0a899
 
 
bfca1a2
 
06ca453
3f0bdca
 
df61998
 
 
 
b776852
 
 
 
 
 
 
 
df61998
0532088
df61998
b776852
df61998
0532088
df61998
 
 
bca2bcb
97b4d0f
4933968
df61998
2d413f9
d063f18
f0b81b4
 
 
 
 
 
bca2bcb
 
 
 
d063f18
0532088
3f0bdca
bca2bcb
d063f18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from datetime import datetime
import streamlit as st
import random
import time
from streamlit_extras.switch_page_button import switch_page


def login():
    # skip customize user name for debug mode

    with st.form("user_login"):
        st.write('## Enter Your Name to Start the Session')
        user_id = st.text_input(
            "Enter your name 👇",
            label_visibility='collapsed',
            disabled=False,
            placeholder='anonymous',
        )
        st.write('You can leave it blank to be anonymous.')

        # Every form must have a submit button.
        submitted = st.form_submit_button("Start")
        if submitted:
            save_user_id(user_id)
            switch_page("gallery")


def save_user_id(user_id):
    print(user_id)
    if not user_id:
        user_id = 'anonymous' + str(random.randint(0, 100000))
    st.session_state.user_id = [user_id, datetime.now().strftime("%Y-%m-%d %H:%M:%S")]
    st.session_state.assigned_rank_mode = random.choice(['Drag and Sort', 'Battle'])


def logout():
    st.session_state.pop('user_id', None)
    st.session_state.pop('selected_dict', None)
    st.session_state.pop('score_weights', None)
    st.session_state.pop('gallery_state', None)
    st.session_state.pop('progress', None)
    st.session_state.pop('gallery_focus', None)


def info():
    with st.sidebar:
        st.write('## About')

        # st.write(
        #     "This is an web application to collect personal preference to images synthesised by generative models fine-tuned on stable diffusion. \
        #     **You might consider it as a tool for quickly digging out the most suitable text-to-image generation model for you from [civitai](https://civitai.com/).**"
        # )
        # st.write(
        #     "After you picking images from gallery page, and ranking them in the ranking page, you will be able to see a dashboard showing your preferred models in the summary page, **with download links of the models ready to use in [Automatic1111 webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui)!**"
        # )

        st.write(
            "**This is a web application for individual users to quickly dig out the most suitable text-to-image generation model from [civitai](https://civitai.com).** Our research aims to understand personal preference to images synthesized by generative models fine-tuned on stable diffusion and you can contribute by playing with this tool and giving us your feedback! "
        )

        st.write(
            "After picking images you liked from Gallery and a battle-mode Ranking Contest, a summary dashboard will be presented **indicating your preferred models with download links ready to be deployed in [Webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui)** !"
        )


if __name__ == '__main__':
    # print(st.source_util.get_pages('Home.py'))
    st.set_page_config(page_title="Login", page_icon="🏠", layout="wide")
    info()
    st.write('A Research by [MAPS Lab](https://whongyi.github.io/MAPS-research), [NYU Shanghai](https://shanghai.nyu.edu)')
    st.title("🙌 Welcome to GEMRec Gallery Webapp!")
    # st.info("Getting obsessed with tons of different text-to-image generation models available online?  \n \
    #         Want to find the most suitable one for your taste?  \n \
    #         **GEMRec** is here to help you!"
    # )
    st.write('### Getting obsessed with tons of different text-to-image generation models available online? Want to find the most suitable one for your taste?')
    st.write('**GEMRec** is here to help you! Try it out now 👇!')

    if 'user_id' not in st.session_state:
        login()
    else:
        st.write(f"You have already logged in as `{st.session_state.user_id[0]}`")
        st.write(f"Assigned ranking mode: `{st.session_state.assigned_rank_mode}`")
        st.button('Log out', on_click=logout)

    st.write('---')
    st.write('## FAQ')
    with st.expander(label='**🤔 How to use this webapp?**'):
        st.write('### Check out the demo video below')
        st.video('https://youtu.be/EjjCoeUSZF0')
        st.caption('Interface shown in this video demo might be a bit different from the current webapp because of further updates, but the basic idea is the same.')

    with st.expander(label='**ℹ️ What is GEMRec project?**'):
        st.write('### About GEMRec')
        st.write("**GE**nerative **M**odel **Rec**ommendation (**GEMRec**) is a research project by [MAPS Lab](https://github.com/MAPS-research), NYU Shanghai.")
        st.write('### Our Task')
        st.write('Given a user’s preference on a set of generated images, we aim to recommend the most preferred generative model for the user.')
        st.write('### Our Approach')
        st.write('We propose a two-stage framework, which contains prompt-model retrival and generated item ranking. :red[Your participation in this web application will help us to improve our framework and to further our research on personalization.]')
        st.write('### Key Contributions')
        st.write('1. We propose a two-stage framework to approach the Generative Model Recommendation problem. Our framework allows end-users to effectively explore a diverse set of generative models to understand their expressiveness. It also allows system developers to elicit user preferences for items generated from personalized prompts.')
        st.write('2. We release GEMRec-18K, a dense prompt-model interaction dataset that consists of 18K images generated by pairing 200 generative models with 90 prompts collected from real-world usages, accompanied by detailed metadata and generation configurations. This dataset builds the cornerstone for exploring Generative Recommendation and can be useful for other tasks related to understanding generative models')
        st.write('3. We take the first step in examining evaluation metrics for personalized image generations and identify several limitations in existing metrics. We propose a weighted metric that is more suitable for the task and opens up directions for future improvements in model training and evaluations.')

    with st.expander(label='**💻 Where can I find the paper and dataset?**'):
        st.write('### Paper')
        st.write('Arxiv: [Towards Personalized Prompt-Model Retrieval for Generative Recommendation](https://arxiv.org/abs/2308.02205)')
        st.write('### GEMRec-18K Dataset')
        st.write('Image dataset: https://huggingface.co/datasets/MAPS-research/GEMRec-PromptBook  \n \
        Model dataset: https://huggingface.co/datasets/MAPS-research/GEMRec-Roster')
        st.write('### Code')
        st.write('Github: https://github.com/maps-research/gemrec')