Прежде всего, пара замечаний относительно вашего кода.
Поскольку последний слой содержит более 2 нейронов , вам необходимо использовать функцию активации softmax , не сигмоид (обратите внимание, что это в случае классификации, а не регрессии).
Сигмоид следует использовать только тогда, когда вы выполняете двоичную классификацию, но не когдау вас есть более двух классов (обратите внимание, что вы также можете использовать softmax для 2 классов, однако это не обязательно рекомендуется с небольшой вычислительной точки зрения).
Ваша проблема заключается в регрессии и классификации! .
Первый слой вашей сверточной нейронной сети содержит 64 карты характеристик, каждый размер ядра 3x3.Хотя способ подачи изображений в нейронную сеть является правильным, вы передаете только изображение в градациях серого, а не координаты x1, x2, y1, y2 .
Для ANN с регрессией взгляните на этот урок: https://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/.
Ваша интуиция верна;нейронные сети обнаружения объектов заменяют полностью связанные слои сверточными.Ян ЛеКун даже заявляет, что полностью подключенные слои не должны быть частью CNN.
Поскольку вы новичок в этой области, я бы порекомендовал принять следующий конвейер.
1) Найти онлайнМодель github, написанная в вашей предпочитаемой библиотеке глубокого обучения (Keras / PyTorch / TensorFlow и т. д.).
2) Следуйте инструкциям / руководству, чтобы воспроизвести результаты, полученные пользователем github.
3) С помощью последнего вы также должны понимать код / получить хорошее интуитивное понимание.
4) Адаптировать модель к нужной вам проблеме.
Одно место, с которого вы могли бы начать, этоздесь (это обнаружение объектов - обнаружение нескольких объектов, а также разных категорий): https://github.com/pierluigiferrari/ssd_keras.
Если у вас есть дополнительные вопросы, пожалуйста, запишите их, я был бы рад помочь!