Пытаясь найти координаты объекта (x, y) в изображении, моя нейронная сеть, похоже, оптимизирует ошибку без обучения [закрыто]

я генерирую изображения одной монеты, наклеенной на белом фоне размером 200x200. Монета случайным образом выбирается среди 8 изображений монет евро (по одному для каждой монеты) и имеет:

  • случайное вращение ;
  • случайный размер (bewteen фиксированных границ);
  • случайная позиция (так что монета не обрезается).

вот два примера (добавлены маркеры центра):два примера набора данных

Я использую Python + лазанья. Я передаю цветное изображение в нейронную сеть, которая имеет выходной слой из 2 линейных нейронов, полностью Соединенных, один для x и один для y. Цели, связанные с созданными изображениями монет, являются координатами (x,y) центра монеты.

Я пробовал (с использование сверточных нейронных сетей для обнаружения ключевых точек лица учебник):

  • архитектура плотного слоя с различным количеством слоев и количеством единиц (максимум 500);
  • a сверточная архитектура (с 2 плотными слоями перед выходом);
  • сумма и среднее значение квадрата разности в качестве целевой функции ;
  • координаты целей в исходном диапазоне [0,199] или нормализованные [0,1] ;
  • положить выпадающие слои между каждым слоем, с вероятностью выпадения 0,2.

Я всегда использовал простой SGD, настраивая скорость обучения, пытаясь иметь хорошую кривую ошибки уменьшения.

Я обнаружил, что, когда я тренирую сеть, ошибка уменьшается до точки, где выход всегда является центром изображения. Похоже, что выход не зависит от входа. кажется, что сетевой выход является средним из целей, которые я даю. это поведение выглядит как простая минимизация ошибки, так как позиции монет равномерно распределены на изображении. Это не желаемое поведение.

у меня такое чувство, что сеть не учится, а просто пытается оптимизируйте выходные координаты, чтобы минимизировать среднюю ошибку по отношению к целям. Я прав? Как я могу предотвратить это? я попытался удалить смещение выходных нейронов, потому что я думал, что, возможно, я просто изменяю смещение thoses, а все остальные параметры устанавливаются на ноль, но это не сработало.

возможно ли нейросетевое хорошо выполнять эту задачу? я прочитал, что можно также обучить сеть для настоящей / нет классификации, а затем сканируйте изображение, чтобы найти возможные местоположения объектов. Но я просто задавался вопросом, возможно ли просто использовать прямое вычисление нейронной сети.

1 ответов


вопрос: Как я могу предотвратить это [переоснащение без улучшения результатов тестирования]?

что нужно сделать, так это перестроить вашу нейронную сеть. Нейронная сеть просто не справится с предсказанием координат X и Y. Он может создать тепловую карту того, где он обнаруживает монету, или, по-другому, вы можете превратить свою цветную картинку в вероятностную карту "монета-здесь".

почему? Нейроны имеют хорошую способность использоваться для измерения вероятность, а не координаты. Нейронные сети не являются волшебными машинами, за которые их продают, но вместо этого действительно следуют программе, заложенной в их архитектуре. Вам придется выложить довольно причудливой архитектуры, чтобы нейронная сеть сначала создать внутреннее пространство, где монеты, тогда другое внутреннее представление их центра масс, то другой, чтобы использовать центр масс и оригинальный размер изображения, чтобы как-то научиться шкала X-координату, затем повторите все это для Ю.

проще, намного проще создать свертку детектора монет, которая преобразует ваше цветное изображение в черно-белое изображение матрицы вероятности-монета-здесь. Затем используйте этот вывод для написанного от руки кода клиента, который превращает эту матрицу вероятности в координату X/Y.

вопрос: возможно ли, чтобы нейронная сеть в одиночку хорошо справлялась с этой задачей?

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