评估问题
根据每次检测的 x、y 值,我试图找出自行车的方向以及自行车是否穿过整个框架以进行 UP/DOWN 计数。
从问题中可以看出,对自行车计数和确定每辆自行车的行进方向都有兴趣。从视频流或文件的帧内。我们可以假设每辆自行车至少有一个骑手。还似乎涉及到固定光学系统定位到指向与光学路径相切的路径不是问题,这将使问题变得更容易,将自行车车轮与光学系统的大致距离锁定为近持续的。
使用 SSD 移动网络模型作为发展专业知识的起点似乎是合理的。
从 ML 设计基础开始
让我们考虑一下 CNN 和 RNN 设计的目的。
- 卷积网络的目的是在自适应(学习)过程中平等地处理 \R^n 离散样本中值的多维数组中的区域。
- 循环网络的目的是适应(学习)潜在复杂非线性系统中潜在复杂的时间(时间)趋势。
了解 SSD 类算法不具备自然视觉系统的功能。它们不会无缝地放大和缩小网络内的独立对象。他们无法注意到一名棒球运动员正在跑到一垒,而一个球同时来自接球手,这需要在神经网络中进行独立的概念缩放操作。这是变焦镜头无法做到的。这就是为什么摄影导演在电影制作中如此重要的原因。视觉数据必须有助于故事讲述,使用照明、相机方向、平移、缩放和焦深。
尽管可以创建多个自行车概念类来涵盖各种自行车尺寸、相对于光学器件的方向和距离,但这种方法存在局限性,可以通过硬件中的电路并行性来减少。多线程和串行评估可以根据资源和耐心因素增加超出实际的训练时间。挑战在于随着自行车角度和距离相对于光路的变化,在车架中创建自行车的低级概念类别之间的无缝性。
深入细节
如果所提到的失真的根本原因是时间、水平或垂直维度上的分辨率差,那么“物体上的严重失真”可能会成为一个障碍。自行车最重要和最一致的面向图像的特征是两个椭圆(并不总是圆形)在水平方向上非常接近,甚至在垂直方向上更接近——两个轮子。轮子必须是可识别的。
问题中提到了两类网络,CNN 和 RNN,它们通常是识别运动的视觉系统中两个最相关的整体组件类别。我们在问题中有一些命名法,它开始了网络训练设计背后的数学理论以及网络组件训练后对这些网络组件的实时要求。
... 每个 ... 帧 ... 有多个检测 D1, D2, D3, ..., Dn
D一世∧ i ∈ 1 , 2 , . . . , n⇓Dxy _w h
上述命名法大概是指概念类的学习后检测C一个,Cb,Cd,其中上述检测的数字索引与要识别的自行车概念的这些字母索引之间存在多对一的关系。每个概念类C可能对应于特定的可识别自行车特征集,给定到光学器件的特定距离范围和车轮相对于车轮和相机之间光线方向的方向。考虑到这种对应关系,设计师不能忽视前轮的转动。我们不能假设两个轮子的视觉表示的偏心率是相同的,因为自行车可能正在转弯。即使在这种更复杂的情况下,椭圆也可能是常见场景中自行车的两个最具差异性的特征。
这可能是指出三轮车识别可能需要识别一组完全不同的概念类的好时机。
另请注意,如果光学器件(相机)的高度与自行车的轮子完全不同,例如来自无人机或高杆上的相机的图像,问题就不同了。这是自然视觉系统非常有效的品质。数百万年来,已经出现了从无人机视频流中识别自行车的训练,而这种训练只接受过从地面识别自行车的训练。自然将认知能力应用于视觉序列识别以用于轨迹预测的能力尚未在软件和硬件中实现,这也是自动驾驶汽车驾驶和驾驶的主要问题。
两种不同的输出要求
在分析项目需求时必须考虑两个不同的问题。输出可能是这两者中的任何一个,这取决于计数自行车是主要目标还是旅行指标是否是它自己的独立目标。
- 单位向量r⃗ ,大概在R2作为像素向量,本质上是像素位置相对于时间的一阶导数的归一化向量。在这种情况下,自行车的中心将基于视野中自行车的特征。
- 单位向量r⃗ ,大概在R2作为地理坐标单位向量,本质上是位置相对于时间的一阶导数的归一化向量。在这种情况下,自行车的中心将基于自行车在地理空间中的特征,而没有高度坐标。
人工智能设计方法
常见但低效的人工网络方法是使用 CNN 在每一帧中定位自行车,然后使用一种渐进式 RNN 类型(GRU 或 b-LSTM 网络)来识别运动趋势。最大的缺点之一是您可能有许多概念类来表示自行车的相邻尺寸-距离-方向概念(基于内核的识别模型)以训练到 CNN。如果自行车以某个角度朝向或远离光学元件行驶,则自行车从D一个及其出现在Db需要解释为一辆自行车的连续运动。这不是一个简单的挑战,但在文献中有大量报道。
建议使用旨在搜索学术文章的网络搜索,而不是不可靠的虚拟指南。搜索词“图像识别改变距离方向”可以找到许多学术出版物。查看 90 年代的旧文章将提供一个很好的历史背景。查看过去三年的新研究将提供对当前研究状态的调查。
主要问题中的其他问题
循环网络的原始类型本质上是针对历史背景的。主要的现场循环网络成功通常是 LSTM、b-LSTM 或 GRU 类型。
如果您将训练委托给 GPU(始终运行 C/C++ 代码),则该语言(Scala、Python、Java、C、C++)并不是特别相关,因此将可靠性问题视为主要驱动因素可能是不明智的。编程语言选择。
关于“人工智能如何计算对象”,人工智能没有——不是在当前的技术状态下。在人工智能技术中,没有一种方法或算法能胜过所有领域的所有其他方法,自行车可以插入其中并且可以工作。
目前,人工智能工程师根据要计数的对象的特征、传入流或数据集的元特征以及识别挑战的细节来设计对象的计数方式。这又是因为尚未发明出使用动物和人类更复杂神经网络的自然视觉系统的更广泛功能。
关于系统设计的最终建议
在 CNN 上下文中,内核的使用和其中一种循环网络类型的使用之间的区别是至关重要的。如果工程师试图过多地委托给内核,则上述自行车到光学器件和转弯的距离问题会加剧,因为内核操作不适合定位和距离复杂性。然而,CNN 方法非常适合最上游的操作,例如边缘检测和原始对象检测。
让循环网络(上面提到的更高级的类型)检测自行车的距离和方向相对于光路的变化,除非你有一个相当大的 GPU 农场,它将并行执行涵盖许多距离和方向范围的 CNN 操作。即使您这样做或有圣人的耐心,最好还是将总自行车识别委托给循环网络,因为这可能更接近自然系统的方式以及在距离和方向类别之间的自行车行驶建模可以做得更自然无缝。
在这种情况下回顾上面的评论,如果自行车在路径上,不能转弯,并且必须在由交通流量控制的速度范围内从右到左或从左到右行驶,那么问题的复杂性会低得多。
回应评论
关于编辑1,
编辑1:相机下方的视野区域是固定的。我们希望自行车从一个入口侧移动。让我们假设视图和进入/退出就像这个视频中所示,
YouTube.com 报告,“此视频不存在。” 由于问题中没有描述相机轨迹,因此在撰写此答案时已假定相机是固定的。如果问题中包含自行车将从车架的一个入口侧移动的期望,则答案将解决该情况,但在编辑 1 之前没有暗示该要求。尽管如此,此答案中的大部分内容更一般的情况仍然适用。
关于实用性,让我们区分实用的和预制的。最初在编辑 1 之前描述的问题没有预制的解决方案,可以插入自行车数据并调整一些参数以取得成功。事实上,网络上对寻求预制解决方案的普遍兴趣通常会遇到这样的现实现实,即机器学习中这种即插即用的案例很少见。大多数时候,涉及设计和实验的方法通常是这种情况。
那些雇佣和管理过人类的人都知道,即使是未来所希望的高级人工智能,虽然可能非常实用,但也可能是预制的,也可能是理想化的。例如,雇用一名 EE 并不意味着电气工程部门会立即看到吞吐量的实际提高。管理、培训和工作流程设计仍将是员工效率的先决条件。为了获得实用且可靠的自行车计数,可能需要对概念的一些理解来指导初始实验、设计以及训练和使用场景的调整。
如果问题的作者遇到了一种非常罕见的情况,即自行车完全沿一个方向连续行驶,没有人流、三轮车、步行的行人或宠物,那么人工智能根本就没有必要。带有无源低通滤波器和计数器电路数字输入的简单 LED 和光电晶体管将执行合理的计数。但是,如果两辆自行车可能并行通过,那么我们又回到了摄像头,需要概念类以及类似于上面详细讨论的挑战。
关于解决方案的步骤,如果从技术方面进行调查,这个答案包括一个可推荐的顺序,尽管在实际实践中通常有相当多的重叠和偶尔的回溯。如果这不是学习练习,而自行车问题是实际需要在现场操作的问题,那么上述答案就是理解机器需要执行什么的正确背景。在这种理解之后将是对各种设计和算法的调查,首先是使用原始答案中的关键短语搜索学术文章。