Я научил ИИ рисовать на своем ноутбуке с нуля. Вначале он мог только шуметь. Примерно через 35 минут он рисовал роботов, которых никогда не существовало. Это работает так же, как Stable Diffusion и Midjourney: модель учится поворачивать н...
Я научил ИИ рисовать на своем ноутбуке с нуля. Вначале он мог только шуметь. Примерно через 35 минут он рисовал роботов, которых никогда не существовало.
Он работает так же, как Stable Diffusion и Midjourney: модель учится превращать шум в картинки. Затем я позволил ему тренироваться на своих лучших рисунках, и он научился жульничать.
В этом посте рассматривается все: код, математика и реальные цифры из моего пробега. Полный видеоурок здесь: https://youtu.be/19Omz2cwFuY
Установка: около 120 строк Python + PyTorch, небольшая U-Net с 2 142 851 весами, обученная на графическом процессоре Mac.
1. Картинка — это всего лишь цифры
Компьютер не видит картинку. Он видит цифры. Каждый робот в моем наборе данных имеет размер 64 × 64 пикселя, и каждый пиксель имеет три числа (красный, зеленый, синий). Итак, один маленький робот — это 12 288 чисел.
Перед тренировкой каждое число изменяется от диапазона 0–255 до диапазона от –1 до 1:
imgs = torch.tensor(np.load("data/robots64.npy")).permute(0, 3, 1, 2) # 8000 × 3 × 64 × 64
data = imgs.float() / 127,5 - 1 # пикселей 0..255 -> -1..1
разделение = int(0,9 * len(данные))
train, val = data[:split], data[split:] # 10% сдерживается для честного тестирования
Почему −1 к 1? Нейронные сети лучше всего обучаются, когда онемели