Пытаясь найти координаты объекта (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.
вопрос: возможно ли, чтобы нейронная сеть в одиночку хорошо справлялась с этой задачей?
звонкую да, пока вы настроили право архитектура нейронной сети (как и выше), но было бы, вероятно, гораздо проще реализовать и быстрее тренироваться, если бы вы разбили задачу на шаги и применили нейронную сеть только к шагу обнаружения монет.