Перейти к содержанию
Публикация AiManual

Instruction-tuning для Stable Diffusion: как научить модель выполнять точные инструкции по обработке изображений

Разбираем instruction-tuning для Stable Diffusion на базе InstructPix2Pix: как создать датасет с инструкциями через ChatGPT, какие задачи модель решает уверенно

Коротко

Что будет в материале

  1. 01

    Введение: зачем нужен instruction-tuning для Stable Diffusion

  2. 02

    Основы InstructPix2Pix: как это работает

  3. 03

    Создание датасета с инструкциями в стиле FLAN V2

  4. 04

    Эксперименты и результаты: что умеет модель

Стандартная Stable Diffusion генерирует изображение по текстовому описанию, но плохо справляется с задачами редактирования: «убери дождь», «сделай карикатуру», «улучши тёмное фото». Модель может проигнорировать инструкцию, перепутать объекты или изменить композицию. InstructPix2Pix решает эту проблему: техника instruction-tuning обучает диффузионную модель следовать конкретным командам по обработке изображений, сохраняя структуру исходника. Эксперименты показывают уверенную работу в карикатуризации и удалении дождя, но слабые результаты при улучшении изображений с низким освещением. Причина - ограниченное количество обучающих примеров для этой задачи.

Разберём, как устроен InstructPix2Pix, как собрать датасет с инструкциями в стиле FLAN V2, используя ChatGPT для генерации синонимичных промптов, и какие ограничения нужно учитывать перед внедрением.

Введение: зачем нужен instruction-tuning для Stable Diffusion

Instruction-tuning пришёл из языковых моделей: вместо обучения на парах «запрос-ответ» модель получает инструкцию и учится выполнять её на новых данных. Для изображений это означает пару «входное изображение + текстовая команда = выходное изображение». Стандартный text-to-image пайплайн Stable Diffusion не оптимизирован под такую задачу: он генерирует картинку с нуля, а не редактирует существующую.

InstructPix2Pix меняет подход. Модель принимает исходное изображение и текстовую инструкцию, затем выдаёт отредактированную версию. Ключевое отличие от обычного img2img - точное следование команде без разрушения структуры кадра. На практике это позволяет автоматизировать рутинные операции: убрать шум, изменить стиль, скорректировать освещение. Но качество напрямую зависит от датасета: для задач с малым числом примеров модель деградирует.

Основы InstructPix2Pix: как это работает

InstructPix2Pix строится на предобученной Stable Diffusion. Вместо обучения с нуля используется её способность к генерации, которую перенаправляют на редактирование. Это сокращает требования к вычислительным ресурсам и объёму данных.

Архитектура InstructPix2Pix

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

Важный момент - сохранение структуры. Обычный img2img при высокой силе шума может полностью перерисовать сцену. InstructPix2Pix обучается так, чтобы изменения были локальными и соответствовали инструкции. Это достигается за счёт парного датасета: модель видит, что «убери дождь» меняет только капли, а не лица или фон.

Процесс обучения

Обучение проходит в три этапа. Сначала собираются пары изображений: входное и выходное. Затем для каждой пары генерируются текстовые инструкции. В оригинальном подходе используется LLM, например ChatGPT, для создания нескольких синонимичных формулировок одной команды. Наконец, модель обучается на этих тройках: входное изображение, инструкция, выходное изображение.

Предобученная Stable Diffusion служит инициализацией. Это критично: без неё модель требовала бы значительно больше данных и времени. Инструкция подаётся через текстовый энкодер, а изображение - через VAE-энкодер. UNet учится предсказывать шум, который нужно убрать, чтобы из входного изображения получить выходное.

Для тех, кто работает с ControlNet, схожие принципы управления генерацией разобраны в гайде по ControlNet в Diffusers.

Создание датасета с инструкциями в стиле FLAN V2

FLAN V2 - это формат, в котором каждая запись содержит инструкцию, входные данные и ожидаемый выход. Для изображений структура такая: входное изображение, текстовая команда, выходное изображение. Ключевое требование - разнообразие формулировок одной и той же операции. Модель должна понимать «убери дождь», «удали капли с фотографии» и «сделай снимок сухим» как одну команду.

Генерация синонимичных промптов с ChatGPT

ChatGPT ускоряет расширение датасета. Для каждой пары изображений задаётся базовая инструкция, например «преврати фото в карикатуру». Затем LLM просят сгенерировать 10-15 вариантов: «сделай шарж», «нарисуй в мультяшном стиле», «усиль гротескные черты лица». Это покрывает разные способы, которыми пользователи формулируют одну задачу.

Пример промпта для ChatGPT: «У тебя есть пара изображений: входное и выходное. Выходное получено из входного путём карикатуризации. Сгенерируй 12 различных инструкций на русском языке, которые описывают это преобразование. Инструкции должны быть краткими, в повелительном наклонении, без пояснений». Результат добавляется в датасет.

Важно не использовать ChatGPT для генерации самих изображений - только для текстовых инструкций. Пары изображений собираются отдельно: ручным редактированием, классическими фильтрами или другими моделями.

Формат данных FLAN V2

Каждая запись датасета выглядит так:

{
  "input_image": "path/to/input.jpg",
  "instruction": "Убери дождь с фотографии",
  "output_image": "path/to/output.jpg"
}

Для одной пары изображений создаётся несколько записей с разными инструкциями. Это увеличивает устойчивость модели к перефразированию. Рекомендуется минимум 5-7 вариантов на пару. Если задача сложная, например улучшение при низком освещении, число вариантов нужно увеличивать вместе с числом самих пар.

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

Эксперименты и результаты: что умеет модель

Тесты проводились на трёх задачах: карикатуризация, удаление дождя и улучшение изображений при низком освещении. Результаты неоднородны.

Успешные примеры: карикатуризация и удаление дождя

Карикатуризация работает уверенно. Модель сохраняет позу, ракурс и фон, изменяя пропорции лица и добавляя гротескные черты. Инструкции вида «сделай шарж» и «преувеличь черты лица» выполняются стабильно. Удаление дождя тоже показывает хороший результат: капли исчезают, текстуры восстанавливаются, объекты не искажаются. Для этих задач хватило обучающего датасета среднего размера.

Точность следования инструкциям высокая. Модель не путает «убери дождь» с «сделай чёрно-белым» и не меняет композицию без запроса. Это прямое следствие instruction-tuning: текстовая команда жёстко связывается с конкретным преобразованием.

Слабые результаты: улучшение при низком освещении

Улучшение тёмных изображений провалилось. Модель либо осветляла снимок слишком агрессивно, теряя детали, либо не справлялась вовсе. Причина - недостаток обучающих примеров. Задача требует большого набора пар «тёмное-светлое» с разными условиями: ночная улица, помещение со слабым светом, контровый свет. Ограниченный датасет не покрыл это разнообразие.

Это ожидаемое поведение: instruction-tuning не магия, а supervised learning. Если данных по задаче мало, модель не обобщает. Увеличение числа примеров для низкого освещения - первый шаг к решению.

Ограничения и риски подхода

InstructPix2Pix не универсален. Перед внедрением нужно оценить три ограничения.

Проблемы с высоким разрешением

Модель обучается на изображениях фиксированного размера, обычно 256x256 или 512x512. При подаче снимка высокого разрешения качество падает: появляются артефакты, размытие, потеря мелких деталей. Обходной путь - разрезать изображение на патчи, обрабатывать по частям и склеивать, но это увеличивает время инференса и может дать швы на стыках.

Переинтерпретация инструкций

Диффузионные модели склонны к творческой интерпретации. Команда «сделай фото ярче» может быть понята как «добавь солнечный свет» или «увеличь контраст». Если в датасете не было примеров с разными значениями яркости, модель выберет наиболее частый вариант. Это опасно в production: пользователь ожидает одно, а получает другое.

Снизить риск помогает строгий контроль датасета и тестирование на реальных запросах. Проблема переинтерпретации инструкций знакома и языковым моделям - подробнее о сбоях следования командам в разборе проблем нейросетей для перевода.

Практические применения: упрощение редактирования через естественный язык

Основная ценность instruction-tuning - снижение порога входа в редактирование изображений. Пользователь пишет «убери фон» или «сделай фото тёплым» и получает результат без знания Photoshop. Это открывает несколько сценариев.

Первый - автоматизация рутинных операций в e-commerce: удаление теней с товарных фото, выравнивание освещения, замена фона. Второй - пользовательские инструменты для не-экспертов: мобильные приложения, где обработка фото задаётся текстом. Третий - предобработка данных для других ML-пайплайнов: очистка изображений от шума перед подачей в классификатор.

Для команд, которые строят пайплайны обработки изображений, полезно изучить разбор harness design: обвязка вокруг модели может изменить точность на десятки пунктов.

Открытые вопросы и будущие направления

Instruction-tuning для диффузионных моделей - активная область. Три направления выглядят наиболее перспективно.

Масштабирование датасетов и обобщение

Гипотеза: больше задач и примеров на каждую задачу дают лучшее обобщение. Модель, обученная на 50 операциях, вероятно, выполнит новую 51-ю операцию лучше, чем модель, обученная на 5. Но это требует проверки. Сбор данных - узкое место: пары изображений для редких задач создавать дорого.

Интеграция с ControlNet

ControlNet добавляет пространственный контроль: карты глубины, ключевые точки, сегментация. Совмещение с InstructPix2Pix может дать точное редактирование с сохранением структуры. Например, команда «измени цвет платья» плюс карта сегментации платья - модель изменит только нужную область. Это снимает часть проблемы переинтерпретации. Базовые принципы ControlNet описаны в пошаговом руководстве по обучению ControlNet.

Отдельный вопрос - вычислительная эффективность. Совмещение двух подходов увеличивает требования к памяти и времени инференса. Для локального запуска могут пригодиться методы квантизации, разобранные в статье про Core ML квантизацию Stable Diffusion XL.

Заключение

Instruction-tuning на базе InstructPix2Pix даёт Stable Diffusion способность выполнять точные команды по обработке изображений. Модель уверенно справляется с карикатуризацией и удалением дождя, но проваливается на улучшении тёмных снимков из-за нехватки обучающих данных. Ключевой фактор успеха - качественный датасет с разнообразными инструкциями в стиле FLAN V2. ChatGPT ускоряет генерацию синонимичных промптов, но не заменяет ручной сбор пар изображений.

Ограничения - проблемы с высоким разрешением и склонность к переинтерпретации команд - нужно учитывать при проектировании продукта. Практические применения сосредоточены в автоматизации рутинного редактирования и создании инструментов для не-экспертов. Масштабирование датасетов и интеграция с ControlNet остаются открытыми вопросами, но уже сейчас подход пригоден для узких задач с контролируемым набором операций.

Подписаться на канал