Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

C# и нейронные сети. С чего начать и в какую сторону смотреть?

Вопрос довольно общий, знаю.
Но я здесь немного уточню что бы было не так расплывчасто.
Интересует общая сжатая теория. С какой статьи лучше начать? Интересуют актуальные библиотеки C# Интересует приблизительная реализация уже созданной в нескольких вариациях идеи -- скармливаешь нейронке много изображений-пар: большое и маленькое. А нейронка учится делать из маленького большое и потом сравнивает сделанное большое и то большое которое ему скормили что бы понять что сделано не так. Какую нейронку лучше выбрать под даную задачу? Не слишком ли сложная и на сколько вообще реальная задачка в 3, если учесть что я вообще ни бум-бум в нейронных сетях? Если задача непосильная для новичка в НС, то с каких задач-тренировок лучше начинать?


Ответ

Одна из самых изысканных задач для НС приведена в этой статье, можно понять уровень проблематики и алгоритмов, которые задействуются для решений подобного класса задач и где действительно нужна НС. Примеры на OpenCV, что тоже замечательно.
OpenCV - Библиотека с самой открытой лицензией и исходным кодом, написана на C++. Под C# есть wrapper'ы - EmguCV, OpenCV for Unity (можно и без Unity использовать). Есть адаптация для Visual Studio (C++), Objective C, Android Studio, Python.
Даже для умеренно сложных задач НС обычно не нужна, и не очень даже применима - часто приходится делать обработку видеопотока в реальном времени, а НС не самая быстрая штука далеко. По этой и еще ряду причин большинство разработчиков, уверенных поначалу что им нужна НС, от этой идеи впоследствии отказываются. Благо в OpenCV реализовано огромное количество алгоритмов на все случаи жизни - почти всё, что связано с обработкой видео и изображений там есть.
После редактирования автором вопроса редактирую ответ :-)
Большинство алгоритмов, реализованных в доступных пакетах, в основном предназначены для down-scaling, спрос на это очевиден - камера снимает в большом разрешении, а в Интернеты лучше постить, предварительно уменьшив фотку - этим пользуются все активные пользователи Интернетов и соцсетей.
Up-scaling задача тоже достаточно хорошо проработана, просто спрос на нее несоизмеримо меньше - тем не менее любой дизайнер отлично знает, что нужно делать, чтобы изображение можно было без проблем увеличивать - взять Corel Draw или другой пакет векторной графики, то есть сделать изображение векторным.
Таким образом, если маленькое растровое изображение преобразовать в векторы, сделать up-scaling, мы скорее всего уже получим что-то интересное - обратите внимание на программу Potrace. В OpenCV готового для raster->vector ничего нет. Хотя из доступных инструментов и можно слепить что-то, врядли получится лучше чем у Potrace - всё-таки там люди занимались этой проблемой специально. Potrace идёт с исходниками и подробным описанием алгоритмов, так что простор для творчества полный :-)
И самое интересное на десерт - пора взглянуть на ваше увеличенное изображение, и путем сравнения с полученным в результате векторизации и up-scaling результатом выявить отклонения. Выявленные отклонения могут являться материалом для обучения НС. Например, можно пойти путем векторизации большого изображения, выявления соответствия кривых и сравнения их характеристик. По результатам обучения НС начнет выдавать некие рекомендации по коррекции кривых в произвольных изображениях. Может быть даже замахнуться на добавление кривых, типа дополнительных цветовых контуров градиента (хотя градиент в полученном изображении проще будет сгладить с помощью функций Blur и т.п.)

Комментариев нет:

Отправить комментарий