Автор: Дубов Денис Всех с Новым Годом! Допустим у меня есть нейронная сеть, воспринимающая черно-белый образ 100x100. Я обучил её воспринимать квадратик 10х10, где-то там в середине образа. Как только я этот квадратик сдвину, да хоть на пиксел в любую сторону, восприятие данного образа сразу снижается чутьли не на половину.. Как можно обучить сеть так, чтобы если я этот квадрат сдвину хоть в самый край образа 100х100(в пределах образа), она мне выдаст на выходе что в этом образе есть квадрат? Какими методами это можно достичь? |
|
Да, это один из известных минусов сети. Проблема в том, что образы при сдвиге квадрата становятся очень разными с точки зрения расстояния хаминга (т.е. битов разных много).
Как чисто с сетями эту проблему решить понятия не имею (может В.Царегородцев знает).
Ну самое тривиальное (по идеи, но не по воплощению) это в начале картинку обработать, т.е. подвинуть квадрат туда куда надо, увеличить, уменьшить и все такое. Кстати, для этой операции, тоже можно попробовать какую будь другую ИНС приспособить...
Другой способ обучать сеть на более мелкий квадрат, чем входной образ. скажем квадратики 10х10... ну и при диагностики проверять все такие квадраты во входном образе. Если какой-то квадрат соответствует, значит -- ура, нашли. Ну конечно, можно проверять не все, а в начале искать какую нибудь исходную точку, скажем угол, или еще, что-то в этом роде, и уже от этой точки проверять все под-образы.
Еще один способ, в голову приходит (не знаю на сколько он осуществим...). Можно попробовать поменять пространства образа. Ну например, не пиксели на в ход пускать, а что-то другое. Ну типа каждый вход соответствует каждому пикселю, но представляет из себя не цвет, а кол-во соседей чёрного цвета. Причем сам входной вектор, отсортирован по возрастанию. Ну я не сказал, что это супер какая хорошая и универсальная трансформация, но смысл в том, что она уменьшит расстояния хеминга, для похожих образов.