Есть интересная статья по сжатию изображения. https://habr.com/ru/articles/691192/
В этой статье автор сжимает изображение при помощи нейросети, которая сжимает размеры изображения в 50 раз, что бы нейросеть по генерации изображения работала быстрее. Я решил повторить эксперимент ради любопытства. Но не использовал нейросеть по генерации изображения, а использовал только сжиматель (VAE) и сжатое представление ещё попробовал сжать обычным архиватором (gzip).
Взял первое изображение 1024x1024 JPEG 144кб
Прогнал через VAE и квантовал в 8бит (65кб)
Сжал через gzip (48кб)
И разжал всё обратно во второе изображение.
Третье изображение в формате webp 42кб сжал через графический редактор. Я взял webp, потому что он намного лучше сжимает по сравнению jpeg.
Изображение принадлежит @Gmorv
В этой статье автор сжимает изображение при помощи нейросети, которая сжимает размеры изображения в 50 раз, что бы нейросеть по генерации изображения работала быстрее. Я решил повторить эксперимент ради любопытства. Но не использовал нейросеть по генерации изображения, а использовал только сжиматель (VAE) и сжатое представление ещё попробовал сжать обычным архиватором (gzip).
Взял первое изображение 1024x1024 JPEG 144кб
Прогнал через VAE и квантовал в 8бит (65кб)
Сжал через gzip (48кб)
И разжал всё обратно во второе изображение.
Третье изображение в формате webp 42кб сжал через графический редактор. Я взял webp, потому что он намного лучше сжимает по сравнению jpeg.
Изображение принадлежит @Gmorv
👍1🔥1
В предыдущем посте был эксперимент с нейронкой (VAE), которая сжимает изображения в скрытое представление и разжимает обратно. Сама нейронка состоит из кодировщика и декодеровщика, она не быстрая и много весит.
Я решил обучить свою версию декодера, которая смогла бы разжать изображение намного быстрее в ущерб качеству. В итоге за полтора дня получилась нейронка размером 1 мегабайт (против 265 мегабайт оригинала). Скорость на CPU примерно в 50 раз быстрее. Это позволяет его запускать на любом калькуляторе, а сжатые изображения стримить прямо с генератора изображений.
Такой результат наталкивает на мысль, что увеличив немного модель, можно сделать дистиллированную версию оригинальной модели, но я этим не буду заниматься.
На примере видно, что изображения тускнее. Я обучал на датасете VOC2007, а там только фотографии и возможно это повлияло. Не знаю кому это может понадобиться, но код обучения, модель и пример в репозитории.
https://github.com/Graphnull/VAElight
Я решил обучить свою версию декодера, которая смогла бы разжать изображение намного быстрее в ущерб качеству. В итоге за полтора дня получилась нейронка размером 1 мегабайт (против 265 мегабайт оригинала). Скорость на CPU примерно в 50 раз быстрее. Это позволяет его запускать на любом калькуляторе, а сжатые изображения стримить прямо с генератора изображений.
Такой результат наталкивает на мысль, что увеличив немного модель, можно сделать дистиллированную версию оригинальной модели, но я этим не буду заниматься.
На примере видно, что изображения тускнее. Я обучал на датасете VOC2007, а там только фотографии и возможно это повлияло. Не знаю кому это может понадобиться, но код обучения, модель и пример в репозитории.
https://github.com/Graphnull/VAElight
👍1👌1
Обучил с нуля нейронку, которая сжимает изображения в 50 раз. Нейронка весит 0.75 мегабайт против 137 мегабайт в оригинале. По примеру видно, что детали теряются, но мне важна скорость. Буду использовать на телефоне, что бы сжимать видео и делать дальнейшие манипуляции со сжатыми кадрами.
Всё лежит в том же репозитории. Кажется, что нужно как-то всё понятнее оформлять для потенциально будущих пользователей, но не хочется тратить время на это пока никто не пользуется.
https://github.com/Graphnull/VAElight
Всё лежит в том же репозитории. Кажется, что нужно как-то всё понятнее оформлять для потенциально будущих пользователей, но не хочется тратить время на это пока никто не пользуется.
https://github.com/Graphnull/VAElight
👍2🔥1🤯1
Из языковых моделей я пользуюсь Mixtral-8x7b-instruct, потому что меня удовлетворяет его качество. Запускаю я его на своем nvidia p40. 8 битная 49 гигабайтная модель не влезает в видеокарту полностью и поэтому она генерирует 5 токенов в секунду, а 3 битная 20 гигабайтная влезает полностью и генерирует 15 токенов в секунду, но у него качество ниже.
Недавно вышла новая технология для сжатия нейронок AQLM
Они обещают качество выше 3 битной модели и Mixtral-8x7b-instruct и весит 13 гигабайт. Я запустил и у меня вышла скорость в 5 токенов в секунду (как у 49 гигабайтной модели). Ещё есть код как запустить в 3 раза быстрее, но у меня не завелось. Надеюсь когда-нибудь у меня запуститься.
Но меня больше заинтересовал пост, где показан код тренировки модели под свой датасет. Я завёл обучение и обучение работает. Пока не знаю под что тренировать, но например: объяснение UI сайта, скормить карту города в текстовом виде, более детальное описания изображения и области в изображении, более лучшее понимание русского или другие языки. Но перед тренировкой ещё и текста для обучения нужно подготовить.
Недавно вышла новая технология для сжатия нейронок AQLM
Они обещают качество выше 3 битной модели и Mixtral-8x7b-instruct и весит 13 гигабайт. Я запустил и у меня вышла скорость в 5 токенов в секунду (как у 49 гигабайтной модели). Ещё есть код как запустить в 3 раза быстрее, но у меня не завелось. Надеюсь когда-нибудь у меня запуститься.
Но меня больше заинтересовал пост, где показан код тренировки модели под свой датасет. Я завёл обучение и обучение работает. Пока не знаю под что тренировать, но например: объяснение UI сайта, скормить карту города в текстовом виде, более детальное описания изображения и области в изображении, более лучшее понимание русского или другие языки. Но перед тренировкой ещё и текста для обучения нужно подготовить.
👍1👏1
Эксперимент по генерации игрового 2д мира. Сначала генерировался центр, а затем от центра генерировался вверх и вниз. Выгляди интересно, но от старта плывёт и контраст и стилистика. В идеале бы вообще генерировать только там, где бегает игровой персонаж.
Как идея можно ещё сделать нейронку, которая генерирует черно-белую маску того, куда можно передвигаться, а куда нет, что бы в стены не входить.
Как идея можно ещё сделать нейронку, которая генерирует черно-белую маску того, куда можно передвигаться, а куда нет, что бы в стены не входить.
🔥2🤯1
Ещё один эксперимент по генерации 2д мира. На этот раз решил сгенерировать самый дальний вариант, что бы стилистика, контраст не плыл.
Примерный метод: Изображение делится на 4 части, апскейлится и сглаживаются стыки. Далее над каждой частью повторяется всё ещё раз.
Изображение прогонял в полу ручном режиме с фотошопом. Возможно потом автоматизирую скриптом.
В некоторых местах видно, что генератор не правильно воспринимает масштаб. Например в некоторых местах лодка слишком маленькая.
Метод прям медитативный, хочется увеличивать бесконечно😌
Примерный метод: Изображение делится на 4 части, апскейлится и сглаживаются стыки. Далее над каждой частью повторяется всё ещё раз.
Изображение прогонял в полу ручном режиме с фотошопом. Возможно потом автоматизирую скриптом.
В некоторых местах видно, что генератор не правильно воспринимает масштаб. Например в некоторых местах лодка слишком маленькая.
Метод прям медитативный, хочется увеличивать бесконечно😌
🔥3
Сделал небольшой скрипт для автоматизации. Видно что на швах нестыковки. В комментах 16к оригинал
🔥3
Вариант с правильными швами. Генерировал с нахлёстом. А ещё увеличенную картинку сжимал обратно и увеличивал заново. С таким методом дома кажутся более правильными.
Не могу остановиться рассматривать все детали. Хочется рассмотреть каждый домик😭
Предлагаю дать какое-нибудь имя этой деревушке😁
Не могу остановиться рассматривать все детали. Хочется рассмотреть каждый домик😭
Предлагаю дать какое-нибудь имя этой деревушке😁
👍1🔥1