我想使用光流系统来获取周围环境的速度。我已经阅读过关于光流如何工作的论文,但他们没有处理有关光学传感器的细节。
我的问题是:如何确定执行光流分析需要多少计算能力?
我想使用低功耗系统(如微控制器),但我不知道我可以在这种系统中使用哪种相机。我的意思是,它可能是颜色还是需要B / W?滚动快门或全局快门?哪个帧率或像素数?
我想自己指定系统,但是在不知道这些相机属性如何影响处理负荷的情况下,我不知道从哪里开始。
答案 0 :(得分:1)
正如Chuck在评论中已经说过的那样。你首先需要从一些事情开始。光流计算实际上取决于您使用它的目的以及您想要实现的目标。对于实时应用程序,您可能需要考虑使用更快的处理器(尽管如此)。
继续我的回答。
光流计算性能取决于几个主要因素:
来自OpenCV等库的大多数光流方法使您能够更改某些参数,以便播放,并在精确度和性能。请参阅here并查看OpenCV方法,例如this和this - 请参阅不同的参数。
图片的分辨率。较小的图像通常意味着更快的计算。
您可能还想考虑几件事情:
根据我自己的经验,让我提升性能的主要因素是将分辨率从640x480改为320x240甚至160x120。就我而言,它并没有真正损害准确性 我使用this post mini-pc和Odroid U3算法,输入帧为320x240分辨率。应用所描述的OpenCV PyrLK(将图像拆分为4进行并行计算)之后,它的效果非常好(实时)。
答案 1 :(得分:0)
Sarid给出的答案有一些长处,其中许多是世界各地的研究人员所共有的。我的观点与在实际环境中实际处理过这些主题的任何人都分享。...在现实世界中,我的意思是在不位于受保护办公室中的手机和IP摄像机上实现无人机的光流传输,以及其他系统(例如人类系统)需要互动并相互依赖的地方。
首先,根据您的问题,您可能需要花费时间来寻找现成的解决方案。光流量传感器容易获得,便宜且坚固(但通常精度不高)。这些是您在光电鼠标中找到的传感器。它们功耗低,并且易于与微控制器接口。有些具有数千fps的惊人采样率。但是,它们通常具有较低的空间分辨率,并且(要强调)鲁棒性高但准确性低。
例如,如果您正在寻找一种可以用于运动,行人检测和视频编码的形状的光流,那么您最好是寻找更高级的东西,那就是Sarids答案变得有意义。
由于您的问题已经从机器人堆栈交换中转移出来,因此我将假设您对与机器控制和人机交互密切相关的应用感兴趣。在这种情况下,最重要的方面是光流估计领域的工作人员通常最不重视的方面,即:
延迟。如果您在前端有人机接口,则常用术语为“玻璃到玻璃延迟”。这与系统的fps完全不同,后者与吞吐量有关。如果您发现自己正在与某人进行讨论,并且他们不了解延迟和fps之间的差异,那么他们并不是您感兴趣的专家。例如,几乎所有从事计算机视觉的GPU的计算机视觉研究人员流通过允许帧延迟和低效的内存处理(从延迟的角度来看效率低下,但在吞吐量和硬件利用率方面很有效)而增加了巨大的延迟。考虑控制无人机的问题,比如说使其自我稳定,最好是在10毫秒之前收到错误的光流估计,然后再以10毫秒的额外延迟接收良好的光...。特别是如果光学系统没有给出您可以在任何给定时间内获得任何延迟上限。
算法稳定性。这与准确性完全不同。在过去的30年中,光流的所有研究中有99%一直在追求准确性。例如,在Middlebury基准测试中根本没有评估稳定性。稳定性处理的是数据中的微小变化将如何保证估计光流的微小变化。最终,尽管在社区中做了一些出色的工作(最有趣的是关于可靠的统计数据),但是对任何算法的最终评估都忽略了稳定性。以光学鼠标为例。第一代光学鼠标具有较高的精度(真实运动产生的平均误差较小),但稳定性较低(尤其是当您将鼠标置于“坏纹理”上并旋转运动时)。下一代光学鼠标的精度较差,但重点是稳定性,因为这是最重要的。您不会像使用设备早期那样经历鼠标光标跳动的次数。...但是,如果您反复在左右垫子上移动鼠标,您会看到光标缓慢漂移(即,精度较低)
热力。任何会估计高精度光流的设备都将需要大量计算。在每瓦计算方面,GPU(尤其是来自Nvidia的GPU)并不是那么好。在无人驾驶飞机中,您可能可以避免这种情况,因为在这种情况下,您将主动冷却作为推进系统的副产品。在现实世界中,您通常无法承担主动散热或无限的电源供应。
最后,这是一个引人入胜的领域,希望您在编码解决方案方面有丰富的经验。