AI Draw

Приложение преобразовывает входящее изображение и на основании предсказаний персептрона перерисовывает его.

AI-Draw
Open - открывает окно для выбора изображения.
Draw - обрабатывает изображение персептроном и выводит результат в pictureBox.
Save - сохраняет обработанное изображение в выбранную папку.

Create perceptron - создаёт персептрон указанного размера.
Hidden layers - поле для ввода размеров скрытых слоёв.
Read learning data - открывает окно для выбора папки с обучающими данными.
Start learning - запускает обучение персептрона.
Count of cycles - поле для ввода количества циклов обучения.
Get training error - вычисляет и выводит среднюю квадратичную ошибку на учебных данных.
Reset - заполняет веса персептрона случайными значениями из промежутка [-1; 1].

Также есть ProgressBar, на котором отображается прогресс чтения датасета, обучения модели и рисования изображения.


Как пользоваться?

  • Заполнить поле Hidden layers. Оно должно содержать несколько целых положительных чисел, перечисленных через пробел и/или запятую.
    Например, если ввести "32 24", то персептрон будет иметь следующие слои:
    64 входных нейрона +1 bias,
    32 скрытых нейрона +1 bias,
    24 скрытых нейрона +1 bias,
    10 выходных нейронов.
  • Нажать Create perceptron, чтобы создать персептрон с указанными ранее размерами скрытых слоёв.
  • Нажать Read learning data. В открывшемся окне выбрать папку, содержащую в себе только изображения для обучения.
    Изображения должны быть размером 8x8 пикселей и иметь в названии 11 чисел через пробел.
    Числа в названии являются точным результатом, к которому будет стремиться обучение.
    Первое число - это уникальное число. Необходимо, чтобы не было изображений с одинаковыми именами.
    Остальные числа означают какая часть изображения более тёмная.
    1 - верх
    2 - лево
    3 - верх право
    4 - верх лево
    5 - чёрный
    6 - низ
    7 - право
    8 - низ лево
    9 - низ право
    10 - белый
    Сгенерировать датасет для обучения можно здесь.
  • Заполнить поле Count of cycles и нажать Start learning.
    Чем больше скрытых слоёв и чем больше указано число циклов обучения, тем больше это займёт времени.
  • Нажать Open и выбрать какое-нибудь ЧЁРНО-БЕЛОЕ изображение.
    Чёрно-бело изображение необходимо, поскольку персептрон обучался именно на чёрно-белых изображениях.
    Почему не обучать его на цветных? потому что придётся его обучать отличать каждый цвет от каждого другого цвета, что будет очень намного сложнее в реализации.
  • Если персептрон достаточно хорошо обучен, можно нажать Draw.
    После этого приложение на какое-то время перестанет отвечать, но не потому что сломалось, а потому что изображение обрабатывается и рисуется.
  • По желанию результат можно сохранить на диск.

Пример результата:
orig
draw_new
Эти пустые глаза меня пугают...


Как это работает?
Прочитать про принцип работы персептрона можно здесь.

В данном приложении всё работает следующим образом: цикл проходит по изобржению и считывает с него области 8x8 пикселей и персептрон предсказывает, к какому из десяти классов (они написаны выше) принадлежит каждый участок изображения.

Т.е. на вход персептрона отдаются 64 числа - интенсивность цвета каждого пикселя. А на выходе он возвращает десять чисел - вероятность пренадлежности к каждому классу. Размер перептрона - [64+1, N+1, 10], где N - это размеры скрытых слоёв, вводимые пользователем. +1 - это bias.

Далее персептрон обучается обратном распространением ошибки.