GenAI — Генерация изображений по ключевым словам

1. Введение

Последнее обновление: 12 октября 2023 г.

Генерация изображений Imagegen

Google Imagen — это мощная большая языковая модель Google, которая может генерировать реалистичные и креативные изображения из текстовых описаний. Imagen on Vertex AI позволяет пользователям создавать продукты искусственного интеллекта нового поколения, которые за считанные секунды преобразуют воображение пользователя в высококачественные визуальные ресурсы. Помимо создания изображений из текста, он также поддерживает редактирование изображений с помощью текстовых подсказок, подписей к изображениям, визуальных вопросов и ответов и настройки модели изображения на основе темы и стиля.

Быстрое создание

Чтобы создать изображение с помощью Imagen, вам необходимо предоставить текстовое описание изображения, известное как приглашение, с помощью которого создается изображение. Однако для создания высококачественного фотореалистичного изображения необходимы профессиональные знания. Это также может зависеть от домена, если вы хотите создать изображение, связанное с конкретными сферами бизнеса, такими как розничная торговля, производство и т. д. Более простой подход к созданию подсказки — это добавить набор ключевых слов в модель Text Bison.

Общий подход такой:

fbb3826592b2816d.png

Градио пользовательский интерфейс

Gradio — это библиотека Python с открытым исходным кодом, которая позволяет быстро создавать простые в использовании настраиваемые компоненты пользовательского интерфейса для вашей модели машинного обучения, любого API или даже произвольной функции Python, используя несколько строк кода. Вы можете интегрировать графический интерфейс Gradio непосредственно в свой блокнот Jupyter или поделиться им ссылкой с кем угодно. Gradio поддерживает широкий спектр типов мультимедиа, включая текст, изображения, видео и аудио. Он также предоставляет ряд готовых компонентов пользовательского интерфейса, таких как поля ввода, кнопки, ползунки и раскрывающиеся меню.

Что ты построишь

В этой лаборатории кода вы собираетесь развернуть приложение Gradio, которое будет:

  • Создайте текстовую подсказку, используя ключевые слова или фразы. Сгенерированное приглашение также можно редактировать вручную.
  • Сгенерируйте изображения из сгенерированного приглашения в пользовательском интерфейсе.

Что вы узнаете

  • Как программно использовать нулевое и малократное обучение с моделью text-bison для генерации конкретных подсказок для создания изображений.
  • Как генерировать изображения с использованием модели Imagen через API и подсказку.
  • Как создать, развернуть и протестировать приложение Gradio из ноутбука Vertex AI Workbench.

Что вам понадобится

  • Например, доступ к проекту GCP — «Cloud-llm-preview4».
  • Доступ для создания Vertex AI Workbench
  • Vertex AI API включен.
  • Требования к сети для Gradio: общедоступный URL-адрес доступа к экземпляру ноутбука

2. Приступаем к настройке

Создать блокнот

  • Войти в проект
  • Перейдите к рабочему месту из левого навигационного меню.
  • В разделе « НОУТБУКИ, УПРАВЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ », создайте новый блокнот с параметрами по умолчанию.
  • Нажмите « ОТКРЫТЬ JUPYTERLAB », как только экземпляр будет подготовлен.

Примечание. Запуск ноутбука может занять несколько минут, если он остановлен.

Получить код

Мы разместили файл кода здесь. Этот блокнот можно импортировать в вашу среду и запускать как есть (за исключением изменения деталей проекта).

3. Запустите код

Установите/импортируйте необходимые зависимости и библиотеки.

  • Установите приложение Градио.
  • Импортируйте API-интерфейсы Vertex AI для Text-Bison и генерации изображений.
  • Импортируйте все остальные необходимые библиотеки.

Оперативная генерация с использованием Text-Bison

Использует вводимые пользователем данные, содержащие ключевые слова и/или фразы, т. е. список ключевых слов или фраз, разделенных запятыми, которые можно использовать для построения предложения, описывающего требуемое изображение, которое необходимо сгенерировать.

Например — Персона, Предмет, Фон, Освещение и другие описания.

Функция, которая генерирует приглашение, задается следующим образом:

def Prompt_генерация(персона,сигнал,тема, освещение, качество, extra_desc):

model = TextGenerationModel.from_pretrained("text-bison")

response_few_shot = model.predict(

    few_shot_prompt,

    **parameters

)

response_single_shot = model.predict(

    prompt,

    **parameters

)

Подсказка «Несколько выстрелов» и «Нулевой выстрел»

Подсказки с нулевым выстрелом — это метод генерации текста, при котором модели не предоставляется контекст или примеры для генерации текста. Это может оказаться непростой задачей, поскольку модели приходится полагаться на собственные знания для создания связного и информативного текста.

Однако подсказки с нулевым результатом также могут быть очень креативными, поскольку модель не ограничена какими-либо ранее существовавшими примерами.

Кратковременные подсказки — это метод генерации текста, при котором модели дается небольшое количество примеров для генерации текста. Это может быть проще, чем подсказка с нулевым выстрелом, поскольку в модели есть некоторые указания о том, что генерировать. Однако подсказки, состоящие из нескольких фрагментов, также могут быть ограниченными, поскольку модель может генерировать только текст, аналогичный приведенным ей примерам.

Ниже приведен пример кода для подсказок Few-Shot и Zero-shot.

**# В коде используется несколько подсказок**

Несколько_shot_prompt = f"""Вы являетесь экспертом в написании подсказок для моделей создания изображений. Используя предоставленные фразы и ключевые слова, объедините их и добавьте некоторые реалистичные детали, чтобы создать логичную и содержательную подсказку, которую можно использовать для создания изображений.

input: people, gardening, house garden, colorful plants, Real, HD image, Photo.

output: A Photo of people gardening in a house garden landscape with few coloured flowering plants. Realistic FULL HD Images, Elegant and natural facial and eye features taken by professional photographer

input: plumber, faucet, kitchen, high quality, natural lighting, Photo

output: A Photo of a plumber fixing a faucet in the kitchen. High quality image with natural indoor lighting.

input: house and garden, halloween, warm lighting, high quality image, Sketch

output: A Sketch of Beautiful House and Garden with Halloween Decorations. Warm lighting, High Quality, 4K photograph taken by professional photographer from front.

input: nice living room, warm lighting,Professional Photographer from far, Photo

output: A photo of a Well designed Living Room. Warm lighting, High Quality, 4K photograph taken by Professional Photographer from far

input: {params_list_str}

output:

"""

# Подсказка нулевого выстрела, используемая в коде

Prompt = f"""Вы являетесь экспертом в написании подсказок для моделей генерации изображений. Помогите мне написать список осмысленных подсказок для модели генерации изображений, включая слова: "{params_list_str}". Не забудьте включить эти слова в подсказку и сделайте подсказку осмысленной."""

Генерация изображений с использованием Imagen

Использует запрос пользовательского ввода и отрицательный запрос (необязательно) и передает их в модель (imagegenerate@002).

def image_generation_completion(вход, негативный_подсказка):

input_prompt = input

model = ImageGenerationModel.from_pretrained("imagegeneration@002")

response = model.generate_images(

    prompt=input_prompt,

    number_of_images=4, #kept to static value of 4

    negative_prompt=negative_prompt

)

Следующий код включен для создания изображений из приглашения на ввод пользователя и отрицательного приглашения. В окончательном коде используется приглашение, сгенерированное моделью text-bison.

из vertexai.preview.vision_models импортировать ImageGenerationModel

Защиту изображения_генерации (вход, негативная_подсказка):

input_prompt = input

model = ImageGenerationModel.from_pretrained("imagegeneration@002")

response = model.generate_images(

    prompt=input_prompt,

    number_of_images=4, #kept to static value of 4.. can be a max value of 8

    negative_prompt=negative_prompt

)

images = response.images

return images

user_prompt = " Подсказка : молодая женщина демонстрирует и продает неукрашенную свежую рождественскую елку из кучи деревьев. Холодное освещение, высокое качество и детализированное изображение, сделанное профессиональным фотографом издалека."

Negative_prompt = "Искаженные и непривлекательные лица"

сгенерированный_список_изображений = image_генерация (user_prompt, negative_prompt)

#показать одно из сгенерированных изображений

сгенерированный_список_изображений[0].show()

Выход -

db04a6bfdd78693b.jpeg

4. Разверните приложение Gradio.

Gradio используется для внешнего интерфейса, где пользователи могут вводить ключевые слова и генерировать структурированные подсказки, и эти подсказки могут использоваться напрямую или могут быть дополнительно отредактированы пользователем, а затем переданы в Imagen для создания изображений в соответствии с входными данными. Gradio — это библиотека Python, которую можно использовать для создания пользовательских интерфейсов для моделей машинного обучения. В этом приложении блоки используются для придания гибкости и сложных потоков данных. Blocks обеспечивает управление макетом приложения с помощью строк и столбцов:

 с gr.Blocks() в качестве демонстрации:

#Prompt Generation Part

with gr.Row():

    with gr.Column(scale=1):

        Persona = gr.Textbox(label="Persona", info = "Customer segment such as Plumber, Electrician etc.")

    with gr.Column(scale=1):

        Signals = gr.Textbox(label="Signals", info = "Main content of banner such as Faucet, Lamp etc.")

    with gr.Column(scale=1):

        Theme = gr.Textbox(label="Theme", info = "Context of the banner such as Halloween, Kitchen etc.")

with gr.Row():

    with gr.Column(scale=1):

        photo_modifiers = gr.Textbox(label="Photography Modifiers", info = "Photography specific modifiers and parameters such as Lighting(Dramatic/Natural/Warm/Cold), Camera Proximity etc.")

    with gr.Column(scale=1):

        quality_modifiers =  gr.Textbox(label="Image Quality Modifier", info = "Quality Modifiers like high-quality, beautiful, stylized. 4K, HDR, By a professional etc")

    with gr.Column(scale=1):

        other_desc =  gr.Textbox(label="Any Other Description", info = "Other Descriptions for Image such as Style (Painting/Photo/Sketch), Bakground/Foreground Context")

с gr.Row():

    btn = gr.Button("Submit")

с gr.Row():

    returned_prompts = gr.Textbox(label="Result Prompts", interactive = True)    

btn.click(fn=prompt_generation, inputs=[Персона, Сигналы,Тема, photo_modifiers,quality_modifiers,other_desc], выходы = return_prompts)

Для обработки входных и выходных данных пользователя Gradio предоставляет несколько компонентов, таких как изображение, видео, слайдер, раскрывающийся список, текстовое поле, радио и другие параметры. Эти компоненты дают разработчикам гибкость и контроль над тем, как принимать входные данные от пользователей и передавать их в Test-bison, imagen или любую другую модель ML.

В этом проекте приложение создано с использованием блоков , чтобы добавить гибкость и сложность.

данные передаются в приложение. Помимо блоков, имеется несколько компонентов градиента.

используется в том числе:

Ниже приведен фрагмент кода, используемый для создания изображений из ввода и отрицательного запроса:

 Часть #Генерация изображений

with gr.Row():

    with gr.Column(scale=1):

        image_prompt = gr.Textbox(label="Image Generation Prompt")

with gr.Accordion("Advanced options", open=False): #Let's hide the advanced options!

    with gr.Row():

        negative_prompt = gr.Textbox(label="Negative prompt", info = "Specify What not to Include in Image ex. Bad Quality Image")

with gr.Row():

    with gr.Column(scale=1):    

        img_btn = gr.Button("Generate Images")

with gr.Row():

    with gr.Column():

        output_image_1 = gr.Image(label = "Result Image 1", visible = False)

    with gr.Column():

        output_image_2 = gr.Image(label = "Result Image 2", visible = False)

with gr.Row():

    with gr.Column():

        output_image_3 = gr.Image(label = "Result Image 3", visible = False)

    with gr.Column():

        output_image_4 = gr.Image(label = "Result Image 4", visible = False)

returned_prompts.select(populate_image_prompt, inputs = [returned_prompts], outputs = image_prompt)

img_btn.click(fn=image_generation_completion, inputs=[image_prompt,negative_prompt], outputs = [output_image_1,output_image_2,output_image_3,output_image_4])       

Чтобы запустить и протестировать приложение Gradio, просто введите текстовую подсказку и нажмите кнопку «Создать». Imagen сгенерирует изображение на основе вашего запроса. Вы можете попробовать разные подсказки, чтобы увидеть, какие изображения может генерировать Imagen.

Ниже приведен снимок экрана с созданием подсказки в приложении Gradio.

70331c9645b1e91b.png

Ниже приведен скриншот создания изображения в приложении Gradio.

a7261e8fafab7073.png

Некоторые примеры -

Пример 1 -

[Изображение слева] Подсказка (в качестве подсказки используются простые ключевые слова): Пара друзей катается на лодке.

[Изображение справа] Подсказка (с использованием подсказок, созданных Text-Bison): Фотография двух молодых людей, ловящих рыбу на лодке в окружении темных деревьев в лесу. Мужчины одеты в рубашки и стоят на лодке. Естественное освещение, высокое качество, фотография 4K, снятая профессиональным фотографом.

c2f5fabd10baf42.jpegabc9b8204a9fdf7f.jpeg

Пример 2 -

[Изображение слева] Подсказка ((Использование простых ключевых слов в качестве подсказок)) : Рождественская елка.

[Изображение справа] Подсказка (с использованием подсказок, созданных Text-Bison): Рождественская елка в комнате с лампой и мебелью. Елка украшена гирляндами и орнаментами. Он расположен возле окна, на заднем плане видна стена. Теплый свет, высокое качество, HDR Фотография, сделанная профессиональным фотографом издалека.

f10cf9f52ffd92c7.jpegcce36df7a439b309.jpeg

5. Очистка

Чтобы очистить свои ресурсы,

  • Остановите приложение Gradio.
  • Остановите/удалит блокнот Workbench.

6. Поздравления

Поздравляем, вы успешно развернули приложение Gradio для создания подсказок и изображений с помощью Google Text-Bison API и Imagen API.