我正在尝试实现一个DRL (深度强化学习)代理自动驾驶车辆.我目前正在教我的经纪人不要撞到其他汽车,使用一个简单的相机。有很多方法来加速训练,但目前,我主要关注的是,在我的观察中增加了运动感。
互联网上的每个人(包括谷歌关于Atari游戏的文章)都提到,为了在观察中添加运动,捕获3-4帧,而不是1,并将它们作为一个观察结果提供给QNetwork。然而,当使用相机数据时,这是不太实际的,因为它需要大量的计算能力来训练一个代理。例如:
假设您使用分辨率为256x256的灰度相机,我们使用一个简单的统一重放内存,最多可容纳20000次观测。然后,存储在内存中的像素数是:
20000 (Samples) * 4 (Frames) * 256 (Width) * 256 (Height) = 5.2 GB of Physical RAM.另外,假设您使用64条观察的批处理大小来向代理提供信息,该代理在第一层中包含一个由32个过滤器组成的CNN,那么您需要:
64 (Batch Size) * (4 Frames) * 256 (Width) * 256 (Height) * 32 (Filters) = 0.5 GB of GPU.这是一个疯狂的数据量,需要由代理为一个简单的灰度相机处理,只是为了增加运动感.
我在想另一种增加运动感的方法,但是,我在网上找不到任何关于它的东西。既然我们已经知道了车辆的速度,那么我们就可以给代理人喂食:
)。
通过这种方式,我们将数据的大小减少了一半。你认为这是个好办法吗?
发布于 2021-01-15 19:43:38
我知道你害怕那些巨大的内存。在dqn的论文中,他们通常也使用大量的RAM。在关于atari游戏的自然论文中,他们甚至使用了大约9GB的内存!https://www.nature.com/articles/nature14236,您可以尝试调整图像的大小,像您已经解释过的那样,采取连续的4帧,并将它们存储为整数,以最大限度地减少这一点。
有时我想没有办法,但在您的情况下,您可以尝试添加一个节点的第二个输入层,这是给您的车辆(规范化)的速度。您应该能够使用keras的functional实现这一点。在这里,您不局限于纯粹的顺序层。
发布于 2022-07-31 22:19:02
在这里晚些时候,从主要的视觉图形的角度来看,我们也许能够对这些图像序列进行一种形式的预处理,从而有效地将它们组合在一起,以这样的方式捕捉运动:

这反映了4帧合并成一个单一的图像,创造了一种视觉痕迹,减少的白色像素强度值可以解释为反向的方向运动。
https://stackoverflow.com/questions/65198501
复制相似问题