Разработка утилиты по модификации изображений с использованием искусственной нейросети
Ожидает приглашения
Давно хотел сделать утилиту, благодаря которой можно было бы улучшать изображение с применением искусственной нейросети.
Идея в том, чтобы взять некий пример с исходным изображением и его ухудшенным вариантом и обучить нейросеть восстанавливать оригинальное по данным из ухудшенного.
К примеру, взять некую наиболее полную картинку и получить сглаженный её же вариант, а потом обучить нейросеть, взяв за вектор X область некоего радиуса из смазанной картинки и в вектор Y подставить яркость из соответствующей координаты оригинального изображения.
Как это выглядит?
Пришлось самому сооружать обучающий шаблон. И то — он не совершенен.
Запускаем программу и нажимаем Генерация->Вариант 2 16x6 (либо можно поработать с уменьшенным вариантом 1 8x4):

Затем, применяем сглаживающий фильтр Эффекты->Размытие 1x:

В правой части мы видим результат применения фильтра.
Чтобы обучить нейросеть достаточно нажать меню Обучение->Старт обучения -> Радиус 2
Процесс обучения будет долгим. По коду программы вы можете увидеть настройки.
Для моего AMD FX-6100 с DDR3 это заняло 9 часов.
Оптимизировать можно многими путями, один из которых — купить библиотеку AlgLib у её разработчика.
Хотя, можно попробовать распределить вычисление нейросети по потокам и параллельно уменьшить количество рестартов со 100 до 20 с последующим сравнением rep.avgerror.
Представляет особенный интерес увеличение площади исходного изображения вокруг искомой точки для обучения и количества нейронов скрытых слоёв.
Предлагаю всем заинтересованным товарищам заняться созданием инструмента по восстановлению графической информации.
Нужны ядра ваших ЦП и немного прочего энтузиазма. Особенно нужна идея и реализация качественного шаблона для обучения.
Версия Delphi или Lazarus может быть любая.
Технически, никто не мешает реализовать данный функционал на любом языке программирования.
Прикладываю пример:

Слева — оригинал изображения, в центре — обработанный обученной нейросетью, справа — три раза применён фильтр Sharpen в IrfanView.
Идея в том, чтобы взять некий пример с исходным изображением и его ухудшенным вариантом и обучить нейросеть восстанавливать оригинальное по данным из ухудшенного.
К примеру, взять некую наиболее полную картинку и получить сглаженный её же вариант, а потом обучить нейросеть, взяв за вектор X область некоего радиуса из смазанной картинки и в вектор Y подставить яркость из соответствующей координаты оригинального изображения.
Как это выглядит?
Пришлось самому сооружать обучающий шаблон. И то — он не совершенен.
Запускаем программу и нажимаем Генерация->Вариант 2 16x6 (либо можно поработать с уменьшенным вариантом 1 8x4):

Затем, применяем сглаживающий фильтр Эффекты->Размытие 1x:

В правой части мы видим результат применения фильтра.
Чтобы обучить нейросеть достаточно нажать меню Обучение->Старт обучения -> Радиус 2
Процесс обучения будет долгим. По коду программы вы можете увидеть настройки.
Для моего AMD FX-6100 с DDR3 это заняло 9 часов.
Оптимизировать можно многими путями, один из которых — купить библиотеку AlgLib у её разработчика.
Хотя, можно попробовать распределить вычисление нейросети по потокам и параллельно уменьшить количество рестартов со 100 до 20 с последующим сравнением rep.avgerror.
Представляет особенный интерес увеличение площади исходного изображения вокруг искомой точки для обучения и количества нейронов скрытых слоёв.
Предлагаю всем заинтересованным товарищам заняться созданием инструмента по восстановлению графической информации.
Нужны ядра ваших ЦП и немного прочего энтузиазма. Особенно нужна идея и реализация качественного шаблона для обучения.
Версия Delphi или Lazarus может быть любая.
Технически, никто не мешает реализовать данный функционал на любом языке программирования.
Прикладываю пример:

Слева — оригинал изображения, в центре — обработанный обученной нейросетью, справа — три раза применён фильтр Sharpen в IrfanView.