1. Введение
Последнее обновление: 12 октября 2023 г.
Генерация изображений Imagegen
Google Imagen — это мощная большая языковая модель Google, которая может генерировать реалистичные и креативные изображения из текстовых описаний. Imagen on Vertex AI позволяет пользователям создавать продукты искусственного интеллекта нового поколения, которые за считанные секунды преобразуют воображение пользователя в высококачественные визуальные ресурсы. Помимо создания изображений из текста, он также поддерживает редактирование изображений с помощью текстовых подсказок, подписей к изображениям, визуальных вопросов и ответов и настройки модели изображения на основе темы и стиля.
Быстрое создание
Чтобы создать изображение с помощью Imagen, вам необходимо предоставить текстовое описание изображения, известное как приглашение, с помощью которого создается изображение. Однако для создания высококачественного фотореалистичного изображения необходимы профессиональные знания. Это также может зависеть от домена, если вы хотите создать изображение, связанное с конкретными сферами бизнеса, такими как розничная торговля, производство и т. д. Более простой подход к созданию подсказки — добавить набор ключевых слов в модель Text Bison.
Общий подход такой:
Градио пользовательский интерфейс
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()
Выход -
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.
В этом проекте приложение создано с использованием блоков , чтобы добавить гибкость и сложность.
данные передаются в приложение. Помимо блоков, имеется несколько компонентов градиента.
используется в том числе:
- Строки и столбцы для правильного макета.
- Кнопка , текстовое поле , раскрывающийся список и слайдер для достижения необходимой функциональности и простоты использования.
- Компонент изображения для отображения результатов.
- Другие помощники, такие как EventData , обновляются для поддержки динамических изменений пользовательского интерфейса.
Ниже приведен фрагмент кода, используемый для создания изображений из ввода и отрицательной подсказки:
Часть #Генерация изображений
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.
Ниже приведен снимок экрана создания изображения в приложении Gradio.
Некоторые примеры -
Пример 1 -
[Изображение слева] Подсказка (в качестве подсказки используются простые ключевые слова): Пара друзей катается на лодке.
[Изображение справа] Подсказка (с использованием подсказок, созданных Text-Bison): Фотография двух молодых людей, ловящих рыбу на лодке в окружении темных деревьев в лесу. Мужчины одеты в рубашки и стоят на лодке. Естественное освещение, высокое качество, фотография 4K, снятая профессиональным фотографом.
Пример 2 -
[Изображение слева] Подсказка ((Использование простых ключевых слов в качестве подсказок)) : Рождественская елка.
[Изображение справа] Подсказка (с использованием подсказок, созданных Text-Bison): Рождественская елка в комнате с лампой и мебелью. Елка украшена гирляндами и орнаментами. Он расположен возле окна, на заднем плане видна стена. Теплое освещение, высокое качество, HDR Фотография, сделанная профессиональным фотографом издалека.
5. Очистка
Чтобы очистить свои ресурсы,
- Остановите приложение Gradio.
- Остановите/удалит блокнот Workbench.
6. Поздравления
Поздравляем, вы успешно развернули приложение Gradio для создания подсказок и изображений с помощью Google Text-Bison API и Imagen API.