如何确定光流所需的处理器速度?

Posted

技术标签:

【中文标题】如何确定光流所需的处理器速度?【英文标题】:How do I determine processor speed required for optical flow? 【发布时间】:2016-07-27 11:46:44 【问题描述】:

我想使用光流系统从周围环境中获取速度。我读过有关光流如何工作的论文,但它们没有详细介绍光学传感器。

我的问题是:如何确定执行光流分析需要多少计算能力?

我想使用低功耗系统(如微控制器),但我不知道我可以在这样的系统中使用哪种相机。我的意思是,它可以是彩色的还是必须是黑白的?卷帘快门还是全局快门?哪种帧速率或像素数?

我想自己指定系统,但不知道这些相机属性如何影响处理负载,我不知道从哪里开始。

【问题讨论】:

我认为如果你问这个问题会更好,“我如何确定执行光流分析需要多少计算能力?”然后,通过描述该过程的工作原理,您可以向后工作并确定可以使用的相机。这是工程中常用的 2 种方法中的一种 - 从设备开始并向前移动(“如果你有一个尺寸为 X 的电机,你可以以 Y 速度前进”)或从最终规格开始并向后工作(“如果你想要要达到 Y 速度,您需要一个 X 尺寸的电机”)。您正在尝试执行后者 - 处理器 Y 需要摄像头 X。 事实上,正如我写的那样,我想,“这听起来像是一个关于运行某些软件需要多少处理器的问题”,这让我觉得它可能更适合@987654321 @。我查了一下,他们有一个标签,“opticalflow”,有 222 个问题。我们这里甚至没有标签。我将编辑您的问题并为您迁移。希望你能在那里得到一些很好的答案! 你好堆栈溢出!我是Robotics 的主持人,我认为这个问题更适合这里。我编辑了标题和标签的问题,但在这里没有权限推动它们通过。我希望这个问题对你们来说是主题,并且这个问题得到了很多很好的答案!随意删除此评论和之前的评论;我只是讨厌在没有在网站上留下便条的情况下迁移某些内容。 【参考方案1】:

正如Chuck 已经在评论中所说的那样。你首先需要从一些东西开始。光流计算实际上取决于您使用它的目的以及您想要实现的目标。对于实时应用程序,您可能需要考虑使用更快的处理器(不过这始终是正确的)。

继续我的回答。

Opticalflow 计算性能取决于几个主要因素:

您选择的光流方法densesparse),您可以阅读更多关于它的信息here和here .当然,您不仅应该考虑稀疏比密集更快,而且在某些情况下稀疏可能不太准确。同样,这取决于您要达到的目标。 此外,您还会看到不同的光流算法。有些可能比其他更快。算法有很多,如Lucas-Kanade、Horn-Schunck、TVL1、Farneback等。

OpenCV 等库中的大多数光流方法让您能够更改一些参数,以便在准确性和表现。请参阅 this 并检查 OpenCV 方法,例如 this 和 this - 查看不同的参数。

图片的分辨率。较小的图像通常意味着更快的计算。

您可能还需要考虑以下几点:

如果您使用的处理器具有多核,请确保在光流计算中使用所有核。一些库可能已经为您执行此操作,但在某些情况下您需要自己执行此操作。看看我在this post 中的问题和答案,它可能会给你一些想法并帮助你开始处理这种情况。 如果您想要更准确的光流结果,您必须使用全局快门相机。滚动快门相机(例如大多数网络摄像头)会给您带来您不希望出现的额外错误。 你不需要彩色图像,如果你有一个灰度相机会更好。如果不是,您还需要将其转换为灰度(不是黑白)以获得更快的性能。 OpenCV 等一些库可以选择(在某些情况下)在 GPU 上运行这些算法。如果使用 GPU 是一种选择,您可能也需要考虑这一点。

根据我自己的经验,让我的性能得到提升的主要因素是将我的分辨率从 640x480 更改为 320x240 甚至 160x120。就我而言,它并没有真正损害准确性。 我使用Odroid U3 mini-pc 和OpenCV PyrLK 算法和320x240 分辨率的输入帧。在应用here 所描述的内容(将图像拆分为 4 以进行并行计算)后,它运行得非常好(实时)。

【讨论】:

【参考方案2】:

Sarid 给出的答案有一些优点,其中许多被世界各地的研究人员所认同。任何在现实世界中实际处理过这些主题的人都会分享我的观点……在现实世界中,我的意思是在无人机、手机和不在受保护办公室中的 IP 摄像机上实现光流,以及其他系统(例如人类)需要交互和相互依赖的地方。

首先,根据您的问题,您可能需要花时间寻找现成的解决方案。光流量传感器很容易获得,便宜且坚固(但通常精度不高)。这些是您在光学鼠标中发现的那种传感器。它们功耗低,易于与微控制器连接。有些具有惊人的数千 fps 的采样率。然而,它们通常具有低空间分辨率,并且(强调)高鲁棒性但精度低。

如果您正在寻找可用于运动、行人检测和视频编码等形状的光流,那么您最好寻找更高级的东西,这就是 Sarids 的所在答案变得相关。

由于您的问题已从机器人堆栈交换迁移,我假设您对机器控制和人机交互附近的应用程序感兴趣。在这种情况下,最重要的方面是光流估计领域工作人员通常最容易忽略的方面,即:

    延迟。如果您在前端有人机接口……那么常用术语是“玻璃到玻璃延迟”。这与系统的 fps 完全不同,后者与吞吐量有关。如果你发现你正在和某人讨论,而他们不了解延迟和 fps 之间的区别,那么他们就不是你感兴趣的专家。例如,几乎所有计算机视觉领域的研究人员都在做光学的 GPU 实现流通过允许帧延迟和低效的内存处理来增加大量延迟(从延迟的角度来看是低效的,但在吞吐量和硬件利用率方面是有效的)。考虑控制无人机的问题,比如说让它自稳定,最好提前 10 毫秒接收一个糟糕的光流估计,然后接收一个有 10 毫秒额外延迟的好光流估计......特别是如果光学系统没有给出任何给定时间的延迟上限。

    算法稳定性。这与准确性完全不同。准确性是过去 30 年中 99% 的光流研究一直关注的问题。例如,在米德尔伯里基准测试中根本没有评估稳定性。稳定性处理数据中的微小变化将如何保证估计光流的微小变化。虽然社区已经做了一些很好的工作(最有趣的是稳健的统计数据),但最终对任何算法的最终评估都忽略了稳定性。以光学鼠标为例。第一代光学鼠标具有更高的精度(真实运动的平均误差更小),但稳定性较低(尤其是当您在“不良纹理”上运行鼠标时,具有旋转运动)。后几代光电鼠标的精度较差,但更注重稳定性,这是最重要的。您不会像早期的设备那样体验鼠标光标的跳跃......但是如果您在垫子上反复左右移动鼠标,您会看到光标缓慢漂移(即低准确度) .

    加热。任何将估计高精度光流的设备都需要大量计算。当谈到每瓦特的计算量时,GPU 并不是那么好。在无人机中,您也许可以摆脱这种情况,因为在这种环境中,您可以将主动冷却作为推进系统的副产品。在现实世界中,您通常不能假设主动冷却或无限供电。

总之,这是一个令人着迷的领域,我希望您在编码解决方案方面拥有丰富的经验。

【讨论】:

以上是关于如何确定光流所需的处理器速度?的主要内容,如果未能解决你的问题,请参考以下文章

关于如何在 C++ 中处理不同项目中的文件所需的课程

我们如何确定 ffmpeg 所需的依赖项

如何减少提取文件所需的时间?

计算球击中目标所需的初始速度

如何确定使用 NX 运行增量构建所需的提交范围

处理服务此请求所需的配置文件期间发生错误