Движение глубокого обучения подкреплению при наблюдении

#tensorflow #openai-gym #motion #dqn

#tensorflow #openai-тренажерный зал #движение #dqn

Вопрос:

Я пытаюсь внедрить агент DRL (Deep Reinforcement Learning) для самоуправляемых транспортных средств. В настоящее время я учу своего агента не врезаться в другие машины, используя простую камеру. Есть много способов ускорить обучение, но в настоящее время я сосредоточен на добавлении ощущения движения в мое наблюдение.

Все в Интернете (включая статью Google об играх Atari) упоминают, что для добавления движения в наблюдениях нужно захватить 3-4 кадра вместо 1 и передать их в QNetwork как одно наблюдение. Однако это не очень практично при использовании данных с камеры, поскольку для обучения агента требуется много вычислительной мощности. Например:

Предположим, вы используете камеру в оттенках серого с разрешением 256×256, а мы используем простую память для равномерного воспроизведения, которая содержит до 20000 наблюдений. Затем количество пикселей, сохраненных в памяти, равно:

 20000 (Samples) * 4 (Frames) * 256 (Width) * 256 (Height) = 5.2 GB of Physical RAM.
 

Кроме того, предположим, что вы используете пакет размером 64 наблюдения для подачи агенту, который содержит CNN из 32 фильтров на 1-м уровне, тогда вам нужно:

 64 (Batch Size) * (4 Frames) * 256 (Width) * 256 (Height) * 32 (Filters) = 0.5 GB of GPU.
 

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

Я думал об альтернативном способе добавления ощущения движения, однако я ничего не могу найти об этом в Интернете. Поскольку мы уже знаем скорость транспортного средства, мы могли бы передать агенту:

  • 1 Кадр, содержащий данные камеры.
  • 1 Кадр, который содержит нормализованное значение скорости транспортного средства в центре изображения (например, зарезервируйте окно размером 32×32 в центре изображения, которое содержит нормализованную скорость транспортного средства (0,0-1,0), а остальные пиксели имеют значение 0.

Таким образом, мы уменьшаем размер данных вдвое. Как вы думаете, это может быть хорошим подходом?

Ответ №1:

Я понимаю, что вы боитесь этого огромного объема оперативной памяти. В документах dqn они также обычно используют огромное количество оперативной памяти. В статье nature об играх atari они даже используют около 9 ГБ оперативной памяти! https://www.nature.com/articles/nature14236 Вы можете попробовать изменить размер своих изображений, сделать 4 последовательных кадра, как вы уже объяснили, и сохранить их только как целые числа, чтобы полностью свести это к минимуму.

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

Ответ №2:

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

введите описание изображения здесь

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