Найти тему

Как нейросети рисуют картинки?

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

Попробую умные статьи с непонятными терминами пересказать простыми словами. Что называется на пальцах.

Но для начала надо определиться что такое нейросети эти самые. В обычном программирование у нас есть линейная последовательность действий. Если одно условие выполняется, то значит другое действие выполняется. И мельчайшей единицей является бит, ноль или единица. У нейросетей мельчайшей единицей является "тензор", если на пальцах это n-мерная матрица значений, поэтому её сравнивают с нейроном, который имеет какое то количество аксонов по которым он связывается с другими нейронами и тоже образует n-мерную матрицу реакций. И смысл нейросетей в том, что они изначально пустые, как и в человеке, но они способны обучаться. Если вносить в данные что такое хорошо и что такое плохо они начинают соответствующим образом реагировать.

Большой толчок для развития нейросетей получило развитие графических процессоров и особенно языка CUDA от Nvidia. Потому что графические процессоры изначально были заточены под работу с тензорами.

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

Создано MidJourney Prompt: machine learning
Создано MidJourney Prompt: machine learning

На самом деле генерация изображений это побочный выхлоп компьютерного обучения (machine learning), задача рисовать вообще не стояла во главе угла. Но вот оно вдруг получилось и всем стало вдруг интересно, что это за нейросети такие. А то, что они вообще сейчас во всех научных и промышленных сферах на переднем крае стоят, это мало кому интересно, ибо скучно.

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

Сначала была задача научить нейросети описывать картинки. И решалась эта задача двумя способами, первый ручным, люди описывали картинки вручную, тысячи лаборантов писали описания. Параллельно шел второй способ описания - автоматический. В интернете миллиарды, да что там миллиарды, дохренилиарды изображений и их все больше и больше. И часто на сайтах, даже здесь в дзене картинки при публикации сопровождают описанием, на случай, если картинка не подгрузится. Поэтому можно спарсить эти изображения вместе с описаниями и засунуть их в нейросеть. Третий способ не совсем этичный, но тем не менее один из основных. Для обучения нейросети скачивались фотостоки вместе со словами описаниями. Так как они скачивались бесплатно, изображения были с вотермарками, поэтому часто нейросети и генерируют изображения с подобиями вотермарков. Они не понимают, что это вообще ненужный элемент, и воспринимают их как часть изображения.

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

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

Взято здесь https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-2/
Взято здесь https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-2/

Вторая задача, которую решали это научить нейросеть очищать изображения, то есть удалять шум на фотографиях. Давали чистую фотографию, потом ту же фотографию с каким то % шума, нейросеть убирала шум и сравнивала с чистой фотографией. Так и обучалась. Потом шума становилось все больше и на последнем этапе давался просто шум и описание. И задача разворачивалась задом наперёд. Теперь надо "восстановить" изображение, которого на самом деле нет. А что там было нарисовано? А тут на помощь приходят описания которые мы получили из прошлой нейросети, которая связывает слова и изображения.

Взято здесь https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-2/
Взято здесь https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-2/

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

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

И как только что-то получилось, включается "компьютерное зрение" оно сравнивает с "описанием" которые мы дали, если получилось не то, процесс перезапускается снова, и снова, и снова, и так десятки раз пока либо количество перезапусков не закончится, либо результат не удовлетворит запросу.

Надеюсь это как то поможет снять налёт черной магии с этого процесса.

Всем спасибо за внимания, до новых встреч!

Ссылка на мой курс по Stable Diffusion

Всем привет! Спешу сообщить, что курс мой по Stable Diffusion для видео наконец то доступен. Если вы долго откладывали знакомство с нейросетями, то сейчас самое время начать, потому что в этом курсе я рассказываю с самого начала. С установки, грамматики промптов, и генерации изображений. Но уже с подключения Deforum начинается собственно самое веселье, потому что повторюсь наша цель - работа с…
ZernovLab. Монтаж, нейросети, 3D.8 августа 2023

Ссылки на статьи

https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-2/

The generative AI revolution has begun—how did we get here?