Pull to refresh

Comments 23

Что-то в видеоролике никакой разницы между тем что слева и справа не заметил.
А вообще интересно пощупать эту технологию для такой цели, как восстановление текста электронных книг в djvu, страницы которых не отсканированы, а сфотографированы «с руки» в ужасном качестве.
Текст лучше, контент такой же замыленый (даже лицо стримера не изменилось, хотя это одна из основных «фич» технологии).
В общем случае для фотографии задача несколько сложнее, т.к. там бывает множество сложных искажений, со всей совокупностью которых алгоритм вряд ли справится так хорошо, как на примерах из моего google drive. Это хорошо работает на локальных искажениях известного рода, т.е. когда есть возможность явно выделить полезные данные для каждой области изображения, а затем их декодировать назад в изображение. Для более сложных искажений понадобятся куда более сложные сети. С другой стороны, в случае текста задача несколько упрощается, так что шанс получить нечто полезное имеется, я посмотрю в эту сторону.
Как думаете, вот такое восстановить до преемлемого (для OCR) уровня реально?
пример
image
Так это считай часть задачи OCR. Чем лучше она натаскана на подобных шрифтах (не только идеального разрешения), тем лучше она разберет замыленый текст.

С помощью sae это сложно: здесь отдельные буквы настолько затёрты, что блоки входных данных должны захватывать целые слова, чтобы правильно восстановить, а это потребует целой модели языка в виде шаблонов. Если и можно, то нужно думать о другой архитектуре сети, возможно, даже смешанном методе, который будет использовать как строгую языковую модель, так и нейросети (что, собственно, и делают коммерческие OCR-решения).
В данном случае восстановить = придумать. И уже не поймешь что опечатка в готовом тексте, нейросеть придумает целые абзацы текста по сохранившейся букве, часто ни как не связанные с оригиналом.
Человек с большой долей вероятности таки сможет восстановить каждую букву отдельно. Значить есть куда расти системам, там нечего думать, словарь конечно поможет, но буквы в целом читаемы.
В программе IrfanView функция увеличения резкости даёт полностью такой же результат, как и пример обработки Вашей нейросетью. Вот для примера: https://yadi.sk/d/gubnqpNMsf8sw
Здесь in.png и out.png — Ваши, +1.png — это однократное увеличение резкости (чуть размытее, чем out), и +2.png — незначительно резче, чем out.
В IrfanView тоже нейросеть обрабатывает изображение? Или там полностью Ваш алгоритм?
Я, к сожалению, не читал код IrfanView, но не вижу ничего неожиданного в том, что разные подходы могут давать подобные результаты: исходник содержит ограниченный объём данных для восстановления. Я сам использовал разные подходы к решению этой задачи, и некоторые из них давали весьма сходные результаты.
Код IrfanView читал только Ирфан Скирьян и, к сожалению, давать читать их никому он не дает…

На HD ролик не забыли переключить надеюсь? Иначе разницу сложно увидеть.


А так разница на тексте, цифрах и элементах интерфейса весьма значительная. А вот сама игровая графика — отличия минимальны и почти не заметны.

Рад за британских коллег. Необязательно придумывать самую сложную технологию, можно взять что-то достаточно хорошо развитое, хотя и не очень новое, и монетизировать. Касательно патентов я не переживаю: в области автоэнкодеров столько работ, что им никто не позволит патенты на очевидные вещи получить, только на их какие-то нестандартные методы.
А эта штука не будет генерировать «призраков»?
В machine-learning-е всё решает качество, решение превосходящее конкурентов буквально на несколько процентов (или даже долей) вполне может стоить 150 миллионов.
Уже не первый раз встречаю описание сети, которой на вход подают эталон и «поломку», два изображения. Есть задачи и мысли о том, что решить их можно было бы попробовать именно таким образом. Есть желание погрузиться в эту область, но пока все что я видел из «готовых» фреймворков 2 образца на вход не берет. :(

Может быть сможет кто-нибудь подсказать чем можно попробовать реализовать если не что-то подобное, то хотя бы: что-то вот такое? В порядке развития и самообразования :)
Начать обучение классической сети в том же матлабе можно в несколько строк вместе со всеми настройками:
net = fitnet([2047 2047 2047],'trainscg'); % число нейронов в скрытых слоях и функция обучения
net.trainParam.epochs = 1e6; % обрывать по числу эпох
net.trainParam.max_fail = 100; % обрывать, если 100 эпох ошибка не падала
net.trainParam.min_grad = 1e-7; % обрывать, если сеть учится слишком медленно
net = train(net,in,out,'useGPU','yes'); % учим с использованием GPU
UFO just landed and posted this here
Sign up to leave a comment.

Articles