作者 | Priya Dwivedi
来源 | Medium
编辑 | 代码医生团队
介绍
现在,美国和欧洲的许多城市都在谨慎地重新开放。人们被指示要冒险冒险遵守社会疏远规则。但是人们会跟随他们吗?对于城市来说,评估这一点并采取相应的行动可能很重要。如果大多数人跟随他们,那么可以安全地打开更多的地方。但是如果有很多违规行为,则关闭它可能会更安全。这正是迈阿密海滩公园发生的事情。该公园于4月底开放,但在一周之内关闭,因为太多的人无视与戴着口罩和社交疏远相关的规定。该市通过人员监视公园并发出警告来检测到此情况。但是人工监视可能不是实际的解决方案。
如何使用AI和机器学习来检测人们是否遵循社会疏离规则?大多数城市已经在公共场所安装了可用于此目的的摄像头。在此博客中,展示了如何使用人员跟踪算法来监视违规情况。还在Github上开源了代码。请参阅下面的实际模型。
https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation
社会隔离违规检测和计数
在Deep Learning Analytics中,非常热衷于使用数据科学和机器学习来解决问题。
人物追踪
数据
需要的第一件事是视频数据,用于建立和测试模型。使用了公开可用的MOT数据集。MOT数据集是计算机视觉人员跟踪的规范数据集。对此数据进行了许多最先进的算法训练和测试。该数据集包含许多开放源代码的剪辑,这些剪辑显示了人们在不同摄像机角度下的移动。选择了一个带固定摄像机的子夹,该子夹安装在高处,可以显示德国的市中心。可以从此处下载此剪辑。请参见下面的剪辑片段之一。
https://motchallenge.net/
http://www.robots.ox.ac.uk/ActiveVision/Research/Projects/2009bbenfold_headpose/project.html#datasets
Town Center Clip的样品架
使用深度排序进行人员跟踪
在计算机视觉中,人员跟踪是为人员提供ID,在出现的每个帧中检测他们并转发其ID的任务。此人离开框架后,将不会重复使用其ID。如果有新人进入,他们将使用新的ID进行初始化。
跟踪往往是一项艰巨的任务,因为人们看起来可能很相似,导致模型切换ID。人们可能会被遮挡在另一个人或物体后面,并在重新出现时被分配一个新的ID。在过去的几年中,深度学习技术已大大提高了多对象跟踪基准的性能。多对象跟踪的最新技术精度为62.0
为什么需要跟踪人以实现社会疏离检测的目的?这样做的原因是,希望找到违反社会隔离规则的唯一人数。在没有追踪器的情况下,如果两个人在一起走近,那么他们将在每一帧中被视为违规,但是如果使用追踪器,则可以将其视为一次违规事件。
使用了深度排序模型进行跟踪。该模型的代码已由作者在github上公开提供。深度排序模型使用人员的位置及其外观进行跟踪。使用卡尔曼滤波器捕获位置信息,该卡尔曼滤波器可预测盒子的下一个可能位置,而外观信息是使用生成嵌入的深度学习模型生成的。
https://github.com/nwojke/deep_sort
要在此视频上运行代码,需要将原始图像和具有所有边界框位置的检测文件传递给跟踪器。然后,跟踪器使用此信息为每个帧中的每个人分配一个ID。深入博客上的自述文件对此进行了详细说明。请参阅下面的内容在此剪辑上进行跟踪的结果。每个人都被分配了一个ID,该ID已成功地结转到下一帧。跟踪器还会输出包含轨道详细信息的csv。已经在Github上共享了这个文件,将在下一部分代码中使用它。
https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation
使用深度排序模型进行人员跟踪
检测违反社会距离的行为
为了检测到社会疏远违规行为,采用框架中的每个轨道并测量其与框架中其他每个轨道的距离。每个轨道基本上都是带有ID的边界框。因此可以使用边界框与它们之间的欧式距离将边界框与另一个边界进行比较。如下所示。
def distance_boxes (boxA, boxB):
import math
center_boxA = [(boxA[0] + boxA[2])/ 2.0, (boxA[1] + boxA[3])/2.0]
center_boxB = [(boxB[0] + boxB[2])/ 2.0, (boxB[1] + boxB[3])/2.0]
pixel_distance = math.sqrt( ((center_boxA[0]-center_boxB[0])**2)+((center_boxA[1]-center_boxB[1])**2) )
return pixel_distance
现在开始建模。该代码在下面共享。这与Github中的代码相同。
https://github.com/priya-dwivedi/Deep-Learning/blob/master/detecting_social_distancing_violation/Social%20Distancing%20Violation.ipynb
对社会距离进行建模
每帧运行的主要步骤是:
该代码运行速度很慢,因为它需要将每个轨道与其他轨道进行比较,并在600帧内完成。由于将分别测量磁道1与磁道2之间的距离,然后磁道2与磁道1之间的距离,因此重复了许多此类计算。为了节省时间,将一次计算的结果都存储了下来。因此,当比较磁道1和磁道2时,结果将写入数据帧的相应行中。这样可以将运行时间减少一半。
发现70像素的像素距离对于检测“似乎是”步行距离太近的人来说是相当合理的。代码的可视化模块在框过近时以红色突出显示框,并显示每个框的违规计数。带有结果的示例框架如下所示。
模型输出
实际部署
如果要在生产环境中部署它,则需要考虑一些事项。
结论
在大量应用程序中,跟踪是计算机视觉中的重要问题。一种这样的应用是检测社会疏远违规行为。这可以帮助城市评估公共健康风险并安全地重新开放。
希望尝试一下该代码,并尝试一下更改邻近条件时发生的情况。
https://github.com/priya-dwivedi/Deep-Learning/blob/master/detecting_social_distancing_violation/Social%20Distancing%20Violation.ipynb
在深度学习分析中,非常热衷于使用机器学习解决现实世界中的问题。
参考文献
https://motchallenge.net/
https://arxiv.org/abs/1703.07402