для обучения нейросети для распознавания рукописных цифр
нужно много картинок каждой цифры.
Если я хочу, чтобы цифра распознавалась повернутой на 90 градусов,
то нужны соответствующие картинки при обучении.
Принцип работы, если я правильно понимаю такой, что
в слоях сети подбираются коэффициенты, удовлетворяющие выборке обучения.
Т.е. как бы градиентый спуск?
Только непонятно как быть, если надо научиться распознавать цифры на больших картинках,
где цифра может быть под любым углом и с любыми геометрическими искажениями (в пределах распознавания чечловеком).
Надо для обучения цифры под каждым углом подавать?
И как входы маппить, если для одной цифры при обучении подаем десятки пикселов,
а искать надо в большой картинке на тысячи пикселов?
Здравствуйте, Ocenochka, Вы писали:
O>И как входы маппить, если для одной цифры при обучении подаем десятки пикселов, O>а искать надо в большой картинке на тысячи пикселов?
Если распознавать только картинки с цифрами (и больше ничего на них нет),
то картинки ресайзят под один размер, обычно не более 100х100 пикселей.
Да, одна из основных проблем нейросетей — необходим достаточно большой объем данных для обучения.
Весьма часто данные генерируют программно. В случае цифр их легко можно искажать-размывать-пеерворачивать,
генерировать новые. Но вообще есть много уже готовых датасетов по различным темам.
Стоит поискать их, прежде чем создавать свои.
Для поиска цифр на больших изображениях применяют CNN сети, для которых тоже все изображения ресайзят в единый формат.
Вместо обьъяснения того, как работают CNN сети, порекомендую курсы на курсере. Вот весьма базовый, простой и доходчивый от Adrew NG (часть специализации нейросетей)
Здравствуйте, Ocenochka, Вы писали:
O>для обучения нейросети для распознавания рукописных цифр O>нужно много картинок каждой цифры. O>Если я хочу, чтобы цифра распознавалась повернутой на 90 градусов, O>то нужны соответствующие картинки при обучении. O>Принцип работы, если я правильно понимаю такой, что O>в слоях сети подбираются коэффициенты, удовлетворяющие выборке обучения. O>Т.е. как бы градиентый спуск? O>Только непонятно как быть, если надо научиться распознавать цифры на больших картинках, O>где цифра может быть под любым углом и с любыми геометрическими искажениями (в пределах распознавания чечловеком). O>Надо для обучения цифры под каждым углом подавать? O>И как входы маппить, если для одной цифры при обучении подаем десятки пикселов, O>а искать надо в большой картинке на тысячи пикселов?
O>зы Прошу прощения, если вопрос глупый.
Берёшь mnist, берёшь Caffe. При обучении рекомендуется для картинок делать рандомные искажения, в т.ч. повороты. Используешь свёрточные сети.
Конкретный публичный проект есть тут: textdet.com — там всё довольно просто, хотя точность не супер.
O>для обучения нейросети для распознавания рукописных цифр O>нужно много картинок каждой цифры. O>Если я хочу, чтобы цифра распознавалась повернутой на 90 градусов, O>то нужны соответствующие картинки при обучении.
Обычно берут большой базовый набор примеров и к каждому много раз
применяют аугментацию — случайные вращения, масштабирования и т.п.
Вращения делают небольшими (например, от -30 до +30 градусов), но если требуется
распознавать повёрнутые/перевёрнутые цифры, то можно:
1) либо убрать это ограничение на угол (тогда сеть обучится распознавать цифры с любым
поворотом, но за счёт некоторой потери в качестве — те же 6 и 9 будут путаться)
2) либо при распознавании предлагать сети 4 варианта поворота картинки и выбирать
по максимуму уверенности в ответе.
O>Принцип работы, если я правильно понимаю такой, что O>в слоях сети подбираются коэффициенты, удовлетворяющие выборке обучения. O>Т.е. как бы градиентый спуск?
Да, минимизируется функция ошибки.
O>Только непонятно как быть, если надо научиться распознавать цифры на больших картинках, O>где цифра может быть под любым углом и с любыми геометрическими искажениями (в пределах распознавания чечловеком). O>Надо для обучения цифры под каждым углом подавать?
Про углы поворота — см. выше.
Если же нужно на большой картинке найти маленькие цифры — это отдельная подзадача, обычно называемая "Object detection".
O>И как входы маппить, если для одной цифры при обучении подаем десятки пикселов, O>а искать надо в большой картинке на тысячи пикселов?
Каждая нейросеть имеет фиксированное число входов, т.е. размер входных картинок жёстко зашит. Обычно размер зависит
от формата обучающей выборки — например, для набора MNIST (рукописные цифры) все картинки имеют размер 28x28 пикселей.
Соответственно, если входное изображение имеет другое разрешение, необходимо будет сделать resize.