Наиболее подходящий метод для обучения сверточных нейронных сетей с изображениями в градациях серого? - PullRequest
0 голосов
/ 01 апреля 2020

Используя API Keras для обучения сверточной нейронной сети, я обычно использую двумерные сверточные слои при обучении с использованием цветных изображений PNG (входного размера (высота, ширина, 4)). Тем не менее, сейчас я * wi sh обучаю сеть с использованием изображений в градациях серого png, и мне интересно, как лучше всего это сделать?

Я предложил три возможных метода:

  1. Введите изображение, как если бы оно было цветным.
  2. Введите только первый канал изображения, чтобы его размер был (высота, ширина, 1).
  3. Использовать 1D свертка первого канала изображения так, что входной размер (высота, ширина).

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

Используя первый метод, я смог достичь точности тестирования 91,95% с тренировкой, занимающей ~ 3 с в течение эпохи.

При втором методе точность 89,66 % с ~ 2 с за эпоху.

При третьем методе точность 86,21% с <1 с за эпоху. </p>

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

1 Ответ

0 голосов
/ 01 апреля 2020

Ваш метод № 3 явно не эквивалентен двум другим, и это не способ решения проблемы (частично это видно и из более низкой точности).

Теперь, в теории , теории , ваши методы # 1 и # 2 должны дать примерно аналогичных результатов, что не далеко от случая, в соответствии с указанными вами значениями точности.

Ни один из двух методов не является недействительным , Возможное объяснение несколько более высокой точности # 1 состоит в том, что, хотя здесь вы фактически просто повторяете информацию, содержащуюся в одном канале x3, этот практически служит своего рода ансамблем ( усиливается из-за того, что соответствующие сверточные фильтры будут запускаться из разных случайных инициализаций); это приводит к большему количеству «подмоделей», способствующих получению, следовательно, к лучшей производительности, в соответствии с общими ожиданиями для ансамблей моделей. Конечно, вы должны проверить, что это так, запустив несколько экспериментов и взять среднюю точность для каждого метода (результаты одного эксперимента всегда могут отличаться просто из-за разных случайных инициализаций).

Правда, производительность CNN С одноканальными изображениями это довольно недооцененный предмет AFAIK. Продолжайте экспериментировать самостоятельно!

Время вывода каждого изображения, о котором вы сообщаете, согласуется с различными подходами: 1D свертки быстрее, чем 2D, и обработка одноканального изображения также быстрее, чем 3- Первый канал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...